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 <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <utility> | 10 #include <utility> |
(...skipping 730 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
741 iter++) { | 741 iter++) { |
742 if (iter->get() == render_frame_host) { | 742 if (iter->get() == render_frame_host) { |
743 pending_delete_hosts_.erase(iter); | 743 pending_delete_hosts_.erase(iter); |
744 return true; | 744 return true; |
745 } | 745 } |
746 } | 746 } |
747 return false; | 747 return false; |
748 } | 748 } |
749 | 749 |
750 void RenderFrameHostManager::ResetProxyHosts() { | 750 void RenderFrameHostManager::ResetProxyHosts() { |
751 for (auto& pair : proxy_hosts_) { | 751 for (const auto& pair : proxy_hosts_) { |
752 static_cast<SiteInstanceImpl*>(pair.second->GetSiteInstance()) | 752 static_cast<SiteInstanceImpl*>(pair.second->GetSiteInstance()) |
753 ->RemoveObserver(this); | 753 ->RemoveObserver(this); |
754 } | 754 } |
755 proxy_hosts_.clear(); | 755 proxy_hosts_.clear(); |
756 } | 756 } |
757 | 757 |
758 void RenderFrameHostManager::ClearRFHsPendingShutdown() { | 758 void RenderFrameHostManager::ClearRFHsPendingShutdown() { |
759 pending_delete_hosts_.clear(); | 759 pending_delete_hosts_.clear(); |
760 } | 760 } |
761 | 761 |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1004 proxy->PassFrameHostOwnership(); | 1004 proxy->PassFrameHostOwnership(); |
1005 MoveToPendingDeleteHosts(std::move(swapped_out_rfh)); | 1005 MoveToPendingDeleteHosts(std::move(swapped_out_rfh)); |
1006 } | 1006 } |
1007 | 1007 |
1008 DeleteRenderFrameProxyHost(site_instance); | 1008 DeleteRenderFrameProxyHost(site_instance); |
1009 } | 1009 } |
1010 | 1010 |
1011 RenderFrameProxyHost* RenderFrameHostManager::CreateRenderFrameProxyHost( | 1011 RenderFrameProxyHost* RenderFrameHostManager::CreateRenderFrameProxyHost( |
1012 SiteInstance* site_instance, | 1012 SiteInstance* site_instance, |
1013 RenderViewHostImpl* rvh) { | 1013 RenderViewHostImpl* rvh) { |
1014 auto result = proxy_hosts_.add(site_instance->GetId(), | 1014 int site_instance_id = site_instance->GetId(); |
1015 make_scoped_ptr(new RenderFrameProxyHost( | 1015 CHECK(proxy_hosts_.find(site_instance_id) == proxy_hosts_.end()) |
1016 site_instance, rvh, frame_tree_node_))); | 1016 << "A proxy already existed for this SiteInstance."; |
1017 CHECK(result.second) << "A proxy already existed for this SiteInstance."; | 1017 RenderFrameProxyHost* proxy_host = |
| 1018 new RenderFrameProxyHost(site_instance, rvh, frame_tree_node_); |
| 1019 proxy_hosts_[site_instance_id] = make_scoped_ptr(proxy_host); |
1018 static_cast<SiteInstanceImpl*>(site_instance)->AddObserver(this); | 1020 static_cast<SiteInstanceImpl*>(site_instance)->AddObserver(this); |
1019 return result.first->second; | 1021 return proxy_host; |
1020 } | 1022 } |
1021 | 1023 |
1022 void RenderFrameHostManager::DeleteRenderFrameProxyHost( | 1024 void RenderFrameHostManager::DeleteRenderFrameProxyHost( |
1023 SiteInstance* site_instance) { | 1025 SiteInstance* site_instance) { |
1024 static_cast<SiteInstanceImpl*>(site_instance)->RemoveObserver(this); | 1026 static_cast<SiteInstanceImpl*>(site_instance)->RemoveObserver(this); |
1025 proxy_hosts_.erase(site_instance->GetId()); | 1027 proxy_hosts_.erase(site_instance->GetId()); |
1026 } | 1028 } |
1027 | 1029 |
1028 bool RenderFrameHostManager::ShouldTransitionCrossSite() { | 1030 bool RenderFrameHostManager::ShouldTransitionCrossSite() { |
1029 // The logic below is weaker than "are all sites isolated" -- it asks instead, | 1031 // The logic below is weaker than "are all sites isolated" -- it asks instead, |
(...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1749 | 1751 |
1750 return proxy->GetRoutingID(); | 1752 return proxy->GetRoutingID(); |
1751 } | 1753 } |
1752 | 1754 |
1753 void RenderFrameHostManager::CreateProxiesForChildFrame(FrameTreeNode* child) { | 1755 void RenderFrameHostManager::CreateProxiesForChildFrame(FrameTreeNode* child) { |
1754 RenderFrameProxyHost* outer_delegate_proxy = | 1756 RenderFrameProxyHost* outer_delegate_proxy = |
1755 ForInnerDelegate() ? GetProxyToOuterDelegate() : nullptr; | 1757 ForInnerDelegate() ? GetProxyToOuterDelegate() : nullptr; |
1756 for (const auto& pair : proxy_hosts_) { | 1758 for (const auto& pair : proxy_hosts_) { |
1757 // Do not create proxies for subframes in the outer delegate's process, | 1759 // Do not create proxies for subframes in the outer delegate's process, |
1758 // since the outer delegate does not need to interact with them. | 1760 // since the outer delegate does not need to interact with them. |
1759 if (pair.second == outer_delegate_proxy) | 1761 if (pair.second.get() == outer_delegate_proxy) |
1760 continue; | 1762 continue; |
1761 | 1763 |
1762 child->render_manager()->CreateRenderFrameProxy( | 1764 child->render_manager()->CreateRenderFrameProxy( |
1763 pair.second->GetSiteInstance()); | 1765 pair.second->GetSiteInstance()); |
1764 } | 1766 } |
1765 } | 1767 } |
1766 | 1768 |
1767 void RenderFrameHostManager::EnsureRenderViewInitialized( | 1769 void RenderFrameHostManager::EnsureRenderViewInitialized( |
1768 RenderViewHostImpl* render_view_host, | 1770 RenderViewHostImpl* render_view_host, |
1769 SiteInstance* instance) { | 1771 SiteInstance* instance) { |
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2325 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); | 2327 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); |
2326 if (proxy) | 2328 if (proxy) |
2327 return proxy->GetRenderViewHost(); | 2329 return proxy->GetRenderViewHost(); |
2328 return nullptr; | 2330 return nullptr; |
2329 } | 2331 } |
2330 | 2332 |
2331 RenderFrameProxyHost* RenderFrameHostManager::GetRenderFrameProxyHost( | 2333 RenderFrameProxyHost* RenderFrameHostManager::GetRenderFrameProxyHost( |
2332 SiteInstance* instance) const { | 2334 SiteInstance* instance) const { |
2333 auto it = proxy_hosts_.find(instance->GetId()); | 2335 auto it = proxy_hosts_.find(instance->GetId()); |
2334 if (it != proxy_hosts_.end()) | 2336 if (it != proxy_hosts_.end()) |
2335 return it->second; | 2337 return it->second.get(); |
2336 return nullptr; | 2338 return nullptr; |
2337 } | 2339 } |
2338 | 2340 |
2339 std::map<int, RenderFrameProxyHost*> | |
2340 RenderFrameHostManager::GetAllProxyHostsForTesting() { | |
2341 std::map<int, RenderFrameProxyHost*> result; | |
2342 for (const auto& pair : proxy_hosts_) | |
2343 result[pair.first] = pair.second; | |
2344 return result; | |
2345 } | |
2346 | |
2347 void RenderFrameHostManager::CollectOpenerFrameTrees( | 2341 void RenderFrameHostManager::CollectOpenerFrameTrees( |
2348 std::vector<FrameTree*>* opener_frame_trees, | 2342 std::vector<FrameTree*>* opener_frame_trees, |
2349 base::hash_set<FrameTreeNode*>* nodes_with_back_links) { | 2343 base::hash_set<FrameTreeNode*>* nodes_with_back_links) { |
2350 CHECK(opener_frame_trees); | 2344 CHECK(opener_frame_trees); |
2351 opener_frame_trees->push_back(frame_tree_node_->frame_tree()); | 2345 opener_frame_trees->push_back(frame_tree_node_->frame_tree()); |
2352 | 2346 |
2353 // Add the FrameTree of the given node's opener to the list of | 2347 // Add the FrameTree of the given node's opener to the list of |
2354 // |opener_frame_trees| if it doesn't exist there already. |visited_index| | 2348 // |opener_frame_trees| if it doesn't exist there already. |visited_index| |
2355 // indicates which FrameTrees in |opener_frame_trees| have already been | 2349 // indicates which FrameTrees in |opener_frame_trees| have already been |
2356 // visited (i.e., those at indices less than |visited_index|). | 2350 // visited (i.e., those at indices less than |visited_index|). |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2480 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) { | 2474 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) { |
2481 if (!frame_tree_node_->opener()) | 2475 if (!frame_tree_node_->opener()) |
2482 return MSG_ROUTING_NONE; | 2476 return MSG_ROUTING_NONE; |
2483 | 2477 |
2484 return frame_tree_node_->opener() | 2478 return frame_tree_node_->opener() |
2485 ->render_manager() | 2479 ->render_manager() |
2486 ->GetRoutingIdForSiteInstance(instance); | 2480 ->GetRoutingIdForSiteInstance(instance); |
2487 } | 2481 } |
2488 | 2482 |
2489 } // namespace content | 2483 } // namespace content |
OLD | NEW |