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 |