Chromium Code Reviews| 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 |