summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-10-17 11:23:26 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-10-21 08:13:41 +0000
commit2708f4fe1f1a4aca14d888303bbdc21bcf629a19 (patch)
treefe0622b16daa66b82132bc6b1930934fee879dfa
parent2a45953d844a6d1be6df8aeb7359a98daaa52ee2 (diff)
downloadqtwebengine-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>
-rw-r--r--chromium/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc3
-rw-r--r--chromium/components/download/internal/common/download_item_impl.cc10
-rw-r--r--chromium/components/download/internal/common/download_response_handler.cc9
-rw-r--r--chromium/components/download/internal/common/in_progress_download_manager.cc17
-rw-r--r--chromium/components/download/public/common/download_create_info.h4
-rw-r--r--chromium/components/download/public/common/download_item.h5
-rw-r--r--chromium/components/download/public/common/download_item_factory.h3
-rw-r--r--chromium/components/download/public/common/download_item_impl.h8
-rw-r--r--chromium/components/download/public/common/download_response_handler.h4
-rw-r--r--chromium/components/download/public/common/mock_download_item.h3
-rw-r--r--chromium/components/download/public/common/mock_download_item_impl.cc1
-rw-r--r--chromium/components/download/public/common/mock_download_item_impl.h3
-rw-r--r--chromium/content/browser/download/download_browsertest.cc17
-rw-r--r--chromium/content/browser/download/download_manager_impl.cc19
-rw-r--r--chromium/content/browser/download/download_manager_impl.h3
-rw-r--r--chromium/content/browser/download/download_manager_impl_unittest.cc5
-rw-r--r--chromium/content/public/browser/download_manager.h3
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,