| 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 "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/metrics/histogram_macros.h" |
| 8 #include "chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h" | 9 #include "chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h" |
| 9 #include "components/offline_pages/background/save_page_request.h" | 10 #include "components/offline_pages/background/save_page_request.h" |
| 10 #include "components/offline_pages/offline_page_model.h" | 11 #include "components/offline_pages/offline_page_model.h" |
| 11 #include "content/public/browser/browser_context.h" | 12 #include "content/public/browser/browser_context.h" |
| 12 #include "content/public/browser/web_contents.h" | 13 #include "content/public/browser/web_contents.h" |
| 13 | 14 |
| 14 namespace offline_pages { | 15 namespace offline_pages { |
| 15 | 16 |
| 17 namespace { |
| 18 |
| 19 void RecordStatusUma(Offliner::RequestStatus request_status) { |
| 20 UMA_HISTOGRAM_ENUMERATION( |
| 21 "OfflinePages.Background.OfflinerStatus", |
| 22 static_cast<int>(request_status), |
| 23 static_cast<int>(Offliner::RequestStatus::STATUS_COUNT)); |
| 24 } |
| 25 |
| 26 } // namespace |
| 27 |
| 16 PrerenderingOffliner::PrerenderingOffliner( | 28 PrerenderingOffliner::PrerenderingOffliner( |
| 17 content::BrowserContext* browser_context, | 29 content::BrowserContext* browser_context, |
| 18 const OfflinerPolicy* policy, | 30 const OfflinerPolicy* policy, |
| 19 OfflinePageModel* offline_page_model) | 31 OfflinePageModel* offline_page_model) |
| 20 : browser_context_(browser_context), | 32 : browser_context_(browser_context), |
| 21 offline_page_model_(offline_page_model), | 33 offline_page_model_(offline_page_model), |
| 22 pending_request_(nullptr), | 34 pending_request_(nullptr), |
| 23 weak_ptr_factory_(this) {} | 35 weak_ptr_factory_(this) {} |
| 24 | 36 |
| 25 PrerenderingOffliner::~PrerenderingOffliner() {} | 37 PrerenderingOffliner::~PrerenderingOffliner() {} |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 // same as LastCommittedURL from the snapshot. | 71 // same as LastCommittedURL from the snapshot. |
| 60 // TODO(dougarnett): Raise issue of how to better deal with redirects. | 72 // TODO(dougarnett): Raise issue of how to better deal with redirects. |
| 61 SavePage(web_contents->GetLastCommittedURL(), request.client_id(), | 73 SavePage(web_contents->GetLastCommittedURL(), request.client_id(), |
| 62 std::move(archiver), | 74 std::move(archiver), |
| 63 base::Bind(&PrerenderingOffliner::OnSavePageDone, | 75 base::Bind(&PrerenderingOffliner::OnSavePageDone, |
| 64 weak_ptr_factory_.GetWeakPtr(), request, | 76 weak_ptr_factory_.GetWeakPtr(), request, |
| 65 completion_callback)); | 77 completion_callback)); |
| 66 } else { | 78 } else { |
| 67 // Clear pending request and then run the completion callback. | 79 // Clear pending request and then run the completion callback. |
| 68 pending_request_.reset(nullptr); | 80 pending_request_.reset(nullptr); |
| 81 RecordStatusUma(load_status); |
| 69 completion_callback.Run(request, load_status); | 82 completion_callback.Run(request, load_status); |
| 70 } | 83 } |
| 71 } | 84 } |
| 72 | 85 |
| 73 void PrerenderingOffliner::OnSavePageDone( | 86 void PrerenderingOffliner::OnSavePageDone( |
| 74 const SavePageRequest& request, | 87 const SavePageRequest& request, |
| 75 const CompletionCallback& completion_callback, | 88 const CompletionCallback& completion_callback, |
| 76 SavePageResult save_result, | 89 SavePageResult save_result, |
| 77 int64_t offline_id) { | 90 int64_t offline_id) { |
| 78 // Check if request is still pending receiving a callback. | 91 // Check if request is still pending receiving a callback. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 90 pending_request_.reset(nullptr); | 103 pending_request_.reset(nullptr); |
| 91 GetOrCreateLoader()->StopLoading(); | 104 GetOrCreateLoader()->StopLoading(); |
| 92 | 105 |
| 93 // Determine status and run the completion callback. | 106 // Determine status and run the completion callback. |
| 94 Offliner::RequestStatus save_status; | 107 Offliner::RequestStatus save_status; |
| 95 if (save_result == SavePageResult::SUCCESS) { | 108 if (save_result == SavePageResult::SUCCESS) { |
| 96 save_status = RequestStatus::SAVED; | 109 save_status = RequestStatus::SAVED; |
| 97 } else { | 110 } else { |
| 98 // TODO(dougarnett): Consider reflecting some recommendation to retry the | 111 // TODO(dougarnett): Consider reflecting some recommendation to retry the |
| 99 // request based on specific save error cases. | 112 // request based on specific save error cases. |
| 100 save_status = RequestStatus::FAILED_SAVE; | 113 save_status = RequestStatus::SAVE_FAILED; |
| 101 } | 114 } |
| 115 RecordStatusUma(save_status); |
| 102 completion_callback.Run(request, save_status); | 116 completion_callback.Run(request, save_status); |
| 103 } | 117 } |
| 104 | 118 |
| 105 bool PrerenderingOffliner::LoadAndSave(const SavePageRequest& request, | 119 bool PrerenderingOffliner::LoadAndSave(const SavePageRequest& request, |
| 106 const CompletionCallback& callback) { | 120 const CompletionCallback& callback) { |
| 107 if (pending_request_) { | 121 if (pending_request_) { |
| 108 DVLOG(1) << "Already have pending request"; | 122 DVLOG(1) << "Already have pending request"; |
| 109 return false; | 123 return false; |
| 110 } | 124 } |
| 111 | 125 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 131 pending_request_.reset(nullptr); | 145 pending_request_.reset(nullptr); |
| 132 | 146 |
| 133 return accepted; | 147 return accepted; |
| 134 } | 148 } |
| 135 | 149 |
| 136 void PrerenderingOffliner::Cancel() { | 150 void PrerenderingOffliner::Cancel() { |
| 137 if (pending_request_) { | 151 if (pending_request_) { |
| 138 pending_request_.reset(nullptr); | 152 pending_request_.reset(nullptr); |
| 139 GetOrCreateLoader()->StopLoading(); | 153 GetOrCreateLoader()->StopLoading(); |
| 140 // TODO(dougarnett): Consider ability to cancel SavePage request. | 154 // TODO(dougarnett): Consider ability to cancel SavePage request. |
| 155 RecordStatusUma(Offliner::RequestStatus::REQUEST_CANCELED); |
| 141 } | 156 } |
| 142 } | 157 } |
| 143 | 158 |
| 144 void PrerenderingOffliner::SetLoaderForTesting( | 159 void PrerenderingOffliner::SetLoaderForTesting( |
| 145 std::unique_ptr<PrerenderingLoader> loader) { | 160 std::unique_ptr<PrerenderingLoader> loader) { |
| 146 DCHECK(!loader_); | 161 DCHECK(!loader_); |
| 147 loader_ = std::move(loader); | 162 loader_ = std::move(loader); |
| 148 } | 163 } |
| 149 | 164 |
| 150 void PrerenderingOffliner::SavePage( | 165 void PrerenderingOffliner::SavePage( |
| 151 const GURL& url, | 166 const GURL& url, |
| 152 const ClientId& client_id, | 167 const ClientId& client_id, |
| 153 std::unique_ptr<OfflinePageArchiver> archiver, | 168 std::unique_ptr<OfflinePageArchiver> archiver, |
| 154 const SavePageCallback& callback) { | 169 const SavePageCallback& callback) { |
| 155 DCHECK(offline_page_model_); | 170 DCHECK(offline_page_model_); |
| 156 offline_page_model_->SavePage(url, client_id, std::move(archiver), callback); | 171 offline_page_model_->SavePage(url, client_id, std::move(archiver), callback); |
| 157 } | 172 } |
| 158 | 173 |
| 159 PrerenderingLoader* PrerenderingOffliner::GetOrCreateLoader() { | 174 PrerenderingLoader* PrerenderingOffliner::GetOrCreateLoader() { |
| 160 if (!loader_) { | 175 if (!loader_) { |
| 161 loader_.reset(new PrerenderingLoader(browser_context_)); | 176 loader_.reset(new PrerenderingLoader(browser_context_)); |
| 162 } | 177 } |
| 163 return loader_.get(); | 178 return loader_.get(); |
| 164 } | 179 } |
| 165 | 180 |
| 166 } // namespace offline_pages | 181 } // namespace offline_pages |
| OLD | NEW |