diff --git a/dom/base/nsFrameLoader.cpp b/dom/base/nsFrameLoader.cpp index f1b429fdb886..3f5c242b1c8c 100644 --- a/dom/base/nsFrameLoader.cpp +++ b/dom/base/nsFrameLoader.cpp @@ -175,6 +175,7 @@ nsFrameLoader::nsFrameLoader(Element* aOwner, BrowsingContext* aBrowsingContext, mDetachedSubdocFrame(nullptr), mPendingSwitchID(0), mChildID(0), + mRemoteType(VoidString()), mDepthTooGreat(false), mIsTopLevelContent(false), mDestroyCalled(false), @@ -191,6 +192,11 @@ nsFrameLoader::nsFrameLoader(Element* aOwner, BrowsingContext* aBrowsingContext, mIsRemoteFrame = ShouldUseRemoteProcess(); MOZ_ASSERT(!mIsRemoteFrame || !mBrowsingContext->HasOpener(), "Cannot pass aOpener for a remote frame!"); + + if (mIsRemoteFrame && + !aOwner->GetAttr(kNameSpaceID_None, nsGkAtoms::RemoteType, mRemoteType)) { + mRemoteType.AssignLiteral(DEFAULT_REMOTE_TYPE); + } } nsFrameLoader::nsFrameLoader(Element* aOwner, BrowsingContext* aBrowsingContext, @@ -200,6 +206,7 @@ nsFrameLoader::nsFrameLoader(Element* aOwner, BrowsingContext* aBrowsingContext, mDetachedSubdocFrame(nullptr), mPendingSwitchID(0), mChildID(0), + mRemoteType(VoidString()), mDepthTooGreat(false), mIsTopLevelContent(false), mDestroyCalled(false), @@ -216,6 +223,7 @@ nsFrameLoader::nsFrameLoader(Element* aOwner, BrowsingContext* aBrowsingContext, if (aOptions.mRemoteType.WasPassed() && (!aOptions.mRemoteType.Value().IsVoid())) { mIsRemoteFrame = true; + mRemoteType = aOptions.mRemoteType.Value(); } } @@ -2661,14 +2669,13 @@ bool nsFrameLoader::TryRemoteBrowserInternal() { if (XRE_IsContentProcess()) { mBrowsingContext->SetEmbedderElement(mOwnerContent); - mRemoteBrowser = ContentChild::CreateBrowser( - this, context, NS_LITERAL_STRING(DEFAULT_REMOTE_TYPE), - mBrowsingContext); + mRemoteBrowser = ContentChild::CreateBrowser(this, context, mRemoteType, + mBrowsingContext); return !!mRemoteBrowser; } mRemoteBrowser = ContentParent::CreateBrowser( - context, ownerElement, mBrowsingContext, openerContentParent, + context, ownerElement, mRemoteType, mBrowsingContext, openerContentParent, sameTabGroupAs, nextRemoteTabId); if (!mRemoteBrowser) { return false; diff --git a/dom/base/nsFrameLoader.h b/dom/base/nsFrameLoader.h index c10654ef5bbe..74c970a48744 100644 --- a/dom/base/nsFrameLoader.h +++ b/dom/base/nsFrameLoader.h @@ -512,6 +512,8 @@ class nsFrameLoader final : public nsStubMutationObserver, RefPtr mSessionStoreListener; + nsString mRemoteType; + bool mDepthTooGreat : 1; bool mIsTopLevelContent : 1; bool mDestroyCalled : 1; diff --git a/dom/ipc/ContentParent.cpp b/dom/ipc/ContentParent.cpp index 3a4fc7308e87..f84dbcc97056 100644 --- a/dom/ipc/ContentParent.cpp +++ b/dom/ipc/ContentParent.cpp @@ -1097,17 +1097,17 @@ mozilla::ipc::IPCResult ContentParent::RecvLaunchRDDProcess( /*static*/ already_AddRefed ContentParent::CreateBrowser( const TabContext& aContext, Element* aFrameElement, - BrowsingContext* aBrowsingContext, ContentParent* aOpenerContentParent, - BrowserParent* aSameTabGroupAs, uint64_t aNextRemoteTabId) { + const nsAString& aRemoteType, BrowsingContext* aBrowsingContext, + ContentParent* aOpenerContentParent, BrowserParent* aSameTabGroupAs, + uint64_t aNextRemoteTabId) { AUTO_PROFILER_LABEL("ContentParent::CreateBrowser", OTHER); if (!sCanLaunchSubprocesses) { return nullptr; } - nsAutoString remoteType; - if (!aFrameElement->GetAttr(kNameSpaceID_None, nsGkAtoms::RemoteType, - remoteType)) { + nsAutoString remoteType(aRemoteType); + if (remoteType.IsEmpty()) { remoteType.AssignLiteral(DEFAULT_REMOTE_TYPE); } diff --git a/dom/ipc/ContentParent.h b/dom/ipc/ContentParent.h index 4492fef5efb7..5974a90412f4 100644 --- a/dom/ipc/ContentParent.h +++ b/dom/ipc/ContentParent.h @@ -212,8 +212,9 @@ class ContentParent final : public PContentParent, */ static already_AddRefed CreateBrowser( const TabContext& aContext, Element* aFrameElement, - BrowsingContext* aBrowsingContext, ContentParent* aOpenerContentParent, - BrowserParent* aSameTabGroupAs, uint64_t aNextRemoteTabId); + const nsAString& aRemoteType, BrowsingContext* aBrowsingContext, + ContentParent* aOpenerContentParent, BrowserParent* aSameTabGroupAs, + uint64_t aNextRemoteTabId); static void GetAll(nsTArray& aArray);