Index: third_party/WebKit/LayoutTests/http/tests/serviceworker/navigation-preload/get-state.html |
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/navigation-preload/get-state.html b/third_party/WebKit/LayoutTests/http/tests/serviceworker/navigation-preload/get-state.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..07555e976790ee17b13b6d23ee8513693497e7ba |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/http/tests/serviceworker/navigation-preload/get-state.html |
@@ -0,0 +1,104 @@ |
+<!DOCTYPE html> |
+<meta charset="utf-8"> |
+<title>NavigationPreloadManager.getState</title> |
+<script src="../../resources/testharness.js"></script> |
+<script src="../../resources/testharnessreport.js"></script> |
+<script src="../resources/test-helpers.js"></script> |
+<body> |
+<script> |
+function post_and_wait_for_reply(worker, message) { |
+ return new Promise(resolve => { |
+ navigator.serviceWorker.onmessage = e => { resolve(e.data); }; |
+ worker.postMessage(message); |
+ }); |
+} |
+ |
+promise_test(t => { |
+ const scope = '../resources/getState'; |
+ const script = '../resources/empty-worker.js'; |
+ var registration; |
+ |
+ return service_worker_unregister_and_register(t, script, scope) |
+ .then(r => { |
+ registration = r; |
+ add_completion_callback(() => registration.unregister()); |
+ return registration.navigationPreload.getState(); |
+ }) |
+ .then(state => { |
+ assert_equals(state.enabled, false, |
+ '.enabled should be false by default'); |
+ return registration.navigationPreload.enable(); |
+ }) |
+ .then(() => registration.navigationPreload.getState()) |
+ .then(state => { |
+ assert_equals(state.enabled, true, |
+ '.enabled should be true after enable()'); |
+ return registration.navigationPreload.disable(); |
+ }) |
+ .then(() => registration.navigationPreload.getState()) |
+ .then(state => { |
+ assert_equals(state.enabled, false, |
+ '.enabled should be false after disable()'); |
+ }); |
+ }, 'getState'); |
+ |
+// This test sends commands to a worker to call enable()/disable()/getState(). |
+// It checks the results from the worker and verifies that they match the |
+// navigation preload state accessible from the page. |
+promise_test(t => { |
+ const scope = 'resources/getState-worker'; |
+ const script = 'resources/get-state-worker.js'; |
+ var worker; |
+ var registration; |
+ |
+ return service_worker_unregister_and_register(t, script, scope) |
+ .then(r => { |
+ registration = r; |
+ add_completion_callback(() => registration.unregister()); |
+ worker = registration.installing; |
+ // Call getState(). |
+ return post_and_wait_for_reply(worker, 'getState'); |
+ }) |
+ .then(data => { |
+ return Promise.all([data, registration.navigationPreload.getState()]); |
+ }) |
+ .then(states => { |
+ assert_equals(states[0].enabled, false, |
+ '.enabled should be false by default (from worker)'); |
+ assert_equals(states[1].enabled, false, |
+ '.enabled should be false by default (from page)'); |
+ // Call enable() and then getState(). |
+ return post_and_wait_for_reply(worker, 'enable'); |
+ }) |
+ .then(data => { |
+ assert_equals(data, undefined, 'enable() should resolve to undefined'); |
+ return Promise.all([ |
+ post_and_wait_for_reply(worker, 'getState'), |
+ registration.navigationPreload.getState() |
+ ]); |
+ }) |
+ .then(states => { |
+ assert_equals(states[0].enabled, true, |
+ '.enabled should be true after enable() (from worker)'); |
+ assert_equals(states[1].enabled, true, |
+ '.enabled should be true after enable() (from page)'); |
+ // Call disable() and then getState(). |
+ return post_and_wait_for_reply(worker, 'disable'); |
+ }) |
+ .then(data => { |
+ assert_equals(data, undefined, |
+ '.disable() should resolve to undefined'); |
+ return Promise.all([ |
+ post_and_wait_for_reply(worker, 'getState'), |
+ registration.navigationPreload.getState() |
+ ]); |
+ }) |
+ .then(states => { |
+ assert_equals(states[0].enabled, false, |
+ '.enabled should be false after disable() (from worker)'); |
+ assert_equals(states[1].enabled, false, |
+ '.enabled should be false after disable() (from page)'); |
+ }); |
+ }, 'getState from a worker'); |
+</script> |
+</body> |