зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1559244 - Step 3: Add test for crashing an oop iframe. r=mconley
Differential Revision: https://phabricator.services.mozilla.com/D38896 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
cbbacc1e6a
Коммит
6088cf63bf
|
@ -4,6 +4,8 @@ support-files =
|
||||||
file_domainPolicy_base.html
|
file_domainPolicy_base.html
|
||||||
file_cancel_content_js.html
|
file_cancel_content_js.html
|
||||||
|
|
||||||
|
[browser_crash_oopiframe.js]
|
||||||
|
skip-if = true # Disabled until bug 1566196 is fixed
|
||||||
[browser_domainPolicy.js]
|
[browser_domainPolicy.js]
|
||||||
skip-if = fission
|
skip-if = fission
|
||||||
[browser_memory_distribution_telemetry.js]
|
[browser_memory_distribution_telemetry.js]
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* In this test, we crash an out-of-process iframe and
|
||||||
|
* verify that :
|
||||||
|
* 1. the "oop-browser-crashed" event is dispatched with
|
||||||
|
* the browsing context of the crashed oop subframe.
|
||||||
|
* 2. the crashed subframe is now pointing at "about:framecrashed"
|
||||||
|
* page.
|
||||||
|
*/
|
||||||
|
add_task(async function() {
|
||||||
|
// Open a new window with fission enabled.
|
||||||
|
let win = await BrowserTestUtils.openNewBrowserWindow({
|
||||||
|
remote: true,
|
||||||
|
fission: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Wait for the provided URL to load in our browser.
|
||||||
|
let url = "about:blank";
|
||||||
|
let browser = win.gBrowser.selectedBrowser;
|
||||||
|
BrowserTestUtils.loadURI(browser, url);
|
||||||
|
await BrowserTestUtils.browserLoaded(browser, false, url);
|
||||||
|
|
||||||
|
let rootBC = browser.browsingContext;
|
||||||
|
|
||||||
|
// Create an oop iframe.
|
||||||
|
let iframeID = await SpecialPowers.spawn(browser, [], async () => {
|
||||||
|
let iframe = content.document.createElement("iframe");
|
||||||
|
iframe.setAttribute("fission", "true");
|
||||||
|
iframe.setAttribute("src", "http://example.com");
|
||||||
|
|
||||||
|
const { ContentTaskUtils } = ChromeUtils.import(
|
||||||
|
"resource://testing-common/ContentTaskUtils.jsm"
|
||||||
|
);
|
||||||
|
|
||||||
|
content.document.body.appendChild(iframe);
|
||||||
|
await ContentTaskUtils.waitForEvent(iframe, "load");
|
||||||
|
|
||||||
|
let iframeBC = iframe.frameLoader.browsingContext;
|
||||||
|
return iframeBC.id;
|
||||||
|
});
|
||||||
|
|
||||||
|
let iframeBC = BrowsingContext.get(iframeID);
|
||||||
|
is(iframeBC.parent, rootBC, "oop frame has root as parent");
|
||||||
|
|
||||||
|
BrowserTestUtils.crashFrame(
|
||||||
|
browser,
|
||||||
|
true /* shouldShowTabCrashPage */,
|
||||||
|
true /* shouldClearMinidumps */,
|
||||||
|
iframeBC
|
||||||
|
);
|
||||||
|
|
||||||
|
let eventFiredPromise = BrowserTestUtils.waitForEvent(
|
||||||
|
browser,
|
||||||
|
"oop-browser-crashed"
|
||||||
|
);
|
||||||
|
|
||||||
|
await eventFiredPromise.then(event => {
|
||||||
|
isnot(
|
||||||
|
event.browsingContextId,
|
||||||
|
rootBC,
|
||||||
|
"top frame browsing context id not expected."
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
event.browsingContextId,
|
||||||
|
iframeBC.id,
|
||||||
|
"oop frame browsing context id expected."
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
info("Wait for a new browsing context to get attached to our oop iframe.");
|
||||||
|
await BrowserTestUtils.waitForCondition(
|
||||||
|
() => rootBC.getChildren()[0] != iframeBC
|
||||||
|
);
|
||||||
|
|
||||||
|
let newIframeBC = rootBC.getChildren()[0];
|
||||||
|
let newIframeURI = await SpecialPowers.spawn(
|
||||||
|
newIframeBC,
|
||||||
|
[],
|
||||||
|
() => content.document.documentURI
|
||||||
|
);
|
||||||
|
|
||||||
|
ok(
|
||||||
|
newIframeURI.startsWith("about:framecrashed"),
|
||||||
|
"The iframe is now pointing at about:framecrashed"
|
||||||
|
);
|
||||||
|
|
||||||
|
await BrowserTestUtils.closeWindow(win);
|
||||||
|
});
|
Загрузка…
Ссылка в новой задаче