Commit 23f757f3 authored by Mugdha Lakhani's avatar Mugdha Lakhani Committed by Commit Bot

[Background Fetch] Start-then-pause --> Start-paused.

Start a background fetch in a paused state whenever appropriate instead
of starting and then pausing on the first update.

This is now possible after the following change went in:
https://chromium-review.googlesource.com/c/chromium/src/+/1265556

Bug: 903248

Change-Id: I55f613de9f7ebf36ec3daa971067e8cd34d44bed
Reviewed-on: https://chromium-review.googlesource.com/c/1337627
Commit-Queue: Mugdha Lakhani <nator@chromium.org>
Reviewed-by: default avatarPeter Beverloo <peter@chromium.org>
Reviewed-by: default avatarRayan Kanso <rayankans@chromium.org>
Cr-Commit-Position: refs/heads/master@{#608755}
parent 58808a99
......@@ -140,10 +140,6 @@ class OfflineContentProviderObserver : public OfflineContentProvider::Observer {
items_added_callback_ = std::move(callback);
}
void set_item_updated_callback(ItemUpdatedCallback callback) {
items_updated_callback_ = std::move(callback);
}
void set_finished_processing_item_callback(
FinishedProcessingItemCallback callback) {
finished_processing_item_callback_ = std::move(callback);
......@@ -172,10 +168,6 @@ class OfflineContentProviderObserver : public OfflineContentProvider::Observer {
void OnItemRemoved(const ContentId& id) override {}
void OnItemUpdated(const OfflineItem& item) override {
if (items_updated_callback_) {
std::move(items_updated_callback_).Run(item);
}
if (item.state != offline_items_collection::OfflineItemState::IN_PROGRESS &&
item.state != offline_items_collection::OfflineItemState::PENDING &&
item.state != offline_items_collection::OfflineItemState::PAUSED &&
......@@ -209,7 +201,6 @@ class OfflineContentProviderObserver : public OfflineContentProvider::Observer {
}
ItemsAddedCallback items_added_callback_;
ItemUpdatedCallback items_updated_callback_;
FinishedProcessingItemCallback finished_processing_item_callback_;
BackgroundFetchDelegateImpl* delegate_ = nullptr;
bool pause_ = false;
......@@ -742,23 +733,12 @@ IN_PROC_BROWSER_TEST_F(BackgroundFetchBrowserTest,
SetPermission(CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, CONTENT_SETTING_ASK);
// The fetch doesn't start in a paused state, but is paused after the first
// update.
// The fetch starts in a paused state.
std::vector<OfflineItem> items;
OfflineItem updated_item;
base::RunLoop run_loop;
offline_content_provider_observer_->set_item_updated_callback(base::BindOnce(
&BackgroundFetchBrowserTest::DidUpdateItem, base::Unretained(this),
run_loop.QuitClosure(), &updated_item));
ASSERT_NO_FATAL_FAILURE(RunScriptAndWaitForOfflineItems(
"StartFetchFromServiceWorkerNoWait()", &items));
ASSERT_EQ(items.size(), 1u);
EXPECT_EQ(items[0].state,
offline_items_collection::OfflineItemState::IN_PROGRESS);
run_loop.Run();
EXPECT_EQ(updated_item.state,
offline_items_collection::OfflineItemState::PAUSED);
}
......@@ -769,44 +749,24 @@ IN_PROC_BROWSER_TEST_F(BackgroundFetchBrowserTest,
SetPermission(CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS,
CONTENT_SETTING_ALLOW);
// The fetch doesn't start in a paused state, but is paused after the first
// update.
// The fetch starts in a paused state.
std::vector<OfflineItem> items;
OfflineItem updated_item;
base::RunLoop run_loop;
offline_content_provider_observer_->set_item_updated_callback(base::BindOnce(
&BackgroundFetchBrowserTest::DidUpdateItem, base::Unretained(this),
run_loop.QuitClosure(), &updated_item));
ASSERT_NO_FATAL_FAILURE(
RunScriptAndWaitForOfflineItems("StartFetchFromIframeNoWait()", &items));
ASSERT_EQ(items.size(), 1u);
EXPECT_EQ(items[0].state,
offline_items_collection::OfflineItemState::IN_PROGRESS);
run_loop.Run();
EXPECT_EQ(updated_item.state,
offline_items_collection::OfflineItemState::PAUSED);
}
IN_PROC_BROWSER_TEST_F(BackgroundFetchBrowserTest, FetchFromChildFrameWithAsk) {
SetPermission(CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, CONTENT_SETTING_ASK);
// The fetch doesn't start in a paused state, but is paused after the first
// update.
// The fetch starts in a paused state.
std::vector<OfflineItem> items;
OfflineItem updated_item;
base::RunLoop run_loop;
offline_content_provider_observer_->set_item_updated_callback(base::BindOnce(
&BackgroundFetchBrowserTest::DidUpdateItem, base::Unretained(this),
run_loop.QuitClosure(), &updated_item));
ASSERT_NO_FATAL_FAILURE(
RunScriptAndWaitForOfflineItems("StartFetchFromIframeNoWait()", &items));
ASSERT_EQ(items.size(), 1u);
EXPECT_EQ(items[0].state,
offline_items_collection::OfflineItemState::IN_PROGRESS);
run_loop.Run();
EXPECT_EQ(updated_item.state,
offline_items_collection::OfflineItemState::PAUSED);
}
......
......@@ -132,7 +132,8 @@ void BackgroundFetchDelegateImpl::JobDetails::UpdateOfflineItem() {
// response was an HTTP error, e.g. 404.
offline_item.state = OfflineItemState::COMPLETE;
offline_item.is_openable = true;
} else if (job_state == State::kStartedButPaused) {
} else if (job_state == State::kPendingWillStartPaused ||
job_state == State::kStartedButPaused) {
offline_item.state = OfflineItemState::PAUSED;
} else {
offline_item.state = OfflineItemState::IN_PROGRESS;
......@@ -555,6 +556,7 @@ void BackgroundFetchDelegateImpl::PauseDownload(
JobDetails& job_details = job_details_iter->second;
job_details.job_state = JobDetails::State::kStartedButPaused;
job_details.UpdateOfflineItem();
for (auto& download_guid : job_details.current_download_guids)
GetDownloadService()->PauseDownload(download_guid);
}
......@@ -568,6 +570,7 @@ void BackgroundFetchDelegateImpl::ResumeDownload(
JobDetails& job_details = job_details_iter->second;
job_details.job_state = JobDetails::State::kStartedAndDownloading;
job_details.UpdateOfflineItem();
for (auto& download_guid : job_details.current_download_guids)
GetDownloadService()->ResumeDownload(download_guid);
......
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