Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(598)

Unified Diff: components/offline_pages/core/background/pick_request_task.cc

Issue 2729763002: [Offline Pages] Pick correct request when resuming. (Closed)
Patch Set: Moving logic to pick_request_task. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/offline_pages/core/background/pick_request_task.cc
diff --git a/components/offline_pages/core/background/pick_request_task.cc b/components/offline_pages/core/background/pick_request_task.cc
index 006d08b47aff2211d377e6869f8b95e49273185f..307b5517d3858877e0b9526df6b2e5c4d38b558c 100644
--- a/components/offline_pages/core/background/pick_request_task.cc
+++ b/components/offline_pages/core/background/pick_request_task.cc
@@ -35,13 +35,15 @@ PickRequestTask::PickRequestTask(RequestQueueStore* store,
RequestNotPickedCallback not_picked_callback,
RequestCountCallback request_count_callback,
DeviceConditions& device_conditions,
- const std::set<int64_t>& disabled_requests)
+ const std::set<int64_t>& disabled_requests,
+ std::list<int64_t>& priortized_requests)
: store_(store),
policy_(policy),
picked_callback_(picked_callback),
not_picked_callback_(not_picked_callback),
request_count_callback_(request_count_callback),
disabled_requests_(disabled_requests),
+ priortized_requests_(priortized_requests),
weak_ptr_factory_(this) {
device_conditions_.reset(new DeviceConditions(device_conditions));
}
@@ -83,10 +85,26 @@ void PickRequestTask::Choose(
// TODO(petewil): Consider replacing this bool with a better named enum.
bool non_user_requested_tasks_remaining = false;
bool cleanup_needed = false;
+ bool is_priortized_request_picked = false;
Pete Williamson 2017/03/06 18:30:57 nit: was_prioritized_request_picked might be bette
romax 2017/03/07 18:40:44 Done.
size_t available_request_count = 0;
- // Iterate once through the requests, keeping track of best candidate.
+ // Search for the priortized requests before iterating all the requests.
Pete Williamson 2017/03/06 18:30:57 There is an implicit assumption here that we shoul
romax 2017/03/07 18:40:44 Done.
+ while (!picked_request && !priortized_requests_.empty()) {
+ int64_t id = priortized_requests_.front();
+ for (unsigned i = 0; i < requests.size(); ++i) {
+ if (requests[i]->request_id() == id) {
+ picked_request = requests[i].get();
+ is_priortized_request_picked = true;
+ break;
+ }
+ }
+ // Remove the priortized requests which are not in request queue.
+ priortized_requests_.pop_front();
+ }
+
+ // Iterate once through the requests, keeping track of best candidate if no
+ // priortized request has been chosen.
fgorski 2017/03/06 18:12:45 if statement should probably happen outside of the
Pete Williamson 2017/03/06 18:30:57 Agreed, if a prioritized request is found, we shou
romax 2017/03/07 18:40:44 Refactored a little bit. Not sure if it's necessar
for (unsigned i = 0; i < requests.size(); ++i) {
// If the request is expired or has exceeded the retry count, skip it.
if (OfflinerPolicyUtils::CheckRequestExpirationStatus(requests[i].get(),
@@ -96,7 +114,7 @@ void PickRequestTask::Choose(
continue;
}
- // If the request is on the disabled list, skip it.
+ // If the request is on the disabled list, skip it.
auto search = disabled_requests_.find(requests[i]->request_id());
if (search != disabled_requests_.end())
fgorski 2017/03/06 18:12:45 Is there a chance that prioritized request is on t
romax 2017/03/07 18:40:44 yeah there might be. added a check
continue;
@@ -112,10 +130,13 @@ void PickRequestTask::Choose(
SavePageRequest::RequestState::AVAILABLE) {
available_request_count++;
}
- if (!RequestConditionsSatisfied(requests[i].get()))
- continue;
- if (IsNewRequestBetter(picked_request, requests[i].get(), comparator))
- picked_request = requests[i].get();
+
+ if (!is_priortized_request_picked) {
+ if (!RequestConditionsSatisfied(requests[i].get()))
+ continue;
+ if (IsNewRequestBetter(picked_request, requests[i].get(), comparator))
+ picked_request = requests[i].get();
+ }
}
// Report the request queue counts.

Powered by Google App Engine
This is Rietveld 408576698