summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_slow_script.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_slow_script.js')
-rw-r--r--browser/components/extensions/test/browser/browser_ext_slow_script.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_slow_script.js b/browser/components/extensions/test/browser/browser_ext_slow_script.js
new file mode 100644
index 0000000000..bd9369a904
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_slow_script.js
@@ -0,0 +1,72 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+const DEFAULT_PROCESS_COUNT = Services.prefs
+ .getDefaultBranch(null)
+ .getIntPref("dom.ipc.processCount");
+
+add_task(async function test_slow_content_script() {
+ // Make sure we get a new process for our tab, or our reportProcessHangs
+ // preferences value won't apply to it.
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["dom.ipc.processCount", 1],
+ ["dom.ipc.keepProcessesAlive.web", 0],
+ ],
+ });
+ await SpecialPowers.popPrefEnv();
+
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["dom.ipc.processCount", DEFAULT_PROCESS_COUNT * 2],
+ ["dom.ipc.processPrelaunch.enabled", false],
+ ["dom.ipc.reportProcessHangs", true],
+ ["dom.max_script_run_time.require_critical_input", false],
+ ],
+ });
+
+ let extension = ExtensionTestUtils.loadExtension({
+ useAddonManager: "temporary",
+
+ manifest: {
+ name: "Slow Script Extension",
+
+ content_scripts: [
+ {
+ matches: ["http://example.com/"],
+ js: ["content.js"],
+ },
+ ],
+ },
+
+ files: {
+ "content.js": function () {
+ while (true) {
+ // Busy wait.
+ }
+ },
+ },
+ });
+
+ await extension.startup();
+
+ let alert = BrowserTestUtils.waitForGlobalNotificationBar(
+ window,
+ "process-hang"
+ );
+
+ BrowserTestUtils.openNewForegroundTab(gBrowser, "http://example.com/");
+
+ let notification = await alert;
+ let text = notification.messageText.textContent;
+
+ ok(text.includes("\u201cSlow Script Extension\u201d"), "Label is correct");
+
+ let stopButton = notification.buttonContainer.querySelector("[label='Stop']");
+ stopButton.click();
+
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+
+ await extension.unload();
+});