mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1047603 - Make TabParent::AnswerCreateWindow force the initial browser to be remote in a new window. r=smaug.
--HG-- extra : rebase_source : 87551351dc763be7f5a8a47d02de21eb3f10c745
This commit is contained in:
parent
1b41aa507d
commit
69a8aed6f6
@ -940,8 +940,6 @@ var gBrowserInit = {
|
|||||||
Cc["@mozilla.org/eventlistenerservice;1"]
|
Cc["@mozilla.org/eventlistenerservice;1"]
|
||||||
.getService(Ci.nsIEventListenerService)
|
.getService(Ci.nsIEventListenerService)
|
||||||
.addSystemEventListener(gBrowser, "click", contentAreaClick, true);
|
.addSystemEventListener(gBrowser, "click", contentAreaClick, true);
|
||||||
} else {
|
|
||||||
gBrowser.updateBrowserRemoteness(gBrowser.selectedBrowser, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// hook up UI through progress listener
|
// hook up UI through progress listener
|
||||||
@ -4098,6 +4096,13 @@ var XULBrowserWindow = {
|
|||||||
// unsupported
|
// unsupported
|
||||||
},
|
},
|
||||||
|
|
||||||
|
forceInitialBrowserRemote: function() {
|
||||||
|
let initBrowser =
|
||||||
|
document.getAnonymousElementByAttribute(gBrowser, "anonid", "initialBrowser");
|
||||||
|
gBrowser.updateBrowserRemoteness(initBrowser, true);
|
||||||
|
return initBrowser.frameLoader.tabParent;
|
||||||
|
},
|
||||||
|
|
||||||
setDefaultStatus: function (status) {
|
setDefaultStatus: function (status) {
|
||||||
this.defaultStatus = status;
|
this.defaultStatus = status;
|
||||||
this.updateStatusField();
|
this.updateStatusField();
|
||||||
|
@ -13754,19 +13754,6 @@ nsDocShell::GetOpener()
|
|||||||
return opener;
|
return opener;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
nsDocShell::SetOpenedRemote(nsITabParent* aOpenedRemote)
|
|
||||||
{
|
|
||||||
mOpenedRemote = do_GetWeakReference(aOpenedRemote);
|
|
||||||
}
|
|
||||||
|
|
||||||
nsITabParent*
|
|
||||||
nsDocShell::GetOpenedRemote()
|
|
||||||
{
|
|
||||||
nsCOMPtr<nsITabParent> openedRemote(do_QueryReferent(mOpenedRemote));
|
|
||||||
return openedRemote;
|
|
||||||
}
|
|
||||||
|
|
||||||
URLSearchParams*
|
URLSearchParams*
|
||||||
nsDocShell::GetURLSearchParams()
|
nsDocShell::GetURLSearchParams()
|
||||||
{
|
{
|
||||||
|
@ -963,7 +963,6 @@ private:
|
|||||||
nsTObserverArray<nsWeakPtr> mScrollObservers;
|
nsTObserverArray<nsWeakPtr> mScrollObservers;
|
||||||
nsCString mOriginalUriString;
|
nsCString mOriginalUriString;
|
||||||
nsWeakPtr mOpener;
|
nsWeakPtr mOpener;
|
||||||
nsWeakPtr mOpenedRemote;
|
|
||||||
|
|
||||||
// A depth count of how many times NotifyRunToCompletionStart
|
// A depth count of how many times NotifyRunToCompletionStart
|
||||||
// has been called without a matching NotifyRunToCompletionStop.
|
// has been called without a matching NotifyRunToCompletionStop.
|
||||||
|
@ -54,7 +54,7 @@ interface nsITabParent;
|
|||||||
|
|
||||||
typedef unsigned long nsLoadFlags;
|
typedef unsigned long nsLoadFlags;
|
||||||
|
|
||||||
[scriptable, builtinclass, uuid(888fcf04-a69b-11e4-8d33-6fbb72d2eb03)]
|
[scriptable, builtinclass, uuid(f84b1ae4-2f78-4bad-b36a-6a8516ee6e40)]
|
||||||
interface nsIDocShell : nsIDocShellTreeItem
|
interface nsIDocShell : nsIDocShellTreeItem
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -1025,13 +1025,6 @@ interface nsIDocShell : nsIDocShellTreeItem
|
|||||||
[noscript,notxpcom,nostdcall] void setOpener(in nsITabParent aOpener);
|
[noscript,notxpcom,nostdcall] void setOpener(in nsITabParent aOpener);
|
||||||
[noscript,notxpcom,nostdcall] nsITabParent getOpener();
|
[noscript,notxpcom,nostdcall] nsITabParent getOpener();
|
||||||
|
|
||||||
/**
|
|
||||||
* See the documentation for setOpener and getOpener about why we
|
|
||||||
* don't use attribute here instead.
|
|
||||||
*/
|
|
||||||
[noscript,notxpcom,nostdcall] void setOpenedRemote(in nsITabParent aOpenedRemote);
|
|
||||||
[noscript,notxpcom,nostdcall] nsITabParent getOpenedRemote();
|
|
||||||
|
|
||||||
// URLSearchParams for the window.location is owned by the docShell.
|
// URLSearchParams for the window.location is owned by the docShell.
|
||||||
[noscript,notxpcom] URLSearchParams getURLSearchParams();
|
[noscript,notxpcom] URLSearchParams getURLSearchParams();
|
||||||
|
|
||||||
|
@ -2205,7 +2205,6 @@ nsFrameLoader::TryRemoteBrowser()
|
|||||||
eCaseMatters)) {
|
eCaseMatters)) {
|
||||||
unused << mRemoteBrowser->SendSetUpdateHitRegion(true);
|
unused << mRemoteBrowser->SendSetUpdateHitRegion(true);
|
||||||
}
|
}
|
||||||
parentDocShell->SetOpenedRemote(mRemoteBrowser);
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -647,11 +647,22 @@ TabParent::RecvCreateWindow(PBrowserParent* aNewTab,
|
|||||||
nsCOMPtr<nsPIDOMWindow> pwindow = do_QueryInterface(window);
|
nsCOMPtr<nsPIDOMWindow> pwindow = do_QueryInterface(window);
|
||||||
NS_ENSURE_TRUE(pwindow, false);
|
NS_ENSURE_TRUE(pwindow, false);
|
||||||
|
|
||||||
nsRefPtr<nsIDocShell> newDocShell = pwindow->GetDocShell();
|
nsCOMPtr<nsIDocShell> windowDocShell = pwindow->GetDocShell();
|
||||||
NS_ENSURE_TRUE(newDocShell, false);
|
NS_ENSURE_TRUE(windowDocShell, false);
|
||||||
|
|
||||||
nsCOMPtr<nsITabParent> newRemoteTab = newDocShell->GetOpenedRemote();
|
nsCOMPtr<nsIDocShellTreeOwner> treeOwner;
|
||||||
NS_ENSURE_TRUE(newRemoteTab, false);
|
windowDocShell->GetTreeOwner(getter_AddRefs(treeOwner));
|
||||||
|
|
||||||
|
nsCOMPtr<nsIXULWindow> xulWin = do_GetInterface(treeOwner);
|
||||||
|
NS_ENSURE_TRUE(xulWin, false);
|
||||||
|
|
||||||
|
nsCOMPtr<nsIXULBrowserWindow> xulBrowserWin;
|
||||||
|
xulWin->GetXULBrowserWindow(getter_AddRefs(xulBrowserWin));
|
||||||
|
NS_ENSURE_TRUE(xulBrowserWin, false);
|
||||||
|
|
||||||
|
nsCOMPtr<nsITabParent> newRemoteTab;
|
||||||
|
rv = xulBrowserWin->ForceInitialBrowserRemote(getter_AddRefs(newRemoteTab));
|
||||||
|
NS_ENSURE_SUCCESS(rv, false);
|
||||||
|
|
||||||
MOZ_ASSERT(TabParent::GetFrom(newRemoteTab) == newTab);
|
MOZ_ASSERT(TabParent::GetFrom(newRemoteTab) == newTab);
|
||||||
|
|
||||||
|
@ -12,13 +12,14 @@ interface nsIRequest;
|
|||||||
interface nsIDOMElement;
|
interface nsIDOMElement;
|
||||||
interface nsIInputStream;
|
interface nsIInputStream;
|
||||||
interface nsIDocShell;
|
interface nsIDocShell;
|
||||||
|
interface nsITabParent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The nsIXULBrowserWindow supplies the methods that may be called from the
|
* The nsIXULBrowserWindow supplies the methods that may be called from the
|
||||||
* internals of the browser area to tell the containing xul window to update
|
* internals of the browser area to tell the containing xul window to update
|
||||||
* its ui.
|
* its ui.
|
||||||
*/
|
*/
|
||||||
[scriptable, uuid(162d3378-a7d5-410c-8635-fe80e32020fc)]
|
[scriptable, uuid(db89f748-9736-40b2-a172-3928aa1194b2)]
|
||||||
interface nsIXULBrowserWindow : nsISupports
|
interface nsIXULBrowserWindow : nsISupports
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -40,6 +41,14 @@ interface nsIXULBrowserWindow : nsISupports
|
|||||||
in nsIDOMNode linkNode,
|
in nsIDOMNode linkNode,
|
||||||
in boolean isAppTab);
|
in boolean isAppTab);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the initial browser of the window and set its remote attribute.
|
||||||
|
* This can be used to ensure that there is a remote browser in a new
|
||||||
|
* window when it first spawns.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
nsITabParent forceInitialBrowserRemote();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines whether a load should continue.
|
* Determines whether a load should continue.
|
||||||
*
|
*
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "nsIInterfaceRequestor.h"
|
#include "nsIInterfaceRequestor.h"
|
||||||
#include "nsIInterfaceRequestorUtils.h"
|
#include "nsIInterfaceRequestorUtils.h"
|
||||||
#include "nsIIOService.h"
|
#include "nsIIOService.h"
|
||||||
|
#include "nsILoadContext.h"
|
||||||
#include "nsIObserverService.h"
|
#include "nsIObserverService.h"
|
||||||
#include "nsIWindowMediator.h"
|
#include "nsIWindowMediator.h"
|
||||||
#include "nsIScreenManager.h"
|
#include "nsIScreenManager.h"
|
||||||
@ -1798,19 +1799,10 @@ NS_IMETHODIMP nsXULWindow::CreateNewContentWindow(int32_t aChromeFlags,
|
|||||||
if (!NS_ProcessNextEvent(thread))
|
if (!NS_ProcessNextEvent(thread))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// If aOpeningTab is not null, it means that we're creating a new window
|
|
||||||
// with a remote browser, which doesn't have a primary docshell. In that
|
|
||||||
// case, we check for the chrome window docshell and make sure that a new
|
|
||||||
// remote tab was opened and stashed in that docshell.
|
|
||||||
if (aOpeningTab) {
|
|
||||||
NS_ENSURE_STATE(xulWin->mDocShell);
|
|
||||||
NS_ENSURE_STATE(xulWin->mDocShell->GetOpenedRemote());
|
|
||||||
} else {
|
|
||||||
NS_ENSURE_STATE(xulWin->mPrimaryContentShell);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_ENSURE_STATE(xulWin->mPrimaryContentShell);
|
||||||
|
|
||||||
*_retval = newWindow;
|
*_retval = newWindow;
|
||||||
NS_ADDREF(*_retval);
|
NS_ADDREF(*_retval);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user