Index: chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc |
diff --git a/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc |
index 351d35a985508162f152020cee1f22be9fe04bae..206fa6db144b8a359afc5d2876ab8bc0fa3ad1dd 100644 |
--- a/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc |
+++ b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc |
@@ -8,6 +8,7 @@ |
#include <vector> |
#include "base/base64.h" |
+#include "base/command_line.h" |
#include "base/guid.h" |
#include "base/logging.h" |
#include "chrome/browser/browser_process.h" |
@@ -50,6 +51,7 @@ |
#include "content/public/browser/service_worker_context.h" |
#include "content/public/browser/stream_info.h" |
#include "content/public/browser/web_contents.h" |
+#include "content/public/common/content_switches.h" |
#include "content/public/common/resource_response.h" |
#include "net/base/load_flags.h" |
#include "net/base/load_timing_info.h" |
@@ -174,20 +176,27 @@ void UpdatePrerenderNetworkBytesCallback(int render_process_id, |
} |
#if defined(ENABLE_EXTENSIONS) |
-void SendExecuteMimeTypeHandlerEvent(scoped_ptr<content::StreamInfo> stream, |
- int64 expected_content_size, |
- int render_process_id, |
- int render_frame_id, |
- const std::string& extension_id, |
- const std::string& view_id, |
- bool embedded) { |
+void SendExecuteMimeTypeHandlerEvent( |
+ scoped_ptr<content::StreamInfo> stream, |
+ int64 expected_content_size, |
+ const ResourceRequestInfo::WebContentsGetter& web_contents_getter, |
+ int render_process_id, |
+ int render_frame_id, |
+ const std::string& extension_id, |
+ const std::string& view_id, |
+ bool embedded) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
- content::WebContents* web_contents = |
- tab_util::GetWebContentsByFrameID(render_process_id, render_frame_id); |
+ content::WebContents* web_contents = web_contents_getter.Run(); |
if (!web_contents) |
return; |
+ // TODO(clamy): update this code for PlzNavigate when extensions have |
+ // switched to FrameTreeNode IDs, so that unclaimed streams are not leaked. |
davidben
2015/12/09 23:53:44
Probably worth a bug number?
|
+ DCHECK((render_process_id != -1 && render_frame_id != -1) || |
+ base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kEnableBrowserSideNavigation)); |
+ |
// If the request was for a prerender, abort the prerender and do not |
// continue. |
prerender::PrerenderContents* prerender_contents = |
@@ -626,7 +635,8 @@ void ChromeResourceDispatcherHostDelegate::OnStreamCreated( |
content::BrowserThread::PostTask( |
content::BrowserThread::UI, FROM_HERE, |
base::Bind(&SendExecuteMimeTypeHandlerEvent, base::Passed(&stream), |
- request->GetExpectedContentSize(), info->GetChildID(), |
+ request->GetExpectedContentSize(), |
+ info->GetWebContentsGetterForRequest(), info->GetChildID(), |
info->GetRenderFrameID(), ix->second.extension_id, |
ix->second.view_id, embedded)); |
stream_target_info_.erase(request); |