diff options
author | Michal Klocek <michal.klocek@qt.io> | 2018-03-07 18:36:25 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-03-18 19:33:01 +0000 |
commit | 3661e50f29ffe5f891ea62f93f6081b165455cb8 (patch) | |
tree | 5226f4dbf718de7382a7e85cd42f1c07c042e13f /src/core/download_manager_delegate_qt.cpp | |
parent | 5d1ae7dd3b1804fd6d68dc3c25364649eea672a1 (diff) |
Implement IsMostRecentDownloadItemAtFilePath call
Implement IsMostRecentDownloadItemAtFilePath
for download_manager_delegate_qt. This is required for
CVE-2018-6033.
Change-Id: I979b77042facf7d3acaef5eda7a6e842f715a1ef
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/core/download_manager_delegate_qt.cpp')
-rw-r--r-- | src/core/download_manager_delegate_qt.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/core/download_manager_delegate_qt.cpp b/src/core/download_manager_delegate_qt.cpp index 40df9b3a8..487a831e4 100644 --- a/src/core/download_manager_delegate_qt.cpp +++ b/src/core/download_manager_delegate_qt.cpp @@ -293,6 +293,26 @@ void DownloadManagerDelegateQt::ChooseSavePath(content::WebContents *web_content m_weakPtrFactory.GetWeakPtr())); } +bool DownloadManagerDelegateQt::IsMostRecentDownloadItemAtFilePath(content::DownloadItem *download) +{ + content::BrowserContext *context = download->GetBrowserContext(); + std::vector<content::DownloadItem*> all_downloads; + + content::DownloadManager* manager = + content::BrowserContext::GetDownloadManager(context); + if (manager) + manager->GetAllDownloads(&all_downloads); + + for (const auto* item : all_downloads) { + if (item->GetGuid() == download->GetGuid() || + item->GetTargetFilePath() != download->GetTargetFilePath()) + continue; + if (item->GetState() == content::DownloadItem::IN_PROGRESS) + return false; + } + return true; +} + void DownloadManagerDelegateQt::savePackageDownloadCreated(content::DownloadItem *item) { OnDownloadUpdated(item); |