Bug 1453519 - Avoid process reselection inside RDM. r=ochameau

Use `E10SUtils` to check for cases where browser code would try to force a
browser to reselect a new process (such as when it is a preloaded browser) so
that we can avoid any process changes once RDM is open.

If such a case applies, navigate to about:blank first to trigger the process
change before starting RDM.

MozReview-Commit-ID: CxspLFXXotF

--HG--
extra : rebase_source : cb94789344f17c0b51ff4afbb54921218a2dd1b5
This commit is contained in:
J. Ryan Stinnett 2018-04-13 11:57:44 -05:00
Родитель 93123c55d1
Коммит f783eddfec
1 изменённых файлов: 24 добавлений и 0 удалений

Просмотреть файл

@ -5,6 +5,7 @@
"use strict";
const { Ci } = require("chrome");
const { E10SUtils } = require("resource://gre/modules/E10SUtils.jsm");
const { tunnelToInnerBrowser } = require("./tunnel");
function debug(msg) {
@ -89,9 +90,32 @@ function swapToInnerBrowser({ tab, containerURL, getInnerBrowser }) {
}
};
// Wait for a browser to load into a new frame loader.
function loadURIWithNewFrameLoader(browser, uri, options) {
return new Promise(resolve => {
gBrowser.addEventListener("XULFrameLoaderCreated", resolve, { once: true });
browser.loadURI(uri, options);
});
}
return {
async start() {
// In some cases, such as a preloaded browser used for about:newtab, browser code
// will force a new frameloader on next navigation to ensure balanced process
// assignment. If this case will happen here, navigate to about:blank first to get
// this out of way so that we stay within one process while RDM is open.
let { newFrameloader } = E10SUtils.shouldLoadURIInBrowser(
tab.linkedBrowser,
"about:blank"
);
if (newFrameloader) {
debug(`Tab will force a new frameloader on navigation, load about:blank first`);
await loadURIWithNewFrameLoader(tab.linkedBrowser, "about:blank", {
flags: Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_HISTORY,
});
}
tab.isResponsiveDesignMode = true;
// Hide the browser content temporarily while things move around to avoid displaying