| 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_queue_store.h" | 5 #include "components/offline_pages/background/request_queue_store.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 void PumpLoop(); | 51 void PumpLoop(); |
| 52 void ClearResults(); | 52 void ClearResults(); |
| 53 | 53 |
| 54 // Callback used for get requests. | 54 // Callback used for get requests. |
| 55 void GetRequestsDone(bool result, | 55 void GetRequestsDone(bool result, |
| 56 std::vector<std::unique_ptr<SavePageRequest>> requests); | 56 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 57 // Callback used for add/update request. | 57 // Callback used for add/update request. |
| 58 void AddOrUpdateDone(UpdateStatus result); | 58 void AddOrUpdateDone(UpdateStatus result); |
| 59 void AddRequestDone(ItemActionStatus status); | 59 void AddRequestDone(ItemActionStatus status); |
| 60 void UpdateRequestDone(std::unique_ptr<UpdateRequestsResult> result); | 60 void UpdateRequestDone(std::unique_ptr<UpdateRequestsResult> result); |
| 61 void UpdateMultipleRequestsDone( | |
| 62 const RequestQueue::UpdateMultipleRequestResults& results, | |
| 63 std::vector<std::unique_ptr<SavePageRequest>> requests); | |
| 64 // Callback used for remove requests. | 61 // Callback used for remove requests. |
| 65 void RemoveDone(const RequestQueue::UpdateMultipleRequestResults& results, | 62 void RemoveDone(const RequestQueue::UpdateMultipleRequestResults& results, |
| 66 std::vector<std::unique_ptr<SavePageRequest>> requests); | 63 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 67 // Callback used for reset. | 64 // Callback used for reset. |
| 68 void ResetDone(bool result); | 65 void ResetDone(bool result); |
| 69 | 66 |
| 70 LastResult last_result() const { return last_result_; } | 67 LastResult last_result() const { return last_result_; } |
| 71 UpdateStatus last_update_status() const { return last_update_status_; } | 68 UpdateStatus last_update_status() const { return last_update_status_; } |
| 72 const RequestQueue::UpdateMultipleRequestResults& | 69 const RequestQueue::UpdateMultipleRequestResults& |
| 73 last_multiple_update_results() const { | 70 last_multiple_update_results() const { |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 | 139 |
| 143 void RequestQueueStoreTestBase::AddRequestDone(ItemActionStatus status) { | 140 void RequestQueueStoreTestBase::AddRequestDone(ItemActionStatus status) { |
| 144 last_add_status_ = status; | 141 last_add_status_ = status; |
| 145 } | 142 } |
| 146 | 143 |
| 147 void RequestQueueStoreTestBase::UpdateRequestDone( | 144 void RequestQueueStoreTestBase::UpdateRequestDone( |
| 148 std::unique_ptr<UpdateRequestsResult> result) { | 145 std::unique_ptr<UpdateRequestsResult> result) { |
| 149 last_update_result_ = std::move(result); | 146 last_update_result_ = std::move(result); |
| 150 } | 147 } |
| 151 | 148 |
| 152 void RequestQueueStoreTestBase::UpdateMultipleRequestsDone( | |
| 153 const RequestQueue::UpdateMultipleRequestResults& results, | |
| 154 std::vector<std::unique_ptr<SavePageRequest>> requests) { | |
| 155 last_multiple_update_results_ = results; | |
| 156 last_requests_ = std::move(requests); | |
| 157 } | |
| 158 | |
| 159 void RequestQueueStoreTestBase::RemoveDone( | 149 void RequestQueueStoreTestBase::RemoveDone( |
| 160 const RequestQueue::UpdateMultipleRequestResults& results, | 150 const RequestQueue::UpdateMultipleRequestResults& results, |
| 161 std::vector<std::unique_ptr<SavePageRequest>> requests) { | 151 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 162 last_remove_results_ = results; | 152 last_remove_results_ = results; |
| 163 last_requests_ = std::move(requests); | 153 last_requests_ = std::move(requests); |
| 164 } | 154 } |
| 165 | 155 |
| 166 void RequestQueueStoreTestBase::ResetDone(bool result) { | 156 void RequestQueueStoreTestBase::ResetDone(bool result) { |
| 167 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; | 157 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; |
| 168 } | 158 } |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 371 ASSERT_EQ(2ul, this->last_remove_results().size()); | 361 ASSERT_EQ(2ul, this->last_remove_results().size()); |
| 372 // When requests are missing, we expect the results to say so, but since they | 362 // When requests are missing, we expect the results to say so, but since they |
| 373 // are missing, no requests should have been returned. | 363 // are missing, no requests should have been returned. |
| 374 ASSERT_EQ(RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST, | 364 ASSERT_EQ(RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST, |
| 375 this->last_remove_results().at(0).second); | 365 this->last_remove_results().at(0).second); |
| 376 ASSERT_EQ(RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST, | 366 ASSERT_EQ(RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST, |
| 377 this->last_remove_results().at(1).second); | 367 this->last_remove_results().at(1).second); |
| 378 ASSERT_EQ(0UL, this->last_requests().size()); | 368 ASSERT_EQ(0UL, this->last_requests().size()); |
| 379 } | 369 } |
| 380 | 370 |
| 381 TYPED_TEST(RequestQueueStoreTest, PauseAndResumeRequest) { | |
| 382 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); | |
| 383 base::Time creation_time = base::Time::Now(); | |
| 384 | |
| 385 // Create request and add it to the queue. | |
| 386 SavePageRequest request1(kRequestId, kUrl, kClientId, creation_time, | |
| 387 kUserRequested); | |
| 388 store->AddRequest(request1, | |
| 389 base::Bind(&RequestQueueStoreTestBase::AddRequestDone, | |
| 390 base::Unretained(this))); | |
| 391 this->PumpLoop(); | |
| 392 this->ClearResults(); | |
| 393 | |
| 394 // Pause a request. | |
| 395 std::vector<int64_t> request_ids{kRequestId}; | |
| 396 store->ChangeRequestsState( | |
| 397 request_ids, SavePageRequest::RequestState::PAUSED, | |
| 398 base::Bind(&RequestQueueStoreTestBase::UpdateMultipleRequestsDone, | |
| 399 base::Unretained(this))); | |
| 400 ASSERT_EQ(LastResult::kNone, this->last_result()); | |
| 401 this->PumpLoop(); | |
| 402 | |
| 403 // Verify pause succeeded | |
| 404 ASSERT_EQ(1ul, this->last_multiple_update_results().size()); | |
| 405 ASSERT_EQ(RequestQueue::UpdateRequestResult::SUCCESS, | |
| 406 this->last_multiple_update_results().at(0).second); | |
| 407 ASSERT_EQ(kRequestId, this->last_requests().at(0)->request_id()); | |
| 408 this->ClearResults(); | |
| 409 | |
| 410 // Get the request from the queue to check it out | |
| 411 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | |
| 412 base::Unretained(this))); | |
| 413 this->PumpLoop(); | |
| 414 ASSERT_EQ(LastResult::kTrue, this->last_result()); | |
| 415 // The request should still be in the queue. | |
| 416 ASSERT_EQ(1UL, this->last_requests().size()); | |
| 417 // Request 1 should be paused. | |
| 418 ASSERT_EQ(SavePageRequest::RequestState::PAUSED, | |
| 419 this->last_requests().at(0)->request_state()); | |
| 420 this->ClearResults(); | |
| 421 | |
| 422 // Now resume the same request we paused. | |
| 423 store->ChangeRequestsState( | |
| 424 request_ids, SavePageRequest::RequestState::AVAILABLE, | |
| 425 base::Bind(&RequestQueueStoreTestBase::UpdateMultipleRequestsDone, | |
| 426 base::Unretained(this))); | |
| 427 ASSERT_EQ(LastResult::kNone, this->last_result()); | |
| 428 this->PumpLoop(); | |
| 429 | |
| 430 // Verify resume succeeded. | |
| 431 ASSERT_EQ(1ul, this->last_multiple_update_results().size()); | |
| 432 ASSERT_EQ(RequestQueue::UpdateRequestResult::SUCCESS, | |
| 433 this->last_multiple_update_results().at(0).second); | |
| 434 ASSERT_EQ(kRequestId, this->last_requests().at(0)->request_id()); | |
| 435 this->ClearResults(); | |
| 436 | |
| 437 // Get the request from the queue to check it out | |
| 438 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | |
| 439 base::Unretained(this))); | |
| 440 this->PumpLoop(); | |
| 441 ASSERT_EQ(LastResult::kTrue, this->last_result()); | |
| 442 // The request should still be in the queue. | |
| 443 ASSERT_EQ(1UL, this->last_requests().size()); | |
| 444 // Request 1 should be paused. | |
| 445 ASSERT_EQ(SavePageRequest::RequestState::AVAILABLE, | |
| 446 this->last_requests().at(0)->request_state()); | |
| 447 this->ClearResults(); | |
| 448 } | |
| 449 | |
| 450 TYPED_TEST(RequestQueueStoreTest, ResetStore) { | 371 TYPED_TEST(RequestQueueStoreTest, ResetStore) { |
| 451 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); | 372 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); |
| 452 base::Time creation_time = base::Time::Now(); | 373 base::Time creation_time = base::Time::Now(); |
| 453 SavePageRequest original_request( | 374 SavePageRequest original_request( |
| 454 kRequestId, kUrl, kClientId, creation_time, kUserRequested); | 375 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
| 455 store->AddRequest(original_request, | 376 store->AddRequest(original_request, |
| 456 base::Bind(&RequestQueueStoreTestBase::AddRequestDone, | 377 base::Bind(&RequestQueueStoreTestBase::AddRequestDone, |
| 457 base::Unretained(this))); | 378 base::Unretained(this))); |
| 458 this->PumpLoop(); | 379 this->PumpLoop(); |
| 459 this->ClearResults(); | 380 this->ClearResults(); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 495 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | 416 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
| 496 base::Unretained(this))); | 417 base::Unretained(this))); |
| 497 ASSERT_EQ(LastResult::kNone, this->last_result()); | 418 ASSERT_EQ(LastResult::kNone, this->last_result()); |
| 498 this->PumpLoop(); | 419 this->PumpLoop(); |
| 499 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 420 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
| 500 ASSERT_EQ(1ul, this->last_requests().size()); | 421 ASSERT_EQ(1ul, this->last_requests().size()); |
| 501 ASSERT_TRUE(original_request == *(this->last_requests().at(0).get())); | 422 ASSERT_TRUE(original_request == *(this->last_requests().at(0).get())); |
| 502 } | 423 } |
| 503 | 424 |
| 504 } // offline_pages | 425 } // offline_pages |
| OLD | NEW |