mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-24 13:21:05 +00:00
Bug 1775925: Split up browser_onbeforeunload.js somewhat. r=nika
This splits the parent-triggered and child-triggered unload attempts into separate tests. I could also split the tests for each subframe level into separate tests, but let's see how this does for now. Differential Revision: https://phabricator.services.mozilla.com/D159228
This commit is contained in:
parent
c4dfda1c19
commit
1a5132c440
@ -167,11 +167,10 @@ support-files =
|
||||
[browser_loadURI_postdata.js]
|
||||
[browser_multiple_pushState.js]
|
||||
https_first_disabled = true
|
||||
[browser_onbeforeunload.js]
|
||||
skip-if =
|
||||
tsan # Bug 1683730
|
||||
os == 'linux' && socketprocess_networking && fission && debug # Bug 1686597; high frequency intermittent
|
||||
os == 'linux' && bits == 64 && asan # Bug 1773830
|
||||
[browser_onbeforeunload_frame.js]
|
||||
support-files = head_browser_onbeforeunload.js
|
||||
[browser_onbeforeunload_parent.js]
|
||||
support-files = head_browser_onbeforeunload.js
|
||||
[browser_onbeforeunload_navigation.js]
|
||||
skip-if = (os == 'win' && !debug) # bug 1300351
|
||||
[browser_onunload_stop.js]
|
||||
|
45
docshell/test/browser/browser_onbeforeunload_frame.js
Normal file
45
docshell/test/browser/browser_onbeforeunload_frame.js
Normal file
@ -0,0 +1,45 @@
|
||||
"use strict";
|
||||
|
||||
// We need to test a lot of permutations here, and there isn't any sensible way
|
||||
// to split them up or run them faster.
|
||||
requestLongerTimeout(6);
|
||||
|
||||
Services.scriptloader.loadSubScript(
|
||||
getRootDirectory(gTestPath) + "head_browser_onbeforeunload.js",
|
||||
this
|
||||
);
|
||||
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({
|
||||
set: [["dom.require_user_interaction_for_beforeunload", false]],
|
||||
});
|
||||
|
||||
for (let actions of PERMUTATIONS) {
|
||||
info(
|
||||
`Testing frame actions: [${actions.map(action =>
|
||||
ACTION_NAMES.get(action)
|
||||
)}]`
|
||||
);
|
||||
|
||||
for (let startIdx = 0; startIdx < FRAMES.length; startIdx++) {
|
||||
info(`Testing content reload from frame ${startIdx}`);
|
||||
|
||||
await doTest(actions, startIdx, (tab, frames) => {
|
||||
return SpecialPowers.spawn(frames[startIdx], [], () => {
|
||||
let eventLoopSpun = false;
|
||||
SpecialPowers.Services.tm.dispatchToMainThread(() => {
|
||||
eventLoopSpun = true;
|
||||
});
|
||||
|
||||
content.location.reload();
|
||||
|
||||
return { eventLoopSpun };
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
add_task(async function cleanup() {
|
||||
await TabPool.cleanup();
|
||||
});
|
48
docshell/test/browser/browser_onbeforeunload_parent.js
Normal file
48
docshell/test/browser/browser_onbeforeunload_parent.js
Normal file
@ -0,0 +1,48 @@
|
||||
"use strict";
|
||||
|
||||
// We need to test a lot of permutations here, and there isn't any sensible way
|
||||
// to split them up or run them faster.
|
||||
requestLongerTimeout(6);
|
||||
|
||||
Services.scriptloader.loadSubScript(
|
||||
getRootDirectory(gTestPath) + "head_browser_onbeforeunload.js",
|
||||
this
|
||||
);
|
||||
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({
|
||||
set: [["dom.require_user_interaction_for_beforeunload", false]],
|
||||
});
|
||||
|
||||
for (let actions of PERMUTATIONS) {
|
||||
info(
|
||||
`Testing frame actions: [${actions.map(action =>
|
||||
ACTION_NAMES.get(action)
|
||||
)}]`
|
||||
);
|
||||
|
||||
info(`Testing tab close from parent process`);
|
||||
await doTest(actions, -1, (tab, frames) => {
|
||||
let eventLoopSpun = false;
|
||||
Services.tm.dispatchToMainThread(() => {
|
||||
eventLoopSpun = true;
|
||||
});
|
||||
|
||||
BrowserTestUtils.removeTab(tab);
|
||||
|
||||
let result = { eventLoopSpun };
|
||||
|
||||
// Make an extra couple of trips through the event loop to give us time
|
||||
// to process SpecialPowers.spawn responses before resolving.
|
||||
return new Promise(resolve => {
|
||||
executeSoon(() => {
|
||||
executeSoon(() => resolve(result));
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
add_task(async function cleanup() {
|
||||
await TabPool.cleanup();
|
||||
});
|
@ -273,58 +273,3 @@ async function doTest(actions, startIdx, navigate) {
|
||||
is(result.event, "unload", "Should have seen unload event");
|
||||
}
|
||||
}
|
||||
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({
|
||||
set: [["dom.require_user_interaction_for_beforeunload", false]],
|
||||
});
|
||||
|
||||
for (let actions of PERMUTATIONS) {
|
||||
info(
|
||||
`Testing frame actions: [${actions.map(action =>
|
||||
ACTION_NAMES.get(action)
|
||||
)}]`
|
||||
);
|
||||
|
||||
for (let startIdx = 0; startIdx < FRAMES.length; startIdx++) {
|
||||
info(`Testing content reload from frame ${startIdx}`);
|
||||
|
||||
await doTest(actions, startIdx, (tab, frames) => {
|
||||
return SpecialPowers.spawn(frames[startIdx], [], () => {
|
||||
let eventLoopSpun = false;
|
||||
SpecialPowers.Services.tm.dispatchToMainThread(() => {
|
||||
eventLoopSpun = true;
|
||||
});
|
||||
|
||||
content.location.reload();
|
||||
|
||||
return { eventLoopSpun };
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
info(`Testing tab close from parent process`);
|
||||
await doTest(actions, -1, (tab, frames) => {
|
||||
let eventLoopSpun = false;
|
||||
Services.tm.dispatchToMainThread(() => {
|
||||
eventLoopSpun = true;
|
||||
});
|
||||
|
||||
BrowserTestUtils.removeTab(tab);
|
||||
|
||||
let result = { eventLoopSpun };
|
||||
|
||||
// Make an extra couple of trips through the event loop to give us time
|
||||
// to process SpecialPowers.spawn responses before resolving.
|
||||
return new Promise(resolve => {
|
||||
executeSoon(() => {
|
||||
executeSoon(() => resolve(result));
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
add_task(async function cleanup() {
|
||||
await TabPool.cleanup();
|
||||
});
|
Loading…
Reference in New Issue
Block a user