Bug 1347700 - Test async loading of content scripts draft
authorTomislav Jovanovic <tomica@gmail.com>
Sat, 18 Mar 2017 12:29:54 +0100
changeset 501101 2a67a6323335e1552a8daef0c091a1f4120ab5dc
parent 501100 e908a1ce94d6854275bd18ef54d406b3047b17a2
child 549780 cf22df4e0ed6e63aa34641134f5f273042e2a609
push id49874
push userbmo:tomica@gmail.com
push dateSat, 18 Mar 2017 12:45:27 +0000
bugs1347700
milestone55.0a1
Bug 1347700 - Test async loading of content scripts MozReview-Commit-ID: LjuiizBh1OK
toolkit/components/extensions/test/mochitest/mochitest-common.ini
toolkit/components/extensions/test/mochitest/test_ext_contentscript_async_loading.html
--- a/toolkit/components/extensions/test/mochitest/mochitest-common.ini
+++ b/toolkit/components/extensions/test/mochitest/mochitest-common.ini
@@ -49,16 +49,17 @@ support-files =
 [test_ext_clipboard.html]
 # skip-if = # disabled test case with_permission_allow_copy, see inline comment.
 [test_ext_inIncognitoContext_window.html]
 skip-if = os == 'android' # Android does not support multiple windows.
 [test_ext_geturl.html]
 [test_ext_background_canvas.html]
 [test_ext_content_security_policy.html]
 [test_ext_contentscript_api_injection.html]
+[test_ext_contentscript_async_loading.html]
 [test_ext_contentscript_context.html]
 [test_ext_contentscript_create_iframe.html]
 [test_ext_contentscript_devtools_metadata.html]
 [test_ext_contentscript_drawWindow.html]
 [test_ext_contentscript_exporthelpers.html]
 [test_ext_contentscript_incognito.html]
 skip-if = os == 'android' # Android does not support multiple windows.
 [test_ext_contentscript_css.html]
new file mode 100644
--- /dev/null
+++ b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_async_loading.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<html>
+<head>
+  <title>Test content script async loading</title>
+  <script src="/tests/SimpleTest/SpawnTask.js"></script>
+  <script src="/tests/SimpleTest/SimpleTest.js"></script>
+  <script src="/tests/SimpleTest/ExtensionTestUtils.js"></script>
+  <script src="head.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<script>
+"use strict";
+
+add_task(function* test_async_loading() {
+  const adder = `(function add(a = 1) { this.count += a; })();\n`;
+  const extension = ExtensionTestUtils.loadExtension({
+    manifest: {
+      content_scripts: [{
+        matches: ["https://example.org/"],
+        js: ["first.js", "second.js"],
+      }],
+    },
+    files: {
+      "first.js": `
+        this.count = 0;
+        ${adder.repeat(50000)};  // 2Mb
+        browser.test.assertEq(this.count, 50000, "A 50k line script");
+
+        this.order = (this.order || 0) + 1;
+        browser.test.sendMessage("first", this.order);
+      `,
+      "second.js": `
+        this.order = (this.order || 0) + 1;
+        browser.test.sendMessage("second", this.order);
+      `,
+    },
+  });
+
+  yield extension.startup();
+  const win = window.open("https://example.org/");
+
+  const [first, second] = yield Promise.all([
+    extension.awaitMessage("first"),
+    extension.awaitMessage("second"),
+  ]);
+
+  is(first, 1, "first.js finished execution first.");
+  is(second, 2, "second.js finished execution second.");
+
+  yield extension.unload();
+  win.close();
+});
+
+</script>