Chromium Code Reviews| 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))); |
| 162 } | 163 } |
| 163 | 164 |
| 164 void DidCompleteJob() { did_complete_job_ = true; } | 165 void DidCompleteJob(const BackgroundFetchRegistrationId& registration_id) { |
| 166 did_complete_job_ = true; | |
|
harkness
2017/03/27 15:35:12
optional: DCHECK that registration_id is equal to
Peter Beverloo
2017/03/27 15:42:55
Done.
| |
| 167 } | |
| 165 | 168 |
| 166 void StartProcessing() { | 169 void StartProcessing() { |
| 167 base::RunLoop run_loop; | 170 base::RunLoop run_loop; |
| 168 BrowserThread::PostTask( | 171 BrowserThread::PostTask( |
| 169 BrowserThread::IO, FROM_HERE, | 172 BrowserThread::IO, FROM_HERE, |
| 170 base::Bind(&BackgroundFetchJobControllerTest::StartProcessingOnIO, | 173 base::Bind(&BackgroundFetchJobControllerTest::StartProcessingOnIO, |
| 171 base::Unretained(this), run_loop.QuitClosure())); | 174 base::Unretained(this), run_loop.QuitClosure())); |
| 172 run_loop.Run(); | 175 run_loop.Run(); |
| 173 } | 176 } |
| 174 | 177 |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 195 private: | 198 private: |
| 196 bool did_complete_job_ = false; | 199 bool did_complete_job_ = false; |
| 197 TestBrowserThreadBundle thread_bundle_; | 200 TestBrowserThreadBundle thread_bundle_; |
| 198 TestBrowserContext browser_context_; | 201 TestBrowserContext browser_context_; |
| 199 std::unique_ptr<FakeBackgroundFetchDataManager> data_manager_; | 202 std::unique_ptr<FakeBackgroundFetchDataManager> data_manager_; |
| 200 std::unique_ptr<BackgroundFetchJobController> job_controller_; | 203 std::unique_ptr<BackgroundFetchJobController> job_controller_; |
| 201 MockDownloadManagerWithCallback* download_manager_; | 204 MockDownloadManagerWithCallback* download_manager_; |
| 202 }; | 205 }; |
| 203 | 206 |
| 204 TEST_F(BackgroundFetchJobControllerTest, SingleRequestJob) { | 207 TEST_F(BackgroundFetchJobControllerTest, SingleRequestJob) { |
| 205 BackgroundFetchJobInfo job_info(kTag, url::Origin(GURL(kOrigin)), | 208 BackgroundFetchRegistrationId registration_id( |
| 206 kServiceWorkerRegistrationId); | 209 kServiceWorkerRegistrationId, url::Origin(GURL(kOrigin)), kTag); |
| 210 | |
| 207 BackgroundFetchRequestInfo request_info(GURL(kTestUrl), kJobGuid); | 211 BackgroundFetchRequestInfo request_info(GURL(kTestUrl), kJobGuid); |
| 208 request_info.set_state(DownloadItem::DownloadState::IN_PROGRESS); | 212 request_info.set_state(DownloadItem::DownloadState::IN_PROGRESS); |
| 209 data_manager()->set_next_request(&request_info); | 213 data_manager()->set_next_request(&request_info); |
| 210 InitializeJobController(); | 214 InitializeJobController(registration_id); |
| 211 | 215 |
| 212 EXPECT_CALL(*(download_manager()), | 216 EXPECT_CALL(*(download_manager()), |
| 213 DownloadUrlMock(::testing::Pointee(::testing::Property( | 217 DownloadUrlMock(::testing::Pointee(::testing::Property( |
| 214 &DownloadUrlParameters::url, GURL(kTestUrl))))) | 218 &DownloadUrlParameters::url, GURL(kTestUrl))))) |
| 215 .Times(1); | 219 .Times(1); |
| 216 | 220 |
| 217 StartProcessing(); | 221 StartProcessing(); |
| 218 | 222 |
| 219 // Get the pending download from the download manager. | 223 // Get the pending download from the download manager. |
| 220 auto& download_items = download_manager()->download_items(); | 224 auto& download_items = download_manager()->download_items(); |
| 221 ASSERT_EQ(1U, download_items.size()); | 225 ASSERT_EQ(1U, download_items.size()); |
| 222 FakeDownloadItem* item = download_items[0].get(); | 226 FakeDownloadItem* item = download_items[0].get(); |
| 223 | 227 |
| 224 // Update the observer with no actual change. | 228 // Update the observer with no actual change. |
| 225 ItemObserver()->OnDownloadUpdated(item); | 229 ItemObserver()->OnDownloadUpdated(item); |
| 226 EXPECT_EQ(DownloadItem::DownloadState::IN_PROGRESS, request_info.state()); | 230 EXPECT_EQ(DownloadItem::DownloadState::IN_PROGRESS, request_info.state()); |
| 227 EXPECT_FALSE(did_complete_job()); | 231 EXPECT_FALSE(did_complete_job()); |
| 228 | 232 |
| 229 // Update the item to be completed then update the observer. The JobController | 233 // Update the item to be completed then update the observer. The JobController |
| 230 // should update the JobData that the request is complete. | 234 // should update the JobData that the request is complete. |
| 231 item->SetState(DownloadItem::DownloadState::COMPLETE); | 235 item->SetState(DownloadItem::DownloadState::COMPLETE); |
| 232 ItemObserver()->OnDownloadUpdated(item); | 236 ItemObserver()->OnDownloadUpdated(item); |
| 233 | 237 |
| 234 EXPECT_EQ(DownloadItem::DownloadState::COMPLETE, request_info.state()); | 238 EXPECT_EQ(DownloadItem::DownloadState::COMPLETE, request_info.state()); |
| 235 EXPECT_TRUE(did_complete_job()); | 239 EXPECT_TRUE(did_complete_job()); |
| 236 } | 240 } |
| 237 | 241 |
| 238 TEST_F(BackgroundFetchJobControllerTest, MultipleRequestJob) { | 242 TEST_F(BackgroundFetchJobControllerTest, MultipleRequestJob) { |
| 239 BackgroundFetchJobInfo job_info(kTag, url::Origin(GURL(kOrigin)), | 243 BackgroundFetchRegistrationId registration_id( |
| 240 kServiceWorkerRegistrationId); | 244 kServiceWorkerRegistrationId, url::Origin(GURL(kOrigin)), kTag); |
| 245 | |
| 241 std::vector<BackgroundFetchRequestInfo> request_infos; | 246 std::vector<BackgroundFetchRequestInfo> request_infos; |
| 242 for (int i = 0; i < 10; i++) { | 247 for (int i = 0; i < 10; i++) { |
| 243 request_infos.emplace_back(GURL(kTestUrl), base::IntToString(i)); | 248 request_infos.emplace_back(GURL(kTestUrl), base::IntToString(i)); |
| 244 } | 249 } |
| 245 data_manager()->set_next_request(&request_infos[0]); | 250 data_manager()->set_next_request(&request_infos[0]); |
| 246 InitializeJobController(); | 251 InitializeJobController(registration_id); |
| 247 | 252 |
| 248 EXPECT_CALL(*(download_manager()), | 253 EXPECT_CALL(*(download_manager()), |
| 249 DownloadUrlMock(::testing::Pointee(::testing::Property( | 254 DownloadUrlMock(::testing::Pointee(::testing::Property( |
| 250 &DownloadUrlParameters::url, GURL(kTestUrl))))) | 255 &DownloadUrlParameters::url, GURL(kTestUrl))))) |
| 251 .Times(10); | 256 .Times(10); |
| 252 | 257 |
| 253 StartProcessing(); | 258 StartProcessing(); |
| 254 | 259 |
| 255 // Get one of the pending downloads from the download manager. | 260 // Get one of the pending downloads from the download manager. |
| 256 auto& download_items = download_manager()->download_items(); | 261 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. | 285 // see that there are no more requests and mark the job as done. |
| 281 ASSERT_EQ(10U, download_items.size()); | 286 ASSERT_EQ(10U, download_items.size()); |
| 282 item = download_items[9].get(); | 287 item = download_items[9].get(); |
| 283 item->SetState(DownloadItem::DownloadState::COMPLETE); | 288 item->SetState(DownloadItem::DownloadState::COMPLETE); |
| 284 ItemObserver()->OnDownloadUpdated(item); | 289 ItemObserver()->OnDownloadUpdated(item); |
| 285 | 290 |
| 286 EXPECT_TRUE(did_complete_job()); | 291 EXPECT_TRUE(did_complete_job()); |
| 287 } | 292 } |
| 288 | 293 |
| 289 TEST_F(BackgroundFetchJobControllerTest, UpdateStorageState) { | 294 TEST_F(BackgroundFetchJobControllerTest, UpdateStorageState) { |
| 290 BackgroundFetchJobInfo job_info(kTag, url::Origin(GURL(kOrigin)), | 295 BackgroundFetchRegistrationId registration_id( |
| 291 kServiceWorkerRegistrationId); | 296 kServiceWorkerRegistrationId, url::Origin(GURL(kOrigin)), kTag); |
| 297 | |
| 292 BackgroundFetchRequestInfo request_info(GURL(kTestUrl), kJobGuid); | 298 BackgroundFetchRequestInfo request_info(GURL(kTestUrl), kJobGuid); |
| 293 request_info.set_state(DownloadItem::DownloadState::IN_PROGRESS); | 299 request_info.set_state(DownloadItem::DownloadState::IN_PROGRESS); |
| 294 data_manager()->set_next_request(&request_info); | 300 data_manager()->set_next_request(&request_info); |
| 295 InitializeJobController(); | 301 InitializeJobController(registration_id); |
| 296 | 302 |
| 297 EXPECT_CALL(*(download_manager()), | 303 EXPECT_CALL(*(download_manager()), |
| 298 DownloadUrlMock(::testing::Pointee(::testing::Property( | 304 DownloadUrlMock(::testing::Pointee(::testing::Property( |
| 299 &DownloadUrlParameters::url, GURL(kTestUrl))))) | 305 &DownloadUrlParameters::url, GURL(kTestUrl))))) |
| 300 .Times(1); | 306 .Times(1); |
| 301 | 307 |
| 302 StartProcessing(); | 308 StartProcessing(); |
| 303 | 309 |
| 304 // Get the pending download from the download manager. | 310 // Get the pending download from the download manager. |
| 305 auto& download_items = download_manager()->download_items(); | 311 auto& download_items = download_manager()->download_items(); |
| 306 ASSERT_EQ(1U, download_items.size()); | 312 ASSERT_EQ(1U, download_items.size()); |
| 307 FakeDownloadItem* item = download_items[0].get(); | 313 FakeDownloadItem* item = download_items[0].get(); |
| 308 | 314 |
| 309 item->SetTargetFilePath(base::FilePath(kFileName)); | 315 item->SetTargetFilePath(base::FilePath(kFileName)); |
| 310 item->SetReceivedBytes(123); | 316 item->SetReceivedBytes(123); |
| 311 item->SetState(DownloadItem::DownloadState::COMPLETE); | 317 item->SetState(DownloadItem::DownloadState::COMPLETE); |
| 312 | 318 |
| 313 // Trigger the observer. The JobController should update the JobData that the | 319 // Trigger the observer. The JobController should update the JobData that the |
| 314 // request is complete and should fill in storage state. | 320 // request is complete and should fill in storage state. |
| 315 ItemObserver()->OnDownloadUpdated(item); | 321 ItemObserver()->OnDownloadUpdated(item); |
| 316 | 322 |
| 317 EXPECT_EQ(123, request_info.received_bytes()); | 323 EXPECT_EQ(123, request_info.received_bytes()); |
| 318 EXPECT_TRUE(data_manager()->IsComplete(kJobGuid)); | 324 EXPECT_TRUE(data_manager()->IsComplete(kJobGuid)); |
| 319 EXPECT_TRUE(did_complete_job()); | 325 EXPECT_TRUE(did_complete_job()); |
| 320 } | 326 } |
| 321 | 327 |
| 322 } // namespace content | 328 } // namespace content |
| OLD | NEW |