diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-10-17 11:23:26 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-10-21 08:13:41 +0000 |
commit | 2708f4fe1f1a4aca14d888303bbdc21bcf629a19 (patch) | |
tree | fe0622b16daa66b82132bc6b1930934fee879dfa | |
parent | 2a45953d844a6d1be6df8aeb7359a98daaa52ee2 (diff) | |
download | qtwebengine-chromium-2708f4fe1f1a4aca14d888303bbdc21bcf629a19.tar.gz |
[Backport] Plumb initiating origin info to download stack.
This CL passes along the initiating origin of a request down into
DownloadInfo and related objects. The current download objects store
substantial context related to where a download comes from, but not
enough to reliably determine requesting origin. This functionality
will be used in a subsequent CL to block some forms downloads as
mixed content.
Bug: 960819
Change-Id: Ifa2537141bb71c37665608e992ee91cd665c41ea
Reviewed-by: Min Qin <qinmin@chromium.org>
Reviewed-by: Joshua Bell <jsbell@chromium.org>
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Reviewed-by: Xi Han <hanxi@chromium.org>
Reviewed-by: Christopher Thompson <cthomp@chromium.org>
Commit-Queue: Joe DeBlasio <jdeblasio@chromium.org>
Cr-Commit-Position: refs/heads/master@{#658571}
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
17 files changed, 87 insertions, 30 deletions
diff --git a/chromium/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc b/chromium/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc index 949cb011bb7..cd1ef7d5fea 100644 --- a/chromium/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc +++ b/chromium/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc @@ -73,6 +73,7 @@ #include "storage/browser/fileapi/file_system_operation_runner.h" #include "storage/browser/fileapi/file_system_url.h" #include "ui/base/page_transition_types.h" +#include "url/origin.h" using content::BrowserContext; using content::BrowserThread; @@ -491,7 +492,7 @@ class DownloadExtensionTest : public ExtensionApiTest { base::GenerateGUID(), download::DownloadItem::kInvalidId + 1 + i, downloads_directory().Append(history_info[i].filename), downloads_directory().Append(history_info[i].filename), url_chain, - GURL(), GURL(), GURL(), GURL(), std::string(), + GURL(), GURL(), GURL(), GURL(), url::Origin(), std::string(), std::string(), // mime_type, original_mime_type current, current, // start_time, end_time diff --git a/chromium/components/download/internal/common/download_item_impl.cc b/chromium/components/download/internal/common/download_item_impl.cc index 4b536f504a4..3ac3f3cbc8e 100644 --- a/chromium/components/download/internal/common/download_item_impl.cc +++ b/chromium/components/download/internal/common/download_item_impl.cc @@ -220,6 +220,7 @@ DownloadItemImpl::RequestInfo::RequestInfo( const GURL& site_url, const GURL& tab_url, const GURL& tab_referrer_url, + const base::Optional<url::Origin>& request_initiator, const std::string& suggested_filename, const base::FilePath& forced_file_path, ui::PageTransition transition_type, @@ -231,6 +232,7 @@ DownloadItemImpl::RequestInfo::RequestInfo( site_url(site_url), tab_url(tab_url), tab_referrer_url(tab_referrer_url), + request_initiator(request_initiator), suggested_filename(suggested_filename), forced_file_path(forced_file_path), transition_type(transition_type), @@ -285,6 +287,7 @@ DownloadItemImpl::DownloadItemImpl( const GURL& site_url, const GURL& tab_url, const GURL& tab_refererr_url, + const base::Optional<url::Origin>& request_initiator, const std::string& mime_type, const std::string& original_mime_type, base::Time start_time, @@ -309,6 +312,7 @@ DownloadItemImpl::DownloadItemImpl( site_url, tab_url, tab_refererr_url, + request_initiator, std::string(), base::FilePath(), ui::PAGE_TRANSITION_LINK, @@ -358,6 +362,7 @@ DownloadItemImpl::DownloadItemImpl(DownloadItemImplDelegate* delegate, info.site_url, info.tab_url, info.tab_referrer_url, + info.request_initiator, base::UTF16ToUTF8(info.save_info->suggested_name), info.save_info->file_path, info.transition_type ? info.transition_type.value() @@ -753,6 +758,11 @@ const GURL& DownloadItemImpl::GetTabReferrerUrl() const { return request_info_.tab_referrer_url; } +const base::Optional<url::Origin>& DownloadItemImpl::GetRequestInitiator() + const { + return request_info_.request_initiator; +} + std::string DownloadItemImpl::GetSuggestedFilename() const { return request_info_.suggested_filename; } diff --git a/chromium/components/download/internal/common/download_response_handler.cc b/chromium/components/download/internal/common/download_response_handler.cc index acccd9169fe..4c2f1758b4e 100644 --- a/chromium/components/download/internal/common/download_response_handler.cc +++ b/chromium/components/download/internal/common/download_response_handler.cc @@ -80,7 +80,7 @@ DownloadResponseHandler::DownloadResponseHandler( RecordDownloadCountWithSource(UNTHROTTLED_COUNT, download_source); } if (resource_request->request_initiator.has_value()) - origin_ = resource_request->request_initiator.value().GetURL(); + request_initiator_ = resource_request->request_initiator; } DownloadResponseHandler::~DownloadResponseHandler() = default; @@ -103,10 +103,12 @@ void DownloadResponseHandler::OnReceiveResponse( // suggested name for the security origin of the downlaod URL. However, this // assumption doesn't hold if there were cross origin redirects. Therefore, // clear the suggested_name for such requests. - if (origin_.is_valid() && !create_info_->url_chain.back().SchemeIsBlob() && + if (request_initiator_.has_value() && + !create_info_->url_chain.back().SchemeIsBlob() && !create_info_->url_chain.back().SchemeIs(url::kAboutScheme) && !create_info_->url_chain.back().SchemeIs(url::kDataScheme) && - origin_ != create_info_->url_chain.back().GetOrigin()) { + request_initiator_.value() != + url::Origin::Create(create_info_->url_chain.back())) { create_info_->save_info->suggested_name.clear(); } @@ -143,6 +145,7 @@ DownloadResponseHandler::CreateDownloadCreateInfo( create_info->request_headers = request_headers_; create_info->request_origin = request_origin_; create_info->download_source = download_source_; + create_info->request_initiator = request_initiator_; HandleResponseHeaders(head.headers.get(), create_info.get()); return create_info; diff --git a/chromium/components/download/internal/common/in_progress_download_manager.cc b/chromium/components/download/internal/common/in_progress_download_manager.cc index abecb58e6b8..b85269fe6ad 100644 --- a/chromium/components/download/internal/common/in_progress_download_manager.cc +++ b/chromium/components/download/internal/common/in_progress_download_manager.cc @@ -49,14 +49,15 @@ std::unique_ptr<DownloadItemImpl> CreateDownloadItemImpl( in_progress_info->current_path, in_progress_info->target_path, in_progress_info->url_chain, in_progress_info->referrer_url, in_progress_info->site_url, in_progress_info->tab_url, - in_progress_info->tab_referrer_url, in_progress_info->mime_type, - in_progress_info->original_mime_type, in_progress_info->start_time, - in_progress_info->end_time, in_progress_info->etag, - in_progress_info->last_modified, in_progress_info->received_bytes, - in_progress_info->total_bytes, in_progress_info->auto_resume_count, - in_progress_info->hash, in_progress_info->state, - in_progress_info->danger_type, in_progress_info->interrupt_reason, - in_progress_info->paused, in_progress_info->metered, false, base::Time(), + in_progress_info->tab_referrer_url, base::nullopt, + in_progress_info->mime_type, in_progress_info->original_mime_type, + in_progress_info->start_time, in_progress_info->end_time, + in_progress_info->etag, in_progress_info->last_modified, + in_progress_info->received_bytes, in_progress_info->total_bytes, + in_progress_info->auto_resume_count, in_progress_info->hash, + in_progress_info->state, in_progress_info->danger_type, + in_progress_info->interrupt_reason, in_progress_info->paused, + in_progress_info->metered, false, base::Time(), in_progress_info->transient, in_progress_info->received_slices); } diff --git a/chromium/components/download/public/common/download_create_info.h b/chromium/components/download/public/common/download_create_info.h index ec793ca4218..a256220b70f 100644 --- a/chromium/components/download/public/common/download_create_info.h +++ b/chromium/components/download/public/common/download_create_info.h @@ -27,6 +27,7 @@ #include "services/metrics/public/cpp/ukm_source_id.h" #include "ui/base/page_transition_types.h" #include "url/gurl.h" +#include "url/origin.h" namespace net { class HttpResponseHeaders; @@ -67,6 +68,9 @@ struct COMPONENTS_DOWNLOAD_EXPORT DownloadCreateInfo { // The referrer URL of the tab that started us. GURL tab_referrer_url; + // The origin of the requester that originally initiated the download. + base::Optional<url::Origin> request_initiator; + // The time when the download started. base::Time start_time; diff --git a/chromium/components/download/public/common/download_item.h b/chromium/components/download/public/common/download_item.h index 3b5d743ca57..07365431d5d 100644 --- a/chromium/components/download/public/common/download_item.h +++ b/chromium/components/download/public/common/download_item.h @@ -26,12 +26,14 @@ #include "base/callback_forward.h" #include "base/files/file_path.h" #include "base/memory/ref_counted.h" +#include "base/optional.h" #include "base/strings/string16.h" #include "base/supports_user_data.h" #include "components/download/public/common/download_danger_type.h" #include "components/download/public/common/download_export.h" #include "components/download/public/common/download_interrupt_reasons.h" #include "ui/base/page_transition_types.h" +#include "url/origin.h" class GURL; @@ -265,6 +267,9 @@ class COMPONENTS_DOWNLOAD_EXPORT DownloadItem : public base::SupportsUserData { // Referrer URL for top level frame. virtual const GURL& GetTabReferrerUrl() const = 0; + // Origin of the original originator of this download, before redirects, etc. + virtual const base::Optional<url::Origin>& GetRequestInitiator() const = 0; + // For downloads initiated via <a download>, this is the suggested download // filename from the download attribute. virtual std::string GetSuggestedFilename() const = 0; diff --git a/chromium/components/download/public/common/download_item_factory.h b/chromium/components/download/public/common/download_item_factory.h index 0ceeea52ad6..8453cd85349 100644 --- a/chromium/components/download/public/common/download_item_factory.h +++ b/chromium/components/download/public/common/download_item_factory.h @@ -15,8 +15,10 @@ #include <string> #include <vector> +#include "base/optional.h" #include "components/download/public/common/download_export.h" #include "components/download/public/common/download_item.h" +#include "url/origin.h" class GURL; @@ -46,6 +48,7 @@ class COMPONENTS_DOWNLOAD_EXPORT DownloadItemFactory { const GURL& site_url, const GURL& tab_url, const GURL& tab_refererr_url, + const base::Optional<url::Origin>& initiator_origin, const std::string& mime_type, const std::string& original_mime_type, base::Time start_time, diff --git a/chromium/components/download/public/common/download_item_impl.h b/chromium/components/download/public/common/download_item_impl.h index 4ede432f44f..c704ecc629c 100644 --- a/chromium/components/download/public/common/download_item_impl.h +++ b/chromium/components/download/public/common/download_item_impl.h @@ -16,6 +16,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/observer_list.h" +#include "base/optional.h" #include "base/threading/thread_checker_impl.h" #include "base/time/time.h" #include "components/download/public/common/download_create_info.h" @@ -27,6 +28,7 @@ #include "components/download/public/common/download_url_parameters.h" #include "components/download/public/common/resume_mode.h" #include "url/gurl.h" +#include "url/origin.h" namespace net { class URLRequestContextGetter; @@ -53,6 +55,7 @@ class COMPONENTS_DOWNLOAD_EXPORT DownloadItemImpl const GURL& site_url, const GURL& tab_url, const GURL& tab_referrer_url, + const base::Optional<url::Origin>& request_initiator, const std::string& suggested_filename, const base::FilePath& forced_file_path, ui::PageTransition transition_type, @@ -79,6 +82,9 @@ class COMPONENTS_DOWNLOAD_EXPORT DownloadItemImpl // The URL of the referrer of the tab that initiated the download. GURL tab_referrer_url; + // The origin of the requester that originally initiated the download. + base::Optional<url::Origin> request_initiator; + // Filename suggestion from DownloadSaveInfo. It could, among others, be the // suggested filename in 'download' attribute of an anchor. Details: // http://www.whatwg.org/specs/web-apps/current-work/#downloading-hyperlinks @@ -169,6 +175,7 @@ class COMPONENTS_DOWNLOAD_EXPORT DownloadItemImpl const GURL& site_url, const GURL& tab_url, const GURL& tab_referrer_url, + const base::Optional<url::Origin>& request_initiator, const std::string& mime_type, const std::string& original_mime_type, base::Time start_time, @@ -238,6 +245,7 @@ class COMPONENTS_DOWNLOAD_EXPORT DownloadItemImpl const GURL& GetSiteUrl() const override; const GURL& GetTabUrl() const override; const GURL& GetTabReferrerUrl() const override; + const base::Optional<url::Origin>& GetRequestInitiator() const override; std::string GetSuggestedFilename() const override; const scoped_refptr<const net::HttpResponseHeaders>& GetResponseHeaders() const override; diff --git a/chromium/components/download/public/common/download_response_handler.h b/chromium/components/download/public/common/download_response_handler.h index b0967deba49..caaab574b06 100644 --- a/chromium/components/download/public/common/download_response_handler.h +++ b/chromium/components/download/public/common/download_response_handler.h @@ -8,6 +8,7 @@ #include <string> #include <vector> +#include "base/optional.h" #include "components/download/public/common/download_create_info.h" #include "components/download/public/common/download_export.h" #include "components/download/public/common/download_source.h" @@ -17,6 +18,7 @@ #include "net/cert/cert_status_flags.h" #include "services/network/public/cpp/resource_response.h" #include "services/network/public/mojom/url_loader.mojom.h" +#include "url/origin.h" namespace download { @@ -94,7 +96,7 @@ class COMPONENTS_DOWNLOAD_EXPORT DownloadResponseHandler DownloadSource download_source_; net::CertStatus cert_status_; bool has_strong_validators_; - GURL origin_; + base::Optional<url::Origin> request_initiator_; bool is_partial_request_; bool completed_; diff --git a/chromium/components/download/public/common/mock_download_item.h b/chromium/components/download/public/common/mock_download_item.h index 5bc0b0a37fd..36d8d0fa2b9 100644 --- a/chromium/components/download/public/common/mock_download_item.h +++ b/chromium/components/download/public/common/mock_download_item.h @@ -12,11 +12,13 @@ #include "base/callback.h" #include "base/observer_list.h" +#include "base/optional.h" #include "base/time/time.h" #include "components/download/public/common/download_interrupt_reasons.h" #include "components/download/public/common/download_item.h" #include "testing/gmock/include/gmock/gmock.h" #include "url/gurl.h" +#include "url/origin.h" namespace download { @@ -65,6 +67,7 @@ class MockDownloadItem : public DownloadItem { MOCK_CONST_METHOD0(GetSiteUrl, const GURL&()); MOCK_CONST_METHOD0(GetTabUrl, const GURL&()); MOCK_CONST_METHOD0(GetTabReferrerUrl, const GURL&()); + MOCK_CONST_METHOD0(GetRequestInitiator, const base::Optional<url::Origin>&()); MOCK_CONST_METHOD0(GetSuggestedFilename, std::string()); MOCK_CONST_METHOD0(GetContentDisposition, std::string()); MOCK_CONST_METHOD0(GetResponseHeaders, diff --git a/chromium/components/download/public/common/mock_download_item_impl.cc b/chromium/components/download/public/common/mock_download_item_impl.cc index 5282defc5f2..05b6a9117fc 100644 --- a/chromium/components/download/public/common/mock_download_item_impl.cc +++ b/chromium/components/download/public/common/mock_download_item_impl.cc @@ -17,6 +17,7 @@ MockDownloadItemImpl::MockDownloadItemImpl(DownloadItemImplDelegate* delegate) GURL(), GURL(), GURL(), + url::Origin(), "application/octet-stream", "application/octet-stream", base::Time(), diff --git a/chromium/components/download/public/common/mock_download_item_impl.h b/chromium/components/download/public/common/mock_download_item_impl.h index 7bbb9589d24..612485d1f7b 100644 --- a/chromium/components/download/public/common/mock_download_item_impl.h +++ b/chromium/components/download/public/common/mock_download_item_impl.h @@ -10,11 +10,13 @@ #include <vector> #include "base/macros.h" +#include "base/optional.h" #include "components/download/public/common/download_create_info.h" #include "components/download/public/common/download_file.h" #include "components/download/public/common/download_item_impl.h" #include "components/download/public/common/download_request_handle_interface.h" #include "testing/gmock/include/gmock/gmock.h" +#include "url/origin.h" namespace download { @@ -81,6 +83,7 @@ class MockDownloadItemImpl : public DownloadItemImpl { MOCK_CONST_METHOD0(GetReferrerUrl, const GURL&()); MOCK_CONST_METHOD0(GetTabUrl, const GURL&()); MOCK_CONST_METHOD0(GetTabReferrerUrl, const GURL&()); + MOCK_CONST_METHOD0(GetRequestInitiator, const base::Optional<url::Origin>&()); MOCK_CONST_METHOD0(GetSuggestedFilename, std::string()); MOCK_CONST_METHOD0(GetContentDisposition, std::string()); MOCK_CONST_METHOD0(GetMimeType, std::string()); diff --git a/chromium/content/browser/download/download_browsertest.cc b/chromium/content/browser/download/download_browsertest.cc index ed9e9c1de83..27b607702a1 100644 --- a/chromium/content/browser/download/download_browsertest.cc +++ b/chromium/content/browser/download/download_browsertest.cc @@ -73,6 +73,7 @@ #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/platform/web_mouse_event.h" #include "url/gurl.h" +#include "url/origin.h" #if BUILDFLAG(ENABLE_PLUGINS) #include "content/browser/plugin_service_impl.h" @@ -1039,7 +1040,7 @@ class ParallelDownloadTest : public DownloadContentTest { download::DownloadItem* download = DownloadManagerForShell(shell())->CreateDownloadItem( "F7FB1F59-7DE1-4845-AFDB-8A688F70F583", 1, path, base::FilePath(), - url_chain, GURL(), GURL(), GURL(), GURL(), + url_chain, GURL(), GURL(), GURL(), GURL(), url::Origin(), "application/octet-stream", "application/octet-stream", base::Time::Now(), base::Time(), parameters.etag, parameters.last_modified, total_bytes, parameters.size, @@ -2493,7 +2494,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_NoFile) { DownloadManagerForShell(shell())->CreateDownloadItem( "F7FB1F59-7DE1-4845-AFDB-8A688F70F583", 1, intermediate_file_path, base::FilePath(), url_chain, GURL(), GURL(), GURL(), GURL(), - "application/octet-stream", "application/octet-stream", + url::Origin(), "application/octet-stream", "application/octet-stream", base::Time::Now(), base::Time(), parameters.etag, std::string(), kIntermediateSize, parameters.size, std::string(), download::DownloadItem::INTERRUPTED, @@ -2559,7 +2560,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_NoHash) { DownloadManagerForShell(shell())->CreateDownloadItem( "F7FB1F59-7DE1-4845-AFDB-8A688F70F583", 1, intermediate_file_path, base::FilePath(), url_chain, GURL(), GURL(), GURL(), GURL(), - "application/octet-stream", "application/octet-stream", + url::Origin(), "application/octet-stream", "application/octet-stream", base::Time::Now(), base::Time(), parameters.etag, std::string(), kIntermediateSize, parameters.size, std::string(), download::DownloadItem::INTERRUPTED, @@ -2612,7 +2613,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, DownloadManagerForShell(shell())->CreateDownloadItem( "F7FB1F59-7DE1-4845-AFDB-8A688F70F583", 1, intermediate_file_path, base::FilePath(), url_chain, GURL(), GURL(), GURL(), GURL(), - "application/octet-stream", "application/octet-stream", + url::Origin(), "application/octet-stream", "application/octet-stream", base::Time::Now(), base::Time(), "fake-etag", std::string(), kIntermediateSize, parameters.size, std::string(), download::DownloadItem::INTERRUPTED, @@ -2671,7 +2672,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, DownloadManagerForShell(shell())->CreateDownloadItem( "F7FB1F59-7DE1-4845-AFDB-8A688F70F583", 1, intermediate_file_path, base::FilePath(), url_chain, GURL(), GURL(), GURL(), GURL(), - "application/octet-stream", "application/octet-stream", + url::Origin(), "application/octet-stream", "application/octet-stream", base::Time::Now(), base::Time(), parameters.etag, std::string(), kIntermediateSize, parameters.size, std::string(std::begin(kPartialHash), std::end(kPartialHash)), @@ -2737,7 +2738,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_WrongHash) { DownloadManagerForShell(shell())->CreateDownloadItem( "F7FB1F59-7DE1-4845-AFDB-8A688F70F583", 1, intermediate_file_path, base::FilePath(), url_chain, GURL(), GURL(), GURL(), GURL(), - "application/octet-stream", "application/octet-stream", + url::Origin(), "application/octet-stream", "application/octet-stream", base::Time::Now(), base::Time(), parameters.etag, std::string(), kIntermediateSize, parameters.size, std::string(std::begin(kPartialHash), std::end(kPartialHash)), @@ -2813,7 +2814,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_ShortFile) { DownloadManagerForShell(shell())->CreateDownloadItem( "F7FB1F59-7DE1-4845-AFDB-8A688F70F583", 1, intermediate_file_path, base::FilePath(), url_chain, GURL(), GURL(), GURL(), GURL(), - "application/octet-stream", "application/octet-stream", + url::Origin(), "application/octet-stream", "application/octet-stream", base::Time::Now(), base::Time(), parameters.etag, std::string(), kIntermediateSize, parameters.size, std::string(), download::DownloadItem::INTERRUPTED, @@ -2886,7 +2887,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_LongFile) { DownloadManagerForShell(shell())->CreateDownloadItem( "F7FB1F59-7DE1-4845-AFDB-8A688F70F583", 1, intermediate_file_path, base::FilePath(), url_chain, GURL(), GURL(), GURL(), GURL(), - "application/octet-stream", "application/octet-stream", + url::Origin(), "application/octet-stream", "application/octet-stream", base::Time::Now(), base::Time(), parameters.etag, std::string(), kIntermediateSize, parameters.size, std::string(), download::DownloadItem::INTERRUPTED, diff --git a/chromium/content/browser/download/download_manager_impl.cc b/chromium/content/browser/download/download_manager_impl.cc index 7cb5bc49ca1..10c22f88cf5 100644 --- a/chromium/content/browser/download/download_manager_impl.cc +++ b/chromium/content/browser/download/download_manager_impl.cc @@ -82,7 +82,6 @@ #include "services/network/public/cpp/wrapper_shared_url_loader_factory.h" #include "storage/browser/blob/blob_url_loader_factory.h" #include "storage/browser/blob/blob_url_request_job_factory.h" -#include "url/origin.h" #if defined(USE_X11) #include "base/nix/xdg_util.h" @@ -218,6 +217,7 @@ class DownloadItemFactoryImpl : public download::DownloadItemFactory { const GURL& site_url, const GURL& tab_url, const GURL& tab_refererr_url, + const base::Optional<url::Origin>& request_initiator, const std::string& mime_type, const std::string& original_mime_type, base::Time start_time, @@ -237,10 +237,10 @@ class DownloadItemFactoryImpl : public download::DownloadItemFactory { override { return new download::DownloadItemImpl( delegate, guid, download_id, current_path, target_path, url_chain, - referrer_url, site_url, tab_url, tab_refererr_url, mime_type, - original_mime_type, start_time, end_time, etag, last_modified, - received_bytes, total_bytes, 0 /* auto_resume_count */, hash, state, - danger_type, interrupt_reason, false /* paused */, + referrer_url, site_url, tab_url, tab_refererr_url, request_initiator, + mime_type, original_mime_type, start_time, end_time, etag, + last_modified, received_bytes, total_bytes, 0 /* auto_resume_count */, hash, + state, danger_type, interrupt_reason, false /* paused */, false /* allow_metered */, opened, last_access_time, transient, received_slices); } @@ -971,6 +971,7 @@ download::DownloadItem* DownloadManagerImpl::CreateDownloadItem( const GURL& site_url, const GURL& tab_url, const GURL& tab_refererr_url, + const base::Optional<url::Origin>& request_initiator, const std::string& mime_type, const std::string& original_mime_type, base::Time start_time, @@ -1006,10 +1007,10 @@ download::DownloadItem* DownloadManagerImpl::CreateDownloadItem( #endif auto item = base::WrapUnique(item_factory_->CreatePersistedItem( this, guid, id, current_path, target_path, url_chain, referrer_url, - site_url, tab_url, tab_refererr_url, mime_type, original_mime_type, - start_time, end_time, etag, last_modified, received_bytes, total_bytes, - hash, state, danger_type, interrupt_reason, opened, last_access_time, - transient, received_slices)); + site_url, tab_url, tab_refererr_url, request_initiator, mime_type, + original_mime_type, start_time, end_time, etag, last_modified, + received_bytes, total_bytes, hash, state, danger_type, interrupt_reason, + opened, last_access_time, transient, received_slices)); if (in_progress_download) { // If the download item from history db is already in terminal state, // remove it from the in-progress db. Otherwise, use the in-progress db one. diff --git a/chromium/content/browser/download/download_manager_impl.h b/chromium/content/browser/download/download_manager_impl.h index b94e85cf289..94ce542e649 100644 --- a/chromium/content/browser/download/download_manager_impl.h +++ b/chromium/content/browser/download/download_manager_impl.h @@ -18,6 +18,7 @@ #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "base/observer_list.h" +#include "base/optional.h" #include "base/sequenced_task_runner_helpers.h" #include "base/synchronization/lock.h" #include "build/build_config.h" @@ -33,6 +34,7 @@ #include "content/public/browser/ssl_status.h" #include "services/metrics/public/cpp/ukm_source_id.h" #include "services/network/public/mojom/url_loader.mojom.h" +#include "url/origin.h" namespace download { class DownloadFileFactory; @@ -106,6 +108,7 @@ class CONTENT_EXPORT DownloadManagerImpl const GURL& site_url, const GURL& tab_url, const GURL& tab_refererr_url, + const base::Optional<url::Origin>& request_initiator, const std::string& mime_type, const std::string& original_mime_type, base::Time start_time, diff --git a/chromium/content/browser/download/download_manager_impl_unittest.cc b/chromium/content/browser/download/download_manager_impl_unittest.cc index c5cfc6c80f9..f2704e7aa6c 100644 --- a/chromium/content/browser/download/download_manager_impl_unittest.cc +++ b/chromium/content/browser/download/download_manager_impl_unittest.cc @@ -19,6 +19,7 @@ #include "base/guid.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" +#include "base/optional.h" #include "base/run_loop.h" #include "base/stl_util.h" #include "base/strings/string16.h" @@ -135,6 +136,7 @@ class MockDownloadItemFactory const GURL& site_url, const GURL& tab_url, const GURL& tab_referrer_url, + const base::Optional<url::Origin>& request_initiator, const std::string& mime_type, const std::string& original_mime_type, base::Time start_time, @@ -214,6 +216,7 @@ download::DownloadItemImpl* MockDownloadItemFactory::CreatePersistedItem( const GURL& site_url, const GURL& tab_url, const GURL& tab_referrer_url, + const base::Optional<url::Origin>& request_initiator, const std::string& mime_type, const std::string& original_mime_type, base::Time start_time, @@ -695,6 +698,7 @@ TEST_F(DownloadManagerTest, GetDownloadByGuid) { kGuid, 10, base::FilePath(), base::FilePath(), url_chain, GURL("http://example.com/a"), GURL("http://example.com/a"), GURL("http://example.com/a"), GURL("http://example.com/a"), + url::Origin::Create(GURL("http://example.com/")), "application/octet-stream", "application/octet-stream", base::Time::Now(), base::Time::Now(), std::string(), std::string(), 10, 10, std::string(), download::DownloadItem::INTERRUPTED, @@ -747,6 +751,7 @@ TEST_F(DownloadManagerTest, OnInProgressDownloadsLoaded) { in_progress_manager.get(), kGuid, 10, base::FilePath(), base::FilePath(), url_chain, GURL("http://example.com/a"), GURL("http://example.com/a"), GURL("http://example.com/a"), GURL("http://example.com/a"), + url::Origin::Create(GURL("http://example.com")), "application/octet-stream", "application/octet-stream", base::Time::Now(), base::Time::Now(), std::string(), std::string(), 10, 10, 0, std::string(), download::DownloadItem::INTERRUPTED, diff --git a/chromium/content/public/browser/download_manager.h b/chromium/content/public/browser/download_manager.h index 677e2b0c309..8c6b4c1d962 100644 --- a/chromium/content/public/browser/download_manager.h +++ b/chromium/content/public/browser/download_manager.h @@ -34,6 +34,7 @@ #include "base/callback.h" #include "base/files/file_path.h" +#include "base/optional.h" #include "base/sequenced_task_runner.h" #include "base/time/time.h" #include "components/download/public/common/download_interrupt_reasons.h" @@ -45,6 +46,7 @@ #include "net/base/net_errors.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "storage/browser/blob/blob_data_handle.h" +#include "url/origin.h" class GURL; @@ -172,6 +174,7 @@ class CONTENT_EXPORT DownloadManager : public base::SupportsUserData::Data { const GURL& site_url, const GURL& tab_url, const GURL& tab_referrer_url, + const base::Optional<url::Origin>& request_initiator, const std::string& mime_type, const std::string& original_mime_type, base::Time start_time, |