| 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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 | 50 |
| 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 UpdateMultipleRequestsDone( | 61 void UpdateMultipleRequestsDone( |
| 61 const RequestQueue::UpdateMultipleRequestResults& results, | 62 const RequestQueue::UpdateMultipleRequestResults& results, |
| 62 std::vector<std::unique_ptr<SavePageRequest>> requests); | 63 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 63 // Callback used for remove requests. | 64 // Callback used for remove requests. |
| 64 void RemoveDone(const RequestQueue::UpdateMultipleRequestResults& results, | 65 void RemoveDone(const RequestQueue::UpdateMultipleRequestResults& results, |
| 65 std::vector<std::unique_ptr<SavePageRequest>> requests); | 66 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 66 // Callback used for reset. | 67 // Callback used for reset. |
| 67 void ResetDone(bool result); | 68 void ResetDone(bool result); |
| 68 | 69 |
| 69 LastResult last_result() const { return last_result_; } | 70 LastResult last_result() const { return last_result_; } |
| 70 UpdateStatus last_update_status() const { return last_update_status_; } | 71 UpdateStatus last_update_status() const { return last_update_status_; } |
| 71 const RequestQueue::UpdateMultipleRequestResults& | 72 const RequestQueue::UpdateMultipleRequestResults& |
| 72 last_multiple_update_results() const { | 73 last_multiple_update_results() const { |
| 73 return last_multiple_update_results_; | 74 return last_multiple_update_results_; |
| 74 } | 75 } |
| 75 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() | 76 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() |
| 76 const { | 77 const { |
| 77 return last_remove_results_; | 78 return last_remove_results_; |
| 78 } | 79 } |
| 79 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { | 80 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { |
| 80 return last_requests_; | 81 return last_requests_; |
| 81 } | 82 } |
| 82 ItemActionStatus last_add_status() const { return last_add_status_; } | 83 ItemActionStatus last_add_status() const { return last_add_status_; } |
| 83 | 84 |
| 85 UpdateRequestsResult* last_update_result() const { |
| 86 return last_update_result_.get(); |
| 87 } |
| 88 |
| 84 protected: | 89 protected: |
| 85 base::ScopedTempDir temp_directory_; | 90 base::ScopedTempDir temp_directory_; |
| 86 | 91 |
| 87 private: | 92 private: |
| 88 LastResult last_result_; | 93 LastResult last_result_; |
| 89 UpdateStatus last_update_status_; | 94 UpdateStatus last_update_status_; |
| 90 ItemActionStatus last_add_status_; | 95 ItemActionStatus last_add_status_; |
| 96 std::unique_ptr<UpdateRequestsResult> last_update_result_; |
| 91 RequestQueue::UpdateMultipleRequestResults last_multiple_update_results_; | 97 RequestQueue::UpdateMultipleRequestResults last_multiple_update_results_; |
| 92 RequestQueue::UpdateMultipleRequestResults last_remove_results_; | 98 RequestQueue::UpdateMultipleRequestResults last_remove_results_; |
| 93 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; | 99 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; |
| 94 | 100 |
| 95 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 101 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
| 96 base::ThreadTaskRunnerHandle task_runner_handle_; | 102 base::ThreadTaskRunnerHandle task_runner_handle_; |
| 97 }; | 103 }; |
| 98 | 104 |
| 99 RequestQueueStoreTestBase::RequestQueueStoreTestBase() | 105 RequestQueueStoreTestBase::RequestQueueStoreTestBase() |
| 100 : last_result_(LastResult::kNone), | 106 : last_result_(LastResult::kNone), |
| (...skipping 12 matching lines...) Expand all Loading... |
| 113 void RequestQueueStoreTestBase::PumpLoop() { | 119 void RequestQueueStoreTestBase::PumpLoop() { |
| 114 task_runner_->RunUntilIdle(); | 120 task_runner_->RunUntilIdle(); |
| 115 } | 121 } |
| 116 | 122 |
| 117 void RequestQueueStoreTestBase::ClearResults() { | 123 void RequestQueueStoreTestBase::ClearResults() { |
| 118 last_result_ = LastResult::kNone; | 124 last_result_ = LastResult::kNone; |
| 119 last_update_status_ = UpdateStatus::FAILED; | 125 last_update_status_ = UpdateStatus::FAILED; |
| 120 last_add_status_ = ItemActionStatus::NOT_FOUND; | 126 last_add_status_ = ItemActionStatus::NOT_FOUND; |
| 121 last_remove_results_.clear(); | 127 last_remove_results_.clear(); |
| 122 last_requests_.clear(); | 128 last_requests_.clear(); |
| 129 last_update_result_.reset(nullptr); |
| 123 } | 130 } |
| 124 | 131 |
| 125 void RequestQueueStoreTestBase::GetRequestsDone( | 132 void RequestQueueStoreTestBase::GetRequestsDone( |
| 126 bool result, | 133 bool result, |
| 127 std::vector<std::unique_ptr<SavePageRequest>> requests) { | 134 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 128 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; | 135 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; |
| 129 last_requests_ = std::move(requests); | 136 last_requests_ = std::move(requests); |
| 130 } | 137 } |
| 131 | 138 |
| 132 void RequestQueueStoreTestBase::AddOrUpdateDone(UpdateStatus status) { | 139 void RequestQueueStoreTestBase::AddOrUpdateDone(UpdateStatus status) { |
| 133 last_update_status_ = status; | 140 last_update_status_ = status; |
| 134 } | 141 } |
| 135 | 142 |
| 136 void RequestQueueStoreTestBase::AddRequestDone(ItemActionStatus status) { | 143 void RequestQueueStoreTestBase::AddRequestDone(ItemActionStatus status) { |
| 137 last_add_status_ = status; | 144 last_add_status_ = status; |
| 138 } | 145 } |
| 139 | 146 |
| 147 void RequestQueueStoreTestBase::UpdateRequestDone( |
| 148 std::unique_ptr<UpdateRequestsResult> result) { |
| 149 last_update_result_ = std::move(result); |
| 150 } |
| 151 |
| 140 void RequestQueueStoreTestBase::UpdateMultipleRequestsDone( | 152 void RequestQueueStoreTestBase::UpdateMultipleRequestsDone( |
| 141 const RequestQueue::UpdateMultipleRequestResults& results, | 153 const RequestQueue::UpdateMultipleRequestResults& results, |
| 142 std::vector<std::unique_ptr<SavePageRequest>> requests) { | 154 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 143 last_multiple_update_results_ = results; | 155 last_multiple_update_results_ = results; |
| 144 last_requests_ = std::move(requests); | 156 last_requests_ = std::move(requests); |
| 145 } | 157 } |
| 146 | 158 |
| 147 void RequestQueueStoreTestBase::RemoveDone( | 159 void RequestQueueStoreTestBase::RemoveDone( |
| 148 const RequestQueue::UpdateMultipleRequestResults& results, | 160 const RequestQueue::UpdateMultipleRequestResults& results, |
| 149 std::vector<std::unique_ptr<SavePageRequest>> requests) { | 161 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 kRequestId, kUrl, kClientId, creation_time, kUserRequested); | 278 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
| 267 store->AddRequest(original_request, | 279 store->AddRequest(original_request, |
| 268 base::Bind(&RequestQueueStoreTestBase::AddRequestDone, | 280 base::Bind(&RequestQueueStoreTestBase::AddRequestDone, |
| 269 base::Unretained(this))); | 281 base::Unretained(this))); |
| 270 this->PumpLoop(); | 282 this->PumpLoop(); |
| 271 this->ClearResults(); | 283 this->ClearResults(); |
| 272 | 284 |
| 273 base::Time new_creation_time = | 285 base::Time new_creation_time = |
| 274 creation_time + base::TimeDelta::FromMinutes(1); | 286 creation_time + base::TimeDelta::FromMinutes(1); |
| 275 base::Time activation_time = creation_time + base::TimeDelta::FromHours(6); | 287 base::Time activation_time = creation_time + base::TimeDelta::FromHours(6); |
| 288 // Try updating an existing request. |
| 276 SavePageRequest updated_request(kRequestId, kUrl, kClientId, | 289 SavePageRequest updated_request(kRequestId, kUrl, kClientId, |
| 277 new_creation_time, activation_time, | 290 new_creation_time, activation_time, |
| 278 kUserRequested); | 291 kUserRequested); |
| 279 store->AddOrUpdateRequest( | 292 // Try to update a non-existing request. |
| 280 updated_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, | 293 SavePageRequest updated_request2(kRequestId2, kUrl, kClientId, |
| 281 base::Unretained(this))); | 294 new_creation_time, activation_time, |
| 282 ASSERT_EQ(UpdateStatus::FAILED, this->last_update_status()); | 295 kUserRequested); |
| 296 std::vector<SavePageRequest> requests_to_update{updated_request, |
| 297 updated_request2}; |
| 298 store->UpdateRequests( |
| 299 requests_to_update, |
| 300 base::Bind(&RequestQueueStoreTestBase::UpdateRequestDone, |
| 301 base::Unretained(this))); |
| 302 ASSERT_FALSE(this->last_update_result()); |
| 283 this->PumpLoop(); | 303 this->PumpLoop(); |
| 284 ASSERT_EQ(UpdateStatus::UPDATED, this->last_update_status()); | 304 ASSERT_TRUE(this->last_update_result()); |
| 305 EXPECT_EQ(2UL, this->last_update_result()->item_statuses.size()); |
| 306 EXPECT_EQ(kRequestId, this->last_update_result()->item_statuses[0].first); |
| 307 EXPECT_EQ(ItemActionStatus::SUCCESS, |
| 308 this->last_update_result()->item_statuses[0].second); |
| 309 EXPECT_EQ(kRequestId2, this->last_update_result()->item_statuses[1].first); |
| 310 EXPECT_EQ(ItemActionStatus::NOT_FOUND, |
| 311 this->last_update_result()->item_statuses[1].second); |
| 312 EXPECT_EQ(1UL, this->last_update_result()->updated_items.size()); |
| 313 EXPECT_EQ(updated_request, |
| 314 *(this->last_update_result()->updated_items.begin())); |
| 285 | 315 |
| 286 // Verifying get reqeust results after a request was updated. | 316 // Verifying get reqeust results after a request was updated. |
| 287 this->ClearResults(); | 317 this->ClearResults(); |
| 288 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | 318 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
| 289 base::Unretained(this))); | 319 base::Unretained(this))); |
| 290 ASSERT_EQ(LastResult::kNone, this->last_result()); | 320 ASSERT_EQ(LastResult::kNone, this->last_result()); |
| 291 this->PumpLoop(); | 321 this->PumpLoop(); |
| 292 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 322 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
| 293 ASSERT_EQ(1ul, this->last_requests().size()); | 323 ASSERT_EQ(1ul, this->last_requests().size()); |
| 294 ASSERT_EQ(updated_request, *(this->last_requests()[0].get())); | 324 ASSERT_EQ(updated_request, *(this->last_requests()[0].get())); |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | 495 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
| 466 base::Unretained(this))); | 496 base::Unretained(this))); |
| 467 ASSERT_EQ(LastResult::kNone, this->last_result()); | 497 ASSERT_EQ(LastResult::kNone, this->last_result()); |
| 468 this->PumpLoop(); | 498 this->PumpLoop(); |
| 469 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 499 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
| 470 ASSERT_EQ(1ul, this->last_requests().size()); | 500 ASSERT_EQ(1ul, this->last_requests().size()); |
| 471 ASSERT_TRUE(original_request == *(this->last_requests().at(0).get())); | 501 ASSERT_TRUE(original_request == *(this->last_requests().at(0).get())); |
| 472 } | 502 } |
| 473 | 503 |
| 474 } // offline_pages | 504 } // offline_pages |
| OLD | NEW |