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

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

Issue 2715433006: [Offline Pages] Turn Offliner::Cancel into an async operation to resolve conflicting assumptions (Closed)
Patch Set: Created 3 years, 10 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 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 } else { 184 } else {
185 // Create app listener for the pending request. 185 // Create app listener for the pending request.
186 app_listener_.reset(new base::android::ApplicationStatusListener( 186 app_listener_.reset(new base::android::ApplicationStatusListener(
187 base::Bind(&PrerenderingOffliner::OnApplicationStateChange, 187 base::Bind(&PrerenderingOffliner::OnApplicationStateChange,
188 weak_ptr_factory_.GetWeakPtr()))); 188 weak_ptr_factory_.GetWeakPtr())));
189 } 189 }
190 190
191 return accepted; 191 return accepted;
192 } 192 }
193 193
194 void PrerenderingOffliner::Cancel() { 194 void PrerenderingOffliner::Cancel(const CancelCallback& callback) {
195 int64_t request_id = 0L;
fgorski 2017/02/27 18:07:25 0LL?
chili 2017/02/28 00:44:14 Done.
195 if (pending_request_) { 196 if (pending_request_) {
197 request_id = pending_request_->request_id();
196 pending_request_.reset(nullptr); 198 pending_request_.reset(nullptr);
197 app_listener_.reset(nullptr); 199 app_listener_.reset(nullptr);
198 GetOrCreateLoader()->StopLoading(); 200 GetOrCreateLoader()->StopLoading();
199 // TODO(dougarnett): Consider ability to cancel SavePage request. 201 // TODO(dougarnett): Consider ability to cancel SavePage request.
200 } 202 }
203 callback.Run(request_id);
201 } 204 }
202 205
203 void PrerenderingOffliner::SetLoaderForTesting( 206 void PrerenderingOffliner::SetLoaderForTesting(
204 std::unique_ptr<PrerenderingLoader> loader) { 207 std::unique_ptr<PrerenderingLoader> loader) {
205 DCHECK(!loader_); 208 DCHECK(!loader_);
206 loader_ = std::move(loader); 209 loader_ = std::move(loader);
207 } 210 }
208 211
209 void PrerenderingOffliner::SetLowEndDeviceForTesting(bool is_low_end_device) { 212 void PrerenderingOffliner::SetLowEndDeviceForTesting(bool is_low_end_device) {
210 is_low_end_device_ = is_low_end_device; 213 is_low_end_device_ = is_low_end_device;
(...skipping 20 matching lines...) Expand all
231 return loader_.get(); 234 return loader_.get();
232 } 235 }
233 236
234 void PrerenderingOffliner::OnApplicationStateChange( 237 void PrerenderingOffliner::OnApplicationStateChange(
235 base::android::ApplicationState application_state) { 238 base::android::ApplicationState application_state) {
236 if (pending_request_ && is_low_end_device_ && 239 if (pending_request_ && is_low_end_device_ &&
237 application_state == 240 application_state ==
238 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES) { 241 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES) {
239 DVLOG(1) << "App became active, canceling current offlining request"; 242 DVLOG(1) << "App became active, canceling current offlining request";
240 SavePageRequest* request = pending_request_.get(); 243 SavePageRequest* request = pending_request_.get();
241 Cancel(); 244 Cancel(base::Bind(&PrerenderingOffliner::HandleApplicationStateChangeCancel,
fgorski 2017/02/27 18:07:25 add the same comment as before please.
chili 2017/02/28 00:44:14 Done.
242 completion_callback_.Run(*request, 245 weak_ptr_factory_.GetWeakPtr(), *request));
243 Offliner::RequestStatus::FOREGROUND_CANCELED);
244 } 246 }
245 } 247 }
246 248
249 void PrerenderingOffliner::HandleApplicationStateChangeCancel(
250 const SavePageRequest& request,
251 int64_t offline_id) {
252 completion_callback_.Run(request, RequestStatus::FOREGROUND_CANCELED);
253 }
247 } // namespace offline_pages 254 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698