| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/offline_pages/background/request_picker.h" | 5 #include "components/offline_pages/background/request_picker.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/test/test_simple_task_runner.h" | 8 #include "base/test/test_simple_task_runner.h" |
| 9 #include "base/threading/thread_task_runner_handle.h" | 9 #include "base/threading/thread_task_runner_handle.h" |
| 10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
| 11 #include "components/offline_pages/background/device_conditions.h" | 11 #include "components/offline_pages/background/device_conditions.h" |
| 12 #include "components/offline_pages/background/offliner_factory.h" |
| 13 #include "components/offline_pages/background/offliner_policy.h" |
| 14 #include "components/offline_pages/background/request_notifier.h" |
| 12 #include "components/offline_pages/background/request_queue.h" | 15 #include "components/offline_pages/background/request_queue.h" |
| 13 #include "components/offline_pages/background/request_queue_in_memory_store.h" | 16 #include "components/offline_pages/background/request_queue_in_memory_store.h" |
| 14 #include "components/offline_pages/background/save_page_request.h" | 17 #include "components/offline_pages/background/save_page_request.h" |
| 15 #include "components/offline_pages/offline_page_item.h" | 18 #include "components/offline_pages/offline_page_item.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 20 |
| 18 namespace offline_pages { | 21 namespace offline_pages { |
| 19 | 22 |
| 20 namespace { | 23 namespace { |
| 21 // Data for request 1. | 24 // Data for request 1. |
| 22 const int64_t kRequestId1 = 17; | 25 const int64_t kRequestId1 = 17; |
| 23 const GURL kUrl1("https://google.com"); | 26 const GURL kUrl1("https://google.com"); |
| 24 const ClientId kClientId1("bookmark", "1234"); | 27 const ClientId kClientId1("bookmark", "1234"); |
| 25 // Data for request 2. | 28 // Data for request 2. |
| 26 const int64_t kRequestId2 = 42; | 29 const int64_t kRequestId2 = 42; |
| 27 const GURL kUrl2("http://nytimes.com"); | 30 const GURL kUrl2("http://nytimes.com"); |
| 28 const ClientId kClientId2("bookmark", "5678"); | 31 const ClientId kClientId2("bookmark", "5678"); |
| 29 const bool kUserRequested = true; | 32 const bool kUserRequested = true; |
| 30 const int kAttemptCount = 1; | 33 const int kAttemptCount = 1; |
| 31 const int kTwoWeeksInSeconds = 60 * 60 * 24 * 7 * 2; | |
| 32 const int kMaxStartedTries = 5; | 34 const int kMaxStartedTries = 5; |
| 33 const int kMaxCompletedTries = 1; | 35 const int kMaxCompletedTries = 1; |
| 34 | 36 |
| 35 // Constants for policy values - These settings represent the default values. | 37 // Constants for policy values - These settings represent the default values. |
| 36 const bool kPreferUntried = false; | 38 const bool kPreferUntried = false; |
| 37 const bool kPreferEarlier = true; | 39 const bool kPreferEarlier = true; |
| 38 const bool kPreferRetryCount = true; | 40 const bool kPreferRetryCount = true; |
| 41 |
| 42 // Default request |
| 43 const SavePageRequest kEmptyRequest(0UL, |
| 44 GURL(""), |
| 45 ClientId("", ""), |
| 46 base::Time(), |
| 47 true); |
| 39 } // namespace | 48 } // namespace |
| 40 | 49 |
| 50 class RequestNotifierStub : public RequestNotifier { |
| 51 public: |
| 52 RequestNotifierStub() |
| 53 : last_expired_request_(kEmptyRequest), total_expired_requests_(0) {} |
| 54 |
| 55 void NotifyAdded(const SavePageRequest& request) override {} |
| 56 void NotifyChanged(const SavePageRequest& request) override {} |
| 57 |
| 58 void NotifyCompleted(const SavePageRequest& request, |
| 59 SavePageStatus status) override { |
| 60 last_expired_request_ = request; |
| 61 last_request_expiration_status_ = status; |
| 62 total_expired_requests_++; |
| 63 } |
| 64 |
| 65 const SavePageRequest& last_expired_request() { |
| 66 return last_expired_request_; |
| 67 } |
| 68 |
| 69 RequestCoordinator::SavePageStatus last_request_expiration_status() { |
| 70 return last_request_expiration_status_; |
| 71 } |
| 72 |
| 73 int32_t total_expired_requests() { return total_expired_requests_; } |
| 74 |
| 75 private: |
| 76 SavePageStatus last_request_expiration_status_; |
| 77 SavePageRequest last_expired_request_; |
| 78 int32_t total_expired_requests_; |
| 79 }; |
| 80 |
| 41 class RequestPickerTest : public testing::Test { | 81 class RequestPickerTest : public testing::Test { |
| 42 public: | 82 public: |
| 43 RequestPickerTest(); | 83 RequestPickerTest(); |
| 44 | 84 |
| 45 ~RequestPickerTest() override; | 85 ~RequestPickerTest() override; |
| 46 | 86 |
| 47 void SetUp() override; | 87 void SetUp() override; |
| 48 | 88 |
| 49 void PumpLoop(); | 89 void PumpLoop(); |
| 50 | 90 |
| 51 void AddRequestDone(RequestQueue::AddRequestResult result, | 91 void AddRequestDone(RequestQueue::AddRequestResult result, |
| 52 const SavePageRequest& request); | 92 const SavePageRequest& request); |
| 53 | 93 |
| 54 void RequestPicked(const SavePageRequest& request); | 94 void RequestPicked(const SavePageRequest& request); |
| 55 | 95 |
| 56 void RequestQueueEmpty(); | 96 void RequestQueueEmpty(); |
| 57 | 97 |
| 58 void QueueRequestsAndChooseOne(const SavePageRequest& request1, | 98 void QueueRequestsAndChooseOne(const SavePageRequest& request1, |
| 59 const SavePageRequest& request2); | 99 const SavePageRequest& request2); |
| 60 | 100 |
| 101 RequestNotifierStub* GetNotifier() { return notifier_.get(); } |
| 102 |
| 61 protected: | 103 protected: |
| 62 // The request queue is simple enough we will use a real queue with a memory | 104 // The request queue is simple enough we will use a real queue with a memory |
| 63 // store instead of a stub. | 105 // store instead of a stub. |
| 64 std::unique_ptr<RequestQueue> queue_; | 106 std::unique_ptr<RequestQueue> queue_; |
| 65 std::unique_ptr<RequestPicker> picker_; | 107 std::unique_ptr<RequestPicker> picker_; |
| 108 std::unique_ptr<RequestNotifierStub> notifier_; |
| 66 std::unique_ptr<SavePageRequest> last_picked_; | 109 std::unique_ptr<SavePageRequest> last_picked_; |
| 67 std::unique_ptr<OfflinerPolicy> policy_; | 110 std::unique_ptr<OfflinerPolicy> policy_; |
| 68 bool request_queue_empty_called_; | 111 bool request_queue_empty_called_; |
| 69 | 112 |
| 70 private: | 113 private: |
| 71 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 114 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
| 72 base::ThreadTaskRunnerHandle task_runner_handle_; | 115 base::ThreadTaskRunnerHandle task_runner_handle_; |
| 73 }; | 116 }; |
| 74 | 117 |
| 75 RequestPickerTest::RequestPickerTest() | 118 RequestPickerTest::RequestPickerTest() |
| 76 : task_runner_(new base::TestSimpleTaskRunner), | 119 : task_runner_(new base::TestSimpleTaskRunner), |
| 77 task_runner_handle_(task_runner_) {} | 120 task_runner_handle_(task_runner_) {} |
| 78 | 121 |
| 79 RequestPickerTest::~RequestPickerTest() {} | 122 RequestPickerTest::~RequestPickerTest() {} |
| 80 | 123 |
| 81 void RequestPickerTest::SetUp() { | 124 void RequestPickerTest::SetUp() { |
| 82 std::unique_ptr<RequestQueueInMemoryStore> store( | 125 std::unique_ptr<RequestQueueInMemoryStore> store( |
| 83 new RequestQueueInMemoryStore()); | 126 new RequestQueueInMemoryStore()); |
| 84 queue_.reset(new RequestQueue(std::move(store))); | 127 queue_.reset(new RequestQueue(std::move(store))); |
| 85 policy_.reset(new OfflinerPolicy()); | 128 policy_.reset(new OfflinerPolicy()); |
| 86 picker_.reset(new RequestPicker(queue_.get(), policy_.get())); | 129 notifier_.reset(new RequestNotifierStub()); |
| 130 picker_.reset( |
| 131 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); |
| 87 request_queue_empty_called_ = false; | 132 request_queue_empty_called_ = false; |
| 88 } | 133 } |
| 89 | 134 |
| 90 void RequestPickerTest::PumpLoop() { | 135 void RequestPickerTest::PumpLoop() { |
| 91 task_runner_->RunUntilIdle(); | 136 task_runner_->RunUntilIdle(); |
| 92 } | 137 } |
| 93 | 138 |
| 94 void RequestPickerTest::AddRequestDone(RequestQueue::AddRequestResult result, | 139 void RequestPickerTest::AddRequestDone(RequestQueue::AddRequestResult result, |
| 95 const SavePageRequest& request) {} | 140 const SavePageRequest& request) {} |
| 96 | 141 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 // callback. | 185 // callback. |
| 141 PumpLoop(); | 186 PumpLoop(); |
| 142 | 187 |
| 143 EXPECT_TRUE(request_queue_empty_called_); | 188 EXPECT_TRUE(request_queue_empty_called_); |
| 144 } | 189 } |
| 145 | 190 |
| 146 TEST_F(RequestPickerTest, ChooseRequestWithHigherRetryCount) { | 191 TEST_F(RequestPickerTest, ChooseRequestWithHigherRetryCount) { |
| 147 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, | 192 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, |
| 148 kPreferRetryCount, kMaxStartedTries, | 193 kPreferRetryCount, kMaxStartedTries, |
| 149 kMaxCompletedTries + 1)); | 194 kMaxCompletedTries + 1)); |
| 150 picker_.reset(new RequestPicker(queue_.get(), policy_.get())); | 195 picker_.reset( |
| 196 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); |
| 151 | 197 |
| 152 base::Time creation_time = base::Time::Now(); | 198 base::Time creation_time = base::Time::Now(); |
| 153 SavePageRequest request1( | 199 SavePageRequest request1( |
| 154 kRequestId1, kUrl1, kClientId1, creation_time, kUserRequested); | 200 kRequestId1, kUrl1, kClientId1, creation_time, kUserRequested); |
| 155 SavePageRequest request2( | 201 SavePageRequest request2( |
| 156 kRequestId2, kUrl2, kClientId2, creation_time, kUserRequested); | 202 kRequestId2, kUrl2, kClientId2, creation_time, kUserRequested); |
| 157 request2.set_completed_attempt_count(kAttemptCount); | 203 request2.set_completed_attempt_count(kAttemptCount); |
| 158 | 204 |
| 159 QueueRequestsAndChooseOne(request1, request2); | 205 QueueRequestsAndChooseOne(request1, request2); |
| 160 | 206 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 175 | 221 |
| 176 EXPECT_EQ(kRequestId1, last_picked_->request_id()); | 222 EXPECT_EQ(kRequestId1, last_picked_->request_id()); |
| 177 EXPECT_FALSE(request_queue_empty_called_); | 223 EXPECT_FALSE(request_queue_empty_called_); |
| 178 } | 224 } |
| 179 | 225 |
| 180 TEST_F(RequestPickerTest, ChooseEarlierRequest) { | 226 TEST_F(RequestPickerTest, ChooseEarlierRequest) { |
| 181 // We need a custom policy object prefering recency to retry count. | 227 // We need a custom policy object prefering recency to retry count. |
| 182 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, | 228 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, |
| 183 !kPreferRetryCount, kMaxStartedTries, | 229 !kPreferRetryCount, kMaxStartedTries, |
| 184 kMaxCompletedTries)); | 230 kMaxCompletedTries)); |
| 185 picker_.reset(new RequestPicker(queue_.get(), policy_.get())); | 231 picker_.reset( |
| 232 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); |
| 186 | 233 |
| 187 base::Time creation_time1 = | 234 base::Time creation_time1 = |
| 188 base::Time::Now() - base::TimeDelta::FromSeconds(10); | 235 base::Time::Now() - base::TimeDelta::FromSeconds(10); |
| 189 base::Time creation_time2 = base::Time::Now(); | 236 base::Time creation_time2 = base::Time::Now(); |
| 190 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, | 237 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, |
| 191 kUserRequested); | 238 kUserRequested); |
| 192 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, | 239 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, |
| 193 kUserRequested); | 240 kUserRequested); |
| 194 request2.set_completed_attempt_count(kAttemptCount); | 241 request2.set_completed_attempt_count(kAttemptCount); |
| 195 | 242 |
| 196 QueueRequestsAndChooseOne(request1, request2); | 243 QueueRequestsAndChooseOne(request1, request2); |
| 197 | 244 |
| 198 EXPECT_EQ(kRequestId1, last_picked_->request_id()); | 245 EXPECT_EQ(kRequestId1, last_picked_->request_id()); |
| 199 EXPECT_FALSE(request_queue_empty_called_); | 246 EXPECT_FALSE(request_queue_empty_called_); |
| 200 } | 247 } |
| 201 | 248 |
| 202 TEST_F(RequestPickerTest, ChooseSameTimeRequestWithHigherRetryCount) { | 249 TEST_F(RequestPickerTest, ChooseSameTimeRequestWithHigherRetryCount) { |
| 203 // We need a custom policy object preferring recency to retry count. | 250 // We need a custom policy object preferring recency to retry count. |
| 204 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, | 251 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, |
| 205 !kPreferRetryCount, kMaxStartedTries, | 252 !kPreferRetryCount, kMaxStartedTries, |
| 206 kMaxCompletedTries + 1)); | 253 kMaxCompletedTries + 1)); |
| 207 picker_.reset(new RequestPicker(queue_.get(), policy_.get())); | 254 picker_.reset( |
| 255 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); |
| 208 | 256 |
| 209 base::Time creation_time = base::Time::Now(); | 257 base::Time creation_time = base::Time::Now(); |
| 210 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, | 258 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, |
| 211 kUserRequested); | 259 kUserRequested); |
| 212 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, | 260 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, |
| 213 kUserRequested); | 261 kUserRequested); |
| 214 request2.set_completed_attempt_count(kAttemptCount); | 262 request2.set_completed_attempt_count(kAttemptCount); |
| 215 | 263 |
| 216 QueueRequestsAndChooseOne(request1, request2); | 264 QueueRequestsAndChooseOne(request1, request2); |
| 217 | 265 |
| 218 EXPECT_EQ(kRequestId2, last_picked_->request_id()); | 266 EXPECT_EQ(kRequestId2, last_picked_->request_id()); |
| 219 EXPECT_FALSE(request_queue_empty_called_); | 267 EXPECT_FALSE(request_queue_empty_called_); |
| 220 } | 268 } |
| 221 | 269 |
| 222 TEST_F(RequestPickerTest, ChooseRequestWithLowerRetryCount) { | 270 TEST_F(RequestPickerTest, ChooseRequestWithLowerRetryCount) { |
| 223 // We need a custom policy object preferring lower retry count. | 271 // We need a custom policy object preferring lower retry count. |
| 224 policy_.reset(new OfflinerPolicy(!kPreferUntried, kPreferEarlier, | 272 policy_.reset(new OfflinerPolicy(!kPreferUntried, kPreferEarlier, |
| 225 kPreferRetryCount, kMaxStartedTries, | 273 kPreferRetryCount, kMaxStartedTries, |
| 226 kMaxCompletedTries + 1)); | 274 kMaxCompletedTries + 1)); |
| 227 picker_.reset(new RequestPicker(queue_.get(), policy_.get())); | 275 picker_.reset( |
| 276 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); |
| 228 | 277 |
| 229 base::Time creation_time = base::Time::Now(); | 278 base::Time creation_time = base::Time::Now(); |
| 230 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, | 279 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, |
| 231 kUserRequested); | 280 kUserRequested); |
| 232 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, | 281 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, |
| 233 kUserRequested); | 282 kUserRequested); |
| 234 request2.set_completed_attempt_count(kAttemptCount); | 283 request2.set_completed_attempt_count(kAttemptCount); |
| 235 | 284 |
| 236 QueueRequestsAndChooseOne(request1, request2); | 285 QueueRequestsAndChooseOne(request1, request2); |
| 237 | 286 |
| 238 EXPECT_EQ(kRequestId1, last_picked_->request_id()); | 287 EXPECT_EQ(kRequestId1, last_picked_->request_id()); |
| 239 EXPECT_FALSE(request_queue_empty_called_); | 288 EXPECT_FALSE(request_queue_empty_called_); |
| 240 } | 289 } |
| 241 | 290 |
| 242 TEST_F(RequestPickerTest, ChooseLaterRequest) { | 291 TEST_F(RequestPickerTest, ChooseLaterRequest) { |
| 243 // We need a custom policy preferring recency over retry, and later requests. | 292 // We need a custom policy preferring recency over retry, and later requests. |
| 244 policy_.reset(new OfflinerPolicy(kPreferUntried, !kPreferEarlier, | 293 policy_.reset(new OfflinerPolicy(kPreferUntried, !kPreferEarlier, |
| 245 !kPreferRetryCount, kMaxStartedTries, | 294 !kPreferRetryCount, kMaxStartedTries, |
| 246 kMaxCompletedTries)); | 295 kMaxCompletedTries)); |
| 247 picker_.reset(new RequestPicker(queue_.get(), policy_.get())); | 296 picker_.reset( |
| 297 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); |
| 248 | 298 |
| 249 base::Time creation_time1 = | 299 base::Time creation_time1 = |
| 250 base::Time::Now() - base::TimeDelta::FromSeconds(10); | 300 base::Time::Now() - base::TimeDelta::FromSeconds(10); |
| 251 base::Time creation_time2 = base::Time::Now(); | 301 base::Time creation_time2 = base::Time::Now(); |
| 252 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, | 302 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, |
| 253 kUserRequested); | 303 kUserRequested); |
| 254 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, | 304 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, |
| 255 kUserRequested); | 305 kUserRequested); |
| 256 | 306 |
| 257 QueueRequestsAndChooseOne(request1, request2); | 307 QueueRequestsAndChooseOne(request1, request2); |
| 258 | 308 |
| 259 EXPECT_EQ(kRequestId2, last_picked_->request_id()); | 309 EXPECT_EQ(kRequestId2, last_picked_->request_id()); |
| 260 EXPECT_FALSE(request_queue_empty_called_); | 310 EXPECT_FALSE(request_queue_empty_called_); |
| 261 } | 311 } |
| 262 | 312 |
| 263 TEST_F(RequestPickerTest, ChooseUnexpiredRequest) { | 313 TEST_F(RequestPickerTest, ChooseNonExpiredRequest) { |
| 264 base::Time creation_time1 = | 314 base::Time creation_time = base::Time::Now(); |
| 265 base::Time::Now() - base::TimeDelta::FromSeconds(kTwoWeeksInSeconds); | 315 base::Time expired_time = |
| 266 base::Time creation_time2 = base::Time::Now(); | 316 creation_time - base::TimeDelta::FromSeconds( |
| 267 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, | 317 policy_->GetRequestExpirationTimeInSeconds() + 60); |
| 318 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, |
| 268 kUserRequested); | 319 kUserRequested); |
| 269 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, | 320 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, expired_time, |
| 270 kUserRequested); | 321 kUserRequested); |
| 271 | 322 |
| 272 QueueRequestsAndChooseOne(request1, request2); | 323 QueueRequestsAndChooseOne(request1, request2); |
| 273 | 324 |
| 274 EXPECT_EQ(kRequestId2, last_picked_->request_id()); | 325 PumpLoop(); |
| 326 |
| 327 EXPECT_EQ(kRequestId1, last_picked_->request_id()); |
| 275 EXPECT_FALSE(request_queue_empty_called_); | 328 EXPECT_FALSE(request_queue_empty_called_); |
| 329 EXPECT_EQ(kRequestId2, GetNotifier()->last_expired_request().request_id()); |
| 330 EXPECT_EQ(RequestNotifier::SavePageStatus::EXPIRED, |
| 331 GetNotifier()->last_request_expiration_status()); |
| 332 EXPECT_EQ(1, GetNotifier()->total_expired_requests()); |
| 276 } | 333 } |
| 277 | 334 |
| 278 TEST_F(RequestPickerTest, ChooseRequestThatHasNotExceededStartLimit) { | 335 TEST_F(RequestPickerTest, ChooseRequestThatHasNotExceededStartLimit) { |
| 279 base::Time creation_time1 = | 336 base::Time creation_time1 = |
| 280 base::Time::Now() - base::TimeDelta::FromSeconds(1); | 337 base::Time::Now() - base::TimeDelta::FromSeconds(1); |
| 281 base::Time creation_time2 = base::Time::Now(); | 338 base::Time creation_time2 = base::Time::Now(); |
| 282 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, | 339 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, |
| 283 kUserRequested); | 340 kUserRequested); |
| 284 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, | 341 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, |
| 285 kUserRequested); | 342 kUserRequested); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 306 // With default policy settings, we should choose the earlier request. | 363 // With default policy settings, we should choose the earlier request. |
| 307 // However, we will make the earlier reqeust exceed the limit. | 364 // However, we will make the earlier reqeust exceed the limit. |
| 308 request1.set_completed_attempt_count(policy_->GetMaxCompletedTries()); | 365 request1.set_completed_attempt_count(policy_->GetMaxCompletedTries()); |
| 309 | 366 |
| 310 QueueRequestsAndChooseOne(request1, request2); | 367 QueueRequestsAndChooseOne(request1, request2); |
| 311 | 368 |
| 312 EXPECT_EQ(kRequestId2, last_picked_->request_id()); | 369 EXPECT_EQ(kRequestId2, last_picked_->request_id()); |
| 313 EXPECT_FALSE(request_queue_empty_called_); | 370 EXPECT_FALSE(request_queue_empty_called_); |
| 314 } | 371 } |
| 315 } // namespace offline_pages | 372 } // namespace offline_pages |
| OLD | NEW |