Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* -*- 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();
});