summaryrefslogtreecommitdiffstats
path: root/devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.html
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.html')
-rw-r--r--devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.html81
1 files changed, 81 insertions, 0 deletions
diff --git a/devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.html b/devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.html
new file mode 100644
index 0000000000..4065aabc2b
--- /dev/null
+++ b/devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>browser_toolbox_options_enable_serviceworkers_testing.html</title>
+ <meta charset="UTF-8">
+ </head>
+ <body>
+ <h1>SW-test</h1>
+ <script>
+ function register() {
+ return Promise.resolve().then(function() {
+ // While ServiceWorkerContainer.register() returns a promise, it's
+ // still wrapped with a .then() because navigator.serviceWorker is not
+ // defined in insecure contexts unless service worker testing is
+ // enabled, so dereferencing it would throw a ReferenceError (which
+ // is then caught in the .catch() clause).
+ return window.navigator.serviceWorker.register("serviceworker.js");
+ }).then(registration => {
+ return {success: true};
+ }).catch(error => {
+ return {success: false};
+ });
+ }
+
+ function unregister() {
+ return Promise.resolve().then(function() {
+ return window.navigator.serviceWorker.getRegistration();
+ }).then(registration => {
+ return registration.unregister().then(result => {
+ return {success: !!result};
+ });
+ }).catch(_ => {
+ return {success: false};
+ });
+ }
+
+ function iframeRegisterAndUnregister() {
+ var frame = window.document.createElement("iframe");
+ var promise = new Promise(function(resolve, reject) {
+ frame.addEventListener("load", function() {
+ Promise.resolve().then(_ => {
+ return frame.contentWindow.navigator.serviceWorker.register("serviceworker.js");
+ }).then(swr => {
+ return swr.unregister();
+ }).then(_ => {
+ frame.remove();
+ resolve({success: true});
+ }).catch(error => {
+ resolve({success: false});
+ });
+ }, {once: true});
+ });
+ frame.src = "browser_toolbox_options_enabled_serviceworkers_testing.html";
+ window.document.body.appendChild(frame);
+ return promise;
+ }
+
+ window.addEventListener("message", function(event) {
+ var response;
+ switch (event.data) {
+ case "devtools:sw-test:register": {
+ response = register();
+ break;
+ }
+ case "devtools:sw-test:unregister": {
+ response = unregister();
+ break;
+ }
+ case "devtools:sw-test:iframe:register-and-unregister": {
+ response = iframeRegisterAndUnregister();
+ break;
+ }
+ }
+ response.then(data => {
+ event.ports[0].postMessage(data);
+ event.ports[0].close();
+ });
+ });
+ </script>
+ </body>
+</html>