Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(589)

Side by Side Diff: chrome/browser/android/offline_pages/prerendering_offliner.cc

Issue 2742833004: Fix the Download Notifications for Offline Pages to indicate bytes loaded. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "base/bind.h" 7 #include "base/bind.h"
8 #include "base/metrics/histogram_macros.h" 8 #include "base/metrics/histogram_macros.h"
9 #include "base/sys_info.h" 9 #include "base/sys_info.h"
10 #include "chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h" 10 #include "chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h"
(...skipping 18 matching lines...) Expand all
29 offline_page_model_(offline_page_model), 29 offline_page_model_(offline_page_model),
30 pending_request_(nullptr), 30 pending_request_(nullptr),
31 is_low_end_device_(base::SysInfo::IsLowEndDevice()), 31 is_low_end_device_(base::SysInfo::IsLowEndDevice()),
32 app_listener_(nullptr), 32 app_listener_(nullptr),
33 weak_ptr_factory_(this) {} 33 weak_ptr_factory_(this) {}
34 34
35 PrerenderingOffliner::~PrerenderingOffliner() {} 35 PrerenderingOffliner::~PrerenderingOffliner() {}
36 36
37 void PrerenderingOffliner::OnNetworkProgress(const SavePageRequest& request, 37 void PrerenderingOffliner::OnNetworkProgress(const SavePageRequest& request,
38 int64_t bytes) { 38 int64_t bytes) {
39 if (!pending_request_) 39 if (!pending_request_ || !progress_callback_)
40 return;
41 DownloadUIAdapter* ui_adapter =
42 DownloadUIAdapter::FromOfflinePageModel(offline_page_model_);
43 if (!ui_adapter)
44 return; 40 return;
45 41
46 ui_adapter->UpdateProgress(request.request_id(), bytes); 42 progress_callback_.Run(request, bytes);
47 } 43 }
48 44
49 void PrerenderingOffliner::OnLoadPageDone( 45 void PrerenderingOffliner::OnLoadPageDone(
50 const SavePageRequest& request, 46 const SavePageRequest& request,
51 Offliner::RequestStatus load_status, 47 Offliner::RequestStatus load_status,
52 content::WebContents* web_contents) { 48 content::WebContents* web_contents) {
53 // Check if request is still pending receiving a callback. 49 // Check if request is still pending receiving a callback.
54 // Note: it is possible to get a loaded page, start the save operation, 50 // Note: it is possible to get a loaded page, start the save operation,
55 // and then get another callback from the Loader (eg, if its loaded 51 // and then get another callback from the Loader (eg, if its loaded
56 // WebContents is being destroyed for some resource reclamation). 52 // WebContents is being destroyed for some resource reclamation).
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 if (save_result == SavePageResult::SUCCESS) { 120 if (save_result == SavePageResult::SUCCESS) {
125 save_status = RequestStatus::SAVED; 121 save_status = RequestStatus::SAVED;
126 } else { 122 } else {
127 // TODO(dougarnett): Consider reflecting some recommendation to retry the 123 // TODO(dougarnett): Consider reflecting some recommendation to retry the
128 // request based on specific save error cases. 124 // request based on specific save error cases.
129 save_status = RequestStatus::SAVE_FAILED; 125 save_status = RequestStatus::SAVE_FAILED;
130 } 126 }
131 completion_callback_.Run(request, save_status); 127 completion_callback_.Run(request, save_status);
132 } 128 }
133 129
134 bool PrerenderingOffliner::LoadAndSave(const SavePageRequest& request, 130 bool PrerenderingOffliner::LoadAndSave(
135 const CompletionCallback& callback) { 131 const SavePageRequest& request,
132 const CompletionCallback& completion_callback,
133 const ProgressCallback& progress_callback) {
136 DCHECK(!pending_request_.get()); 134 DCHECK(!pending_request_.get());
137 135
138 if (pending_request_) { 136 if (pending_request_) {
139 DVLOG(1) << "Already have pending request"; 137 DVLOG(1) << "Already have pending request";
140 return false; 138 return false;
141 } 139 }
142 140
143 // Do not allow loading for custom tabs clients if 3rd party cookies blocked. 141 // Do not allow loading for custom tabs clients if 3rd party cookies blocked.
144 // TODO(dewittj): Revise api to specify policy rather than hard code to 142 // TODO(dewittj): Revise api to specify policy rather than hard code to
145 // name_space. 143 // name_space.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 1); 181 1);
184 } 182 }
185 183
186 if (!OfflinePageModel::CanSaveURL(request.url())) { 184 if (!OfflinePageModel::CanSaveURL(request.url())) {
187 DVLOG(1) << "Not able to save page for requested url: " << request.url(); 185 DVLOG(1) << "Not able to save page for requested url: " << request.url();
188 return false; 186 return false;
189 } 187 }
190 188
191 // Track copy of pending request for callback handling. 189 // Track copy of pending request for callback handling.
192 pending_request_.reset(new SavePageRequest(request)); 190 pending_request_.reset(new SavePageRequest(request));
193 completion_callback_ = callback; 191 completion_callback_ = completion_callback;
192 progress_callback_ = progress_callback;
194 193
195 // Kick off load page attempt. 194 // Kick off load page attempt.
196 bool accepted = GetOrCreateLoader()->LoadPage( 195 bool accepted = GetOrCreateLoader()->LoadPage(
197 request.url(), base::Bind(&PrerenderingOffliner::OnLoadPageDone, 196 request.url(), base::Bind(&PrerenderingOffliner::OnLoadPageDone,
198 weak_ptr_factory_.GetWeakPtr(), request), 197 weak_ptr_factory_.GetWeakPtr(), request),
199 base::Bind(&PrerenderingOffliner::OnNetworkProgress, 198 base::Bind(&PrerenderingOffliner::OnNetworkProgress,
200 weak_ptr_factory_.GetWeakPtr(), request)); 199 weak_ptr_factory_.GetWeakPtr(), request));
201 if (!accepted) { 200 if (!accepted) {
202 pending_request_.reset(nullptr); 201 pending_request_.reset(nullptr);
203 } else { 202 } else {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES) { 270 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES) {
272 DVLOG(1) << "App became active, canceling current offlining request"; 271 DVLOG(1) << "App became active, canceling current offlining request";
273 SavePageRequest* request = pending_request_.get(); 272 SavePageRequest* request = pending_request_.get();
274 Cancel(); 273 Cancel();
275 completion_callback_.Run(*request, 274 completion_callback_.Run(*request,
276 Offliner::RequestStatus::FOREGROUND_CANCELED); 275 Offliner::RequestStatus::FOREGROUND_CANCELED);
277 } 276 }
278 } 277 }
279 278
280 } // namespace offline_pages 279 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698