зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
93123c55d1
Коммит
f783eddfec
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче