Index: content/browser/frame_host/render_frame_host_manager.cc |
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc |
index 03212114c51a63ca4597387490b5dba014a6e5fe..4bb099ce7d02be6c4082f7074f7b2ecab7e95e70 100644 |
--- a/content/browser/frame_host/render_frame_host_manager.cc |
+++ b/content/browser/frame_host/render_frame_host_manager.cc |
@@ -748,7 +748,7 @@ bool RenderFrameHostManager::DeleteFromPendingList( |
} |
void RenderFrameHostManager::ResetProxyHosts() { |
- for (auto& pair : proxy_hosts_) { |
+ for (const auto& pair : proxy_hosts_) { |
static_cast<SiteInstanceImpl*>(pair.second->GetSiteInstance()) |
->RemoveObserver(this); |
} |
@@ -1011,12 +1011,14 @@ void RenderFrameHostManager::ActiveFrameCountIsZero( |
RenderFrameProxyHost* RenderFrameHostManager::CreateRenderFrameProxyHost( |
SiteInstance* site_instance, |
RenderViewHostImpl* rvh) { |
- auto result = proxy_hosts_.add(site_instance->GetId(), |
- make_scoped_ptr(new RenderFrameProxyHost( |
- site_instance, rvh, frame_tree_node_))); |
- CHECK(result.second) << "A proxy already existed for this SiteInstance."; |
+ int site_instance_id = site_instance->GetId(); |
+ CHECK(proxy_hosts_.find(site_instance_id) == proxy_hosts_.end()) |
+ << "A proxy already existed for this SiteInstance."; |
+ RenderFrameProxyHost* proxy_host = |
+ new RenderFrameProxyHost(site_instance, rvh, frame_tree_node_); |
+ proxy_hosts_[site_instance_id] = make_scoped_ptr(proxy_host); |
nasko
2016/02/12 18:14:08
Why was this rewrite necessary?
lfg
2016/03/02 18:29:08
Moved to another CL.
|
static_cast<SiteInstanceImpl*>(site_instance)->AddObserver(this); |
- return result.first->second; |
+ return proxy_host; |
} |
void RenderFrameHostManager::DeleteRenderFrameProxyHost( |
@@ -1756,7 +1758,7 @@ void RenderFrameHostManager::CreateProxiesForChildFrame(FrameTreeNode* child) { |
for (const auto& pair : proxy_hosts_) { |
// Do not create proxies for subframes in the outer delegate's process, |
// since the outer delegate does not need to interact with them. |
- if (pair.second == outer_delegate_proxy) |
+ if (pair.second.get() == outer_delegate_proxy) |
continue; |
child->render_manager()->CreateRenderFrameProxy( |
@@ -2332,7 +2334,7 @@ RenderFrameProxyHost* RenderFrameHostManager::GetRenderFrameProxyHost( |
SiteInstance* instance) const { |
auto it = proxy_hosts_.find(instance->GetId()); |
if (it != proxy_hosts_.end()) |
- return it->second; |
+ return it->second.get(); |
return nullptr; |
} |
@@ -2340,14 +2342,6 @@ int RenderFrameHostManager::GetProxyCount() { |
return proxy_hosts_.size(); |
} |
-std::map<int, RenderFrameProxyHost*> |
-RenderFrameHostManager::GetAllProxyHostsForTesting() { |
- std::map<int, RenderFrameProxyHost*> result; |
- for (const auto& pair : proxy_hosts_) |
- result[pair.first] = pair.second; |
- return result; |
-} |
- |
void RenderFrameHostManager::CollectOpenerFrameTrees( |
std::vector<FrameTree*>* opener_frame_trees, |
base::hash_set<FrameTreeNode*>* nodes_with_back_links) { |
@@ -2490,4 +2484,34 @@ int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) { |
->GetRoutingIdForSiteInstance(instance); |
} |
+void RenderFrameHostManager::SendPageMsg(IPC::Message* msg) { |
+ DCHECK(IPC_MESSAGE_CLASS(*msg) == PageMsgStart); |
nasko
2016/02/12 18:14:08
Should this method return if the IPC is not a Page
lfg
2016/03/02 18:29:08
Done.
|
+ |
+ // We should always deliver page messages through the main frame. |
+ DCHECK(!frame_tree_node_->parent()); |
nasko
2016/02/12 18:14:08
Same as above. What happens when the DCHECK is vio
lfg
2016/03/02 18:29:08
We shouldn't write code to violate the DCHECK ;)
|
+ |
+ for (const auto& pair : proxy_hosts_) { |
+ RenderFrameProxyHost* proxy = pair.second.get(); |
+ |
+ IPC::Message* copy = new IPC::Message(*msg); |
+ copy->set_routing_id(proxy->GetRoutingID()); |
+ proxy->Send(copy); |
+ } |
+ |
+ if (speculative_render_frame_host_) { |
+ IPC::Message* copy = new IPC::Message(*msg); |
+ copy->set_routing_id(speculative_render_frame_host_->GetRoutingID()); |
+ speculative_render_frame_host_->Send(copy); |
+ } |
+ |
+ if (pending_render_frame_host_) { |
nasko
2016/02/12 18:14:08
Speculative and pending cannot exist at the same t
lfg
2016/03/02 18:29:08
Done.
|
+ IPC::Message* copy = new IPC::Message(*msg); |
+ copy->set_routing_id(pending_render_frame_host_->GetRoutingID()); |
+ pending_render_frame_host_->Send(copy); |
+ } |
+ |
+ msg->set_routing_id(render_frame_host_->GetRoutingID()); |
+ render_frame_host_->Send(msg); |
+} |
+ |
} // namespace content |