diff --git a/dom/security/test/csp/test_reloadInFreshProcess.html b/dom/security/test/csp/test_reloadInFreshProcess.html index 5abbd3dd1af3..4423b6c92c31 100644 --- a/dom/security/test/csp/test_reloadInFreshProcess.html +++ b/dom/security/test/csp/test_reloadInFreshProcess.html @@ -20,16 +20,15 @@ * Test 2 | | "upgrade-insecure-requests" | http * * Test 1: - * We load an iframe which uses 'upgrade-insecure-requests' which then - * opens an "http" window which uses the header "Large-Allocation". - * We observe that the initial request as well as the "Large-Allocation" - * request get upgraded to use "https://test1.example.com". + * We load an iframe which uses 'upgrade-insecure-requests' which then opens an + * "http" window which uses the header "Large-Allocation". We observe that the + * request gets upgraded to use "https://test1.example.com". * * Test 2: * We load an iframe which does not use any CSP and opens an "http" window * which uses the header "Large-Allocation" as well as a CSP of - * "upgrade-insecure-requests". We observe that both requests do - * not get upgraded to https but still use "http://test2.example.com". + * "upgrade-insecure-requests". We observe that the request does not get + * upgraded to https but still uses "http://test2.example.com". */ SimpleTest.waitForExplicitFinish(); @@ -38,7 +37,7 @@ let httpsCounter = 0; let httpCounter = 0; function checkTestComplete() { - if (httpsCounter == 2 && httpCounter == 2) { + if (httpsCounter == 1 && httpCounter == 1) { ok(true, "Frame with CSP caused upgrade; Frame with no CSP caused no upgrade"); window.URLExaminer.remove(); SimpleTest.finish(); diff --git a/dom/tests/browser/browser.ini b/dom/tests/browser/browser.ini index 7ceef1f384db..69a0fd55c834 100644 --- a/dom/tests/browser/browser.ini +++ b/dom/tests/browser/browser.ini @@ -56,9 +56,9 @@ support-files = beforeunload_test_page.html run-if = e10s [browser_largeAllocation_win32.js] -skip-if = fission || !e10s || os != "win" || processor != "x86" # Large-Allocation requires e10s +skip-if = fission || !e10s || os != "win" || processor != "x86" # Large-Allocation requires non-fission e10s [browser_largeAllocation_non_win32.js] -skip-if = fission || !e10s || (os == "win" && (processor == "x86" || processor == "aarch64")) || (verify && debug && (os == 'linux')) || (os == 'linux') || (os == 'mac') || (os == "win" && debug) # Large-Allocation requires e10s # Bug 1336075 +skip-if = fission || !e10s || (os == "win" && processor == "x86") # Large-Allocation requires non-fission e10s [browser_localStorage_e10s.js] fail-if = fission skip-if = !e10s || verify # This is a test of e10s functionality. diff --git a/dom/tests/browser/helper_largeAllocation.js b/dom/tests/browser/helper_largeAllocation.js index 0117e8500342..ec5b4b3158e9 100644 --- a/dom/tests/browser/helper_largeAllocation.js +++ b/dom/tests/browser/helper_largeAllocation.js @@ -28,26 +28,14 @@ function expectProcessCreated() { return promise; } -function expectNoProcess() { - let os = Services.obs; - let topic = "ipc:content-created"; - function observer() { - ok(false, "A process was created!"); - os.removeObserver(observer, topic); - } - os.addObserver(observer, topic); - - return () => os.removeObserver(observer, topic); -} - function getPID(aBrowser) { - return ContentTask.spawn(aBrowser, [], () => { + return SpecialPowers.spawn(aBrowser, [], () => { return Services.appinfo.processID; }); } function getInLAProc(aBrowser) { - return ContentTask.spawn(aBrowser, [], () => { + return SpecialPowers.spawn(aBrowser, [], () => { return Services.appinfo.remoteType == "webLargeAllocation"; }); } @@ -79,13 +67,17 @@ async function largeAllocSuccessTests() { let pid1 = await getPID(aBrowser); is(false, await getInLAProc(aBrowser)); - let epc = expectProcessCreated(); - await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { + let ready = Promise.all([ + expectProcessCreated(), + BrowserTestUtils.browserLoaded(aBrowser), + ]); + + await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { content.document.location = TEST_URI; }); // Wait for the new process to be created - await epc; + await ready; let pid2 = await getPID(aBrowser); @@ -104,10 +96,7 @@ async function largeAllocSuccessTests() { let pid1 = await getPID(aBrowser); is(false, await getInLAProc(aBrowser)); - // Fail the test if we create a process - let stopExpectNoProcess = expectNoProcess(); - - await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { + await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { // eslint-disable-next-line no-unsanitized/property content.document.body.innerHTML = ``; @@ -123,8 +112,6 @@ async function largeAllocSuccessTests() { is(pid1, pid2, "The PID should not have changed"); is(false, await getInLAProc(aBrowser)); - - stopExpectNoProcess(); }); // If you have an opener cross process navigation shouldn't work @@ -135,62 +122,51 @@ async function largeAllocSuccessTests() { let pid1 = await getPID(aBrowser); is(false, await getInLAProc(aBrowser)); - // Fail the test if we create a process - let stopExpectNoProcess = expectNoProcess(); - - let loaded = ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { + await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + info(TEST_URI); content.document.body.innerHTML = ""; return new Promise(resolve => { - content.document.querySelector("button").onclick = e => { - let w = content.window.open(TEST_URI, "_blank"); - w.onload = () => { - ok(true, "Window finished loading"); - w.close(); - resolve(); - }; + let w = content.window.open(TEST_URI, "_blank"); + w.onload = () => { + ok(true, "Window finished loading"); + w.close(); + resolve(); }; }); }); - await BrowserTestUtils.synthesizeMouseAtCenter("button", {}, aBrowser); - - await loaded; - let pid2 = await getPID(aBrowser); is(pid1, pid2, "The PID should not have changed"); is(false, await getInLAProc(aBrowser)); - - stopExpectNoProcess(); }); - // Load Large-Allocation twice with about:blank load in between + // Load Large-Allocation twice with example.com load in between await BrowserTestUtils.withNewTab("about:blank", async function(aBrowser) { info("Starting test 3"); let pid1 = await getPID(aBrowser); is(false, await getInLAProc(aBrowser)); - let epc = expectProcessCreated(); + let ready = Promise.all([ + expectProcessCreated(), + BrowserTestUtils.browserLoaded(aBrowser), + ]); - await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { + await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { content.document.location = TEST_URI; }); - await epc; + await ready; let pid2 = await getPID(aBrowser); isnot(pid1, pid2); is(true, await getInLAProc(aBrowser)); - await BrowserTestUtils.browserLoaded(aBrowser); - - await ContentTask.spawn( - aBrowser, - [], - () => (content.document.location = "about:blank") - ); + await SpecialPowers.spawn(aBrowser, [], () => { + content.document.location = "http://example.com"; + }); await BrowserTestUtils.browserLoaded(aBrowser); @@ -198,13 +174,16 @@ async function largeAllocSuccessTests() { // load, meaning we're back in a non-fresh process is(false, await getInLAProc(aBrowser)); - epc = expectProcessCreated(); + ready = Promise.all([ + expectProcessCreated(), + BrowserTestUtils.browserLoaded(aBrowser), + ]); - await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { + await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { content.document.location = TEST_URI; }); - await epc; + await ready; let pid4 = await getPID(aBrowser); @@ -213,30 +192,31 @@ async function largeAllocSuccessTests() { is(true, await getInLAProc(aBrowser)); }); - // Load Large-Allocation then about:blank load, then back button press should load from bfcache. + // Load Large-Allocation then example.com load, then back button press should load from bfcache. await BrowserTestUtils.withNewTab("about:blank", async function(aBrowser) { info("Starting test 4"); let pid1 = await getPID(aBrowser); is(false, await getInLAProc(aBrowser)); - let epc = expectProcessCreated(); + let ready = Promise.all([ + expectProcessCreated(), + BrowserTestUtils.browserLoaded(aBrowser), + ]); - await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { + await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { content.document.location = TEST_URI; }); - await epc; + await ready; let pid2 = await getPID(aBrowser); isnot(pid1, pid2, "PIDs 1 and 2 should not match"); is(true, await getInLAProc(aBrowser)); - await BrowserTestUtils.browserLoaded(aBrowser); - // Switch to about:blank, so we can navigate back - await ContentTask.spawn(aBrowser, [], () => { - content.document.location = "about:blank"; + await SpecialPowers.spawn(aBrowser, [], () => { + content.document.location = "http://example.com"; }); await BrowserTestUtils.browserLoaded(aBrowser); @@ -247,15 +227,18 @@ async function largeAllocSuccessTests() { // load, meaning we're back in a non-large-allocation process. is(false, await getInLAProc(aBrowser)); - epc = expectProcessCreated(); + ready = Promise.all([ + expectProcessCreated(), + BrowserTestUtils.browserLoaded(aBrowser), + ]); // Navigate back to the previous page. As the large alloation process was // left, it won't be in bfcache and will have to be loaded fresh. - await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { + await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { content.window.history.back(); }); - await epc; + await ready; let pid4 = await getPID(aBrowser); @@ -276,7 +259,7 @@ async function largeAllocSuccessTests() { BrowserTestUtils.browserLoaded(aBrowser), ]); - await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { + await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { content.document.location = TEST_URI; }); @@ -287,27 +270,16 @@ async function largeAllocSuccessTests() { isnot(pid1, pid2, "PIDs 1 and 2 should not match"); is(true, await getInLAProc(aBrowser)); - let epc = expectProcessCreated(); + ready = Promise.all([ + expectProcessCreated(), + BrowserTestUtils.browserLoaded(aBrowser), + ]); - await ContentTask.spawn(aBrowser, TEST_URI_2, TEST_URI_2 => { + await SpecialPowers.spawn(aBrowser, [TEST_URI_2], TEST_URI_2 => { content.document.location = TEST_URI_2; }); - await epc; - - // We just saw the creation of a new process. This is either the process we - // are interested in, or, in a multi-e10s situation, the normal content - // process which was created for the normal content to be loaded into as the - // browsing context was booted out of the fresh process. If we discover that - // this was not a fresh process, we'll need to wait for another process. - // Start listening now. - epc = expectProcessCreated(); - if (!(await getInLAProc(aBrowser))) { - await epc; - } else { - epc.catch(() => {}); - epc.kill(); - } + await ready; let pid3 = await getPID(aBrowser); @@ -327,7 +299,7 @@ async function largeAllocSuccessTests() { BrowserTestUtils.browserLoaded(aBrowser), ]); - await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { + await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { content.document.location = TEST_URI; }); @@ -338,11 +310,13 @@ async function largeAllocSuccessTests() { isnot(pid1, pid2, "PIDs 1 and 2 should not match"); is(true, await getInLAProc(aBrowser)); - let stopExpectNoProcess = expectNoProcess(); - - await ContentTask.spawn(aBrowser, [], () => { - this.__newWindow = content.window.open("about:blank"); - content.document.location = "about:blank"; + let promiseTabOpened = BrowserTestUtils.waitForNewTab( + gBrowser, + "about:blank" + ); + await SpecialPowers.spawn(aBrowser, [], () => { + content.window.open("about:blank"); + content.document.location = "http://example.com"; }); await BrowserTestUtils.browserLoaded(aBrowser); @@ -352,12 +326,7 @@ async function largeAllocSuccessTests() { is(pid3, pid2, "PIDs 2 and 3 should match"); is(true, await getInLAProc(aBrowser)); - stopExpectNoProcess(); - - await ContentTask.spawn(aBrowser, [], () => { - ok(this.__newWindow, "The window should have been stored"); - this.__newWindow.close(); - }); + BrowserTestUtils.removeTab(await promiseTabOpened); }); // Opening a window from the large-allocation window should prevent the @@ -372,7 +341,7 @@ async function largeAllocSuccessTests() { BrowserTestUtils.browserLoaded(aBrowser), ]); - await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { + await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { content.document.location = TEST_URI; }); @@ -383,17 +352,15 @@ async function largeAllocSuccessTests() { isnot(pid1, pid2, "PIDs 1 and 2 should not match"); is(true, await getInLAProc(aBrowser)); - let stopExpectNoProcess = expectNoProcess(); - let firstTab = gBrowser.selectedTab; let promiseTabOpened = BrowserTestUtils.waitForNewTab( gBrowser, "about:blank" ); - await ContentTask.spawn(aBrowser, [], () => { - this.__newWindow = content.window.open("about:blank"); + await SpecialPowers.spawn(aBrowser, [], () => { + content.window.open("about:blank"); }); - await promiseTabOpened; + let newTab = await promiseTabOpened; if (firstTab != gBrowser.selectedTab) { firstTab = await BrowserTestUtils.switchTab(gBrowser, firstTab); @@ -408,12 +375,7 @@ async function largeAllocSuccessTests() { is(pid3, pid2, "PIDs 2 and 3 should match"); is(true, await getInLAProc(aBrowser)); - stopExpectNoProcess(); - - await ContentTask.spawn(aBrowser, [], () => { - ok(this.__newWindow, "The window should have been stored"); - this.__newWindow.close(); - }); + BrowserTestUtils.removeTab(newTab); }); // Try dragging the tab into a new window when not at the maximum number of @@ -428,7 +390,7 @@ async function largeAllocSuccessTests() { expectProcessCreated(), BrowserTestUtils.browserLoaded(aBrowser), ]); - await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { + await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { content.document.location = TEST_URI; }); @@ -476,7 +438,7 @@ async function largeAllocSuccessTests() { BrowserTestUtils.browserLoaded(aBrowser), ]); - await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { + await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { content.document.location = TEST_URI; }); @@ -493,7 +455,7 @@ async function largeAllocSuccessTests() { is(false, await getInLAProc(aBrowser)); let ready = Promise.all([BrowserTestUtils.browserLoaded(aBrowser)]); - await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { + await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { content.document.location = TEST_URI; }); await ready; @@ -514,10 +476,7 @@ async function largeAllocSuccessTests() { let pid1 = await getPID(aBrowser); is(false, await getInLAProc(aBrowser)); - // Fail the test if we create a process - let stopExpectNoProcess = expectNoProcess(); - - await ContentTask.spawn(aBrowser, [], () => { + await SpecialPowers.spawn(aBrowser, [], () => { content.document.location = "view-source:http://example.com"; }); @@ -527,8 +486,6 @@ async function largeAllocSuccessTests() { is(pid1, pid2, "The PID should not have changed"); is(false, await getInLAProc(aBrowser)); - - stopExpectNoProcess(); }); // Try dragging tab into new window when at the max number of large allocation @@ -546,7 +503,7 @@ async function largeAllocSuccessTests() { expectProcessCreated(), BrowserTestUtils.browserLoaded(aBrowser), ]); - await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { + await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { content.document.location = TEST_URI; }); @@ -588,7 +545,7 @@ async function largeAllocSuccessTests() { expectProcessCreated(), BrowserTestUtils.browserLoaded(aBrowser), ]); - await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { + await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { content.document.location = TEST_URI; }); @@ -600,7 +557,7 @@ async function largeAllocSuccessTests() { is(true, await getInLAProc(aBrowser)); await Promise.all([ - ContentTask.spawn(aBrowser, null, () => { + SpecialPowers.spawn(aBrowser, [], () => { content.document.querySelector("#submit").click(); }), BrowserTestUtils.browserLoaded(aBrowser), @@ -629,10 +586,7 @@ async function largeAllocFailTests() { let pid1 = await getPID(aBrowser); is(false, await getInLAProc(aBrowser)); - // Fail the test if we create a process - let stopExpectNoProcess = expectNoProcess(); - - await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { + await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { content.document.location = TEST_URI; }); @@ -642,7 +596,5 @@ async function largeAllocFailTests() { is(pid1, pid2, "The PID should not have changed"); is(false, await getInLAProc(aBrowser)); - - stopExpectNoProcess(); }); }