Bug 1326779 - [e10s] Fire beforeunload event when navigating to a page in different process. r=smaug
This commit is contained in:
@@ -10467,25 +10467,6 @@ nsDocShell::InternalLoad(nsIURI* aURI,
|
||||
}
|
||||
}
|
||||
|
||||
// Check if the webbrowser chrome wants the load to proceed; this can be
|
||||
// used to cancel attempts to load URIs in the wrong process.
|
||||
nsCOMPtr<nsIWebBrowserChrome3> browserChrome3 = do_GetInterface(mTreeOwner);
|
||||
if (browserChrome3) {
|
||||
// In case this is a remote newtab load, set aURI to aOriginalURI (newtab).
|
||||
// This ensures that the verifySignedContent flag is set on loadInfo in
|
||||
// DoURILoad.
|
||||
nsIURI* uriForShouldLoadCheck = aURI;
|
||||
if (IsAboutNewtab(aOriginalURI)) {
|
||||
uriForShouldLoadCheck = aOriginalURI;
|
||||
}
|
||||
bool shouldLoad;
|
||||
rv = browserChrome3->ShouldLoadURI(this, uriForShouldLoadCheck, aReferrer,
|
||||
&shouldLoad);
|
||||
if (NS_SUCCEEDED(rv) && !shouldLoad) {
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
// mContentViewer->PermitUnload can destroy |this| docShell, which
|
||||
// causes the next call of CanSavePresentation to crash.
|
||||
// Hold onto |this| until we return, to prevent a crash from happening.
|
||||
@@ -10524,6 +10505,25 @@ nsDocShell::InternalLoad(nsIURI* aURI,
|
||||
mTiming->NotifyUnloadAccepted(mCurrentURI);
|
||||
}
|
||||
|
||||
// Check if the webbrowser chrome wants the load to proceed; this can be
|
||||
// used to cancel attempts to load URIs in the wrong process.
|
||||
nsCOMPtr<nsIWebBrowserChrome3> browserChrome3 = do_GetInterface(mTreeOwner);
|
||||
if (browserChrome3) {
|
||||
// In case this is a remote newtab load, set aURI to aOriginalURI (newtab).
|
||||
// This ensures that the verifySignedContent flag is set on loadInfo in
|
||||
// DoURILoad.
|
||||
nsIURI* uriForShouldLoadCheck = aURI;
|
||||
if (IsAboutNewtab(aOriginalURI)) {
|
||||
uriForShouldLoadCheck = aOriginalURI;
|
||||
}
|
||||
bool shouldLoad;
|
||||
rv = browserChrome3->ShouldLoadURI(this, uriForShouldLoadCheck, aReferrer,
|
||||
&shouldLoad);
|
||||
if (NS_SUCCEEDED(rv) && !shouldLoad) {
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
if (browserChrome3 && aCheckForPrerender) {
|
||||
nsCOMPtr<nsIRunnable> ev =
|
||||
new InternalLoadEvent(this, aURI, aOriginalURI, aLoadReplace,
|
||||
|
||||
Reference in New Issue
Block a user