Bug 1286124 - Part 1/2 - Modify existing tests to not use same-frame messaging draft
authorRob Wu <rob@robwu.nl>
Wed, 13 Jul 2016 16:25:58 -0700
changeset 406839 385ee6fb171fdc4b869a132899cf8e2626f69ef6
parent 406838 acfb2c3ac6ae0a704e2756184815296ac1314f89
child 406840 e3e2ed9fdd13b7bf201af3a6644dc741dedd702f
push id27837
push userbmo:rob@robwu.nl
push dateMon, 29 Aug 2016 17:14:14 +0000
bugs1286124
milestone51.0a1
Bug 1286124 - Part 1/2 - Modify existing tests to not use same-frame messaging MozReview-Commit-ID: CtCcajKYAoR
toolkit/components/extensions/test/mochitest/test_ext_jsversion.html
toolkit/components/extensions/test/xpcshell/test_ext_background_runtime_connect_params.js
toolkit/components/extensions/test/xpcshell/test_ext_runtime_sendMessage.js
--- a/toolkit/components/extensions/test/mochitest/test_ext_jsversion.html
+++ b/toolkit/components/extensions/test/mochitest/test_ext_jsversion.html
@@ -30,33 +30,33 @@ add_task(function* test_versioned_js() {
         <meta charset="utf-8">
         ${script('src="background.js" type="application/javascript"')}
         ${script('src="background-1.js" type="application/javascript;version=1.8"')}
         ${script('src="background-2.js" type="application/javascript;version=latest"')}
         ${script('src="background-3.js" type="application/javascript"')}
       `,
 
       "background.js": "new " + function() {
-        browser.runtime.onMessage.addListener(msg => {
+        window.reportResult = msg => {
           browser.test.assertEq(
             msg, "background-script-3",
             "Expected a message only from the unversioned background script.");
 
           browser.test.sendMessage("finished");
-        });
+        };
       },
 
       "background-1.js": "new " + function() {
-        browser.runtime.sendMessage("background-script-1");
+        window.reportResult("background-script-1");
       },
       "background-2.js": "new " + function() {
-        browser.runtime.sendMessage("background-script-2");
+        window.reportResult("background-script-2");
       },
       "background-3.js": "new " + function() {
-        browser.runtime.sendMessage("background-script-3");
+        window.reportResult("background-script-3");
       },
     },
   });
 
   let messages = [/Versioned JavaScript.*not supported in WebExtension.*developer\.mozilla\.org/,
                   /Versioned JavaScript.*not supported in WebExtension.*developer\.mozilla\.org/];
 
   let waitForConsole = new Promise(resolve => {
--- a/toolkit/components/extensions/test/xpcshell/test_ext_background_runtime_connect_params.js
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_background_runtime_connect_params.js
@@ -1,62 +1,70 @@
 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim: set sts=2 sw=2 et tw=80: */
 "use strict";
 
 function backgroundScript() {
+  let received_ports_number = 0;
+
+  const expected_received_ports_number = 1;
+
+  function countReceivedPorts(port) {
+    received_ports_number++;
+
+    if (port.name == "check-results") {
+      browser.runtime.onConnect.removeListener(countReceivedPorts);
+
+      browser.test.assertEq(expected_received_ports_number, received_ports_number, "invalid connect should not create a port");
+
+      browser.test.notifyPass("runtime.connect invalid params");
+    }
+  }
+
+  browser.runtime.onConnect.addListener(countReceivedPorts);
+
+  let childFrame = document.createElement("iframe");
+  childFrame.src = "extensionpage.html";
+  document.body.appendChild(childFrame);
+}
+
+function senderScript() {
   let detected_invalid_connect_params = 0;
-  let received_ports_number = 0;
 
   const invalid_connect_params = [
     // too many params
     ["fake-extensions-id", {name: "fake-conn-name"}, "unexpected third params"],
     // invalid params format
     [{}, {}],
     ["fake-extensions-id", "invalid-connect-info-format"],
   ];
-
   const expected_detected_invalid_connect_params = invalid_connect_params.length;
-  const expected_received_ports_number = 1;
 
   function assertInvalidConnectParamsException(params) {
     try {
       browser.runtime.connect(...params);
     } catch (e) {
       detected_invalid_connect_params++;
       browser.test.assertTrue(e.toString().indexOf("Incorrect argument types for runtime.connect.") >= 0, "exception message is correct");
     }
   }
-
-  function countReceivedPorts(port) {
-    received_ports_number++;
-
-    if (port.name == "check-results") {
-      browser.runtime.onConnect.removeListener(countReceivedPorts);
-
-      browser.test.assertEq(expected_detected_invalid_connect_params, detected_invalid_connect_params, "all invalid runtime.connect params detected");
-      browser.test.assertEq(expected_received_ports_number, received_ports_number, "invalid connect should not create a port");
-
-      browser.test.notifyPass("runtime.connect invalid params");
-    }
-  }
-
-  browser.runtime.onConnect.addListener(countReceivedPorts);
-
   for (let params of invalid_connect_params) {
     assertInvalidConnectParamsException(params);
   }
+  browser.test.assertEq(expected_detected_invalid_connect_params, detected_invalid_connect_params, "all invalid runtime.connect params detected");
 
   browser.runtime.connect(browser.runtime.id, {name: "check-results"});
 }
 
 let extensionData = {
   background: backgroundScript,
-  manifest: {},
-  files: {},
+  files: {
+    "senderScript.js": senderScript,
+    "extensionpage.html": `<!DOCTYPE html><meta charset="utf-8"><script src="senderScript.js"></script>`,
+  },
 };
 
 add_task(function* test_backgroundRuntimeConnectParams() {
   let extension = ExtensionTestUtils.loadExtension(extensionData);
   yield extension.startup();
 
   yield extension.awaitFinish("runtime.connect invalid params");
 
--- a/toolkit/components/extensions/test/xpcshell/test_ext_runtime_sendMessage.js
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_runtime_sendMessage.js
@@ -24,16 +24,22 @@ add_task(function* tabsSendMessageReply(
     browser.runtime.onMessage.addListener((msg, sender, respond) => {
       if (msg == "respond-now") {
         respond("hello");
       } else if (msg == "respond-now-2") {
         respond(msg);
       }
     });
 
+    let childFrame = document.createElement("iframe");
+    childFrame.src = "extensionpage.html";
+    document.body.appendChild(childFrame);
+  }
+
+  function senderScript() {
     Promise.all([
       browser.runtime.sendMessage("respond-now"),
       browser.runtime.sendMessage("respond-now-2"),
       new Promise(resolve => browser.runtime.sendMessage("respond-soon", resolve)),
       browser.runtime.sendMessage("respond-promise"),
       browser.runtime.sendMessage("respond-never"),
       new Promise(resolve => {
         browser.runtime.sendMessage("respond-never", response => { resolve(response); });
@@ -56,14 +62,18 @@ add_task(function* tabsSendMessageReply(
     }).catch(e => {
       browser.test.fail(`Error: ${e} :: ${e.stack}`);
       browser.test.notifyFail("sendMessage");
     });
   }
 
   let extension = ExtensionTestUtils.loadExtension({
     background,
+    files: {
+      "senderScript.js": senderScript,
+      "extensionpage.html": `<!DOCTYPE html><meta charset="utf-8"><script src="senderScript.js"></script>`,
+    },
   });
 
   yield extension.startup();
   yield extension.awaitFinish("sendMessage");
   yield extension.unload();
 });