| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 "content/browser/background_fetch/background_fetch_job_controller.h" | 5 #include "content/browser/background_fetch/background_fetch_job_controller.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 | 145 |
| 146 void SetUp() override { | 146 void SetUp() override { |
| 147 // The download_manager_ ownership is given to the BrowserContext, and the | 147 // The download_manager_ ownership is given to the BrowserContext, and the |
| 148 // BrowserContext will take care of deallocating it. | 148 // BrowserContext will take care of deallocating it. |
| 149 BrowserContext::SetDownloadManagerForTesting(&browser_context_, | 149 BrowserContext::SetDownloadManagerForTesting(&browser_context_, |
| 150 download_manager_); | 150 download_manager_); |
| 151 } | 151 } |
| 152 | 152 |
| 153 void TearDown() override { job_controller_->Shutdown(); } | 153 void TearDown() override { job_controller_->Shutdown(); } |
| 154 | 154 |
| 155 void InitializeJobController() { | 155 void InitializeJobController( |
| 156 const BackgroundFetchRegistrationId& registration_id) { |
| 156 job_controller_ = base::MakeUnique<BackgroundFetchJobController>( | 157 job_controller_ = base::MakeUnique<BackgroundFetchJobController>( |
| 157 kJobGuid, &browser_context_, | 158 registration_id, &browser_context_, |
| 158 BrowserContext::GetDefaultStoragePartition(&browser_context_), | 159 BrowserContext::GetDefaultStoragePartition(&browser_context_), |
| 159 data_manager_.get(), | 160 data_manager_.get(), |
| 160 base::BindOnce(&BackgroundFetchJobControllerTest::DidCompleteJob, | 161 base::BindOnce(&BackgroundFetchJobControllerTest::DidCompleteJob, |
| 161 base::Unretained(this))); | 162 base::Unretained(this), registration_id)); |
| 162 } | 163 } |
| 163 | 164 |
| 164 void DidCompleteJob() { did_complete_job_ = true; } | 165 void DidCompleteJob( |
| 166 const BackgroundFetchRegistrationId& registration_id, |
| 167 const BackgroundFetchRegistrationId& original_registration_id) { |
| 168 ASSERT_EQ(registration_id, original_registration_id); |
| 169 did_complete_job_ = true; |
| 170 } |
| 165 | 171 |
| 166 void StartProcessing() { | 172 void StartProcessing() { |
| 167 base::RunLoop run_loop; | 173 base::RunLoop run_loop; |
| 168 BrowserThread::PostTask( | 174 BrowserThread::PostTask( |
| 169 BrowserThread::IO, FROM_HERE, | 175 BrowserThread::IO, FROM_HERE, |
| 170 base::Bind(&BackgroundFetchJobControllerTest::StartProcessingOnIO, | 176 base::Bind(&BackgroundFetchJobControllerTest::StartProcessingOnIO, |
| 171 base::Unretained(this), run_loop.QuitClosure())); | 177 base::Unretained(this), run_loop.QuitClosure())); |
| 172 run_loop.Run(); | 178 run_loop.Run(); |
| 173 } | 179 } |
| 174 | 180 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 195 private: | 201 private: |
| 196 bool did_complete_job_ = false; | 202 bool did_complete_job_ = false; |
| 197 TestBrowserThreadBundle thread_bundle_; | 203 TestBrowserThreadBundle thread_bundle_; |
| 198 TestBrowserContext browser_context_; | 204 TestBrowserContext browser_context_; |
| 199 std::unique_ptr<FakeBackgroundFetchDataManager> data_manager_; | 205 std::unique_ptr<FakeBackgroundFetchDataManager> data_manager_; |
| 200 std::unique_ptr<BackgroundFetchJobController> job_controller_; | 206 std::unique_ptr<BackgroundFetchJobController> job_controller_; |
| 201 MockDownloadManagerWithCallback* download_manager_; | 207 MockDownloadManagerWithCallback* download_manager_; |
| 202 }; | 208 }; |
| 203 | 209 |
| 204 TEST_F(BackgroundFetchJobControllerTest, SingleRequestJob) { | 210 TEST_F(BackgroundFetchJobControllerTest, SingleRequestJob) { |
| 205 BackgroundFetchJobInfo job_info(kTag, url::Origin(GURL(kOrigin)), | 211 BackgroundFetchRegistrationId registration_id( |
| 206 kServiceWorkerRegistrationId); | 212 kServiceWorkerRegistrationId, url::Origin(GURL(kOrigin)), kTag); |
| 213 |
| 207 BackgroundFetchRequestInfo request_info(GURL(kTestUrl), kJobGuid); | 214 BackgroundFetchRequestInfo request_info(GURL(kTestUrl), kJobGuid); |
| 208 request_info.set_state(DownloadItem::DownloadState::IN_PROGRESS); | 215 request_info.set_state(DownloadItem::DownloadState::IN_PROGRESS); |
| 209 data_manager()->set_next_request(&request_info); | 216 data_manager()->set_next_request(&request_info); |
| 210 InitializeJobController(); | 217 InitializeJobController(registration_id); |
| 211 | 218 |
| 212 EXPECT_CALL(*(download_manager()), | 219 EXPECT_CALL(*(download_manager()), |
| 213 DownloadUrlMock(::testing::Pointee(::testing::Property( | 220 DownloadUrlMock(::testing::Pointee(::testing::Property( |
| 214 &DownloadUrlParameters::url, GURL(kTestUrl))))) | 221 &DownloadUrlParameters::url, GURL(kTestUrl))))) |
| 215 .Times(1); | 222 .Times(1); |
| 216 | 223 |
| 217 StartProcessing(); | 224 StartProcessing(); |
| 218 | 225 |
| 219 // Get the pending download from the download manager. | 226 // Get the pending download from the download manager. |
| 220 auto& download_items = download_manager()->download_items(); | 227 auto& download_items = download_manager()->download_items(); |
| 221 ASSERT_EQ(1U, download_items.size()); | 228 ASSERT_EQ(1U, download_items.size()); |
| 222 FakeDownloadItem* item = download_items[0].get(); | 229 FakeDownloadItem* item = download_items[0].get(); |
| 223 | 230 |
| 224 // Update the observer with no actual change. | 231 // Update the observer with no actual change. |
| 225 ItemObserver()->OnDownloadUpdated(item); | 232 ItemObserver()->OnDownloadUpdated(item); |
| 226 EXPECT_EQ(DownloadItem::DownloadState::IN_PROGRESS, request_info.state()); | 233 EXPECT_EQ(DownloadItem::DownloadState::IN_PROGRESS, request_info.state()); |
| 227 EXPECT_FALSE(did_complete_job()); | 234 EXPECT_FALSE(did_complete_job()); |
| 228 | 235 |
| 229 // Update the item to be completed then update the observer. The JobController | 236 // Update the item to be completed then update the observer. The JobController |
| 230 // should update the JobData that the request is complete. | 237 // should update the JobData that the request is complete. |
| 231 item->SetState(DownloadItem::DownloadState::COMPLETE); | 238 item->SetState(DownloadItem::DownloadState::COMPLETE); |
| 232 ItemObserver()->OnDownloadUpdated(item); | 239 ItemObserver()->OnDownloadUpdated(item); |
| 233 | 240 |
| 234 EXPECT_EQ(DownloadItem::DownloadState::COMPLETE, request_info.state()); | 241 EXPECT_EQ(DownloadItem::DownloadState::COMPLETE, request_info.state()); |
| 235 EXPECT_TRUE(did_complete_job()); | 242 EXPECT_TRUE(did_complete_job()); |
| 236 } | 243 } |
| 237 | 244 |
| 238 TEST_F(BackgroundFetchJobControllerTest, MultipleRequestJob) { | 245 TEST_F(BackgroundFetchJobControllerTest, MultipleRequestJob) { |
| 239 BackgroundFetchJobInfo job_info(kTag, url::Origin(GURL(kOrigin)), | 246 BackgroundFetchRegistrationId registration_id( |
| 240 kServiceWorkerRegistrationId); | 247 kServiceWorkerRegistrationId, url::Origin(GURL(kOrigin)), kTag); |
| 248 |
| 241 std::vector<BackgroundFetchRequestInfo> request_infos; | 249 std::vector<BackgroundFetchRequestInfo> request_infos; |
| 242 for (int i = 0; i < 10; i++) { | 250 for (int i = 0; i < 10; i++) { |
| 243 request_infos.emplace_back(GURL(kTestUrl), base::IntToString(i)); | 251 request_infos.emplace_back(GURL(kTestUrl), base::IntToString(i)); |
| 244 } | 252 } |
| 245 data_manager()->set_next_request(&request_infos[0]); | 253 data_manager()->set_next_request(&request_infos[0]); |
| 246 InitializeJobController(); | 254 InitializeJobController(registration_id); |
| 247 | 255 |
| 248 EXPECT_CALL(*(download_manager()), | 256 EXPECT_CALL(*(download_manager()), |
| 249 DownloadUrlMock(::testing::Pointee(::testing::Property( | 257 DownloadUrlMock(::testing::Pointee(::testing::Property( |
| 250 &DownloadUrlParameters::url, GURL(kTestUrl))))) | 258 &DownloadUrlParameters::url, GURL(kTestUrl))))) |
| 251 .Times(10); | 259 .Times(10); |
| 252 | 260 |
| 253 StartProcessing(); | 261 StartProcessing(); |
| 254 | 262 |
| 255 // Get one of the pending downloads from the download manager. | 263 // Get one of the pending downloads from the download manager. |
| 256 auto& download_items = download_manager()->download_items(); | 264 auto& download_items = download_manager()->download_items(); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 280 // see that there are no more requests and mark the job as done. | 288 // see that there are no more requests and mark the job as done. |
| 281 ASSERT_EQ(10U, download_items.size()); | 289 ASSERT_EQ(10U, download_items.size()); |
| 282 item = download_items[9].get(); | 290 item = download_items[9].get(); |
| 283 item->SetState(DownloadItem::DownloadState::COMPLETE); | 291 item->SetState(DownloadItem::DownloadState::COMPLETE); |
| 284 ItemObserver()->OnDownloadUpdated(item); | 292 ItemObserver()->OnDownloadUpdated(item); |
| 285 | 293 |
| 286 EXPECT_TRUE(did_complete_job()); | 294 EXPECT_TRUE(did_complete_job()); |
| 287 } | 295 } |
| 288 | 296 |
| 289 TEST_F(BackgroundFetchJobControllerTest, UpdateStorageState) { | 297 TEST_F(BackgroundFetchJobControllerTest, UpdateStorageState) { |
| 290 BackgroundFetchJobInfo job_info(kTag, url::Origin(GURL(kOrigin)), | 298 BackgroundFetchRegistrationId registration_id( |
| 291 kServiceWorkerRegistrationId); | 299 kServiceWorkerRegistrationId, url::Origin(GURL(kOrigin)), kTag); |
| 300 |
| 292 BackgroundFetchRequestInfo request_info(GURL(kTestUrl), kJobGuid); | 301 BackgroundFetchRequestInfo request_info(GURL(kTestUrl), kJobGuid); |
| 293 request_info.set_state(DownloadItem::DownloadState::IN_PROGRESS); | 302 request_info.set_state(DownloadItem::DownloadState::IN_PROGRESS); |
| 294 data_manager()->set_next_request(&request_info); | 303 data_manager()->set_next_request(&request_info); |
| 295 InitializeJobController(); | 304 InitializeJobController(registration_id); |
| 296 | 305 |
| 297 EXPECT_CALL(*(download_manager()), | 306 EXPECT_CALL(*(download_manager()), |
| 298 DownloadUrlMock(::testing::Pointee(::testing::Property( | 307 DownloadUrlMock(::testing::Pointee(::testing::Property( |
| 299 &DownloadUrlParameters::url, GURL(kTestUrl))))) | 308 &DownloadUrlParameters::url, GURL(kTestUrl))))) |
| 300 .Times(1); | 309 .Times(1); |
| 301 | 310 |
| 302 StartProcessing(); | 311 StartProcessing(); |
| 303 | 312 |
| 304 // Get the pending download from the download manager. | 313 // Get the pending download from the download manager. |
| 305 auto& download_items = download_manager()->download_items(); | 314 auto& download_items = download_manager()->download_items(); |
| 306 ASSERT_EQ(1U, download_items.size()); | 315 ASSERT_EQ(1U, download_items.size()); |
| 307 FakeDownloadItem* item = download_items[0].get(); | 316 FakeDownloadItem* item = download_items[0].get(); |
| 308 | 317 |
| 309 item->SetTargetFilePath(base::FilePath(kFileName)); | 318 item->SetTargetFilePath(base::FilePath(kFileName)); |
| 310 item->SetReceivedBytes(123); | 319 item->SetReceivedBytes(123); |
| 311 item->SetState(DownloadItem::DownloadState::COMPLETE); | 320 item->SetState(DownloadItem::DownloadState::COMPLETE); |
| 312 | 321 |
| 313 // Trigger the observer. The JobController should update the JobData that the | 322 // Trigger the observer. The JobController should update the JobData that the |
| 314 // request is complete and should fill in storage state. | 323 // request is complete and should fill in storage state. |
| 315 ItemObserver()->OnDownloadUpdated(item); | 324 ItemObserver()->OnDownloadUpdated(item); |
| 316 | 325 |
| 317 EXPECT_EQ(123, request_info.received_bytes()); | 326 EXPECT_EQ(123, request_info.received_bytes()); |
| 318 EXPECT_TRUE(data_manager()->IsComplete(kJobGuid)); | 327 EXPECT_TRUE(data_manager()->IsComplete(kJobGuid)); |
| 319 EXPECT_TRUE(did_complete_job()); | 328 EXPECT_TRUE(did_complete_job()); |
| 320 } | 329 } |
| 321 | 330 |
| 322 } // namespace content | 331 } // namespace content |
| OLD | NEW |