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 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
154 ->render_manager() | 154 ->render_manager() |
155 ->current_frame_host() | 155 ->current_frame_host() |
156 ->GetSiteInstance() | 156 ->GetSiteInstance() |
157 ->GetId()); | 157 ->GetId()); |
158 if (iter == proxy_hosts_.end()) | 158 if (iter == proxy_hosts_.end()) |
159 return NULL; | 159 return NULL; |
160 | 160 |
161 return iter->second; | 161 return iter->second; |
162 } | 162 } |
163 | 163 |
164 RenderFrameProxyHost* RenderFrameHostManager::GetProxyToEmbedder() { | |
165 int64 embedder_frame_tree_node_id = delegate_->GetParentFrameTreeNodeID(); | |
166 FrameTreeNode* embedder_frame_tree_node = | |
167 FrameTreeNode::GloballyFindByID(embedder_frame_tree_node_id); | |
168 if (!embedder_frame_tree_node) | |
169 return NULL; | |
170 RenderFrameProxyHostMap::iterator iter = | |
Charlie Reis
2015/04/08 23:42:11
Just use RenderFrameHostManager::GetRenderFramePro
lazyboy
2015/04/14 01:38:03
Done.
| |
171 proxy_hosts_.find(embedder_frame_tree_node->render_manager() | |
Charlie Reis
2015/04/08 23:42:10
Use FrameTreeNode::current_frame_host(), skipping
lazyboy
2015/04/14 01:38:03
Done.
| |
172 ->current_frame_host()->GetSiteInstance() | |
173 ->GetId()); | |
174 if (iter == proxy_hosts_.end()) | |
175 return NULL; | |
176 return iter->second; | |
177 } | |
178 | |
164 void RenderFrameHostManager::SetPendingWebUI(const GURL& url, int bindings) { | 179 void RenderFrameHostManager::SetPendingWebUI(const GURL& url, int bindings) { |
165 pending_web_ui_ = CreateWebUI(url, bindings); | 180 pending_web_ui_ = CreateWebUI(url, bindings); |
166 pending_and_current_web_ui_.reset(); | 181 pending_and_current_web_ui_.reset(); |
167 } | 182 } |
168 | 183 |
169 scoped_ptr<WebUIImpl> RenderFrameHostManager::CreateWebUI(const GURL& url, | 184 scoped_ptr<WebUIImpl> RenderFrameHostManager::CreateWebUI(const GURL& url, |
170 int bindings) { | 185 int bindings) { |
171 scoped_ptr<WebUIImpl> new_web_ui(delegate_->CreateWebUIForRenderManager(url)); | 186 scoped_ptr<WebUIImpl> new_web_ui(delegate_->CreateWebUIForRenderManager(url)); |
172 | 187 |
173 // If we have assigned (zero or more) bindings to this NavigationEntry in the | 188 // If we have assigned (zero or more) bindings to this NavigationEntry in the |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
448 CommitPendingIfNecessary(render_frame_host, was_caused_by_user_gesture); | 463 CommitPendingIfNecessary(render_frame_host, was_caused_by_user_gesture); |
449 | 464 |
450 // Make sure any dynamic changes to this frame's sandbox flags that were made | 465 // Make sure any dynamic changes to this frame's sandbox flags that were made |
451 // prior to navigation take effect. | 466 // prior to navigation take effect. |
452 CommitPendingSandboxFlags(); | 467 CommitPendingSandboxFlags(); |
453 } | 468 } |
454 | 469 |
455 void RenderFrameHostManager::CommitPendingIfNecessary( | 470 void RenderFrameHostManager::CommitPendingIfNecessary( |
456 RenderFrameHostImpl* render_frame_host, | 471 RenderFrameHostImpl* render_frame_host, |
457 bool was_caused_by_user_gesture) { | 472 bool was_caused_by_user_gesture) { |
473 RenderFrameProxyHost* proxy_to_embedder = GetProxyToEmbedder(); | |
474 if (proxy_to_embedder) { | |
475 DCHECK(render_frame_host->GetSiteInstance() | |
476 ->GetSiteURL().SchemeIs("chrome-guest")); | |
477 proxy_to_embedder->SetChildRWHView(current_host()->GetView()); | |
Charlie Reis
2015/04/08 23:42:10
Do you have to do this for every commit in the gue
lazyboy
2015/04/14 01:38:03
No, only the first time.
I've moved this to WebCon
| |
478 // TODO(lazyboy): This probably breaks guest visibility. | |
479 current_host()->GetView()->Show(); | |
480 } | |
481 | |
458 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 482 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
459 switches::kEnableBrowserSideNavigation)) { | 483 switches::kEnableBrowserSideNavigation)) { |
460 if (render_frame_host == speculative_render_frame_host_.get()) { | 484 if (render_frame_host == speculative_render_frame_host_.get()) { |
461 CommitPending(); | 485 CommitPending(); |
462 } else if (render_frame_host == render_frame_host_.get()) { | 486 } else if (render_frame_host == render_frame_host_.get()) { |
463 // TODO(carlosk): this code doesn't properly handle in-page navigation or | 487 // TODO(carlosk): this code doesn't properly handle in-page navigation or |
464 // interwoven navigation requests. | 488 // interwoven navigation requests. |
465 DCHECK(!speculative_render_frame_host_); | 489 DCHECK(!speculative_render_frame_host_); |
466 } else { | 490 } else { |
467 // No one else should be sending us a DidNavigate in this state. | 491 // No one else should be sending us a DidNavigate in this state. |
(...skipping 1052 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1520 return; | 1544 return; |
1521 | 1545 |
1522 // Recreate the opener chain. | 1546 // Recreate the opener chain. |
1523 int opener_route_id = | 1547 int opener_route_id = |
1524 delegate_->CreateOpenerRenderViewsForRenderManager(instance); | 1548 delegate_->CreateOpenerRenderViewsForRenderManager(instance); |
1525 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); | 1549 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); |
1526 InitRenderView(render_view_host, opener_route_id, proxy->GetRoutingID(), | 1550 InitRenderView(render_view_host, opener_route_id, proxy->GetRoutingID(), |
1527 source->IsMainFrame()); | 1551 source->IsMainFrame()); |
1528 } | 1552 } |
1529 | 1553 |
1554 int RenderFrameHostManager::CreateEmbedderProxy( | |
1555 SiteInstance* embedder_site_instance, | |
1556 int* swapped_out_render_view_routing_id) { | |
1557 int embedder_proxy_flags = | |
1558 CREATE_RF_HIDDEN | | |
1559 CREATE_RF_SWAPPED_OUT | | |
1560 CREATE_RF_FOR_MAIN_FRAME_NAVIGATION; // TODO(lazyboy): Do we need this? | |
1561 scoped_ptr<RenderFrameHostImpl> so_rfh_in_embedder = | |
1562 CreateRenderFrame( | |
1563 embedder_site_instance, | |
1564 nullptr, | |
1565 MSG_ROUTING_NONE, // opener_route_id | |
1566 embedder_proxy_flags, | |
1567 swapped_out_render_view_routing_id); | |
1568 | |
1569 RenderFrameProxyHost* rfph_in_embedder = GetRenderFrameProxyHost( | |
1570 embedder_site_instance); | |
1571 DCHECK(rfph_in_embedder); | |
1572 return rfph_in_embedder->GetRoutingID(); | |
1573 } | |
1574 | |
1575 void RenderFrameHostManager::ReplaceWithGuestProxy( | |
1576 int proxy_to_embedder_routing_id) { | |
1577 current_frame_host()->Send( | |
1578 new FrameMsg_ReplaceLocalFrameWithProxy( | |
1579 current_frame_host()->GetRoutingID(), | |
1580 proxy_to_embedder_routing_id)); | |
1581 } | |
1582 | |
1530 bool RenderFrameHostManager::InitRenderView( | 1583 bool RenderFrameHostManager::InitRenderView( |
1531 RenderViewHostImpl* render_view_host, | 1584 RenderViewHostImpl* render_view_host, |
1532 int opener_route_id, | 1585 int opener_route_id, |
1533 int proxy_routing_id, | 1586 int proxy_routing_id, |
1534 bool for_main_frame_navigation) { | 1587 bool for_main_frame_navigation) { |
1535 // We may have initialized this RenderViewHost for another RenderFrameHost. | 1588 // We may have initialized this RenderViewHost for another RenderFrameHost. |
1536 if (render_view_host->IsRenderViewLive()) | 1589 if (render_view_host->IsRenderViewLive()) |
1537 return true; | 1590 return true; |
1538 | 1591 |
1539 // If the ongoing navigation is to a WebUI and the RenderView is not in a | 1592 // If the ongoing navigation is to a WebUI and the RenderView is not in a |
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2019 void RenderFrameHostManager::DeleteRenderFrameProxyHost( | 2072 void RenderFrameHostManager::DeleteRenderFrameProxyHost( |
2020 SiteInstance* instance) { | 2073 SiteInstance* instance) { |
2021 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); | 2074 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); |
2022 if (iter != proxy_hosts_.end()) { | 2075 if (iter != proxy_hosts_.end()) { |
2023 delete iter->second; | 2076 delete iter->second; |
2024 proxy_hosts_.erase(iter); | 2077 proxy_hosts_.erase(iter); |
2025 } | 2078 } |
2026 } | 2079 } |
2027 | 2080 |
2028 } // namespace content | 2081 } // namespace content |
OLD | NEW |