<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<body>
<script>

var IS_APPCACHED_URL = "resources/appcache-ordering.is-appcached.html";
var SERVICE_WORKER_SCOPE = "resources/appcache-ordering";
var SERVICE_WORKER_SCRIPT = "resources/empty-worker.js";

var resolve_install_appcache = undefined;
var reject_install_appcache = undefined;

var frames = [];

var resolve_is_appcached = undefined;

// Called by the IS_APPCACHED_URL child frame.
function notify_is_appcached(is) {
  resolve_is_appcached(is);
}

function is_appcached() {
  return new Promise(function(resolve) {
      var frame = document.createElement('iframe');
      frames.push(frame);
      frame.src = IS_APPCACHED_URL;
      document.body.appendChild(frame);
      resolve_is_appcached = function(is) {
          document.body.removeChild(frame);
          resolve(is);
        };
  });
}

promise_test(function(t) {
    return service_worker_unregister(t, SERVICE_WORKER_SCOPE)
      .then(function() {
          return install_appcache_ordering_manifest();
        })
      .then(function() {
          return is_appcached();
        })
      .then(function(result) {
          assert_true(result, 'appcache should initially be utilized');
          return service_worker_unregister_and_register(
              t, SERVICE_WORKER_SCRIPT, SERVICE_WORKER_SCOPE);
        })
      .then(function(r) {
          t.add_cleanup(function() {
              return service_worker_unregister(t, SERVICE_WORKER_SCOPE);
            });

          return wait_for_state(t, r.installing, 'activated');
        })
      .then(function() {
          return is_appcached();
        })
      .then(function(result) {
          assert_false(result, 'but serviceworkers should take priority');
          frames.forEach(function(f) { f.remove(); });
        });
  }, 'serviceworkers take priority over appcaches');

</script>
</body>
