Index: Source/core/frame/RemoteFrame.cpp |
diff --git a/Source/core/frame/RemoteFrame.cpp b/Source/core/frame/RemoteFrame.cpp |
index 7b07fdca6504eb37b51d917e4a7b90034cf19509..b73d6272b1fa8ff03862f4d0f328c24ec2bc9d2c 100644 |
--- a/Source/core/frame/RemoteFrame.cpp |
+++ b/Source/core/frame/RemoteFrame.cpp |
@@ -11,7 +11,11 @@ |
#include "core/frame/RemoteFrameClient.h" |
#include "core/frame/RemoteFrameView.h" |
#include "core/html/HTMLFrameOwnerElement.h" |
+#include "core/layout/Layer.h" |
+#include "core/rendering/RenderPart.h" |
+#include "platform/graphics/GraphicsLayer.h" |
#include "platform/weborigin/SecurityPolicy.h" |
+#include "public/platform/WebLayer.h" |
namespace blink { |
@@ -20,6 +24,7 @@ inline RemoteFrame::RemoteFrame(RemoteFrameClient* client, FrameHost* host, Fram |
, m_securityContext(RemoteSecurityContext::create()) |
, m_domWindow(RemoteDOMWindow::create(*this)) |
, m_windowProxyManager(WindowProxyManager::create(*this)) |
+ , m_remotePlatformLayer(nullptr) |
{ |
} |
@@ -79,6 +84,16 @@ RemoteSecurityContext* RemoteFrame::securityContext() const |
return m_securityContext.get(); |
} |
+void RemoteFrame::disconnectOwnerElement() |
+{ |
+ // The RemotePlatformLayer needs to be cleared in disconnectOwnerElement() |
+ // because it must happen on WebFrame::swap() and Frame::detach(). |
+ if (m_remotePlatformLayer) |
+ setRemotePlatformLayer(nullptr); |
+ |
+ Frame::disconnectOwnerElement(); |
+} |
+ |
void RemoteFrame::forwardInputEvent(Event* event) |
{ |
remoteFrameClient()->forwardInputEvent(event); |
@@ -108,4 +123,18 @@ RemoteFrameClient* RemoteFrame::remoteFrameClient() const |
return static_cast<RemoteFrameClient*>(client()); |
} |
+void RemoteFrame::setRemotePlatformLayer(WebLayer* layer) |
+{ |
+ if (m_remotePlatformLayer) |
+ GraphicsLayer::unregisterContentsLayer(m_remotePlatformLayer); |
+ m_remotePlatformLayer = layer; |
+ if (m_remotePlatformLayer) |
+ GraphicsLayer::registerContentsLayer(layer); |
+ |
+ ASSERT(owner()); |
+ toHTMLFrameOwnerElement(owner())->setNeedsCompositingUpdate(); |
+ if (RenderPart* renderer = ownerRenderer()) |
+ renderer->layer()->updateSelfPaintingLayer(); |
+} |
+ |
} // namespace blink |