OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 #include "core/frame/RemoteFrame.h" | 6 #include "core/frame/RemoteFrame.h" |
7 | 7 |
8 #include "bindings/core/v8/WindowProxyManager.h" | 8 #include "bindings/core/v8/WindowProxyManager.h" |
9 #include "core/dom/RemoteSecurityContext.h" | 9 #include "core/dom/RemoteSecurityContext.h" |
10 #include "core/frame/RemoteDOMWindow.h" | 10 #include "core/frame/RemoteDOMWindow.h" |
11 #include "core/frame/RemoteFrameClient.h" | 11 #include "core/frame/RemoteFrameClient.h" |
12 #include "core/frame/RemoteFrameView.h" | 12 #include "core/frame/RemoteFrameView.h" |
13 #include "core/html/HTMLFrameOwnerElement.h" | 13 #include "core/html/HTMLFrameOwnerElement.h" |
14 #include "core/rendering/RenderLayer.h" | |
15 #include "core/rendering/RenderPart.h" | |
16 #include "platform/graphics/GraphicsLayer.h" | |
14 #include "platform/weborigin/SecurityPolicy.h" | 17 #include "platform/weborigin/SecurityPolicy.h" |
18 #include "public/platform/WebLayer.h" | |
15 | 19 |
16 namespace blink { | 20 namespace blink { |
17 | 21 |
18 inline RemoteFrame::RemoteFrame(RemoteFrameClient* client, FrameHost* host, Fram eOwner* owner) | 22 inline RemoteFrame::RemoteFrame(RemoteFrameClient* client, FrameHost* host, Fram eOwner* owner) |
19 : Frame(client, host, owner) | 23 : Frame(client, host, owner) |
20 , m_securityContext(RemoteSecurityContext::create()) | 24 , m_securityContext(RemoteSecurityContext::create()) |
21 , m_domWindow(RemoteDOMWindow::create(*this)) | 25 , m_domWindow(RemoteDOMWindow::create(*this)) |
22 , m_windowProxyManager(WindowProxyManager::create(*this)) | 26 , m_windowProxyManager(WindowProxyManager::create(*this)) |
27 , m_remotePlatformLayer(nullptr) | |
23 { | 28 { |
24 } | 29 } |
25 | 30 |
26 PassRefPtrWillBeRawPtr<RemoteFrame> RemoteFrame::create(RemoteFrameClient* clien t, FrameHost* host, FrameOwner* owner) | 31 PassRefPtrWillBeRawPtr<RemoteFrame> RemoteFrame::create(RemoteFrameClient* clien t, FrameHost* host, FrameOwner* owner) |
27 { | 32 { |
28 return adoptRefWillBeNoop(new RemoteFrame(client, host, owner)); | 33 return adoptRefWillBeNoop(new RemoteFrame(client, host, owner)); |
29 } | 34 } |
30 | 35 |
31 RemoteFrame::~RemoteFrame() | 36 RemoteFrame::~RemoteFrame() |
32 { | 37 { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
72 return; | 77 return; |
73 m_windowProxyManager->clearForClose(); | 78 m_windowProxyManager->clearForClose(); |
74 Frame::detach(); | 79 Frame::detach(); |
75 } | 80 } |
76 | 81 |
77 RemoteSecurityContext* RemoteFrame::securityContext() const | 82 RemoteSecurityContext* RemoteFrame::securityContext() const |
78 { | 83 { |
79 return m_securityContext.get(); | 84 return m_securityContext.get(); |
80 } | 85 } |
81 | 86 |
87 void RemoteFrame::disconnectOwnerElement() | |
88 { | |
89 if (owner() && owner()->isLocal()) | |
dcheng
2015/02/03 22:08:37
Why do we do this work here instead of, say, Remot
lfg
2015/02/03 22:54:50
It needs to run on both WebFrame::swap(), as well
dcheng
2015/02/04 00:02:23
Can we add a comment to this effect? It's not imme
| |
90 setRemotePlatformLayer(nullptr); | |
91 Frame::disconnectOwnerElement(); | |
92 } | |
93 | |
82 void RemoteFrame::forwardInputEvent(Event* event) | 94 void RemoteFrame::forwardInputEvent(Event* event) |
83 { | 95 { |
84 remoteFrameClient()->forwardInputEvent(event); | 96 remoteFrameClient()->forwardInputEvent(event); |
85 } | 97 } |
86 | 98 |
87 void RemoteFrame::setView(PassRefPtrWillBeRawPtr<RemoteFrameView> view) | 99 void RemoteFrame::setView(PassRefPtrWillBeRawPtr<RemoteFrameView> view) |
88 { | 100 { |
89 // Oilpan: as RemoteFrameView performs no finalization actions, | 101 // Oilpan: as RemoteFrameView performs no finalization actions, |
90 // no explicit dispose() of it needed here. (cf. FrameView::dispose().) | 102 // no explicit dispose() of it needed here. (cf. FrameView::dispose().) |
91 m_view = view; | 103 m_view = view; |
92 } | 104 } |
93 | 105 |
94 void RemoteFrame::createView() | 106 void RemoteFrame::createView() |
95 { | 107 { |
96 RefPtrWillBeRawPtr<RemoteFrameView> view = RemoteFrameView::create(this); | 108 RefPtrWillBeRawPtr<RemoteFrameView> view = RemoteFrameView::create(this); |
97 setView(view); | 109 setView(view); |
98 | 110 |
99 if (ownerRenderer()) { | 111 if (ownerRenderer()) { |
100 HTMLFrameOwnerElement* owner = deprecatedLocalOwner(); | 112 HTMLFrameOwnerElement* owner = deprecatedLocalOwner(); |
101 ASSERT(owner); | 113 ASSERT(owner); |
102 owner->setWidget(view); | 114 owner->setWidget(view); |
103 } | 115 } |
104 } | 116 } |
105 | 117 |
106 RemoteFrameClient* RemoteFrame::remoteFrameClient() const | 118 RemoteFrameClient* RemoteFrame::remoteFrameClient() const |
107 { | 119 { |
108 return static_cast<RemoteFrameClient*>(client()); | 120 return static_cast<RemoteFrameClient*>(client()); |
109 } | 121 } |
110 | 122 |
123 void RemoteFrame::setRemotePlatformLayer(WebLayer* layer) | |
124 { | |
125 if (m_remotePlatformLayer) | |
126 GraphicsLayer::unregisterContentsLayer(m_remotePlatformLayer); | |
127 m_remotePlatformLayer = layer; | |
128 if (m_remotePlatformLayer) | |
129 GraphicsLayer::registerContentsLayer(layer); | |
130 | |
131 ASSERT(owner()); | |
132 toHTMLFrameOwnerElement(owner())->setNeedsCompositingUpdate(); | |
133 if (RenderPart* renderer = ownerRenderer()) | |
134 renderer->layer()->updateSelfPaintingLayer(); | |
135 } | |
136 | |
111 } // namespace blink | 137 } // namespace blink |
OLD | NEW |