diff options
author | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-07 15:39:55 +0000 |
---|---|---|
committer | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-07 15:39:55 +0000 |
commit | 2799c02a46d0d8d2726f19c8b100ff67504a7349 (patch) | |
tree | 184426e3ce12615457a274e62ab3abcdf2152d81 /chrome/browser/renderer_host | |
parent | 2fa7c5c06d6fd30d23af3e71942d18d91eaf9b58 (diff) | |
download | chromium_src-2799c02a46d0d8d2726f19c8b100ff67504a7349.zip chromium_src-2799c02a46d0d8d2726f19c8b100ff67504a7349.tar.gz chromium_src-2799c02a46d0d8d2726f19c8b100ff67504a7349.tar.bz2 |
Amit, please review everything.
jam, please review changes to the plugin create channel IPCs.
mpcomplete, please review changes to chrome_plugin_host.cc
ChromeFrame needs to intercept URL requests issued directly by plugins like gears to ensure that they
get routed through the host browser network stack. We decide whether or not a request is to be handled
based on the renderer process id and the render view id (routing id), which get passed in the
ViewHostMsg_RequestResource IPC. If this request is issued by Gears then the routing id comes in as
MSG_ROUTING_NONE, which causes the request to go through the chrome network stack.
Fix is to pass the host render view id to the plugin in the PluginMsg_Init IPC. The plugin already
receives the renderer process id. Both these ids now come back in the ViewHostMsg_RequestResource
IPC.
This fixes an issue with wave when rendered in full tab mode in ChromeFrame, where dropping a file into
a wave would cause the renderer to hang.
Fixes bug http://code.google.com/p/chromium/issues/detail?id=23992
Bug=23992
Review URL: http://codereview.chromium.org/370007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@31387 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
3 files changed, 30 insertions, 6 deletions
diff --git a/chrome/browser/renderer_host/resource_dispatcher_host.cc b/chrome/browser/renderer_host/resource_dispatcher_host.cc index 8f51253..7ab4a67 100644 --- a/chrome/browser/renderer_host/resource_dispatcher_host.cc +++ b/chrome/browser/renderer_host/resource_dispatcher_host.cc @@ -600,7 +600,9 @@ void ResourceDispatcherHost::BeginRequest( request_data.resource_type, upload_size, false, // is download - ResourceType::IsFrame(request_data.resource_type)); // allow_download + ResourceType::IsFrame(request_data.resource_type), // allow_download + request_data.host_renderer_id, + request_data.host_render_view_id); SetRequestInfo(request, extra_info); // Request takes ownership. chrome_browser_net::SetOriginProcessUniqueIDForRequest( request_data.origin_child_id, request); @@ -753,7 +755,9 @@ void ResourceDispatcherHost::BeginDownload(const GURL& url, ResourceType::SUB_RESOURCE, 0, // upload_size true, // is_download - true); // allow_download + true, // allow_download + -1, // Host renderer id + -1); // Host render view id SetRequestInfo(request, extra_info); // Request takes ownership. chrome_browser_net::SetOriginProcessUniqueIDForRequest(child_id, request); @@ -809,7 +813,10 @@ void ResourceDispatcherHost::BeginSaveFile(const GURL& url, ResourceType::SUB_RESOURCE, 0, // upload_size false, // is_download - false); // allow_download + false, // allow_download + -1, // Host renderer id + -1); // Host render view id + SetRequestInfo(request, extra_info); // Request takes ownership. chrome_browser_net::SetOriginProcessUniqueIDForRequest(child_id, request); diff --git a/chrome/browser/renderer_host/resource_dispatcher_host_request_info.cc b/chrome/browser/renderer_host/resource_dispatcher_host_request_info.cc index bd488e7..23ba684 100644 --- a/chrome/browser/renderer_host/resource_dispatcher_host_request_info.cc +++ b/chrome/browser/renderer_host/resource_dispatcher_host_request_info.cc @@ -17,7 +17,9 @@ ResourceDispatcherHostRequestInfo::ResourceDispatcherHostRequestInfo( ResourceType::Type resource_type, uint64 upload_size, bool is_download, - bool allow_download) + bool allow_download, + int host_renderer_id, + int host_render_view_id) : resource_handler_(handler), cross_site_handler_(NULL), login_handler_(NULL), @@ -42,7 +44,9 @@ ResourceDispatcherHostRequestInfo::ResourceDispatcherHostRequestInfo( is_paused_(false), called_on_response_started_(false), has_started_reading_(false), - paused_read_bytes_(0) { + paused_read_bytes_(0), + host_renderer_id_(host_renderer_id), + host_render_view_id_(host_render_view_id) { } ResourceDispatcherHostRequestInfo::~ResourceDispatcherHostRequestInfo() { diff --git a/chrome/browser/renderer_host/resource_dispatcher_host_request_info.h b/chrome/browser/renderer_host/resource_dispatcher_host_request_info.h index 7ceb760..affd32d 100644 --- a/chrome/browser/renderer_host/resource_dispatcher_host_request_info.h +++ b/chrome/browser/renderer_host/resource_dispatcher_host_request_info.h @@ -37,7 +37,9 @@ class ResourceDispatcherHostRequestInfo : public URLRequest::UserData { ResourceType::Type resource_type, uint64 upload_size, bool is_download, - bool allow_download); + bool allow_download, + int host_renderer_id, + int host_render_view_id); virtual ~ResourceDispatcherHostRequestInfo(); // Top-level ResourceHandler servicing this request. @@ -157,6 +159,9 @@ class ResourceDispatcherHostRequestInfo : public URLRequest::UserData { int memory_cost() const { return memory_cost_; } void set_memory_cost(int cost) { memory_cost_ = cost; } + int host_renderer_id() const { return host_renderer_id_; } + int host_render_view_id() const { return host_render_view_id_; } + private: friend class ResourceDispatcherHost; @@ -219,6 +224,14 @@ class ResourceDispatcherHostRequestInfo : public URLRequest::UserData { bool has_started_reading_; int paused_read_bytes_; + // The following two members are specified if the request is initiated by + // a plugin like Gears. + + // Contains the id of the host renderer. + int host_renderer_id_; + // Contains the id of the host render view. + int host_render_view_id_; + DISALLOW_COPY_AND_ASSIGN(ResourceDispatcherHostRequestInfo); }; |