| Index: content/browser/renderer_host/render_message_filter.cc
|
| diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc
|
| index 29e1e1f199a4d0cfe286083e5f870ecdcd337bcf..7adc14c0a302b7210dcddf110603b37b5a277777 100644
|
| --- a/content/browser/renderer_host/render_message_filter.cc
|
| +++ b/content/browser/renderer_host/render_message_filter.cc
|
| @@ -40,6 +40,7 @@
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/content_browser_client.h"
|
| #include "content/public/browser/download_save_info.h"
|
| +#include "content/public/browser/download_url_parameters.h"
|
| #include "content/public/browser/plugin_service_filter.h"
|
| #include "content/public/browser/resource_context.h"
|
| #include "content/public/browser/user_metrics.h"
|
| @@ -202,6 +203,24 @@ class OpenChannelToPpapiBrokerCallback
|
| int routing_id_;
|
| };
|
|
|
| +// Run on the UI thread to initiate a download.
|
| +void BeginDownloadOnUIThread(int render_process_id,
|
| + int routing_id,
|
| + const GURL& url,
|
| + const content::Referrer& referrer,
|
| + const string16& suggested_name,
|
| + ResourceContext* resource_context) {
|
| + RenderProcessHost* rph = RenderProcessHost::FromID(render_process_id);
|
| + DownloadManager* download_manager =
|
| + BrowserContext::GetDownloadManager(rph->GetBrowserContext());
|
| + scoped_ptr<DownloadUrlParameters> download_params(new DownloadUrlParameters(
|
| + url, render_process_id, routing_id, resource_context));
|
| + download_params->set_suggested_name(suggested_name);
|
| + download_params->set_referrer(referrer);
|
| + download_params->set_content_initiated(true);
|
| + download_manager->DownloadUrl(download_params.Pass());
|
| +}
|
| +
|
| } // namespace
|
|
|
| class RenderMessageFilter::OpenChannelToNpapiPluginCallback
|
| @@ -831,22 +850,15 @@ void RenderMessageFilter::OnDownloadUrl(const IPC::Message& message,
|
| const GURL& url,
|
| const Referrer& referrer,
|
| const string16& suggested_name) {
|
| - scoped_ptr<DownloadSaveInfo> save_info(new DownloadSaveInfo());
|
| - save_info->suggested_name = suggested_name;
|
| - scoped_ptr<net::URLRequest> request(
|
| - resource_context_->GetRequestContext()->CreateRequest(url, NULL));
|
| - RecordDownloadSource(INITIATED_BY_RENDERER);
|
| - resource_dispatcher_host_->BeginDownload(
|
| - request.Pass(),
|
| - referrer,
|
| - true, // is_content_initiated
|
| - resource_context_,
|
| - render_process_id_,
|
| - message.routing_id(),
|
| - false,
|
| - save_info.Pass(),
|
| - content::DownloadItem::kInvalidId,
|
| - ResourceDispatcherHostImpl::DownloadStartedCallback());
|
| + BrowserThread::PostTask(BrowserThread::UI,
|
| + FROM_HERE,
|
| + base::Bind(&BeginDownloadOnUIThread,
|
| + render_process_id_,
|
| + message.routing_id(),
|
| + url,
|
| + referrer,
|
| + suggested_name,
|
| + resource_context_));
|
| }
|
|
|
| void RenderMessageFilter::OnCheckNotificationPermission(
|
|
|