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 |