Chromium Code Reviews| 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 kDefaultRequest(0UL, | |
|
Pete Williamson
2016/08/18 17:14:46
kEmptyRequest might be a better name than kDefault
romax
2016/08/18 17:48:38
Done.
| |
| 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_(kDefaultRequest), 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_++; | |
|
Pete Williamson
2016/08/18 17:14:46
I don't see any code to check the number of expire
romax
2016/08/18 17:48:38
Ah i meant to use that to check how many 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 private: | |
| 74 SavePageStatus last_request_expiration_status_; | |
| 75 SavePageRequest last_expired_request_; | |
| 76 int32_t total_expired_requests_; | |
| 77 }; | |
| 78 | |
| 41 class RequestPickerTest : public testing::Test { | 79 class RequestPickerTest : public testing::Test { |
| 42 public: | 80 public: |
| 43 RequestPickerTest(); | 81 RequestPickerTest(); |
| 44 | 82 |
| 45 ~RequestPickerTest() override; | 83 ~RequestPickerTest() override; |
| 46 | 84 |
| 47 void SetUp() override; | 85 void SetUp() override; |
| 48 | 86 |
| 49 void PumpLoop(); | 87 void PumpLoop(); |
| 50 | 88 |
| 51 void AddRequestDone(RequestQueue::AddRequestResult result, | 89 void AddRequestDone(RequestQueue::AddRequestResult result, |
| 52 const SavePageRequest& request); | 90 const SavePageRequest& request); |
| 53 | 91 |
| 54 void RequestPicked(const SavePageRequest& request); | 92 void RequestPicked(const SavePageRequest& request); |
| 55 | 93 |
| 56 void RequestQueueEmpty(); | 94 void RequestQueueEmpty(); |
| 57 | 95 |
| 58 void QueueRequestsAndChooseOne(const SavePageRequest& request1, | 96 void QueueRequestsAndChooseOne(const SavePageRequest& request1, |
| 59 const SavePageRequest& request2); | 97 const SavePageRequest& request2); |
| 60 | 98 |
| 99 RequestNotifierStub* GetNotifier() { return notifier_.get(); } | |
| 100 | |
| 61 protected: | 101 protected: |
| 62 // The request queue is simple enough we will use a real queue with a memory | 102 // The request queue is simple enough we will use a real queue with a memory |
| 63 // store instead of a stub. | 103 // store instead of a stub. |
| 64 std::unique_ptr<RequestQueue> queue_; | 104 std::unique_ptr<RequestQueue> queue_; |
| 65 std::unique_ptr<RequestPicker> picker_; | 105 std::unique_ptr<RequestPicker> picker_; |
| 106 std::unique_ptr<RequestNotifierStub> notifier_; | |
| 66 std::unique_ptr<SavePageRequest> last_picked_; | 107 std::unique_ptr<SavePageRequest> last_picked_; |
| 67 std::unique_ptr<OfflinerPolicy> policy_; | 108 std::unique_ptr<OfflinerPolicy> policy_; |
| 68 bool request_queue_empty_called_; | 109 bool request_queue_empty_called_; |
| 69 | 110 |
| 70 private: | 111 private: |
| 71 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 112 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
| 72 base::ThreadTaskRunnerHandle task_runner_handle_; | 113 base::ThreadTaskRunnerHandle task_runner_handle_; |
| 73 }; | 114 }; |
| 74 | 115 |
| 75 RequestPickerTest::RequestPickerTest() | 116 RequestPickerTest::RequestPickerTest() |
| 76 : task_runner_(new base::TestSimpleTaskRunner), | 117 : task_runner_(new base::TestSimpleTaskRunner), |
| 77 task_runner_handle_(task_runner_) {} | 118 task_runner_handle_(task_runner_) {} |
| 78 | 119 |
| 79 RequestPickerTest::~RequestPickerTest() {} | 120 RequestPickerTest::~RequestPickerTest() {} |
| 80 | 121 |
| 81 void RequestPickerTest::SetUp() { | 122 void RequestPickerTest::SetUp() { |
| 82 std::unique_ptr<RequestQueueInMemoryStore> store( | 123 std::unique_ptr<RequestQueueInMemoryStore> store( |
| 83 new RequestQueueInMemoryStore()); | 124 new RequestQueueInMemoryStore()); |
| 84 queue_.reset(new RequestQueue(std::move(store))); | 125 queue_.reset(new RequestQueue(std::move(store))); |
| 85 policy_.reset(new OfflinerPolicy()); | 126 policy_.reset(new OfflinerPolicy()); |
| 86 picker_.reset(new RequestPicker(queue_.get(), policy_.get())); | 127 notifier_.reset(new RequestNotifierStub()); |
| 128 picker_.reset( | |
| 129 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); | |
| 87 request_queue_empty_called_ = false; | 130 request_queue_empty_called_ = false; |
| 88 } | 131 } |
| 89 | 132 |
| 90 void RequestPickerTest::PumpLoop() { | 133 void RequestPickerTest::PumpLoop() { |
| 91 task_runner_->RunUntilIdle(); | 134 task_runner_->RunUntilIdle(); |
| 92 } | 135 } |
| 93 | 136 |
| 94 void RequestPickerTest::AddRequestDone(RequestQueue::AddRequestResult result, | 137 void RequestPickerTest::AddRequestDone(RequestQueue::AddRequestResult result, |
| 95 const SavePageRequest& request) {} | 138 const SavePageRequest& request) {} |
| 96 | 139 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 140 // callback. | 183 // callback. |
| 141 PumpLoop(); | 184 PumpLoop(); |
| 142 | 185 |
| 143 EXPECT_TRUE(request_queue_empty_called_); | 186 EXPECT_TRUE(request_queue_empty_called_); |
| 144 } | 187 } |
| 145 | 188 |
| 146 TEST_F(RequestPickerTest, ChooseRequestWithHigherRetryCount) { | 189 TEST_F(RequestPickerTest, ChooseRequestWithHigherRetryCount) { |
| 147 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, | 190 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, |
| 148 kPreferRetryCount, kMaxStartedTries, | 191 kPreferRetryCount, kMaxStartedTries, |
| 149 kMaxCompletedTries + 1)); | 192 kMaxCompletedTries + 1)); |
| 150 picker_.reset(new RequestPicker(queue_.get(), policy_.get())); | 193 picker_.reset( |
| 194 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); | |
| 151 | 195 |
| 152 base::Time creation_time = base::Time::Now(); | 196 base::Time creation_time = base::Time::Now(); |
| 153 SavePageRequest request1( | 197 SavePageRequest request1( |
| 154 kRequestId1, kUrl1, kClientId1, creation_time, kUserRequested); | 198 kRequestId1, kUrl1, kClientId1, creation_time, kUserRequested); |
| 155 SavePageRequest request2( | 199 SavePageRequest request2( |
| 156 kRequestId2, kUrl2, kClientId2, creation_time, kUserRequested); | 200 kRequestId2, kUrl2, kClientId2, creation_time, kUserRequested); |
| 157 request2.set_completed_attempt_count(kAttemptCount); | 201 request2.set_completed_attempt_count(kAttemptCount); |
| 158 | 202 |
| 159 QueueRequestsAndChooseOne(request1, request2); | 203 QueueRequestsAndChooseOne(request1, request2); |
| 160 | 204 |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 175 | 219 |
| 176 EXPECT_EQ(kRequestId1, last_picked_->request_id()); | 220 EXPECT_EQ(kRequestId1, last_picked_->request_id()); |
| 177 EXPECT_FALSE(request_queue_empty_called_); | 221 EXPECT_FALSE(request_queue_empty_called_); |
| 178 } | 222 } |
| 179 | 223 |
| 180 TEST_F(RequestPickerTest, ChooseEarlierRequest) { | 224 TEST_F(RequestPickerTest, ChooseEarlierRequest) { |
| 181 // We need a custom policy object prefering recency to retry count. | 225 // We need a custom policy object prefering recency to retry count. |
| 182 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, | 226 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, |
| 183 !kPreferRetryCount, kMaxStartedTries, | 227 !kPreferRetryCount, kMaxStartedTries, |
| 184 kMaxCompletedTries)); | 228 kMaxCompletedTries)); |
| 185 picker_.reset(new RequestPicker(queue_.get(), policy_.get())); | 229 picker_.reset( |
| 230 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); | |
| 186 | 231 |
| 187 base::Time creation_time1 = | 232 base::Time creation_time1 = |
| 188 base::Time::Now() - base::TimeDelta::FromSeconds(10); | 233 base::Time::Now() - base::TimeDelta::FromSeconds(10); |
| 189 base::Time creation_time2 = base::Time::Now(); | 234 base::Time creation_time2 = base::Time::Now(); |
| 190 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, | 235 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, |
| 191 kUserRequested); | 236 kUserRequested); |
| 192 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, | 237 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, |
| 193 kUserRequested); | 238 kUserRequested); |
| 194 request2.set_completed_attempt_count(kAttemptCount); | 239 request2.set_completed_attempt_count(kAttemptCount); |
| 195 | 240 |
| 196 QueueRequestsAndChooseOne(request1, request2); | 241 QueueRequestsAndChooseOne(request1, request2); |
| 197 | 242 |
| 198 EXPECT_EQ(kRequestId1, last_picked_->request_id()); | 243 EXPECT_EQ(kRequestId1, last_picked_->request_id()); |
| 199 EXPECT_FALSE(request_queue_empty_called_); | 244 EXPECT_FALSE(request_queue_empty_called_); |
| 200 } | 245 } |
| 201 | 246 |
| 202 TEST_F(RequestPickerTest, ChooseSameTimeRequestWithHigherRetryCount) { | 247 TEST_F(RequestPickerTest, ChooseSameTimeRequestWithHigherRetryCount) { |
| 203 // We need a custom policy object preferring recency to retry count. | 248 // We need a custom policy object preferring recency to retry count. |
| 204 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, | 249 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, |
| 205 !kPreferRetryCount, kMaxStartedTries, | 250 !kPreferRetryCount, kMaxStartedTries, |
| 206 kMaxCompletedTries + 1)); | 251 kMaxCompletedTries + 1)); |
| 207 picker_.reset(new RequestPicker(queue_.get(), policy_.get())); | 252 picker_.reset( |
| 253 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); | |
| 208 | 254 |
| 209 base::Time creation_time = base::Time::Now(); | 255 base::Time creation_time = base::Time::Now(); |
| 210 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, | 256 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, |
| 211 kUserRequested); | 257 kUserRequested); |
| 212 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, | 258 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, |
| 213 kUserRequested); | 259 kUserRequested); |
| 214 request2.set_completed_attempt_count(kAttemptCount); | 260 request2.set_completed_attempt_count(kAttemptCount); |
| 215 | 261 |
| 216 QueueRequestsAndChooseOne(request1, request2); | 262 QueueRequestsAndChooseOne(request1, request2); |
| 217 | 263 |
| 218 EXPECT_EQ(kRequestId2, last_picked_->request_id()); | 264 EXPECT_EQ(kRequestId2, last_picked_->request_id()); |
| 219 EXPECT_FALSE(request_queue_empty_called_); | 265 EXPECT_FALSE(request_queue_empty_called_); |
| 220 } | 266 } |
| 221 | 267 |
| 222 TEST_F(RequestPickerTest, ChooseRequestWithLowerRetryCount) { | 268 TEST_F(RequestPickerTest, ChooseRequestWithLowerRetryCount) { |
| 223 // We need a custom policy object preferring lower retry count. | 269 // We need a custom policy object preferring lower retry count. |
| 224 policy_.reset(new OfflinerPolicy(!kPreferUntried, kPreferEarlier, | 270 policy_.reset(new OfflinerPolicy(!kPreferUntried, kPreferEarlier, |
| 225 kPreferRetryCount, kMaxStartedTries, | 271 kPreferRetryCount, kMaxStartedTries, |
| 226 kMaxCompletedTries + 1)); | 272 kMaxCompletedTries + 1)); |
| 227 picker_.reset(new RequestPicker(queue_.get(), policy_.get())); | 273 picker_.reset( |
| 274 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); | |
| 228 | 275 |
| 229 base::Time creation_time = base::Time::Now(); | 276 base::Time creation_time = base::Time::Now(); |
| 230 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, | 277 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, |
| 231 kUserRequested); | 278 kUserRequested); |
| 232 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, | 279 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, |
| 233 kUserRequested); | 280 kUserRequested); |
| 234 request2.set_completed_attempt_count(kAttemptCount); | 281 request2.set_completed_attempt_count(kAttemptCount); |
| 235 | 282 |
| 236 QueueRequestsAndChooseOne(request1, request2); | 283 QueueRequestsAndChooseOne(request1, request2); |
| 237 | 284 |
| 238 EXPECT_EQ(kRequestId1, last_picked_->request_id()); | 285 EXPECT_EQ(kRequestId1, last_picked_->request_id()); |
| 239 EXPECT_FALSE(request_queue_empty_called_); | 286 EXPECT_FALSE(request_queue_empty_called_); |
| 240 } | 287 } |
| 241 | 288 |
| 242 TEST_F(RequestPickerTest, ChooseLaterRequest) { | 289 TEST_F(RequestPickerTest, ChooseLaterRequest) { |
| 243 // We need a custom policy preferring recency over retry, and later requests. | 290 // We need a custom policy preferring recency over retry, and later requests. |
| 244 policy_.reset(new OfflinerPolicy(kPreferUntried, !kPreferEarlier, | 291 policy_.reset(new OfflinerPolicy(kPreferUntried, !kPreferEarlier, |
| 245 !kPreferRetryCount, kMaxStartedTries, | 292 !kPreferRetryCount, kMaxStartedTries, |
| 246 kMaxCompletedTries)); | 293 kMaxCompletedTries)); |
| 247 picker_.reset(new RequestPicker(queue_.get(), policy_.get())); | 294 picker_.reset( |
| 295 new RequestPicker(queue_.get(), policy_.get(), notifier_.get())); | |
| 248 | 296 |
| 249 base::Time creation_time1 = | 297 base::Time creation_time1 = |
| 250 base::Time::Now() - base::TimeDelta::FromSeconds(10); | 298 base::Time::Now() - base::TimeDelta::FromSeconds(10); |
| 251 base::Time creation_time2 = base::Time::Now(); | 299 base::Time creation_time2 = base::Time::Now(); |
| 252 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, | 300 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, |
| 253 kUserRequested); | 301 kUserRequested); |
| 254 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, | 302 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, |
| 255 kUserRequested); | 303 kUserRequested); |
| 256 | 304 |
| 257 QueueRequestsAndChooseOne(request1, request2); | 305 QueueRequestsAndChooseOne(request1, request2); |
| 258 | 306 |
| 259 EXPECT_EQ(kRequestId2, last_picked_->request_id()); | 307 EXPECT_EQ(kRequestId2, last_picked_->request_id()); |
| 260 EXPECT_FALSE(request_queue_empty_called_); | 308 EXPECT_FALSE(request_queue_empty_called_); |
| 261 } | 309 } |
| 262 | 310 |
| 263 TEST_F(RequestPickerTest, ChooseUnexpiredRequest) { | 311 TEST_F(RequestPickerTest, ChooseNonExpiredRequest) { |
| 264 base::Time creation_time1 = | 312 base::Time creation_time = base::Time::Now(); |
| 265 base::Time::Now() - base::TimeDelta::FromSeconds(kTwoWeeksInSeconds); | 313 base::Time expired_time = |
| 266 base::Time creation_time2 = base::Time::Now(); | 314 creation_time - |
| 267 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, | 315 base::TimeDelta::FromSeconds(kRequestExpirationTimeInSeconds + 60); |
|
Pete Williamson
2016/08/18 17:14:46
How does this compile? I thought that kReqeustExp
romax
2016/08/18 17:48:38
hmm it's not private but those constants are defin
| |
| 316 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, | |
| 268 kUserRequested); | 317 kUserRequested); |
| 269 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, | 318 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, expired_time, |
| 270 kUserRequested); | 319 kUserRequested); |
| 271 | 320 |
| 272 QueueRequestsAndChooseOne(request1, request2); | 321 QueueRequestsAndChooseOne(request1, request2); |
| 273 | 322 |
| 274 EXPECT_EQ(kRequestId2, last_picked_->request_id()); | 323 PumpLoop(); |
| 324 | |
| 325 EXPECT_EQ(kRequestId1, last_picked_->request_id()); | |
| 275 EXPECT_FALSE(request_queue_empty_called_); | 326 EXPECT_FALSE(request_queue_empty_called_); |
| 327 EXPECT_EQ(kRequestId2, GetNotifier()->last_expired_request().request_id()); | |
| 328 EXPECT_EQ(RequestNotifier::SavePageStatus::EXPIRED, | |
| 329 GetNotifier()->last_request_expiration_status()); | |
| 276 } | 330 } |
| 277 | 331 |
| 278 TEST_F(RequestPickerTest, ChooseRequestThatHasNotExceededStartLimit) { | 332 TEST_F(RequestPickerTest, ChooseRequestThatHasNotExceededStartLimit) { |
| 279 base::Time creation_time1 = | 333 base::Time creation_time1 = |
| 280 base::Time::Now() - base::TimeDelta::FromSeconds(1); | 334 base::Time::Now() - base::TimeDelta::FromSeconds(1); |
| 281 base::Time creation_time2 = base::Time::Now(); | 335 base::Time creation_time2 = base::Time::Now(); |
| 282 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, | 336 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, |
| 283 kUserRequested); | 337 kUserRequested); |
| 284 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, | 338 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, |
| 285 kUserRequested); | 339 kUserRequested); |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 306 // With default policy settings, we should choose the earlier request. | 360 // With default policy settings, we should choose the earlier request. |
| 307 // However, we will make the earlier reqeust exceed the limit. | 361 // However, we will make the earlier reqeust exceed the limit. |
| 308 request1.set_completed_attempt_count(policy_->GetMaxCompletedTries()); | 362 request1.set_completed_attempt_count(policy_->GetMaxCompletedTries()); |
| 309 | 363 |
| 310 QueueRequestsAndChooseOne(request1, request2); | 364 QueueRequestsAndChooseOne(request1, request2); |
| 311 | 365 |
| 312 EXPECT_EQ(kRequestId2, last_picked_->request_id()); | 366 EXPECT_EQ(kRequestId2, last_picked_->request_id()); |
| 313 EXPECT_FALSE(request_queue_empty_called_); | 367 EXPECT_FALSE(request_queue_empty_called_); |
| 314 } | 368 } |
| 315 } // namespace offline_pages | 369 } // namespace offline_pages |
| OLD | NEW |