Bug 1347700 - Test async loading of content scripts. r=kmag
authorTomislav Jovanovic <tomica@gmail.com>
Sun, 19 Mar 2017 17:24:25 +0100
changeset 348416 2a9f685bbf0cbfbb1e2e061e4e48bb8a0f7413df
parent 348415 784aca50c657cf466746c3db5957c67c824bf3f8
child 348417 d899491bd624aa3e0c4cc22ef6a579f988f51509
push id39156
push usercbook@mozilla.com
push dateMon, 20 Mar 2017 13:29:29 +0000
treeherderautoland@7c3e1b806e3c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerskmag
bugs1347700
milestone55.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1347700 - Test async loading of content scripts. r=kmag
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_cache.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.
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>