| Index: content/browser/download/quarantine_win.cc
|
| diff --git a/content/browser/download/quarantine_win.cc b/content/browser/download/quarantine_win.cc
|
| index e478ed3a480691dfd81f214a8bc963686217a930..f3150f002fcfc2faf56d6d1d1cca92d079229f3a 100644
|
| --- a/content/browser/download/quarantine_win.cc
|
| +++ b/content/browser/download/quarantine_win.cc
|
| @@ -155,13 +155,16 @@ QuarantineFileResult SetInternetZoneIdentifierDirectly(
|
| // |full_path| : is the path to the downloaded file. This should be the final
|
| // path of the download. Must be present.
|
| // |source_url|: the source URL for the download. If empty, the source will
|
| -// not be set.
|
| +// be set to 'about:internet'.
|
| +// |referrer_url|: the referrer URL for the download. If empty, the referrer
|
| +// will not be set.
|
| // |client_guid|: the GUID to be set in the IAttachmentExecute client slot.
|
| // Used to identify the app to the system AV function.
|
| // If GUID_NULL is passed, no client GUID is set.
|
| // |save_result|: Receives the result of invoking IAttachmentExecute::Save().
|
| bool InvokeAttachmentServices(const base::FilePath& full_path,
|
| const std::string& source_url,
|
| + const std::string& referrer_url,
|
| const GUID& client_guid,
|
| HRESULT* save_result) {
|
| base::win::ScopedComPtr<IAttachmentExecute> attachment_services;
|
| @@ -190,16 +193,21 @@ bool InvokeAttachmentServices(const base::FilePath& full_path,
|
| return false;
|
| }
|
|
|
| - // Note: SetSource looks like it needs to be called, even if empty.
|
| - // Docs say it is optional, but it appears not calling it at all sets
|
| - // a zone that is too restrictive.
|
| - hr = attachment_services->SetSource(base::UTF8ToWide(source_url).c_str());
|
| + hr = attachment_services->SetSource(
|
| + source_url.empty() ? L"about:internet"
|
| + : base::UTF8ToWide(source_url).c_str());
|
| if (FAILED(hr)) {
|
| RecordAttachmentServicesResult(
|
| AttachmentServicesResult::FAILED_TO_SET_PARAMETER);
|
| return false;
|
| }
|
|
|
| + // Only set referrer if one is present. Also, the source_url is authoritative
|
| + // for determining the relative danger of |full_path|. So not going to
|
| + // consider it fatal if setting the referrer fails.
|
| + if (!referrer_url.empty())
|
| + attachment_services->SetReferrer(base::UTF8ToWide(referrer_url).c_str());
|
| +
|
| {
|
| // This method has been known to take longer than 10 seconds in some
|
| // instances.
|
|
|