Bug 1556548 - Make RenderFrame an internal detail to BrowserParent. r=mattwoodrow,farre
Code outside of BrowserParent should just get the LayersId from a getter and not worry about RenderFrame. Differential Revision: https://phabricator.services.mozilla.com/D33562
This commit is contained in:
@@ -89,7 +89,6 @@
|
||||
#include "mozilla/dom/SessionStoreListener.h"
|
||||
#include "mozilla/gfx/CrossProcessPaint.h"
|
||||
#include "mozilla/jsipc/CrossProcessObjectWrappers.h"
|
||||
#include "mozilla/layout/RenderFrame.h"
|
||||
#include "mozilla/ServoCSSParser.h"
|
||||
#include "mozilla/ServoStyleSet.h"
|
||||
#include "nsGenericHTMLFrameElement.h"
|
||||
@@ -2713,7 +2712,7 @@ bool nsFrameLoader::TryRemoteBrowserInternal() {
|
||||
// The remoteType can be queried by asking the message manager instead.
|
||||
ownerElement->UnsetAttr(kNameSpaceID_None, nsGkAtoms::RemoteType, false);
|
||||
|
||||
// Now that browserParent is set, we can initialize the RenderFrame
|
||||
// Now that browserParent is set, we can initialize graphics
|
||||
browserParent->InitRendering();
|
||||
|
||||
MaybeUpdatePrimaryBrowserParent(eBrowserParentChanged);
|
||||
@@ -2813,13 +2812,7 @@ BrowserBridgeChild* nsFrameLoader::GetBrowserBridgeChild() const {
|
||||
|
||||
mozilla::layers::LayersId nsFrameLoader::GetLayersId() const {
|
||||
MOZ_ASSERT(mIsRemoteFrame);
|
||||
if (auto* browserParent = GetBrowserParent()) {
|
||||
return browserParent->GetRenderFrame()->GetLayersId();
|
||||
}
|
||||
if (auto* browserBridgeChild = GetBrowserBridgeChild()) {
|
||||
return browserBridgeChild->GetLayersId();
|
||||
}
|
||||
return mozilla::layers::LayersId{};
|
||||
return mRemoteBrowser->GetLayersId();
|
||||
}
|
||||
|
||||
void nsFrameLoader::ActivateRemoteFrame(ErrorResult& aRv) {
|
||||
|
||||
@@ -74,10 +74,6 @@ class StructuredCloneData;
|
||||
namespace ipc {
|
||||
class MessageChannel;
|
||||
} // namespace ipc
|
||||
|
||||
namespace layout {
|
||||
class RenderFrame;
|
||||
} // namespace layout
|
||||
} // namespace mozilla
|
||||
|
||||
#if defined(MOZ_WIDGET_GTK)
|
||||
@@ -101,7 +97,6 @@ class nsFrameLoader final : public nsStubMutationObserver,
|
||||
typedef mozilla::dom::BrowserParent BrowserParent;
|
||||
typedef mozilla::dom::BrowserBridgeChild BrowserBridgeChild;
|
||||
typedef mozilla::dom::BrowsingContext BrowsingContext;
|
||||
typedef mozilla::layout::RenderFrame RenderFrame;
|
||||
|
||||
public:
|
||||
// Called by Frame Elements to create a new FrameLoader.
|
||||
|
||||
@@ -14,12 +14,7 @@ class nsPIDOMWindowOuter;
|
||||
class nsIControllers;
|
||||
class nsIController;
|
||||
class nsINode;
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
class BrowserParent;
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
class nsIRemoteTab;
|
||||
|
||||
#define NS_IWINDOWROOT_IID \
|
||||
{ \
|
||||
|
||||
@@ -98,14 +98,8 @@ nsresult BrowserBridgeParent::Init(const nsString& aPresentationURL,
|
||||
mBrowserParent->SetOwnerElement(Manager()->GetOwnerElement());
|
||||
mBrowserParent->InitRendering();
|
||||
|
||||
RenderFrame* rf = mBrowserParent->GetRenderFrame();
|
||||
if (NS_WARN_IF(!rf)) {
|
||||
MOZ_ASSERT(false, "No RenderFrame");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
// Send the newly created layers ID back into content.
|
||||
Unused << SendSetLayersId(rf->GetLayersId());
|
||||
Unused << SendSetLayersId(mBrowserParent->GetLayersId());
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@@ -128,11 +122,9 @@ void BrowserBridgeParent::Destroy() {
|
||||
IPCResult BrowserBridgeParent::RecvShow(const ScreenIntSize& aSize,
|
||||
const bool& aParentIsActive,
|
||||
const nsSizeMode& aSizeMode) {
|
||||
RenderFrame* rf = mBrowserParent->GetRenderFrame();
|
||||
if (!rf->AttachLayerManager()) {
|
||||
if (!mBrowserParent->AttachLayerManager()) {
|
||||
MOZ_CRASH();
|
||||
}
|
||||
|
||||
Unused << mBrowserParent->SendShow(aSize, mBrowserParent->GetShowInfo(),
|
||||
aParentIsActive, aSizeMode);
|
||||
return IPC_OK();
|
||||
|
||||
@@ -36,7 +36,7 @@ BrowserHost* BrowserHost::GetFrom(nsIRemoteTab* aRemoteTab) {
|
||||
}
|
||||
|
||||
mozilla::layers::LayersId BrowserHost::GetLayersId() const {
|
||||
return mRoot->GetRenderFrame()->GetLayersId();
|
||||
return mRoot->GetLayersId();
|
||||
}
|
||||
|
||||
BrowsingContext* BrowserHost::GetBrowsingContext() const {
|
||||
|
||||
@@ -425,11 +425,11 @@ a11y::DocAccessibleParent* BrowserParent::GetTopLevelDocAccessible() const {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RenderFrame* BrowserParent::GetRenderFrame() {
|
||||
LayersId BrowserParent::GetLayersId() const {
|
||||
if (!mRenderFrame.IsInitialized()) {
|
||||
return nullptr;
|
||||
return LayersId{};
|
||||
}
|
||||
return &mRenderFrame;
|
||||
return mRenderFrame.GetLayersId();
|
||||
}
|
||||
|
||||
BrowserBridgeParent* BrowserParent::GetBrowserBridgeParent() const {
|
||||
@@ -860,6 +860,10 @@ void BrowserParent::InitRendering() {
|
||||
mRenderFrame.IsLayersConnected());
|
||||
}
|
||||
|
||||
bool BrowserParent::AttachLayerManager() {
|
||||
return !!mRenderFrame.AttachLayerManager();
|
||||
}
|
||||
|
||||
void BrowserParent::MaybeShowFrame() {
|
||||
RefPtr<nsFrameLoader> frameLoader = GetFrameLoader();
|
||||
if (!frameLoader) {
|
||||
|
||||
@@ -171,7 +171,7 @@ class BrowserParent final : public PBrowserParent,
|
||||
*/
|
||||
a11y::DocAccessibleParent* GetTopLevelDocAccessible() const;
|
||||
|
||||
layout::RenderFrame* GetRenderFrame();
|
||||
LayersId GetLayersId() const;
|
||||
|
||||
// Returns the BrowserBridgeParent if this BrowserParent is for an
|
||||
// out-of-process iframe and nullptr otherwise.
|
||||
@@ -480,6 +480,7 @@ class BrowserParent final : public PBrowserParent,
|
||||
void ResumeLoad(uint64_t aPendingSwitchID);
|
||||
|
||||
void InitRendering();
|
||||
bool AttachLayerManager();
|
||||
void MaybeShowFrame();
|
||||
|
||||
bool Show(const ScreenIntSize& aSize, bool aParentIsActive);
|
||||
|
||||
26
dom/ipc/RemoteBrowser.cpp
Normal file
26
dom/ipc/RemoteBrowser.cpp
Normal file
@@ -0,0 +1,26 @@
|
||||
#include "RemoteBrowser.h"
|
||||
|
||||
#include "nsFrameLoader.h"
|
||||
#include "nsFrameLoaderOwner.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
RemoteBrowser* RemoteBrowser::GetFrom(nsFrameLoader* aFrameLoader) {
|
||||
if (!aFrameLoader) {
|
||||
return nullptr;
|
||||
}
|
||||
return aFrameLoader->GetRemoteBrowser();
|
||||
}
|
||||
|
||||
RemoteBrowser* RemoteBrowser::GetFrom(nsIContent* aContent) {
|
||||
RefPtr<nsFrameLoaderOwner> loaderOwner = do_QueryObject(aContent);
|
||||
if (!loaderOwner) {
|
||||
return nullptr;
|
||||
}
|
||||
RefPtr<nsFrameLoader> frameLoader = loaderOwner->GetFrameLoader();
|
||||
return GetFrom(frameLoader);
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
@@ -39,6 +39,9 @@ class RemoteBrowser : public nsISupports {
|
||||
public:
|
||||
typedef mozilla::layers::LayersId LayersId;
|
||||
|
||||
static RemoteBrowser* GetFrom(nsFrameLoader* aFrameLoader);
|
||||
static RemoteBrowser* GetFrom(nsIContent* aContent);
|
||||
|
||||
// Try to cast this RemoteBrowser to a BrowserHost, may return null
|
||||
virtual BrowserHost* AsBrowserHost() = 0;
|
||||
// Try to cast this RemoteBrowser to a BrowserBridgeHost, may return null
|
||||
|
||||
@@ -105,6 +105,7 @@ UNIFIED_SOURCES += [
|
||||
'PreallocatedProcessManager.cpp',
|
||||
'ProcessPriorityManager.cpp',
|
||||
'ReferrerInfoUtils.cpp',
|
||||
'RemoteBrowser.cpp',
|
||||
'RemoteWebProgress.cpp',
|
||||
'RemoteWebProgressRequest.cpp',
|
||||
'SharedMap.cpp',
|
||||
|
||||
@@ -8,9 +8,8 @@
|
||||
|
||||
#include "mozilla/dom/BrowserBridgeChild.h" // for BrowserBridgeChild
|
||||
#include "mozilla/dom/EventTarget.h" // for EventTarget
|
||||
#include "mozilla/dom/BrowserParent.h" // for BrowserParent
|
||||
#include "mozilla/dom/RemoteBrowser.h" // For RemoteBrowser
|
||||
#include "mozilla/EventDispatcher.h" // for EventDispatcher
|
||||
#include "mozilla/layout/RenderFrame.h" // For RenderFrame
|
||||
#include "mozilla/PresShell.h" // For PresShell
|
||||
#include "nsIContentInlines.h" // for nsINode::IsEditable()
|
||||
#include "nsLayoutUtils.h" // for nsLayoutUtils
|
||||
@@ -157,17 +156,16 @@ FocusTarget::FocusTarget(PresShell* aRootPresShell,
|
||||
}
|
||||
|
||||
// Check if the key event target is a remote browser
|
||||
if (BrowserParent* browserParent = BrowserParent::GetFrom(keyEventTarget)) {
|
||||
RenderFrame* rf = browserParent->GetRenderFrame();
|
||||
if (RemoteBrowser* remoteBrowser = RemoteBrowser::GetFrom(keyEventTarget)) {
|
||||
LayersId layersId = remoteBrowser->GetLayersId();
|
||||
|
||||
// The globally focused element for scrolling is in a remote layer tree
|
||||
if (rf) {
|
||||
if (layersId.IsValid()) {
|
||||
FT_LOG("Creating reflayer target with seq=%" PRIu64 ", kl=%d, lt=%" PRIu64
|
||||
"\n",
|
||||
aFocusSequenceNumber, mFocusHasKeyEventListeners,
|
||||
rf->GetLayersId());
|
||||
aFocusSequenceNumber, mFocusHasKeyEventListeners, layersId);
|
||||
|
||||
mData = AsVariant<LayersId>(rf->GetLayersId());
|
||||
mData = AsVariant<LayersId>(std::move(layersId));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -178,17 +176,6 @@ FocusTarget::FocusTarget(PresShell* aRootPresShell,
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if the key event target is a remote browser
|
||||
if (BrowserBridgeChild* bbc = BrowserBridgeChild::GetFrom(keyEventTarget)) {
|
||||
FT_LOG("Creating oopif reflayer target with seq=%" PRIu64
|
||||
", kl=%d, lt=%" PRIu64 "\n",
|
||||
aFocusSequenceNumber, mFocusHasKeyEventListeners,
|
||||
bbc->GetLayersId());
|
||||
|
||||
mData = AsVariant<LayersId>(bbc->GetLayersId());
|
||||
return;
|
||||
}
|
||||
|
||||
// The content to scroll is either the focused element or the focus node of
|
||||
// the selection. It's difficult to determine if an element is an interactive
|
||||
// element requiring async keyboard scrolling to be disabled. So we only
|
||||
|
||||
@@ -47,7 +47,6 @@
|
||||
|
||||
using namespace mozilla;
|
||||
using mozilla::dom::Document;
|
||||
using mozilla::layout::RenderFrame;
|
||||
|
||||
static bool sShowPreviousPage = true;
|
||||
|
||||
|
||||
@@ -15,9 +15,6 @@
|
||||
|
||||
namespace mozilla {
|
||||
class PresShell;
|
||||
namespace layout {
|
||||
class RenderFrame;
|
||||
}
|
||||
} // namespace mozilla
|
||||
|
||||
/******************************************************************************
|
||||
|
||||
Reference in New Issue
Block a user