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

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

Issue 2048923002: Fixes for turning on offliner request. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Put const& back on LoadPageCallback param Created 4 years, 6 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
« no previous file with comments | « chrome/browser/android/offline_pages/prerendering_offliner.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h" 8 #include "chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h"
9 #include "components/offline_pages/background/save_page_request.h" 9 #include "components/offline_pages/background/save_page_request.h"
10 #include "components/offline_pages/offline_page_model.h" 10 #include "components/offline_pages/offline_page_model.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 // WebContents are being destroyed) - whichever callback occurs first. 51 // WebContents are being destroyed) - whichever callback occurs first.
52 DCHECK(web_contents); 52 DCHECK(web_contents);
53 std::unique_ptr<OfflinePageArchiver> archiver( 53 std::unique_ptr<OfflinePageArchiver> archiver(
54 new OfflinePageMHTMLArchiver(web_contents)); 54 new OfflinePageMHTMLArchiver(web_contents));
55 SavePage(request.url(), request.client_id(), std::move(archiver), 55 SavePage(request.url(), request.client_id(), std::move(archiver),
56 base::Bind(&PrerenderingOffliner::OnSavePageDone, 56 base::Bind(&PrerenderingOffliner::OnSavePageDone,
57 weak_ptr_factory_.GetWeakPtr(), request, 57 weak_ptr_factory_.GetWeakPtr(), request,
58 completion_callback)); 58 completion_callback));
59 } else { 59 } else {
60 // Clear pending request and then run the completion callback. 60 // Clear pending request and then run the completion callback.
61 pending_request_ = nullptr; 61 pending_request_.reset(nullptr);
62 completion_callback.Run(request, load_status); 62 completion_callback.Run(request, load_status);
63 } 63 }
64 } 64 }
65 65
66 void PrerenderingOffliner::OnSavePageDone( 66 void PrerenderingOffliner::OnSavePageDone(
67 const SavePageRequest& request, 67 const SavePageRequest& request,
68 const CompletionCallback& completion_callback, 68 const CompletionCallback& completion_callback,
69 SavePageResult save_result, 69 SavePageResult save_result,
70 int64_t offline_id) { 70 int64_t offline_id) {
71 // Check if request is still pending receiving a callback. 71 // Check if request is still pending receiving a callback.
72 if (!pending_request_) 72 if (!pending_request_)
73 return; 73 return;
74 74
75 // Also check that save callback is for same request as pending request 75 // Also check that save callback is for same request as pending request
76 // (since SavePage request is not cancel-able currently and could be old). 76 // (since SavePage request is not cancel-able currently and could be old).
77 if (request.request_id() != pending_request_->request_id()) { 77 if (request.request_id() != pending_request_->request_id()) {
78 DVLOG(1) << "Ignoring save callback for old request"; 78 DVLOG(1) << "Ignoring save callback for old request";
79 return; 79 return;
80 } 80 }
81 81
82 // Clear pending request here and inform loader we are done with WebContents. 82 // Clear pending request here and inform loader we are done with WebContents.
83 pending_request_ = nullptr; 83 pending_request_.reset(nullptr);
84 GetOrCreateLoader()->StopLoading(); 84 GetOrCreateLoader()->StopLoading();
85 85
86 // Determine status and run the completion callback. 86 // Determine status and run the completion callback.
87 Offliner::RequestStatus save_status; 87 Offliner::RequestStatus save_status;
88 if (save_result == SavePageResult::SUCCESS) { 88 if (save_result == SavePageResult::SUCCESS) {
89 save_status = RequestStatus::SAVED; 89 save_status = RequestStatus::SAVED;
90 } else { 90 } else {
91 // TODO(dougarnett): Consider reflecting some recommendation to retry the 91 // TODO(dougarnett): Consider reflecting some recommendation to retry the
92 // request based on specific save error cases. 92 // request based on specific save error cases.
93 save_status = RequestStatus::FAILED_SAVE; 93 save_status = RequestStatus::FAILED_SAVE;
(...skipping 11 matching lines...) Expand all
105 if (!GetOrCreateLoader()->CanPrerender()) { 105 if (!GetOrCreateLoader()->CanPrerender()) {
106 DVLOG(1) << "Prerendering not allowed/configured"; 106 DVLOG(1) << "Prerendering not allowed/configured";
107 return false; 107 return false;
108 } 108 }
109 109
110 if (!OfflinePageModel::CanSaveURL(request.url())) { 110 if (!OfflinePageModel::CanSaveURL(request.url())) {
111 DVLOG(1) << "Not able to save page for requested url: " << request.url(); 111 DVLOG(1) << "Not able to save page for requested url: " << request.url();
112 return false; 112 return false;
113 } 113 }
114 114
115 // Track pending request for callback handling. 115 // Track copy of pending request for callback handling.
116 pending_request_ = &request; 116 pending_request_.reset(new SavePageRequest(request));
117 117
118 // Kick off load page attempt. 118 // Kick off load page attempt.
119 bool accepted = GetOrCreateLoader()->LoadPage( 119 bool accepted = GetOrCreateLoader()->LoadPage(
120 request.url(), 120 request.url(),
121 base::Bind(&PrerenderingOffliner::OnLoadPageDone, 121 base::Bind(&PrerenderingOffliner::OnLoadPageDone,
122 weak_ptr_factory_.GetWeakPtr(), request, callback)); 122 weak_ptr_factory_.GetWeakPtr(), request, callback));
123 if (!accepted) 123 if (!accepted)
124 pending_request_ = nullptr; 124 pending_request_.reset(nullptr);
125 125
126 return accepted; 126 return accepted;
127 } 127 }
128 128
129 void PrerenderingOffliner::Cancel() { 129 void PrerenderingOffliner::Cancel() {
130 if (pending_request_) { 130 if (pending_request_) {
131 pending_request_ = nullptr; 131 pending_request_.reset(nullptr);
132 GetOrCreateLoader()->StopLoading(); 132 GetOrCreateLoader()->StopLoading();
133 // TODO(dougarnett): Consider ability to cancel SavePage request. 133 // TODO(dougarnett): Consider ability to cancel SavePage request.
134 } 134 }
135 } 135 }
136 136
137 void PrerenderingOffliner::SetLoaderForTesting( 137 void PrerenderingOffliner::SetLoaderForTesting(
138 std::unique_ptr<PrerenderingLoader> loader) { 138 std::unique_ptr<PrerenderingLoader> loader) {
139 DCHECK(!loader_); 139 DCHECK(!loader_);
140 loader_ = std::move(loader); 140 loader_ = std::move(loader);
141 } 141 }
142 142
143 void PrerenderingOffliner::SavePage( 143 void PrerenderingOffliner::SavePage(
144 const GURL& url, 144 const GURL& url,
145 const ClientId& client_id, 145 const ClientId& client_id,
146 std::unique_ptr<OfflinePageArchiver> archiver, 146 std::unique_ptr<OfflinePageArchiver> archiver,
147 const SavePageCallback& callback) { 147 const SavePageCallback& callback) {
148 DCHECK(offline_page_model_); 148 DCHECK(offline_page_model_);
149 offline_page_model_->SavePage(url, client_id, std::move(archiver), callback); 149 offline_page_model_->SavePage(url, client_id, std::move(archiver), callback);
150 } 150 }
151 151
152 PrerenderingLoader* PrerenderingOffliner::GetOrCreateLoader() { 152 PrerenderingLoader* PrerenderingOffliner::GetOrCreateLoader() {
153 if (!loader_) { 153 if (!loader_) {
154 loader_.reset(new PrerenderingLoader(browser_context_)); 154 loader_.reset(new PrerenderingLoader(browser_context_));
155 } 155 }
156 return loader_.get(); 156 return loader_.get();
157 } 157 }
158 158
159 } // namespace offline_pages 159 } // namespace offline_pages
OLDNEW
« no previous file with comments | « chrome/browser/android/offline_pages/prerendering_offliner.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698