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