Commit 7771e52d authored by Min Qin's avatar Min Qin Committed by Commit Bot

move ResourceDownloader to components/download

No functional changes, just moving the files
ResourceDownloader no longer has any dependencies on content/ now

Bug: 803135
Change-Id: If1be16e03f4581ec4fb6eec4051c22b37d75797f
Reviewed-on: https://chromium-review.googlesource.com/962966Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Reviewed-by: default avatarBo <boliu@chromium.org>
Commit-Queue: Min Qin <qinmin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#544239}
parent c0107ef9
......@@ -27,6 +27,7 @@ source_set("internal") {
"download_utils.cc",
"parallel_download_utils.cc",
"rate_estimator.cc",
"resource_downloader.cc",
"stream_handle_input_stream.cc",
]
......
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/download/resource_downloader.h"
#include "components/download/public/common/resource_downloader.h"
#include <memory>
......@@ -14,7 +14,7 @@ namespace network {
struct ResourceResponseHead;
}
namespace content {
namespace download {
// This object monitors the URLLoaderCompletionStatus change when
// ResourceDownloader is asking |delegate_| whether download can proceed.
......@@ -59,7 +59,7 @@ void URLLoaderStatusMonitor::OnComplete(
// static
std::unique_ptr<ResourceDownloader> ResourceDownloader::BeginDownload(
base::WeakPtr<UrlDownloadHandler::Delegate> delegate,
std::unique_ptr<download::DownloadUrlParameters> params,
std::unique_ptr<DownloadUrlParameters> params,
std::unique_ptr<network::ResourceRequest> request,
scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory,
const GURL& site_url,
......@@ -129,15 +129,15 @@ ResourceDownloader::~ResourceDownloader() = default;
void ResourceDownloader::Start(
scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory,
std::unique_ptr<download::DownloadUrlParameters> download_url_parameters,
std::unique_ptr<DownloadUrlParameters> download_url_parameters,
bool is_parallel_request) {
callback_ = download_url_parameters->callback();
guid_ = download_url_parameters->guid();
// Set up the URLLoaderClient.
url_loader_client_ = std::make_unique<download::DownloadResponseHandler>(
url_loader_client_ = std::make_unique<DownloadResponseHandler>(
resource_request_.get(), this,
std::make_unique<download::DownloadSaveInfo>(
std::make_unique<DownloadSaveInfo>(
download_url_parameters->GetSaveInfo()),
is_parallel_request, download_url_parameters->is_transient(),
download_url_parameters->fetch_error_body(),
......@@ -174,13 +174,12 @@ void ResourceDownloader::InterceptResponse(
url_loader_.Bind(std::move(endpoints->url_loader));
// Create the new URLLoaderClient that will intercept the navigation.
auto save_info = std::make_unique<download::DownloadSaveInfo>();
auto save_info = std::make_unique<DownloadSaveInfo>();
if (suggested_filename.has_value())
save_info->suggested_name = base::UTF8ToUTF16(suggested_filename.value());
url_loader_client_ = std::make_unique<download::DownloadResponseHandler>(
url_loader_client_ = std::make_unique<DownloadResponseHandler>(
resource_request_.get(), this, std::move(save_info), false, false, false,
std::string(), download::DownloadSource::NAVIGATION,
std::move(url_chain));
std::string(), DownloadSource::NAVIGATION, std::move(url_chain));
// Simulate on the new URLLoaderClient calls that happened on the old client.
net::SSLInfo info;
......@@ -196,8 +195,8 @@ void ResourceDownloader::InterceptResponse(
}
void ResourceDownloader::OnResponseStarted(
std::unique_ptr<download::DownloadCreateInfo> download_create_info,
download::mojom::DownloadStreamHandlePtr stream_handle) {
std::unique_ptr<DownloadCreateInfo> download_create_info,
mojom::DownloadStreamHandlePtr stream_handle) {
download_create_info->download_id = download_id_;
download_create_info->guid = guid_;
download_create_info->site_url = site_url_;
......@@ -208,15 +207,15 @@ void ResourceDownloader::OnResponseStarted(
delegate_task_runner_->PostTask(
FROM_HERE,
base::BindOnce(&UrlDownloadHandler::Delegate::OnUrlDownloadStarted,
delegate_, std::move(download_create_info),
std::make_unique<download::StreamHandleInputStream>(
std::move(stream_handle)),
callback_));
base::BindOnce(
&UrlDownloadHandler::Delegate::OnUrlDownloadStarted, delegate_,
std::move(download_create_info),
std::make_unique<StreamHandleInputStream>(std::move(stream_handle)),
callback_));
}
void ResourceDownloader::OnReceiveRedirect() {
url_loader_->FollowRedirect();
}
} // namespace content
} // namespace download
......@@ -47,6 +47,7 @@ component("public") {
"input_stream.h",
"parallel_download_utils.h",
"rate_estimator.h",
"resource_downloader.h",
"resume_mode.h",
"stream_handle_input_stream.h",
]
......
......@@ -2,11 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_DOWNLOAD_RESOURCE_DOWNLOADER_
#define CONTENT_BROWSER_DOWNLOAD_RESOURCE_DOWNLOADER_
#ifndef COMPONENTS_DOWNLOAD_PUBLIC_COMMON_RESOURCE_DOWNLOADER_H_
#define COMPONENTS_DOWNLOAD_PUBLIC_COMMON_RESOURCE_DOWNLOADER_H_
#include "components/download/public/common/download_export.h"
#include "components/download/public/common/download_response_handler.h"
#include "content/browser/download/url_download_handler.h"
#include "components/download/public/common/url_download_handler.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "net/cert/cert_status_flags.h"
#include "services/network/public/cpp/resource_request.h"
......@@ -16,15 +17,16 @@ namespace network {
class SharedURLLoaderFactory;
}
namespace content {
namespace download {
// Class for handing the download of a url.
class ResourceDownloader : public UrlDownloadHandler,
public download::DownloadResponseHandler::Delegate {
class COMPONENTS_DOWNLOAD_EXPORT ResourceDownloader
: public download::UrlDownloadHandler,
public download::DownloadResponseHandler::Delegate {
public:
// Called to start a download, must be called on IO thread.
static std::unique_ptr<ResourceDownloader> BeginDownload(
base::WeakPtr<UrlDownloadHandler::Delegate> delegate,
base::WeakPtr<download::UrlDownloadHandler::Delegate> delegate,
std::unique_ptr<download::DownloadUrlParameters> download_url_parameters,
std::unique_ptr<network::ResourceRequest> request,
scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory,
......@@ -86,7 +88,7 @@ class ResourceDownloader : public UrlDownloadHandler,
net::CertStatus cert_status,
network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints);
base::WeakPtr<UrlDownloadHandler::Delegate> delegate_;
base::WeakPtr<download::UrlDownloadHandler::Delegate> delegate_;
// The ResourceRequest for this object.
std::unique_ptr<network::ResourceRequest> resource_request_;
......@@ -135,6 +137,6 @@ class ResourceDownloader : public UrlDownloadHandler,
DISALLOW_COPY_AND_ASSIGN(ResourceDownloader);
};
} // namespace content
} // namespace download
#endif // CONTENT_BROWSER_DOWNLOAD_RESOURCE_DOWNLOADER_
#endif // COMPONENTS_DOWNLOAD_PUBLIC_COMMON_RESOURCE_DOWNLOADER_H_
......@@ -2,29 +2,26 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_DOWNLOAD_URL_DOWNLOAD_HANDLER
#define CONTENT_BROWSER_DOWNLOAD_URL_DOWNLOAD_HANDLER
#ifndef COMPONENTS_DOWNLOAD_PUBLIC_COMMON_URL_DOWNLOAD_HANDLER_H_
#define COMPONENTS_DOWNLOAD_PUBLIC_COMMON_URL_DOWNLOAD_HANDLER_H_
#include "components/download/public/common/download_export.h"
#include "components/download/public/common/download_url_parameters.h"
#include "content/common/content_export.h"
namespace download {
struct DownloadCreateInfo;
class InputStream;
} // namespace download
namespace content {
// Class for handling the download of a url. Implemented by child classes.
class CONTENT_EXPORT UrlDownloadHandler {
class COMPONENTS_DOWNLOAD_EXPORT UrlDownloadHandler {
public:
// Class to be notified when download starts/stops.
class CONTENT_EXPORT Delegate {
class COMPONENTS_DOWNLOAD_EXPORT Delegate {
public:
virtual void OnUrlDownloadStarted(
std::unique_ptr<download::DownloadCreateInfo> download_create_info,
std::unique_ptr<download::InputStream> input_stream,
const download::DownloadUrlParameters::OnStartedCallback& callback) = 0;
std::unique_ptr<DownloadCreateInfo> download_create_info,
std::unique_ptr<InputStream> input_stream,
const DownloadUrlParameters::OnStartedCallback& callback) = 0;
// Called after the connection is cancelled or finished.
virtual void OnUrlDownloadStopped(UrlDownloadHandler* downloader) = 0;
};
......@@ -35,6 +32,6 @@ class CONTENT_EXPORT UrlDownloadHandler {
DISALLOW_COPY_AND_ASSIGN(UrlDownloadHandler);
};
} // namespace content
} // namespace download
#endif // CONTENT_BROWSER_DOWNLOAD_URL_DOWNLOAD_HANDLER
#endif // COMPONENTS_DOWNLOAD_PUBLIC_COMMON_URL_DOWNLOAD_HANDLER_H_
......@@ -725,8 +725,6 @@ jumbo_source_set("browser") {
"download/parallel_download_job.h",
"download/parallel_download_utils.cc",
"download/parallel_download_utils.h",
"download/resource_downloader.cc",
"download/resource_downloader.h",
"download/save_file.cc",
"download/save_file.h",
"download/save_file_manager.cc",
......@@ -739,7 +737,6 @@ jumbo_source_set("browser") {
"download/save_package_download_job.h",
"download/save_types.cc",
"download/save_types.h",
"download/url_download_handler.h",
"download/url_downloader.cc",
"download/url_downloader.h",
"field_trial_recorder.cc",
......
......@@ -33,6 +33,7 @@
#include "components/download/public/common/download_stats.h"
#include "components/download/public/common/download_task_runner.h"
#include "components/download/public/common/download_url_parameters.h"
#include "components/download/public/common/resource_downloader.h"
#include "content/browser/byte_stream.h"
#include "content/browser/child_process_security_policy_impl.h"
#include "content/browser/download/byte_stream_input_stream.h"
......@@ -40,7 +41,6 @@
#include "content/browser/download/download_item_impl.h"
#include "content/browser/download/download_resource_handler.h"
#include "content/browser/download/download_utils.h"
#include "content/browser/download/resource_downloader.h"
#include "content/browser/download/url_downloader.h"
#include "content/browser/loader/resource_dispatcher_host_impl.h"
#include "content/browser/loader/resource_request_info_impl.h"
......@@ -233,7 +233,7 @@ DownloadManagerImpl::UniqueUrlDownloadHandlerPtr BeginResourceDownload(
// This is already done for context menu download, but it is missing for
// download service and download resumption.
return DownloadManagerImpl::UniqueUrlDownloadHandlerPtr(
ResourceDownloader::BeginDownload(
download::ResourceDownloader::BeginDownload(
download_manager, std::move(params), std::move(request),
std::move(shared_url_loader_factory), site_url, tab_url,
tab_referrer_url, download_id, false, task_runner)
......@@ -1092,7 +1092,8 @@ void DownloadManagerImpl::OnUrlDownloadStarted(
StartDownload(std::move(download_create_info), std::move(stream), callback);
}
void DownloadManagerImpl::OnUrlDownloadStopped(UrlDownloadHandler* downloader) {
void DownloadManagerImpl::OnUrlDownloadStopped(
download::UrlDownloadHandler* downloader) {
for (auto ptr = url_download_handlers_.begin();
ptr != url_download_handlers_.end(); ++ptr) {
if (ptr->get() == downloader) {
......@@ -1193,8 +1194,8 @@ void DownloadManagerImpl::CreateDownloadHandlerForNavigation(
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
std::unique_ptr<ResourceDownloader> resource_downloader =
ResourceDownloader::InterceptNavigationResponse(
std::unique_ptr<download::ResourceDownloader> resource_downloader =
download::ResourceDownloader::InterceptNavigationResponse(
download_manager, std::move(resource_request), render_process_id,
render_frame_id, site_url, tab_url, tab_referrer_url,
std::move(url_chain), suggested_filename, std::move(response),
......
......@@ -21,8 +21,8 @@
#include "base/sequenced_task_runner_helpers.h"
#include "base/synchronization/lock.h"
#include "components/download/public/common/download_url_parameters.h"
#include "components/download/public/common/url_download_handler.h"
#include "content/browser/download/download_item_impl_delegate.h"
#include "content/browser/download/url_download_handler.h"
#include "content/browser/loader/navigation_url_loader.h"
#include "content/common/content_export.h"
#include "content/public/browser/browser_thread.h"
......@@ -42,13 +42,15 @@ class DownloadItemFactory;
class DownloadItemImpl;
class ResourceContext;
class CONTENT_EXPORT DownloadManagerImpl : public DownloadManager,
public UrlDownloadHandler::Delegate,
private DownloadItemImplDelegate {
class CONTENT_EXPORT DownloadManagerImpl
: public DownloadManager,
public download::UrlDownloadHandler::Delegate,
private DownloadItemImplDelegate {
public:
using DownloadItemImplCreated = base::Callback<void(DownloadItemImpl*)>;
using UniqueUrlDownloadHandlerPtr =
std::unique_ptr<UrlDownloadHandler, BrowserThread::DeleteOnIOThread>;
std::unique_ptr<download::UrlDownloadHandler,
BrowserThread::DeleteOnIOThread>;
// Caller guarantees that |net_log| will remain valid
// for the lifetime of DownloadManagerImpl (until Shutdown() is called).
......@@ -133,7 +135,7 @@ class CONTENT_EXPORT DownloadManagerImpl : public DownloadManager,
std::unique_ptr<download::InputStream> stream,
const download::DownloadUrlParameters::OnStartedCallback& callback)
override;
void OnUrlDownloadStopped(UrlDownloadHandler* downloader) override;
void OnUrlDownloadStopped(download::UrlDownloadHandler* downloader) override;
// For testing; specifically, accessed from TestFileErrorInjector.
void SetDownloadItemFactoryForTesting(
......
......@@ -8,9 +8,9 @@
#include "components/download/public/common/download_create_info.h"
#include "components/download/public/common/download_interrupt_reasons.h"
#include "components/download/public/common/input_stream.h"
#include "components/download/public/common/resource_downloader.h"
#include "content/browser/download/download_utils.h"
#include "content/browser/download/resource_downloader.h"
#include "content/public/browser/web_contents.h"
#include "content/browser/download/url_downloader.h"
#include "content/public/common/content_features.h"
#include "services/network/public/cpp/features.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
......@@ -43,10 +43,10 @@ class CompletedInputStream : public download::InputStream {
DISALLOW_COPY_AND_ASSIGN(CompletedInputStream);
};
std::unique_ptr<UrlDownloadHandler, BrowserThread::DeleteOnIOThread>
std::unique_ptr<download::UrlDownloadHandler, BrowserThread::DeleteOnIOThread>
CreateUrlDownloadHandler(
std::unique_ptr<download::DownloadUrlParameters> params,
base::WeakPtr<UrlDownloadHandler::Delegate> delegate,
base::WeakPtr<download::UrlDownloadHandler::Delegate> delegate,
scoped_refptr<URLLoaderFactoryGetter> url_loader_factory_getter,
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
......@@ -54,8 +54,9 @@ CreateUrlDownloadHandler(
if (base::FeatureList::IsEnabled(network::features::kNetworkService)) {
std::unique_ptr<network::ResourceRequest> request =
CreateResourceRequest(params.get());
return std::unique_ptr<ResourceDownloader, BrowserThread::DeleteOnIOThread>(
ResourceDownloader::BeginDownload(
return std::unique_ptr<download::ResourceDownloader,
BrowserThread::DeleteOnIOThread>(
download::ResourceDownloader::BeginDownload(
delegate, std::move(params), std::move(request),
url_loader_factory_getter->GetNetworkFactory(), GURL(), GURL(),
GURL(), download::DownloadItem::kInvalidId, true, task_runner)
......@@ -158,15 +159,16 @@ void DownloadWorker::OnUrlDownloadStarted(
delegate_->OnInputStreamReady(this, std::move(input_stream));
}
void DownloadWorker::OnUrlDownloadStopped(UrlDownloadHandler* downloader) {
void DownloadWorker::OnUrlDownloadStopped(
download::UrlDownloadHandler* downloader) {
// Release the |url_download_handler_|, the object will be deleted on IO
// thread.
url_download_handler_.reset();
}
void DownloadWorker::AddUrlDownloadHandler(
std::unique_ptr<UrlDownloadHandler, BrowserThread::DeleteOnIOThread>
downloader) {
std::unique_ptr<download::UrlDownloadHandler,
BrowserThread::DeleteOnIOThread> downloader) {
url_download_handler_ = std::move(downloader);
}
......
......@@ -11,7 +11,8 @@
#include "base/memory/weak_ptr.h"
#include "components/download/public/common/download_request_handle_interface.h"
#include "components/download/public/common/download_url_parameters.h"
#include "content/browser/download/url_downloader.h"
#include "components/download/public/common/url_download_handler.h"
#include "content/browser/download/download_request_core.h"
#include "content/browser/url_loader_factory_getter.h"
#include "content/common/content_export.h"
#include "content/public/browser/browser_thread.h"
......@@ -22,7 +23,8 @@ namespace content {
// file after handling response of the original non-range request.
// TODO(xingliu): we should consider to reuse this class for single connection
// download.
class CONTENT_EXPORT DownloadWorker : public UrlDownloadHandler::Delegate {
class CONTENT_EXPORT DownloadWorker
: public download::UrlDownloadHandler::Delegate {
public:
class Delegate {
public:
......@@ -59,11 +61,11 @@ class CONTENT_EXPORT DownloadWorker : public UrlDownloadHandler::Delegate {
std::unique_ptr<download::InputStream> input_stream,
const download::DownloadUrlParameters::OnStartedCallback& callback)
override;
void OnUrlDownloadStopped(UrlDownloadHandler* downloader) override;
void OnUrlDownloadStopped(download::UrlDownloadHandler* downloader) override;
void AddUrlDownloadHandler(
std::unique_ptr<UrlDownloadHandler, BrowserThread::DeleteOnIOThread>
downloader);
std::unique_ptr<download::UrlDownloadHandler,
BrowserThread::DeleteOnIOThread> downloader);
DownloadWorker::Delegate* const delegate_;
......@@ -82,7 +84,7 @@ class CONTENT_EXPORT DownloadWorker : public UrlDownloadHandler::Delegate {
std::unique_ptr<download::DownloadRequestHandleInterface> request_handle_;
// Used to handle the url request. Live and die on IO thread.
std::unique_ptr<UrlDownloadHandler, BrowserThread::DeleteOnIOThread>
std::unique_ptr<download::UrlDownloadHandler, BrowserThread::DeleteOnIOThread>
url_download_handler_;
base::WeakPtrFactory<DownloadWorker> weak_factory_;
......
......@@ -167,8 +167,8 @@ class ParallelDownloadJobTest : public testing::Test {
void MakeWorkerReady(
DownloadWorker* worker,
std::unique_ptr<MockDownloadRequestHandle> request_handle) {
UrlDownloadHandler::Delegate* delegate =
static_cast<UrlDownloadHandler::Delegate*>(worker);
download::UrlDownloadHandler::Delegate* delegate =
static_cast<download::UrlDownloadHandler::Delegate*>(worker);
std::unique_ptr<download::DownloadCreateInfo> create_info =
std::make_unique<download::DownloadCreateInfo>();
create_info->request_handle = std::move(request_handle);
......
......@@ -64,7 +64,7 @@ class UrlDownloader::RequestHandle
// static
std::unique_ptr<UrlDownloader> UrlDownloader::BeginDownload(
base::WeakPtr<UrlDownloadHandler::Delegate> delegate,
base::WeakPtr<download::UrlDownloadHandler::Delegate> delegate,
std::unique_ptr<net::URLRequest> request,
download::DownloadUrlParameters* params,
bool is_parallel_request) {
......@@ -90,7 +90,7 @@ std::unique_ptr<UrlDownloader> UrlDownloader::BeginDownload(
UrlDownloader::UrlDownloader(
std::unique_ptr<net::URLRequest> request,
base::WeakPtr<UrlDownloadHandler::Delegate> delegate,
base::WeakPtr<download::UrlDownloadHandler::Delegate> delegate,
bool is_parallel_request,
const std::string& request_origin,
download::DownloadSource download_source)
......@@ -227,8 +227,8 @@ void UrlDownloader::OnStart(
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::BindOnce(
&UrlDownloadHandler::Delegate::OnUrlDownloadStarted, delegate_,
std::move(create_info),
&download::UrlDownloadHandler::Delegate::OnUrlDownloadStarted,
delegate_, std::move(create_info),
std::make_unique<ByteStreamInputStream>(std::move(stream_reader)),
callback));
}
......@@ -252,8 +252,9 @@ void UrlDownloader::CancelRequest() {
void UrlDownloader::Destroy() {
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::BindOnce(&UrlDownloadHandler::Delegate::OnUrlDownloadStopped,
delegate_, this));
base::BindOnce(
&download::UrlDownloadHandler::Delegate::OnUrlDownloadStopped,
delegate_, this));
}
} // namespace content
......@@ -11,8 +11,8 @@
#include "base/memory/weak_ptr.h"
#include "components/download/public/common/download_url_parameters.h"
#include "components/download/public/common/url_download_handler.h"
#include "content/browser/download/download_request_core.h"
#include "content/browser/download/url_download_handler.h"
#include "content/public/common/referrer.h"
#include "net/url_request/redirect_info.h"
#include "net/url_request/url_request.h"
......@@ -26,7 +26,7 @@ class ByteStreamReader;
class UrlDownloader : public net::URLRequest::Delegate,
public DownloadRequestCore::Delegate,
public UrlDownloadHandler {
public download::UrlDownloadHandler {
public:
UrlDownloader(std::unique_ptr<net::URLRequest> request,
base::WeakPtr<UrlDownloadHandler::Delegate> delegate,
......@@ -36,7 +36,7 @@ class UrlDownloader : public net::URLRequest::Delegate,
~UrlDownloader() override;
static std::unique_ptr<UrlDownloader> BeginDownload(
base::WeakPtr<UrlDownloadHandler::Delegate> delegate,
base::WeakPtr<download::UrlDownloadHandler::Delegate> delegate,
std::unique_ptr<net::URLRequest> request,
download::DownloadUrlParameters* params,
bool is_parallel_request);
......@@ -76,7 +76,7 @@ class UrlDownloader : public net::URLRequest::Delegate,
std::unique_ptr<net::URLRequest> request_;
// Live on UI thread, post task to call |delegate_| functions.
base::WeakPtr<UrlDownloadHandler::Delegate> delegate_;
base::WeakPtr<download::UrlDownloadHandler::Delegate> delegate_;
DownloadRequestCore core_;
base::WeakPtrFactory<UrlDownloader> weak_ptr_factory_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment