summaryrefslogtreecommitdiff
path: root/chromium/components/download
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/download')
-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
11 files changed, 55 insertions, 12 deletions
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());