| 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 "chrome/browser/android/offline_pages/prerendering_offliner.h" | 5 #include "chrome/browser/android/offline_pages/prerendering_offliner.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 ~PrerenderingOfflinerTest() override; | 165 ~PrerenderingOfflinerTest() override; |
| 166 | 166 |
| 167 void SetUp() override; | 167 void SetUp() override; |
| 168 | 168 |
| 169 Profile* profile() { return &profile_; } | 169 Profile* profile() { return &profile_; } |
| 170 PrerenderingOffliner* offliner() const { return offliner_.get(); } | 170 PrerenderingOffliner* offliner() const { return offliner_.get(); } |
| 171 Offliner::CompletionCallback const completion_callback() { | 171 Offliner::CompletionCallback const completion_callback() { |
| 172 return base::Bind(&PrerenderingOfflinerTest::OnCompletion, | 172 return base::Bind(&PrerenderingOfflinerTest::OnCompletion, |
| 173 base::Unretained(this)); | 173 base::Unretained(this)); |
| 174 } | 174 } |
| 175 |
| 175 Offliner::ProgressCallback const progress_callback() { | 176 Offliner::ProgressCallback const progress_callback() { |
| 176 return base::Bind(&PrerenderingOfflinerTest::OnProgress, | 177 return base::Bind(&PrerenderingOfflinerTest::OnProgress, |
| 177 base::Unretained(this)); | 178 base::Unretained(this)); |
| 178 } | 179 } |
| 179 | 180 |
| 181 Offliner::CancelCallback const cancel_callback() { |
| 182 return base::Bind(&PrerenderingOfflinerTest::OnCancel, |
| 183 base::Unretained(this)); |
| 184 } |
| 185 |
| 180 bool SaveInProgress() const { return model_->mock_saving(); } | 186 bool SaveInProgress() const { return model_->mock_saving(); } |
| 181 MockPrerenderingLoader* loader() { return loader_; } | 187 MockPrerenderingLoader* loader() { return loader_; } |
| 182 MockOfflinePageModel* model() { return model_; } | 188 MockOfflinePageModel* model() { return model_; } |
| 183 bool completion_callback_called() { return completion_callback_called_; } | 189 bool completion_callback_called() { return completion_callback_called_; } |
| 184 Offliner::RequestStatus request_status() { return request_status_; } | 190 Offliner::RequestStatus request_status() { return request_status_; } |
| 185 OfflinerPolicy* policy() { return policy_; } | 191 OfflinerPolicy* policy() { return policy_; } |
| 192 bool cancel_callback_called() { return cancel_callback_called_; } |
| 186 | 193 |
| 187 private: | 194 private: |
| 188 void OnCompletion(const SavePageRequest& request, | 195 void OnCompletion(const SavePageRequest& request, |
| 189 Offliner::RequestStatus status); | 196 Offliner::RequestStatus status); |
| 190 void OnProgress(const SavePageRequest& request, int64_t bytes); | 197 void OnProgress(const SavePageRequest& request, int64_t bytes); |
| 198 void OnCancel(int64_t offline_id); |
| 191 | 199 |
| 192 content::TestBrowserThreadBundle thread_bundle_; | 200 content::TestBrowserThreadBundle thread_bundle_; |
| 193 TestingProfile profile_; | 201 TestingProfile profile_; |
| 194 std::unique_ptr<PrerenderingOffliner> offliner_; | 202 std::unique_ptr<PrerenderingOffliner> offliner_; |
| 195 // Not owned. | 203 // Not owned. |
| 196 MockPrerenderingLoader* loader_; | 204 MockPrerenderingLoader* loader_; |
| 197 MockOfflinePageModel* model_; | 205 MockOfflinePageModel* model_; |
| 198 bool completion_callback_called_; | 206 bool completion_callback_called_; |
| 207 bool cancel_callback_called_; |
| 199 Offliner::RequestStatus request_status_; | 208 Offliner::RequestStatus request_status_; |
| 200 OfflinerPolicy* policy_; | 209 OfflinerPolicy* policy_; |
| 201 | 210 |
| 202 DISALLOW_COPY_AND_ASSIGN(PrerenderingOfflinerTest); | 211 DISALLOW_COPY_AND_ASSIGN(PrerenderingOfflinerTest); |
| 203 }; | 212 }; |
| 204 | 213 |
| 205 PrerenderingOfflinerTest::PrerenderingOfflinerTest() | 214 PrerenderingOfflinerTest::PrerenderingOfflinerTest() |
| 206 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), | 215 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), |
| 207 completion_callback_called_(false), | 216 completion_callback_called_(false), |
| 217 cancel_callback_called_(false), |
| 208 request_status_(Offliner::RequestStatus::UNKNOWN) {} | 218 request_status_(Offliner::RequestStatus::UNKNOWN) {} |
| 209 | 219 |
| 210 PrerenderingOfflinerTest::~PrerenderingOfflinerTest() {} | 220 PrerenderingOfflinerTest::~PrerenderingOfflinerTest() {} |
| 211 | 221 |
| 212 void PrerenderingOfflinerTest::SetUp() { | 222 void PrerenderingOfflinerTest::SetUp() { |
| 213 model_ = new MockOfflinePageModel(); | 223 model_ = new MockOfflinePageModel(); |
| 214 policy_ = new OfflinerPolicy(); | 224 policy_ = new OfflinerPolicy(); |
| 215 offliner_.reset(new PrerenderingOffliner(profile(), policy_, model_)); | 225 offliner_.reset(new PrerenderingOffliner(profile(), policy_, model_)); |
| 216 std::unique_ptr<MockPrerenderingLoader> mock_loader( | 226 std::unique_ptr<MockPrerenderingLoader> mock_loader( |
| 217 new MockPrerenderingLoader(nullptr)); | 227 new MockPrerenderingLoader(nullptr)); |
| 218 loader_ = mock_loader.get(); | 228 loader_ = mock_loader.get(); |
| 219 offliner_->SetLoaderForTesting(std::move(mock_loader)); | 229 offliner_->SetLoaderForTesting(std::move(mock_loader)); |
| 220 } | 230 } |
| 221 | 231 |
| 222 void PrerenderingOfflinerTest::OnCompletion(const SavePageRequest& request, | 232 void PrerenderingOfflinerTest::OnCompletion(const SavePageRequest& request, |
| 223 Offliner::RequestStatus status) { | 233 Offliner::RequestStatus status) { |
| 224 DCHECK(!completion_callback_called_); // Expect single callback per request. | 234 DCHECK(!completion_callback_called_); // Expect single callback per request. |
| 225 completion_callback_called_ = true; | 235 completion_callback_called_ = true; |
| 226 request_status_ = status; | 236 request_status_ = status; |
| 227 } | 237 } |
| 228 | 238 |
| 229 void PrerenderingOfflinerTest::OnProgress(const SavePageRequest& request, | 239 void PrerenderingOfflinerTest::OnProgress(const SavePageRequest& request, |
| 230 int64_t bytes) {} | 240 int64_t bytes) {} |
| 241 void PrerenderingOfflinerTest::OnCancel(int64_t offline_id) { |
| 242 DCHECK(!cancel_callback_called_); |
| 243 cancel_callback_called_ = true; |
| 244 } |
| 231 | 245 |
| 232 TEST_F(PrerenderingOfflinerTest, LoadAndSaveBadUrl) { | 246 TEST_F(PrerenderingOfflinerTest, LoadAndSaveBadUrl) { |
| 233 base::Time creation_time = base::Time::Now(); | 247 base::Time creation_time = base::Time::Now(); |
| 234 SavePageRequest request( | 248 SavePageRequest request( |
| 235 kRequestId, kFileUrl, kClientId, creation_time, kUserRequested); | 249 kRequestId, kFileUrl, kClientId, creation_time, kUserRequested); |
| 236 EXPECT_FALSE(offliner()->LoadAndSave(request, completion_callback(), | 250 EXPECT_FALSE(offliner()->LoadAndSave(request, completion_callback(), |
| 237 progress_callback())); | 251 progress_callback())); |
| 238 EXPECT_TRUE(loader()->IsIdle()); | 252 EXPECT_TRUE(loader()->IsIdle()); |
| 239 } | 253 } |
| 240 | 254 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 } | 306 } |
| 293 | 307 |
| 294 TEST_F(PrerenderingOfflinerTest, CancelWhenLoading) { | 308 TEST_F(PrerenderingOfflinerTest, CancelWhenLoading) { |
| 295 base::Time creation_time = base::Time::Now(); | 309 base::Time creation_time = base::Time::Now(); |
| 296 SavePageRequest request( | 310 SavePageRequest request( |
| 297 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); | 311 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); |
| 298 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), | 312 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), |
| 299 progress_callback())); | 313 progress_callback())); |
| 300 EXPECT_FALSE(loader()->IsIdle()); | 314 EXPECT_FALSE(loader()->IsIdle()); |
| 301 | 315 |
| 302 offliner()->Cancel(); | 316 offliner()->Cancel(cancel_callback()); |
| 317 PumpLoop(); |
| 318 EXPECT_TRUE(cancel_callback_called()); |
| 303 EXPECT_TRUE(loader()->IsIdle()); | 319 EXPECT_TRUE(loader()->IsIdle()); |
| 304 } | 320 } |
| 305 | 321 |
| 306 TEST_F(PrerenderingOfflinerTest, CancelWhenLoaded) { | 322 TEST_F(PrerenderingOfflinerTest, CancelWhenLoaded) { |
| 307 base::Time creation_time = base::Time::Now(); | 323 base::Time creation_time = base::Time::Now(); |
| 308 SavePageRequest request( | 324 SavePageRequest request( |
| 309 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); | 325 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); |
| 310 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), | 326 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), |
| 311 progress_callback())); | 327 progress_callback())); |
| 312 EXPECT_FALSE(loader()->IsIdle()); | 328 EXPECT_FALSE(loader()->IsIdle()); |
| 313 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status()); | 329 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status()); |
| 314 | 330 |
| 315 loader()->CompleteLoadingAsLoaded(); | 331 loader()->CompleteLoadingAsLoaded(); |
| 316 PumpLoop(); | 332 PumpLoop(); |
| 317 EXPECT_FALSE(completion_callback_called()); | 333 EXPECT_FALSE(completion_callback_called()); |
| 318 EXPECT_TRUE(loader()->IsLoaded()); | 334 EXPECT_TRUE(loader()->IsLoaded()); |
| 319 EXPECT_TRUE(SaveInProgress()); | 335 EXPECT_TRUE(SaveInProgress()); |
| 320 | 336 |
| 321 offliner()->Cancel(); | 337 offliner()->Cancel(cancel_callback()); |
| 322 PumpLoop(); | 338 PumpLoop(); |
| 323 EXPECT_FALSE(completion_callback_called()); | 339 EXPECT_FALSE(completion_callback_called()); |
| 340 EXPECT_TRUE(cancel_callback_called()); |
| 324 EXPECT_FALSE(loader()->IsLoaded()); | 341 EXPECT_FALSE(loader()->IsLoaded()); |
| 325 // Note: save still in progress since it does not support canceling. | 342 // Note: save still in progress since it does not support canceling. |
| 326 EXPECT_TRUE(SaveInProgress()); | 343 EXPECT_TRUE(SaveInProgress()); |
| 327 | 344 |
| 328 // Subsequent save callback causes no harm (no crash and no callback). | 345 // Subsequent save callback causes no harm (no crash and no callback). |
| 329 model()->CompleteSavingAsArchiveCreationFailed(); | 346 model()->CompleteSavingAsArchiveCreationFailed(); |
| 330 PumpLoop(); | 347 PumpLoop(); |
| 331 EXPECT_FALSE(completion_callback_called()); | 348 EXPECT_FALSE(completion_callback_called()); |
| 332 EXPECT_TRUE(loader()->IsIdle()); | 349 EXPECT_TRUE(loader()->IsIdle()); |
| 333 EXPECT_FALSE(SaveInProgress()); | 350 EXPECT_FALSE(SaveInProgress()); |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 503 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time, | 520 SavePageRequest request(kRequestId, kHttpUrl, kClientId, creation_time, |
| 504 kUserRequested); | 521 kUserRequested); |
| 505 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), | 522 EXPECT_TRUE(offliner()->LoadAndSave(request, completion_callback(), |
| 506 progress_callback())); | 523 progress_callback())); |
| 507 loader()->set_is_lowbar_met(true); | 524 loader()->set_is_lowbar_met(true); |
| 508 EXPECT_FALSE(offliner()->HandleTimeout(request)); | 525 EXPECT_FALSE(offliner()->HandleTimeout(request)); |
| 509 EXPECT_FALSE(loader()->start_snapshot_called()); | 526 EXPECT_FALSE(loader()->start_snapshot_called()); |
| 510 } | 527 } |
| 511 | 528 |
| 512 } // namespace offline_pages | 529 } // namespace offline_pages |
| OLD | NEW |