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 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 |