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:
Ryan Hunt
2019-05-31 16:00:57 -05:00
parent d17e754362
commit 584ef813c5
13 changed files with 51 additions and 58 deletions

View File

@@ -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) {

View File

@@ -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.

View File

@@ -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 \
{ \

View File

@@ -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();

View File

@@ -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 {

View File

@@ -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) {

View File

@@ -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
View 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

View File

@@ -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

View File

@@ -105,6 +105,7 @@ UNIFIED_SOURCES += [
'PreallocatedProcessManager.cpp',
'ProcessPriorityManager.cpp',
'ReferrerInfoUtils.cpp',
'RemoteBrowser.cpp',
'RemoteWebProgress.cpp',
'RemoteWebProgressRequest.cpp',
'SharedMap.cpp',

View File

@@ -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

View File

@@ -47,7 +47,6 @@
using namespace mozilla;
using mozilla::dom::Document;
using mozilla::layout::RenderFrame;
static bool sShowPreviousPage = true;

View File

@@ -15,9 +15,6 @@
namespace mozilla {
class PresShell;
namespace layout {
class RenderFrame;
}
} // namespace mozilla
/******************************************************************************