Bug 1331509 - Extract the InitRenderingState function in TabChild and invoke it earlier from TabParent. r?dvander
MozReview-Commit-ID: 5nwvKLRYpx7
--- a/dom/ipc/PBrowser.ipdl
+++ b/dom/ipc/PBrowser.ipdl
@@ -626,22 +626,23 @@ child:
* to trigger creation of the remote browser's "widget".
*
* |Show()| and |Move()| take IntSizes rather than Rects because
* content processes always render to a virtual <0, 0> top-left
* point.
*/
async Show(ScreenIntSize size,
ShowInfo info,
- TextureFactoryIdentifier textureFactoryIdentifier,
- uint64_t layersId,
- nullable PRenderFrame renderFrame,
bool parentIsActive,
nsSizeMode sizeMode);
+ async InitRendering(TextureFactoryIdentifier textureFactoryIdentifier,
+ uint64_t layersId,
+ nullable PRenderFrame renderFrame);
+
async LoadURL(nsCString uri, ShowInfo info);
async UpdateDimensions(CSSRect rect, CSSSize size,
ScreenOrientationInternal orientation,
LayoutDeviceIntPoint clientOffset,
LayoutDeviceIntPoint chromeDisp) compressall;
async SizeModeChanged(nsSizeMode sizeMode);
--- a/dom/ipc/TabChild.cpp
+++ b/dom/ipc/TabChild.cpp
@@ -1156,18 +1156,18 @@ TabChild::RecvLoadURL(const nsCString& a
return IPC_OK();
}
void
TabChild::DoFakeShow(const TextureFactoryIdentifier& aTextureFactoryIdentifier,
const uint64_t& aLayersId,
PRenderFrameChild* aRenderFrame, const ShowInfo& aShowInfo)
{
- RecvShow(ScreenIntSize(0, 0), aShowInfo, aTextureFactoryIdentifier,
- aLayersId, aRenderFrame, mParentIsActive, nsSizeMode_Normal);
+ InitRenderingState(aTextureFactoryIdentifier, aLayersId, aRenderFrame);
+ RecvShow(ScreenIntSize(0, 0), aShowInfo, mParentIsActive, nsSizeMode_Normal);
mDidFakeShow = true;
}
void
TabChild::ApplyShowInfo(const ShowInfo& aInfo)
{
if (mDidSetRealShowInfo) {
return;
@@ -1213,49 +1213,54 @@ TabChild::ApplyShowInfo(const ShowInfo&
mRounding = aInfo.widgetRounding();
mDefaultScale = aInfo.defaultScale();
mIsTransparent = aInfo.isTransparent();
}
mozilla::ipc::IPCResult
TabChild::RecvShow(const ScreenIntSize& aSize,
const ShowInfo& aInfo,
- const TextureFactoryIdentifier& aTextureFactoryIdentifier,
- const uint64_t& aLayersId,
- PRenderFrameChild* aRenderFrame,
const bool& aParentIsActive,
const nsSizeMode& aSizeMode)
{
- MOZ_ASSERT((!mDidFakeShow && aRenderFrame) || (mDidFakeShow && !aRenderFrame));
bool res = true;
mPuppetWidget->SetSizeMode(aSizeMode);
if (!mDidFakeShow) {
nsCOMPtr<nsIBaseWindow> baseWindow = do_QueryInterface(WebNavigation());
if (!baseWindow) {
NS_ERROR("WebNavigation() doesn't QI to nsIBaseWindow");
return IPC_FAIL_NO_REASON(this);
}
- InitRenderingState(aTextureFactoryIdentifier, aLayersId, aRenderFrame);
-
baseWindow->SetVisibility(true);
res = InitTabChildGlobal();
}
ApplyShowInfo(aInfo);
RecvParentActivated(aParentIsActive);
if (!res) {
return IPC_FAIL_NO_REASON(this);
}
return IPC_OK();
}
mozilla::ipc::IPCResult
+TabChild::RecvInitRendering(const TextureFactoryIdentifier& aTextureFactoryIdentifier,
+ const uint64_t& aLayersId,
+ PRenderFrameChild* aRenderFrame)
+{
+ MOZ_ASSERT((!mDidFakeShow && aRenderFrame) || (mDidFakeShow && !aRenderFrame));
+
+ InitRenderingState(aTextureFactoryIdentifier, aLayersId, aRenderFrame);
+ return IPC_OK();
+}
+
+mozilla::ipc::IPCResult
TabChild::RecvUpdateDimensions(const CSSRect& rect, const CSSSize& size,
const ScreenOrientationInternal& orientation,
const LayoutDeviceIntPoint& clientOffset,
const LayoutDeviceIntPoint& chromeDisp)
{
if (!mRemoteFrame) {
return IPC_OK();
}
--- a/dom/ipc/TabChild.h
+++ b/dom/ipc/TabChild.h
@@ -333,23 +333,25 @@ public:
const ViewID& aViewId,
const Maybe<ZoomConstraints>& aConstraints) override;
virtual mozilla::ipc::IPCResult RecvLoadURL(const nsCString& aURI,
const ShowInfo& aInfo) override;
virtual mozilla::ipc::IPCResult
RecvShow(const ScreenIntSize& aSize,
const ShowInfo& aInfo,
- const TextureFactoryIdentifier& aTextureFactoryIdentifier,
- const uint64_t& aLayersId,
- PRenderFrameChild* aRenderFrame,
const bool& aParentIsActive,
const nsSizeMode& aSizeMode) override;
virtual mozilla::ipc::IPCResult
+ RecvInitRendering(const TextureFactoryIdentifier& aTextureFactoryIdentifier,
+ const uint64_t& aLayersId,
+ PRenderFrameChild* aRenderFrame) override;
+
+ virtual mozilla::ipc::IPCResult
RecvUpdateDimensions(const CSSRect& aRect,
const CSSSize& aSize,
const ScreenOrientationInternal& aOrientation,
const LayoutDeviceIntPoint& aClientOffset,
const LayoutDeviceIntPoint& aChromeDisp) override;
virtual mozilla::ipc::IPCResult
RecvSizeModeChanged(const nsSizeMode& aSizeMode) override;
--- a/dom/ipc/TabParent.cpp
+++ b/dom/ipc/TabParent.cpp
@@ -631,16 +631,20 @@ TabParent::InitRenderFrame()
RefPtr<nsFrameLoader> frameLoader = GetFrameLoader();
MOZ_ASSERT(frameLoader);
if (frameLoader) {
bool success;
RenderFrameParent* renderFrame = new RenderFrameParent(frameLoader, &success);
uint64_t layersId = renderFrame->GetLayersId();
AddTabParentToTable(layersId, this);
Unused << SendPRenderFrameConstructor(renderFrame);
+
+ TextureFactoryIdentifier textureFactoryIdentifier;
+ renderFrame->GetTextureFactoryIdentifier(&textureFactoryIdentifier);
+ Unused << SendInitRendering(textureFactoryIdentifier, layersId, renderFrame);
}
} else {
// Otherwise, the child should have constructed the RenderFrame,
// and we should already know about it.
MOZ_ASSERT(GetRenderFrame());
}
}
@@ -648,31 +652,24 @@ void
TabParent::Show(const ScreenIntSize& size, bool aParentIsActive)
{
mDimensions = size;
if (mIsDestroyed) {
return;
}
MOZ_ASSERT(GetRenderFrame());
- RenderFrameParent* renderFrame = IsInitedByParent() ? GetRenderFrame() : nullptr;
- uint64_t layersId = renderFrame ? renderFrame->GetLayersId() : 0;
- TextureFactoryIdentifier textureFactoryIdentifier;
- if (renderFrame) {
- renderFrame->GetTextureFactoryIdentifier(&textureFactoryIdentifier);
- }
nsCOMPtr<nsISupports> container = mFrameElement->OwnerDoc()->GetContainer();
nsCOMPtr<nsIBaseWindow> baseWindow = do_QueryInterface(container);
nsCOMPtr<nsIWidget> mainWidget;
baseWindow->GetMainWidget(getter_AddRefs(mainWidget));
mSizeMode = mainWidget ? mainWidget->SizeMode() : nsSizeMode_Normal;
- Unused << SendShow(size, GetShowInfo(), textureFactoryIdentifier,
- layersId, renderFrame, aParentIsActive, mSizeMode);
+ Unused << SendShow(size, GetShowInfo(), aParentIsActive, mSizeMode);
}
mozilla::ipc::IPCResult
TabParent::RecvSetDimensions(const uint32_t& aFlags,
const int32_t& aX, const int32_t& aY,
const int32_t& aCx, const int32_t& aCy)
{
MOZ_ASSERT(!(aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_INNER),