| 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/background_loader_offliner.h" | 5 #include "chrome/browser/android/offline_pages/background_loader_offliner.h" |
| 6 | 6 |
| 7 #include "base/metrics/histogram_macros.h" | 7 #include "base/metrics/histogram_macros.h" |
| 8 #include "base/sys_info.h" | 8 #include "base/sys_info.h" |
| 9 #include "chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h" | 9 #include "chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h" |
| 10 #include "chrome/browser/android/offline_pages/offliner_helper.h" | 10 #include "chrome/browser/android/offline_pages/offliner_helper.h" |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 static_cast<int>(OfflinePagesCctApiPrerenderAllowedStatus:: | 142 static_cast<int>(OfflinePagesCctApiPrerenderAllowedStatus:: |
| 143 NETWORK_PREDICTION_DISABLED) + | 143 NETWORK_PREDICTION_DISABLED) + |
| 144 1); | 144 1); |
| 145 } | 145 } |
| 146 | 146 |
| 147 if (!OfflinePageModel::CanSaveURL(request.url())) { | 147 if (!OfflinePageModel::CanSaveURL(request.url())) { |
| 148 DVLOG(1) << "Not able to save page for requested url: " << request.url(); | 148 DVLOG(1) << "Not able to save page for requested url: " << request.url(); |
| 149 return false; | 149 return false; |
| 150 } | 150 } |
| 151 | 151 |
| 152 if (!loader_) | 152 ResetLoader(); |
| 153 ResetState(); | 153 AttachObservers(); |
| 154 | 154 |
| 155 // Track copy of pending request. | 155 // Track copy of pending request. |
| 156 pending_request_.reset(new SavePageRequest(request)); | 156 pending_request_.reset(new SavePageRequest(request)); |
| 157 completion_callback_ = completion_callback; | 157 completion_callback_ = completion_callback; |
| 158 progress_callback_ = progress_callback; | 158 progress_callback_ = progress_callback; |
| 159 | 159 |
| 160 // Listen for app foreground/background change. | 160 // Listen for app foreground/background change. |
| 161 app_listener_.reset(new base::android::ApplicationStatusListener( | 161 app_listener_.reset(new base::android::ApplicationStatusListener( |
| 162 base::Bind(&BackgroundLoaderOffliner::OnApplicationStateChange, | 162 base::Bind(&BackgroundLoaderOffliner::OnApplicationStateChange, |
| 163 weak_ptr_factory_.GetWeakPtr()))); | 163 weak_ptr_factory_.GetWeakPtr()))); |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 save_status = RequestStatus::SAVE_FAILED; | 348 save_status = RequestStatus::SAVE_FAILED; |
| 349 | 349 |
| 350 completion_callback_.Run(request, save_status); | 350 completion_callback_.Run(request, save_status); |
| 351 } | 351 } |
| 352 | 352 |
| 353 void BackgroundLoaderOffliner::ResetState() { | 353 void BackgroundLoaderOffliner::ResetState() { |
| 354 pending_request_.reset(); | 354 pending_request_.reset(); |
| 355 snapshot_controller_.reset(); | 355 snapshot_controller_.reset(); |
| 356 page_load_state_ = SUCCESS; | 356 page_load_state_ = SUCCESS; |
| 357 network_bytes_ = 0LL; | 357 network_bytes_ = 0LL; |
| 358 // TODO(chili): Remove after RequestCoordinator can handle multiple offliners. | 358 content::WebContentsObserver::Observe(nullptr); |
| 359 // We reset the loader and observer after completion so loaders | 359 loader_.reset(); |
| 360 // will not be re-used across different requests/tries. This is a temporary | 360 } |
| 361 // solution while there exists assumptions about the number of offliners | 361 |
| 362 // there are. | 362 void BackgroundLoaderOffliner::ResetLoader() { |
| 363 loader_.reset( | 363 loader_.reset( |
| 364 new background_loader::BackgroundLoaderContents(browser_context_)); | 364 new background_loader::BackgroundLoaderContents(browser_context_)); |
| 365 } |
| 366 |
| 367 void BackgroundLoaderOffliner::AttachObservers() { |
| 365 content::WebContents* contents = loader_->web_contents(); | 368 content::WebContents* contents = loader_->web_contents(); |
| 366 content::WebContentsObserver::Observe(contents); | 369 content::WebContentsObserver::Observe(contents); |
| 367 OfflinerData::AddToWebContents(contents, this); | 370 OfflinerData::AddToWebContents(contents, this); |
| 368 } | 371 } |
| 369 | 372 |
| 370 void BackgroundLoaderOffliner::OnApplicationStateChange( | 373 void BackgroundLoaderOffliner::OnApplicationStateChange( |
| 371 base::android::ApplicationState application_state) { | 374 base::android::ApplicationState application_state) { |
| 372 if (pending_request_ && is_low_end_device_ && | 375 if (pending_request_ && is_low_end_device_ && |
| 373 application_state == | 376 application_state == |
| 374 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES) { | 377 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 387 int64_t offline_id) { | 390 int64_t offline_id) { |
| 388 // If for some reason the request was reset during while waiting for callback | 391 // If for some reason the request was reset during while waiting for callback |
| 389 // ignore the completion callback. | 392 // ignore the completion callback. |
| 390 if (pending_request_ && pending_request_->request_id() != offline_id) | 393 if (pending_request_ && pending_request_->request_id() != offline_id) |
| 391 return; | 394 return; |
| 392 completion_callback_.Run(request, RequestStatus::FOREGROUND_CANCELED); | 395 completion_callback_.Run(request, RequestStatus::FOREGROUND_CANCELED); |
| 393 } | 396 } |
| 394 } // namespace offline_pages | 397 } // namespace offline_pages |
| 395 | 398 |
| 396 DEFINE_WEB_CONTENTS_USER_DATA_KEY(offline_pages::OfflinerData); | 399 DEFINE_WEB_CONTENTS_USER_DATA_KEY(offline_pages::OfflinerData); |
| OLD | NEW |