| 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/core/background/pick_request_task.h" | 5 #include "components/offline_pages/core/background/pick_request_task.h" |
| 6 | 6 |
| 7 #include <deque> | 7 #include <deque> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <set> | 9 #include <set> |
| 10 | 10 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 const ClientId kClientId2("bookmark", "5678"); | 35 const ClientId kClientId2("bookmark", "5678"); |
| 36 const bool kUserRequested = true; | 36 const bool kUserRequested = true; |
| 37 const int kAttemptCount = 1; | 37 const int kAttemptCount = 1; |
| 38 const int kMaxStartedTries = 5; | 38 const int kMaxStartedTries = 5; |
| 39 const int kMaxCompletedTries = 1; | 39 const int kMaxCompletedTries = 1; |
| 40 | 40 |
| 41 // Constants for policy values - These settings represent the default values. | 41 // Constants for policy values - These settings represent the default values. |
| 42 const bool kPreferUntried = false; | 42 const bool kPreferUntried = false; |
| 43 const bool kPreferEarlier = true; | 43 const bool kPreferEarlier = true; |
| 44 const bool kPreferRetryCount = true; | 44 const bool kPreferRetryCount = true; |
| 45 const int kBackgroundProcessingTimeBudgetSeconds = 170; | |
| 46 | 45 |
| 47 // Default request | 46 // Default request |
| 48 const SavePageRequest kEmptyRequest(0UL, | 47 const SavePageRequest kEmptyRequest(0UL, |
| 49 GURL(""), | 48 GURL(""), |
| 50 ClientId("", ""), | 49 ClientId("", ""), |
| 51 base::Time(), | 50 base::Time(), |
| 52 true); | 51 true); |
| 53 } // namespace | 52 } // namespace |
| 54 | 53 |
| 55 // Helper class needed by the PickRequestTask | 54 // Helper class needed by the PickRequestTask |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 PumpLoop(); | 237 PumpLoop(); |
| 239 | 238 |
| 240 EXPECT_TRUE(request_queue_not_picked_called_); | 239 EXPECT_TRUE(request_queue_not_picked_called_); |
| 241 EXPECT_EQ(0UL, total_request_count_); | 240 EXPECT_EQ(0UL, total_request_count_); |
| 242 EXPECT_EQ(0UL, available_request_count_); | 241 EXPECT_EQ(0UL, available_request_count_); |
| 243 EXPECT_TRUE(task_complete_called_); | 242 EXPECT_TRUE(task_complete_called_); |
| 244 } | 243 } |
| 245 | 244 |
| 246 TEST_F(PickRequestTaskTest, ChooseRequestWithHigherRetryCount) { | 245 TEST_F(PickRequestTaskTest, ChooseRequestWithHigherRetryCount) { |
| 247 // Set up policy to prefer higher retry count. | 246 // Set up policy to prefer higher retry count. |
| 248 policy_.reset(new OfflinerPolicy( | 247 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, |
| 249 kPreferUntried, kPreferEarlier, kPreferRetryCount, kMaxStartedTries, | 248 kPreferRetryCount, kMaxStartedTries, |
| 250 kMaxCompletedTries + 1, kBackgroundProcessingTimeBudgetSeconds)); | 249 kMaxCompletedTries + 1)); |
| 251 MakePickRequestTask(); | 250 MakePickRequestTask(); |
| 252 | 251 |
| 253 base::Time creation_time = base::Time::Now(); | 252 base::Time creation_time = base::Time::Now(); |
| 254 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, | 253 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, |
| 255 kUserRequested); | 254 kUserRequested); |
| 256 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, | 255 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, |
| 257 kUserRequested); | 256 kUserRequested); |
| 258 request2.set_completed_attempt_count(kAttemptCount); | 257 request2.set_completed_attempt_count(kAttemptCount); |
| 259 | 258 |
| 260 QueueRequests(request1, request2); | 259 QueueRequests(request1, request2); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 283 task()->Run(); | 282 task()->Run(); |
| 284 PumpLoop(); | 283 PumpLoop(); |
| 285 | 284 |
| 286 EXPECT_EQ(kRequestId1, last_picked_->request_id()); | 285 EXPECT_EQ(kRequestId1, last_picked_->request_id()); |
| 287 EXPECT_FALSE(request_queue_not_picked_called_); | 286 EXPECT_FALSE(request_queue_not_picked_called_); |
| 288 EXPECT_TRUE(task_complete_called_); | 287 EXPECT_TRUE(task_complete_called_); |
| 289 } | 288 } |
| 290 | 289 |
| 291 TEST_F(PickRequestTaskTest, ChooseEarlierRequest) { | 290 TEST_F(PickRequestTaskTest, ChooseEarlierRequest) { |
| 292 // We need a custom policy object prefering recency to retry count. | 291 // We need a custom policy object prefering recency to retry count. |
| 293 policy_.reset(new OfflinerPolicy( | 292 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, |
| 294 kPreferUntried, kPreferEarlier, !kPreferRetryCount, kMaxStartedTries, | 293 !kPreferRetryCount, kMaxStartedTries, |
| 295 kMaxCompletedTries, kBackgroundProcessingTimeBudgetSeconds)); | 294 kMaxCompletedTries)); |
| 296 MakePickRequestTask(); | 295 MakePickRequestTask(); |
| 297 | 296 |
| 298 base::Time creation_time1 = | 297 base::Time creation_time1 = |
| 299 base::Time::Now() - base::TimeDelta::FromSeconds(10); | 298 base::Time::Now() - base::TimeDelta::FromSeconds(10); |
| 300 base::Time creation_time2 = base::Time::Now(); | 299 base::Time creation_time2 = base::Time::Now(); |
| 301 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, | 300 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, |
| 302 kUserRequested); | 301 kUserRequested); |
| 303 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, | 302 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, |
| 304 kUserRequested); | 303 kUserRequested); |
| 305 request2.set_completed_attempt_count(kAttemptCount); | 304 request2.set_completed_attempt_count(kAttemptCount); |
| 306 | 305 |
| 307 QueueRequests(request1, request2); | 306 QueueRequests(request1, request2); |
| 308 | 307 |
| 309 task()->Run(); | 308 task()->Run(); |
| 310 PumpLoop(); | 309 PumpLoop(); |
| 311 | 310 |
| 312 EXPECT_EQ(kRequestId1, last_picked_->request_id()); | 311 EXPECT_EQ(kRequestId1, last_picked_->request_id()); |
| 313 EXPECT_FALSE(request_queue_not_picked_called_); | 312 EXPECT_FALSE(request_queue_not_picked_called_); |
| 314 EXPECT_TRUE(task_complete_called_); | 313 EXPECT_TRUE(task_complete_called_); |
| 315 } | 314 } |
| 316 | 315 |
| 317 TEST_F(PickRequestTaskTest, ChooseSameTimeRequestWithHigherRetryCount) { | 316 TEST_F(PickRequestTaskTest, ChooseSameTimeRequestWithHigherRetryCount) { |
| 318 // We need a custom policy object preferring recency to retry count. | 317 // We need a custom policy object preferring recency to retry count. |
| 319 policy_.reset(new OfflinerPolicy( | 318 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, |
| 320 kPreferUntried, kPreferEarlier, !kPreferRetryCount, kMaxStartedTries, | 319 !kPreferRetryCount, kMaxStartedTries, |
| 321 kMaxCompletedTries + 1, kBackgroundProcessingTimeBudgetSeconds)); | 320 kMaxCompletedTries + 1)); |
| 322 MakePickRequestTask(); | 321 MakePickRequestTask(); |
| 323 | 322 |
| 324 base::Time creation_time = base::Time::Now(); | 323 base::Time creation_time = base::Time::Now(); |
| 325 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, | 324 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, |
| 326 kUserRequested); | 325 kUserRequested); |
| 327 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, | 326 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, |
| 328 kUserRequested); | 327 kUserRequested); |
| 329 request2.set_completed_attempt_count(kAttemptCount); | 328 request2.set_completed_attempt_count(kAttemptCount); |
| 330 | 329 |
| 331 QueueRequests(request1, request2); | 330 QueueRequests(request1, request2); |
| 332 | 331 |
| 333 task()->Run(); | 332 task()->Run(); |
| 334 PumpLoop(); | 333 PumpLoop(); |
| 335 | 334 |
| 336 EXPECT_EQ(kRequestId2, last_picked_->request_id()); | 335 EXPECT_EQ(kRequestId2, last_picked_->request_id()); |
| 337 EXPECT_FALSE(request_queue_not_picked_called_); | 336 EXPECT_FALSE(request_queue_not_picked_called_); |
| 338 EXPECT_TRUE(task_complete_called_); | 337 EXPECT_TRUE(task_complete_called_); |
| 339 } | 338 } |
| 340 | 339 |
| 341 TEST_F(PickRequestTaskTest, ChooseRequestWithLowerRetryCount) { | 340 TEST_F(PickRequestTaskTest, ChooseRequestWithLowerRetryCount) { |
| 342 // We need a custom policy object preferring lower retry count. | 341 // We need a custom policy object preferring lower retry count. |
| 343 policy_.reset(new OfflinerPolicy( | 342 policy_.reset(new OfflinerPolicy(!kPreferUntried, kPreferEarlier, |
| 344 !kPreferUntried, kPreferEarlier, kPreferRetryCount, kMaxStartedTries, | 343 kPreferRetryCount, kMaxStartedTries, |
| 345 kMaxCompletedTries + 1, kBackgroundProcessingTimeBudgetSeconds)); | 344 kMaxCompletedTries + 1)); |
| 346 MakePickRequestTask(); | 345 MakePickRequestTask(); |
| 347 | 346 |
| 348 base::Time creation_time = base::Time::Now(); | 347 base::Time creation_time = base::Time::Now(); |
| 349 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, | 348 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, |
| 350 kUserRequested); | 349 kUserRequested); |
| 351 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, | 350 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, |
| 352 kUserRequested); | 351 kUserRequested); |
| 353 request2.set_completed_attempt_count(kAttemptCount); | 352 request2.set_completed_attempt_count(kAttemptCount); |
| 354 | 353 |
| 355 QueueRequests(request1, request2); | 354 QueueRequests(request1, request2); |
| 356 | 355 |
| 357 task()->Run(); | 356 task()->Run(); |
| 358 PumpLoop(); | 357 PumpLoop(); |
| 359 | 358 |
| 360 EXPECT_EQ(kRequestId1, last_picked_->request_id()); | 359 EXPECT_EQ(kRequestId1, last_picked_->request_id()); |
| 361 EXPECT_FALSE(request_queue_not_picked_called_); | 360 EXPECT_FALSE(request_queue_not_picked_called_); |
| 362 EXPECT_TRUE(task_complete_called_); | 361 EXPECT_TRUE(task_complete_called_); |
| 363 } | 362 } |
| 364 | 363 |
| 365 TEST_F(PickRequestTaskTest, ChooseLaterRequest) { | 364 TEST_F(PickRequestTaskTest, ChooseLaterRequest) { |
| 366 // We need a custom policy preferring recency over retry, and later requests. | 365 // We need a custom policy preferring recency over retry, and later requests. |
| 367 policy_.reset(new OfflinerPolicy( | 366 policy_.reset(new OfflinerPolicy(kPreferUntried, !kPreferEarlier, |
| 368 kPreferUntried, !kPreferEarlier, !kPreferRetryCount, kMaxStartedTries, | 367 !kPreferRetryCount, kMaxStartedTries, |
| 369 kMaxCompletedTries, kBackgroundProcessingTimeBudgetSeconds)); | 368 kMaxCompletedTries)); |
| 370 MakePickRequestTask(); | 369 MakePickRequestTask(); |
| 371 | 370 |
| 372 base::Time creation_time1 = | 371 base::Time creation_time1 = |
| 373 base::Time::Now() - base::TimeDelta::FromSeconds(10); | 372 base::Time::Now() - base::TimeDelta::FromSeconds(10); |
| 374 base::Time creation_time2 = base::Time::Now(); | 373 base::Time creation_time2 = base::Time::Now(); |
| 375 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, | 374 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, |
| 376 kUserRequested); | 375 kUserRequested); |
| 377 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, | 376 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, |
| 378 kUserRequested); | 377 kUserRequested); |
| 379 | 378 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 454 task()->Run(); | 453 task()->Run(); |
| 455 PumpLoop(); | 454 PumpLoop(); |
| 456 | 455 |
| 457 EXPECT_EQ(kRequestId2, last_picked_->request_id()); | 456 EXPECT_EQ(kRequestId2, last_picked_->request_id()); |
| 458 EXPECT_FALSE(request_queue_not_picked_called_); | 457 EXPECT_FALSE(request_queue_not_picked_called_); |
| 459 EXPECT_TRUE(task_complete_called_); | 458 EXPECT_TRUE(task_complete_called_); |
| 460 EXPECT_TRUE(cleanup_needed_); | 459 EXPECT_TRUE(cleanup_needed_); |
| 461 } | 460 } |
| 462 | 461 |
| 463 TEST_F(PickRequestTaskTest, ChooseRequestThatIsNotDisabled) { | 462 TEST_F(PickRequestTaskTest, ChooseRequestThatIsNotDisabled) { |
| 464 policy_.reset(new OfflinerPolicy( | 463 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier, |
| 465 kPreferUntried, kPreferEarlier, kPreferRetryCount, kMaxStartedTries, | 464 kPreferRetryCount, kMaxStartedTries, |
| 466 kMaxCompletedTries + 1, kBackgroundProcessingTimeBudgetSeconds)); | 465 kMaxCompletedTries + 1)); |
| 467 | 466 |
| 468 // put request 2 on disabled list, ensure request1 picked instead, | 467 // put request 2 on disabled list, ensure request1 picked instead, |
| 469 // even though policy would prefer 2. | 468 // even though policy would prefer 2. |
| 470 disabled_requests_.insert(kRequestId2); | 469 disabled_requests_.insert(kRequestId2); |
| 471 MakePickRequestTask(); | 470 MakePickRequestTask(); |
| 472 | 471 |
| 473 base::Time creation_time = base::Time::Now(); | 472 base::Time creation_time = base::Time::Now(); |
| 474 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, | 473 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, |
| 475 kUserRequested); | 474 kUserRequested); |
| 476 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, | 475 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 559 PumpLoop(); | 558 PumpLoop(); |
| 560 | 559 |
| 561 EXPECT_EQ(kRequestId2, last_picked_->request_id()); | 560 EXPECT_EQ(kRequestId2, last_picked_->request_id()); |
| 562 EXPECT_FALSE(request_queue_not_picked_called_); | 561 EXPECT_FALSE(request_queue_not_picked_called_); |
| 563 EXPECT_EQ(2UL, total_request_count_); | 562 EXPECT_EQ(2UL, total_request_count_); |
| 564 EXPECT_EQ(2UL, available_request_count_); | 563 EXPECT_EQ(2UL, available_request_count_); |
| 565 EXPECT_TRUE(task_complete_called_); | 564 EXPECT_TRUE(task_complete_called_); |
| 566 EXPECT_EQ(2UL, prioritized_requests_.size()); | 565 EXPECT_EQ(2UL, prioritized_requests_.size()); |
| 567 } | 566 } |
| 568 } // namespace offline_pages | 567 } // namespace offline_pages |
| OLD | NEW |