OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/browser/frame_host/render_frame_host_manager.h" | 5 #include "content/browser/frame_host/render_frame_host_manager.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
137 } | 137 } |
138 | 138 |
139 RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const { | 139 RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const { |
140 if (interstitial_page_) | 140 if (interstitial_page_) |
141 return interstitial_page_->GetView(); | 141 return interstitial_page_->GetView(); |
142 if (render_frame_host_) | 142 if (render_frame_host_) |
143 return render_frame_host_->GetView(); | 143 return render_frame_host_->GetView(); |
144 return nullptr; | 144 return nullptr; |
145 } | 145 } |
146 | 146 |
147 RenderViewHostImpl* | |
148 RenderFrameHostManager::GetOuterRenderViewHostForKeyboardInput() { | |
149 if (!ForInnerDelegate()) | |
150 return nullptr; | |
151 | |
152 FrameTreeNode* outer_contents_frame_tree_node = | |
153 FrameTreeNode::GloballyFindByID( | |
154 delegate_->GetOuterDelegateFrameTreeNodeID()); | |
155 return outer_contents_frame_tree_node->frame_tree()->GetRenderViewHost( | |
156 outer_contents_frame_tree_node->render_manager() | |
157 ->current_frame_host() | |
158 ->GetSiteInstance()); | |
lfg
2015/05/26 19:18:15
Can this be done with ftn->current_frame_host()->r
nasko
2015/05/28 22:13:46
I think it can. Is there a reason why we don't use
lazyboy
2015/05/29 00:02:24
Done.
| |
159 } | |
160 | |
147 RenderFrameProxyHost* RenderFrameHostManager::GetProxyToParent() { | 161 RenderFrameProxyHost* RenderFrameHostManager::GetProxyToParent() { |
148 if (frame_tree_node_->IsMainFrame()) | 162 if (frame_tree_node_->IsMainFrame()) |
149 return NULL; | 163 return NULL; |
150 | 164 |
151 RenderFrameProxyHostMap::iterator iter = | 165 RenderFrameProxyHostMap::iterator iter = |
152 proxy_hosts_.find(frame_tree_node_->parent() | 166 proxy_hosts_.find(frame_tree_node_->parent() |
153 ->render_manager() | 167 ->render_manager() |
154 ->current_frame_host() | 168 ->current_frame_host() |
155 ->GetSiteInstance() | 169 ->GetSiteInstance() |
156 ->GetId()); | 170 ->GetId()); |
157 if (iter == proxy_hosts_.end()) | 171 if (iter == proxy_hosts_.end()) |
158 return NULL; | 172 return NULL; |
159 | 173 |
160 return iter->second; | 174 return iter->second; |
161 } | 175 } |
162 | 176 |
177 RenderFrameProxyHost* RenderFrameHostManager::GetProxyToOuterDelegate() { | |
178 int outer_contents_frame_tree_node_id = | |
179 delegate_->GetOuterDelegateFrameTreeNodeID(); | |
180 FrameTreeNode* outer_contents_frame_tree_node = | |
181 FrameTreeNode::GloballyFindByID(outer_contents_frame_tree_node_id); | |
182 if (!outer_contents_frame_tree_node) | |
183 return nullptr; | |
184 | |
185 return GetRenderFrameProxyHost( | |
186 outer_contents_frame_tree_node->current_frame_host()->GetSiteInstance()); | |
187 } | |
188 | |
189 bool RenderFrameHostManager::ForInnerDelegate() { | |
190 // TODO(lazyboy): We should remove IsMainFrame() check below since any frames | |
nasko
2015/05/28 22:13:46
What prevents us from removing it now?
lazyboy
2015/05/29 00:02:23
I haven't started testing frame inside <webview> y
| |
191 // in the inner WebContents should be treated as a part of inner | |
192 // WebContents/Delegate. | |
193 return frame_tree_node_->IsMainFrame() && | |
194 delegate_->GetOuterDelegateFrameTreeNodeID() != -1; | |
195 } | |
196 | |
163 void RenderFrameHostManager::SetPendingWebUI(const GURL& url, int bindings) { | 197 void RenderFrameHostManager::SetPendingWebUI(const GURL& url, int bindings) { |
164 pending_web_ui_ = CreateWebUI(url, bindings); | 198 pending_web_ui_ = CreateWebUI(url, bindings); |
165 pending_and_current_web_ui_.reset(); | 199 pending_and_current_web_ui_.reset(); |
166 } | 200 } |
167 | 201 |
168 scoped_ptr<WebUIImpl> RenderFrameHostManager::CreateWebUI(const GURL& url, | 202 scoped_ptr<WebUIImpl> RenderFrameHostManager::CreateWebUI(const GURL& url, |
169 int bindings) { | 203 int bindings) { |
170 scoped_ptr<WebUIImpl> new_web_ui(delegate_->CreateWebUIForRenderManager(url)); | 204 scoped_ptr<WebUIImpl> new_web_ui(delegate_->CreateWebUIForRenderManager(url)); |
171 | 205 |
172 // If we have assigned (zero or more) bindings to this NavigationEntry in the | 206 // If we have assigned (zero or more) bindings to this NavigationEntry in the |
(...skipping 1424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1597 | 1631 |
1598 // Recreate the opener chain. | 1632 // Recreate the opener chain. |
1599 int opener_route_id = | 1633 int opener_route_id = |
1600 delegate_->CreateOpenerRenderViewsForRenderManager(instance); | 1634 delegate_->CreateOpenerRenderViewsForRenderManager(instance); |
1601 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); | 1635 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); |
1602 InitRenderView(render_view_host, opener_route_id, proxy->GetRoutingID(), | 1636 InitRenderView(render_view_host, opener_route_id, proxy->GetRoutingID(), |
1603 source->IsMainFrame()); | 1637 source->IsMainFrame()); |
1604 proxy->set_render_frame_proxy_created(true); | 1638 proxy->set_render_frame_proxy_created(true); |
1605 } | 1639 } |
1606 | 1640 |
1641 int RenderFrameHostManager::CreateOuterDelegateProxy( | |
1642 SiteInstance* outer_contents_site_instance) { | |
1643 CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( | |
1644 switches::kSitePerProcess)); | |
1645 int outer_contents_proxy_flags = CREATE_RF_HIDDEN | CREATE_RF_SWAPPED_OUT | | |
1646 CREATE_RF_FOR_MAIN_FRAME_NAVIGATION; | |
1647 int swapped_out_render_view_routing_id; // Unused. | |
1648 scoped_ptr<RenderFrameHostImpl> swapped_out_rfh_in_outer_contents = | |
1649 CreateRenderFrame(outer_contents_site_instance, nullptr, | |
1650 MSG_ROUTING_NONE, // opener_route_id | |
1651 outer_contents_proxy_flags, | |
1652 &swapped_out_render_view_routing_id); | |
1653 | |
1654 RenderFrameProxyHost* rfph_in_outer_contents = | |
1655 GetRenderFrameProxyHost(outer_contents_site_instance); | |
1656 DCHECK(rfph_in_outer_contents); | |
1657 return rfph_in_outer_contents->GetRoutingID(); | |
1658 } | |
1659 | |
1660 void RenderFrameHostManager::SwapFrameWithProxy( | |
1661 int proxy_to_outer_delegate_routing_id) { | |
1662 // TODO(lazyboy): Setting |is_loading| to false is probably wrong, fix. | |
1663 current_frame_host()->Send(new FrameMsg_SwapOut( | |
1664 current_frame_host()->GetRoutingID(), proxy_to_outer_delegate_routing_id, | |
1665 false /* is_loading */, FrameReplicationState())); | |
1666 } | |
1667 | |
1668 void RenderFrameHostManager::SetRWHViewForInnerContents( | |
1669 RenderWidgetHostView* child_rwhv) { | |
1670 GetProxyToOuterDelegate()->SetChildRWHView(child_rwhv); | |
1671 } | |
1672 | |
1607 bool RenderFrameHostManager::InitRenderView( | 1673 bool RenderFrameHostManager::InitRenderView( |
1608 RenderViewHostImpl* render_view_host, | 1674 RenderViewHostImpl* render_view_host, |
1609 int opener_route_id, | 1675 int opener_route_id, |
1610 int proxy_routing_id, | 1676 int proxy_routing_id, |
1611 bool for_main_frame_navigation) { | 1677 bool for_main_frame_navigation) { |
1612 // We may have initialized this RenderViewHost for another RenderFrameHost. | 1678 // We may have initialized this RenderViewHost for another RenderFrameHost. |
1613 if (render_view_host->IsRenderViewLive()) | 1679 if (render_view_host->IsRenderViewLive()) |
1614 return true; | 1680 return true; |
1615 | 1681 |
1616 // If the ongoing navigation is to a WebUI and the RenderView is not in a | 1682 // If the ongoing navigation is to a WebUI and the RenderView is not in a |
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2114 void RenderFrameHostManager::DeleteRenderFrameProxyHost( | 2180 void RenderFrameHostManager::DeleteRenderFrameProxyHost( |
2115 SiteInstance* instance) { | 2181 SiteInstance* instance) { |
2116 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); | 2182 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); |
2117 if (iter != proxy_hosts_.end()) { | 2183 if (iter != proxy_hosts_.end()) { |
2118 delete iter->second; | 2184 delete iter->second; |
2119 proxy_hosts_.erase(iter); | 2185 proxy_hosts_.erase(iter); |
2120 } | 2186 } |
2121 } | 2187 } |
2122 | 2188 |
2123 } // namespace content | 2189 } // namespace content |
OLD | NEW |