Commit c76b1b42 authored by Shakti Sahu's avatar Shakti Sahu Committed by Commit Bot

Handling auto-resumption for history downloads

After native AutoResumptionHandler is set into effect, we should be very
careful that downloads long back from history shouldn't be resumed. In
this CL, we are addressing that issue by setting the auto-resume count
of history downloads to a max value.

Change-Id: Iedb037da21c8a93e468f9c64fa1614fd0cf6c7a3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1559454
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Reviewed-by: default avatarMin Qin <qinmin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#649310}
parent 9c63850f
...@@ -1325,6 +1325,10 @@ void DownloadItemImpl::SetDownloadId(uint32_t download_id) { ...@@ -1325,6 +1325,10 @@ void DownloadItemImpl::SetDownloadId(uint32_t download_id) {
download_id_ = download_id; download_id_ = download_id;
} }
void DownloadItemImpl::SetAutoResumeCountForTesting(int32_t auto_resume_count) {
auto_resume_count_ = auto_resume_count;
}
// **** Download progression cascade // **** Download progression cascade
void DownloadItemImpl::Init(bool active, void DownloadItemImpl::Init(bool active,
......
...@@ -365,6 +365,8 @@ class COMPONENTS_DOWNLOAD_EXPORT DownloadItemImpl ...@@ -365,6 +365,8 @@ class COMPONENTS_DOWNLOAD_EXPORT DownloadItemImpl
uint64_t ukm_download_id() const { return ukm_download_id_; } uint64_t ukm_download_id() const { return ukm_download_id_; }
void SetAutoResumeCountForTesting(int32_t auto_resume_count);
private: private:
// Fine grained states of a download. // Fine grained states of a download.
// //
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include "components/download/public/common/download_features.h" #include "components/download/public/common/download_features.h"
#include "components/download/public/common/download_file_factory.h" #include "components/download/public/common/download_file_factory.h"
#include "components/download/public/common/download_file_impl.h" #include "components/download/public/common/download_file_impl.h"
#include "components/download/public/common/download_item_impl.h"
#include "components/download/public/common/download_task_runner.h" #include "components/download/public/common/download_task_runner.h"
#include "components/download/public/common/parallel_download_configs.h" #include "components/download/public/common/parallel_download_configs.h"
#include "content/browser/download/download_manager_impl.h" #include "content/browser/download/download_manager_impl.h"
...@@ -951,6 +952,11 @@ class DownloadContentTest : public ContentBrowserTest { ...@@ -951,6 +952,11 @@ class DownloadContentTest : public ContentBrowserTest {
EXPECT_EQ("DONE", EvalJs(shell, "register('" + worker_url + "')")); EXPECT_EQ("DONE", EvalJs(shell, "register('" + worker_url + "')"));
} }
void ClearAutoResumptionCount(download::DownloadItem* download) {
static_cast<download::DownloadItemImpl*>(download)
->SetAutoResumeCountForTesting(0);
}
private: private:
// Location of the downloads directory for these tests // Location of the downloads directory for these tests
base::ScopedTempDir downloads_directory_; base::ScopedTempDir downloads_directory_;
...@@ -1016,6 +1022,7 @@ class ParallelDownloadTest : public DownloadContentTest { ...@@ -1016,6 +1022,7 @@ class ParallelDownloadTest : public DownloadContentTest {
download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, false, download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, false,
base::Time(), false, slices); base::Time(), false, slices);
ClearAutoResumptionCount(download);
return download; return download;
} }
...@@ -2470,6 +2477,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_NoFile) { ...@@ -2470,6 +2477,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_NoFile) {
download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, false, download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, false,
base::Time(), false, base::Time(), false,
std::vector<download::DownloadItem::ReceivedSlice>()); std::vector<download::DownloadItem::ReceivedSlice>());
ClearAutoResumptionCount(download);
download->Resume(false); download->Resume(false);
WaitForCompletion(download); WaitForCompletion(download);
...@@ -2536,6 +2544,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_NoHash) { ...@@ -2536,6 +2544,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_NoHash) {
download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, false, download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, false,
base::Time(), false, base::Time(), false,
std::vector<download::DownloadItem::ReceivedSlice>()); std::vector<download::DownloadItem::ReceivedSlice>());
ClearAutoResumptionCount(download);
download->Resume(false); download->Resume(false);
WaitForCompletion(download); WaitForCompletion(download);
...@@ -2589,6 +2598,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ...@@ -2589,6 +2598,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest,
download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, false, download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, false,
base::Time(), false, base::Time(), false,
std::vector<download::DownloadItem::ReceivedSlice>()); std::vector<download::DownloadItem::ReceivedSlice>());
ClearAutoResumptionCount(download);
download->Resume(false); download->Resume(false);
WaitForCompletion(download); WaitForCompletion(download);
...@@ -2649,6 +2659,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ...@@ -2649,6 +2659,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest,
download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, false, download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, false,
base::Time(), false, base::Time(), false,
std::vector<download::DownloadItem::ReceivedSlice>()); std::vector<download::DownloadItem::ReceivedSlice>());
ClearAutoResumptionCount(download);
download->Resume(false); download->Resume(false);
WaitForCompletion(download); WaitForCompletion(download);
...@@ -2715,6 +2726,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_WrongHash) { ...@@ -2715,6 +2726,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_WrongHash) {
download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, false, download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, false,
base::Time(), false, base::Time(), false,
std::vector<download::DownloadItem::ReceivedSlice>()); std::vector<download::DownloadItem::ReceivedSlice>());
ClearAutoResumptionCount(download);
download->Resume(false); download->Resume(false);
WaitForCompletion(download); WaitForCompletion(download);
...@@ -2790,6 +2802,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_ShortFile) { ...@@ -2790,6 +2802,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_ShortFile) {
download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, false, download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, false,
base::Time(), false, base::Time(), false,
std::vector<download::DownloadItem::ReceivedSlice>()); std::vector<download::DownloadItem::ReceivedSlice>());
ClearAutoResumptionCount(download);
download->Resume(false); download->Resume(false);
WaitForCompletion(download); WaitForCompletion(download);
...@@ -2863,6 +2876,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_LongFile) { ...@@ -2863,6 +2876,7 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_LongFile) {
download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, false, download::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, false,
base::Time(), false, base::Time(), false,
std::vector<download::DownloadItem::ReceivedSlice>()); std::vector<download::DownloadItem::ReceivedSlice>());
ClearAutoResumptionCount(download);
download->Resume(false); download->Resume(false);
WaitForCompletion(download); WaitForCompletion(download);
......
...@@ -235,11 +235,17 @@ class DownloadItemFactoryImpl : public download::DownloadItemFactory { ...@@ -235,11 +235,17 @@ class DownloadItemFactoryImpl : public download::DownloadItemFactory {
bool transient, bool transient,
const std::vector<download::DownloadItem::ReceivedSlice>& received_slices) const std::vector<download::DownloadItem::ReceivedSlice>& received_slices)
override { override {
int auto_resume_count = 0;
if (base::FeatureList::IsEnabled(
download::features::kDownloadDBForNewDownloads)) {
auto_resume_count = download::DownloadItemImpl::kMaxAutoResumeAttempts;
}
return new download::DownloadItemImpl( return new download::DownloadItemImpl(
delegate, guid, download_id, current_path, target_path, url_chain, delegate, guid, download_id, current_path, target_path, url_chain,
referrer_url, site_url, tab_url, tab_refererr_url, mime_type, referrer_url, site_url, tab_url, tab_refererr_url, mime_type,
original_mime_type, start_time, end_time, etag, last_modified, original_mime_type, start_time, end_time, etag, last_modified,
received_bytes, total_bytes, 0 /* auto_resume_count */, hash, state, received_bytes, total_bytes, auto_resume_count, hash, state,
danger_type, interrupt_reason, false /* paused */, danger_type, interrupt_reason, false /* paused */,
false /* allow_metered */, opened, last_access_time, transient, false /* allow_metered */, opened, last_access_time, transient,
received_slices); received_slices);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment