diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /browser/base/content/test/general/browser_e10s_chrome_process.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'browser/base/content/test/general/browser_e10s_chrome_process.js')
-rw-r--r-- | browser/base/content/test/general/browser_e10s_chrome_process.js | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_e10s_chrome_process.js b/browser/base/content/test/general/browser_e10s_chrome_process.js new file mode 100644 index 000000000..0726447ce --- /dev/null +++ b/browser/base/content/test/general/browser_e10s_chrome_process.js @@ -0,0 +1,150 @@ +// Returns a function suitable for add_task which loads startURL, runs +// transitionTask and waits for endURL to load, checking that the URLs were +// loaded in the correct process. +function makeTest(name, startURL, startProcessIsRemote, endURL, endProcessIsRemote, transitionTask) { + return function*() { + info("Running test " + name + ", " + transitionTask.name); + let browser = gBrowser.selectedBrowser; + + // In non-e10s nothing should be remote + if (!gMultiProcessBrowser) { + startProcessIsRemote = false; + endProcessIsRemote = false; + } + + // Load the initial URL and make sure we are in the right initial process + info("Loading initial URL"); + browser.loadURI(startURL); + yield waitForDocLoadComplete(); + + is(browser.currentURI.spec, startURL, "Shouldn't have been redirected"); + is(browser.isRemoteBrowser, startProcessIsRemote, "Should be displayed in the right process"); + + let docLoadedPromise = waitForDocLoadComplete(); + let asyncTask = Task.async(transitionTask); + let expectSyncChange = yield asyncTask(browser, endURL); + if (expectSyncChange) { + is(browser.isRemoteBrowser, endProcessIsRemote, "Should have switched to the right process synchronously"); + } + yield docLoadedPromise; + + is(browser.currentURI.spec, endURL, "Should have made it to the final URL"); + is(browser.isRemoteBrowser, endProcessIsRemote, "Should be displayed in the right process"); + } +} + +const CHROME_PROCESS = Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT; +const CONTENT_PROCESS = Ci.nsIXULRuntime.PROCESS_TYPE_CONTENT; +const PATH = (getRootDirectory(gTestPath) + "test_process_flags_chrome.html").replace("chrome://mochitests", ""); + +const CHROME = "chrome://mochitests" + PATH; +const CANREMOTE = "chrome://mochitests-any" + PATH; +const MUSTREMOTE = "chrome://mochitests-content" + PATH; + +add_task(function* init() { + gBrowser.selectedTab = gBrowser.addTab("about:blank"); +}); + +registerCleanupFunction(() => { + gBrowser.removeCurrentTab(); +}); + +function test_url(url, chromeResult, contentResult) { + is(E10SUtils.canLoadURIInProcess(url, CHROME_PROCESS), + chromeResult, "Check URL in chrome process."); + is(E10SUtils.canLoadURIInProcess(url, CONTENT_PROCESS), + contentResult, "Check URL in content process."); + + is(E10SUtils.canLoadURIInProcess(url + "#foo", CHROME_PROCESS), + chromeResult, "Check URL with ref in chrome process."); + is(E10SUtils.canLoadURIInProcess(url + "#foo", CONTENT_PROCESS), + contentResult, "Check URL with ref in content process."); + + is(E10SUtils.canLoadURIInProcess(url + "?foo", CHROME_PROCESS), + chromeResult, "Check URL with query in chrome process."); + is(E10SUtils.canLoadURIInProcess(url + "?foo", CONTENT_PROCESS), + contentResult, "Check URL with query in content process."); + + is(E10SUtils.canLoadURIInProcess(url + "?foo#bar", CHROME_PROCESS), + chromeResult, "Check URL with query and ref in chrome process."); + is(E10SUtils.canLoadURIInProcess(url + "?foo#bar", CONTENT_PROCESS), + contentResult, "Check URL with query and ref in content process."); +} + +add_task(function* test_chrome() { + test_url(CHROME, true, false); +}); + +add_task(function* test_any() { + test_url(CANREMOTE, true, true); +}); + +add_task(function* test_remote() { + test_url(MUSTREMOTE, false, true); +}); + +// The set of page transitions +var TESTS = [ + [ + "chrome -> chrome", + CHROME, false, + CHROME, false, + ], + [ + "chrome -> canremote", + CHROME, false, + CANREMOTE, false, + ], + [ + "chrome -> mustremote", + CHROME, false, + MUSTREMOTE, true, + ], + [ + "remote -> chrome", + MUSTREMOTE, true, + CHROME, false, + ], + [ + "remote -> canremote", + MUSTREMOTE, true, + CANREMOTE, true, + ], + [ + "remote -> mustremote", + MUSTREMOTE, true, + MUSTREMOTE, true, + ], +]; + +// The different ways to transition from one page to another +var TRANSITIONS = [ +// Loads the new page by calling browser.loadURI directly +function* loadURI(browser, uri) { + info("Calling browser.loadURI"); + yield BrowserTestUtils.loadURI(browser, uri); + return true; +}, + +// Loads the new page by finding a link with the right href in the document and +// clicking it +function* clickLink(browser, uri) { + info("Clicking link"); + + function frame_script(frameUri) { + let link = content.document.querySelector("a[href='" + frameUri + "']"); + link.click(); + } + + browser.messageManager.loadFrameScript("data:,(" + frame_script.toString() + ")(" + JSON.stringify(uri) + ");", false); + + return false; +}, +]; + +// Creates a set of test tasks, one for each combination of TESTS and TRANSITIONS. +for (let test of TESTS) { + for (let transition of TRANSITIONS) { + add_task(makeTest(...test, transition)); + } +} |