Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Unified Diff: content/browser/download/download_manager_impl.cc

Issue 2498193003: [WIP not ready for review] ServiceWorker Download support.
Patch Set: rebase Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/download/download_manager_impl.h ('k') | content/browser/download/save_file_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/download/download_manager_impl.cc
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc
index 8131d2740b1bbc811762e9fd9e361eda65287c10..aca05d2741b1a6d8864070ae221af50cebd2c45f 100644
--- a/content/browser/download/download_manager_impl.cc
+++ b/content/browser/download/download_manager_impl.cc
@@ -32,6 +32,7 @@
#include "content/browser/loader/resource_dispatcher_host_impl.h"
#include "content/browser/loader/resource_request_info_impl.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
+#include "content/browser/service_worker/service_worker_context_wrapper.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/content_browser_client.h"
@@ -42,6 +43,7 @@
#include "content/public/browser/notification_types.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/resource_context.h"
+#include "content/public/browser/storage_partition.h"
#include "content/public/browser/web_contents_delegate.h"
#include "content/public/common/referrer.h"
#include "net/base/elements_upload_data_stream.h"
@@ -60,6 +62,7 @@ namespace {
std::unique_ptr<UrlDownloader, BrowserThread::DeleteOnIOThread> BeginDownload(
std::unique_ptr<DownloadUrlParameters> params,
content::ResourceContext* resource_context,
+ scoped_refptr<ServiceWorkerContextWrapper> service_worker_context,
uint32_t download_id,
base::WeakPtr<DownloadManagerImpl> download_manager) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
@@ -80,9 +83,10 @@ std::unique_ptr<UrlDownloader, BrowserThread::DeleteOnIOThread> BeginDownload(
if (params->render_process_host_id() >= 0) {
DownloadInterruptReason reason = DownloadManagerImpl::BeginDownloadRequest(
std::move(url_request), params->referrer(), resource_context,
- params->content_initiated(), params->render_process_host_id(),
- params->render_view_host_routing_id(),
+ service_worker_context.get(), params->content_initiated(),
+ params->render_process_host_id(), params->render_view_host_routing_id(),
params->render_frame_host_routing_id(),
+ params->service_worker_provider_id(),
params->do_not_prompt_for_login());
// If the download was accepted, the DownloadResourceHandler is now
@@ -483,7 +487,8 @@ void DownloadManagerImpl::ResumeInterruptedDownload(
BrowserThread::PostTaskAndReplyWithResult(
BrowserThread::IO, FROM_HERE,
base::Bind(&BeginDownload, base::Passed(&params),
- browser_context_->GetResourceContext(), id,
+ browser_context_->GetResourceContext(),
+ scoped_refptr<ServiceWorkerContextWrapper>(), id,
weak_factory_.GetWeakPtr()),
base::Bind(&DownloadManagerImpl::AddUrlDownloader,
weak_factory_.GetWeakPtr()));
@@ -533,10 +538,12 @@ DownloadInterruptReason DownloadManagerImpl::BeginDownloadRequest(
std::unique_ptr<net::URLRequest> url_request,
const Referrer& referrer,
ResourceContext* resource_context,
+ ServiceWorkerContextWrapper* service_worker_context,
bool is_content_initiated,
int render_process_id,
int render_view_route_id,
int render_frame_route_id,
+ int service_worker_provider_id,
bool do_not_prompt_for_login) {
if (ResourceDispatcherHostImpl::Get()->is_shutdown())
return DOWNLOAD_INTERRUPT_REASON_USER_SHUTDOWN;
@@ -547,7 +554,7 @@ DownloadInterruptReason DownloadManagerImpl::BeginDownloadRequest(
url_request.get(), referrer,
true, // download.
render_process_id, render_view_route_id, render_frame_route_id,
- resource_context);
+ service_worker_provider_id, resource_context, service_worker_context);
// We treat a download as a main frame load, and thus update the policy URL on
// redirects.
@@ -645,6 +652,16 @@ int DownloadManagerImpl::RemoveAllDownloads() {
void DownloadManagerImpl::DownloadUrl(
std::unique_ptr<DownloadUrlParameters> params) {
+ scoped_refptr<ServiceWorkerContextWrapper> service_worker_context;
+ RenderProcessHost* render_process_host =
+ RenderProcessHost::FromID(params->render_process_host_id());
+ if (render_process_host) {
+ StoragePartition* partition = render_process_host->GetStoragePartition();
+ if (partition) {
+ service_worker_context = static_cast<ServiceWorkerContextWrapper*>(
+ partition->GetServiceWorkerContext());
+ }
+ }
if (params->post_id() >= 0) {
// Check this here so that the traceback is more useful.
DCHECK(params->prefer_cache());
@@ -654,6 +671,7 @@ void DownloadManagerImpl::DownloadUrl(
BrowserThread::IO, FROM_HERE,
base::Bind(&BeginDownload, base::Passed(&params),
browser_context_->GetResourceContext(),
+ std::move(service_worker_context),
content::DownloadItem::kInvalidId, weak_factory_.GetWeakPtr()),
base::Bind(&DownloadManagerImpl::AddUrlDownloader,
weak_factory_.GetWeakPtr()));
« no previous file with comments | « content/browser/download/download_manager_impl.h ('k') | content/browser/download/save_file_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698