Chromium Code Reviews| Index: extensions/browser/process_manager.cc |
| diff --git a/extensions/browser/process_manager.cc b/extensions/browser/process_manager.cc |
| index a71b4c9d89fdb29a9494bf4d2694316f60299a7f..7bb297a718f5f1d68d8882e89d896b9fccb0def9 100644 |
| --- a/extensions/browser/process_manager.cc |
| +++ b/extensions/browser/process_manager.cc |
| @@ -297,7 +297,6 @@ void ProcessManager::UnregisterRenderFrameHost( |
| content::RenderFrameHost* render_frame_host) { |
| ExtensionRenderFrames::iterator frame = |
| all_extension_frames_.find(render_frame_host); |
| - |
| if (frame != all_extension_frames_.end()) { |
| std::string extension_id = GetExtensionID(render_frame_host); |
| // Keepalive count, balanced in RegisterRenderFrame. |
| @@ -569,24 +568,34 @@ void ProcessManager::OnNetworkRequestStarted( |
| uint64_t request_id) { |
| ExtensionHost* host = GetBackgroundHostForExtension( |
| GetExtensionID(render_frame_host)); |
| - auto result = pending_network_requests_.insert(request_id); |
| + if (!host || !IsFrameInExtensionHost(host, render_frame_host)) |
| + return; |
| + |
| + auto result = |
| + pending_network_requests_.insert(std::make_pair(request_id, host)); |
| DCHECK(result.second) << "Duplicate network request IDs."; |
| - if (host && IsFrameInExtensionHost(host, render_frame_host)) { |
| - IncrementLazyKeepaliveCount(host->extension()); |
| - host->OnNetworkRequestStarted(request_id); |
| - } |
| + |
| + IncrementLazyKeepaliveCount(host->extension()); |
| + host->OnNetworkRequestStarted(request_id); |
| } |
| void ProcessManager::OnNetworkRequestDone( |
| content::RenderFrameHost* render_frame_host, |
| uint64_t request_id) { |
| - ExtensionHost* host = GetBackgroundHostForExtension( |
| - GetExtensionID(render_frame_host)); |
| - if (host && IsFrameInExtensionHost(host, render_frame_host)) { |
| - host->OnNetworkRequestDone(request_id); |
| - if (pending_network_requests_.erase(request_id)) |
| - DecrementLazyKeepaliveCount(host->extension()); |
| - } |
| + auto result = pending_network_requests_.find(request_id); |
| + if (result == pending_network_requests_.end()) |
| + return; |
| + |
| + ExtensionHost* host = result->second; |
|
Devlin
2016/06/01 21:39:02
It might be worth noting that |host| can be invali
nasko
2016/06/01 23:17:51
Done.
|
| + pending_network_requests_.erase(result); |
| + |
| + if (background_hosts_.find(host) == background_hosts_.end()) |
| + return; |
| + |
| + DCHECK(IsFrameInExtensionHost(host, render_frame_host)); |
| + |
| + host->OnNetworkRequestDone(request_id); |
| + DecrementLazyKeepaliveCount(host->extension()); |
| } |
| void ProcessManager::CancelSuspend(const Extension* extension) { |