Bug 1272317 - fix URL bar state when switching to a non-remote browser, r=mconley

MozReview-Commit-ID: 4dmgz6iHfdK

--HG--
extra : rebase_source : aa2df82eaa5e15aa75a5a4e4bbfdd04879c37d94
This commit is contained in:
Gijs Kruitbosch 2016-05-16 22:36:35 +01:00
parent 3cc8335b3a
commit 307e6f9842
4 changed files with 99 additions and 2 deletions

View File

@ -820,7 +820,7 @@ var SessionStoreInternal = {
// If a load not initiated by sessionstore was started in a
// previously pending tab. Mark the tab as no longer pending.
this.markTabAsRestoring(tab);
} else {
} else if (!data.isRemotenessUpdate) {
// If the user was typing into the URL bar when we crashed, but hadn't hit
// enter yet, then we just need to write that value to the URL bar without
// loading anything. This must happen after the load, as the load will clear

View File

@ -189,7 +189,7 @@ var MessageListener = {
sendAsyncMessage("SessionStore:restoreTabContentComplete", {epoch, isRemotenessUpdate});
});
sendAsyncMessage("SessionStore:restoreTabContentStarted", {epoch, didStartLoad});
sendAsyncMessage("SessionStore:restoreTabContentStarted", {epoch, isRemotenessUpdate});
if (!didStartLoad) {
// Pretend that the load succeeded so that event handlers fire correctly.

View File

@ -223,5 +223,7 @@ run-if = e10s
[browser_async_window_flushing.js]
[browser_forget_async_closings.js]
[browser_newtab_userTypedValue.js]
[browser_parentProcessRestoreHash.js]
run-if = e10s
[browser_sessionStoreContainer.js]
[browser_1234021.js]

View File

@ -0,0 +1,95 @@
"use strict";
const SELFCHROMEURL =
"chrome://mochitests/content/browser/browser/" +
"components/sessionstore/test/browser_parentProcessRestoreHash.js";
const Cm = Components.manager;
const TESTCLASSID = "78742c04-3630-448c-9be3-6c5070f062de";
const TESTURL = "about:testpageforsessionrestore#foo";
let TestAboutPage = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
getURIFlags: function(aURI) {
// No CAN_ or MUST_LOAD_IN_CHILD means this loads in the parent:
return Ci.nsIAboutModule.ALLOW_SCRIPT |
Ci.nsIAboutModule.URI_SAFE_FOR_UNTRUSTED_CONTENT |
Ci.nsIAboutModule.HIDE_FROM_ABOUTABOUT;
},
newChannel: function(aURI, aLoadInfo) {
// about: page inception!
let newURI = Services.io.newURI(SELFCHROMEURL, null, null);
let channel = Services.io.newChannelFromURIWithLoadInfo(newURI,
aLoadInfo);
channel.originalURI = aURI;
return channel;
},
createInstance: function(outer, iid) {
if (outer != null) {
throw Cr.NS_ERROR_NO_AGGREGATION;
}
return this.QueryInterface(iid);
},
register: function() {
Cm.QueryInterface(Ci.nsIComponentRegistrar).registerFactory(
Components.ID(TESTCLASSID), "Only here for a test",
"@mozilla.org/network/protocol/about;1?what=testpageforsessionrestore", this);
},
unregister: function() {
Cm.QueryInterface(Ci.nsIComponentRegistrar).unregisterFactory(
Components.ID(TESTCLASSID), this);
}
};
/**
* Test that switching from a remote to a parent process browser
* correctly clears the userTypedValue
*/
add_task(function* () {
TestAboutPage.register();
let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, "http://example.com/", true, true);
ok(tab.linkedBrowser.isRemoteBrowser, "Browser should be remote");
let resolveLocationChangePromise;
let locationChangePromise = new Promise(r => resolveLocationChangePromise = r);
let wpl = {
onStateChange(wpl, request, state, status) {
let location = request.QueryInterface(Ci.nsIChannel).originalURI;
// Ignore about:blank loads.
let docStop = Ci.nsIWebProgressListener.STATE_STOP |
Ci.nsIWebProgressListener.STATE_IS_NETWORK;
if (location.spec == "about:blank" || (state & docStop == docStop)) {
return;
}
is(location.spec, TESTURL, "Got the expected URL");
resolveLocationChangePromise();
},
};
gBrowser.addProgressListener(wpl);
gURLBar.value = TESTURL;
gURLBar.select();
EventUtils.sendKey("return");
yield locationChangePromise;
ok(!tab.linkedBrowser.isRemoteBrowser, "Browser should no longer be remote");
is(gURLBar.textValue, TESTURL, "URL bar visible value should be correct.");
is(gURLBar.value, TESTURL, "URL bar value should be correct.");
is(gURLBar.getAttribute("pageproxystate"), "valid", "URL bar is in valid page proxy state");
ok(!tab.linkedBrowser.userTypedValue, "No userTypedValue should be on the browser.");
yield BrowserTestUtils.removeTab(tab);
gBrowser.removeProgressListener(wpl);
TestAboutPage.unregister();
});