<!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 INSTALL_APPCACHE_URL = "resources/appcache-ordering.install.html"; 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 = []; // Called by the INSTALL_APPCACHE_URL child frame. function notify_appcache_installed(success) { if (success) resolve_install_appcache(); else reject_install_appcache(); } function install_appcache() { return new Promise(function(resolve, reject) { var frame = document.createElement('iframe'); frames.push(frame); frame.src = INSTALL_APPCACHE_URL; document.body.appendChild(frame); resolve_install_appcache = function() { document.body.removeChild(frame); resolve(); }; reject_install_appcache = function() { document.body.removeChild(frame); reject(); }; }); } 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); }; }); } async_test(function(t) { service_worker_unregister(t, SERVICE_WORKER_SCOPE) .then(function() { return install_appcache(); }) .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) { 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(); }); service_worker_unregister_and_done(t, SERVICE_WORKER_SCOPE); }) .catch(unreached_rejection(t)); }, 'serviceworkers take priority over appcaches'); </script> </body>