| 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_loader.h" | 5 #include "chrome/browser/android/offline_pages/prerendering_loader.h" |
| 6 | 6 |
| 7 #include "base/location.h" | 7 #include "base/location.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/metrics/histogram_macros.h" | 9 #include "base/metrics/histogram_macros.h" |
| 10 #include "base/threading/thread_task_runner_handle.h" | 10 #include "base/threading/thread_task_runner_handle.h" |
| 11 #include "base/time/time.h" |
| 11 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
| 12 #include "content/public/browser/browser_context.h" | 13 #include "content/public/browser/browser_context.h" |
| 13 #include "content/public/browser/browser_thread.h" | 14 #include "content/public/browser/browser_thread.h" |
| 14 #include "content/public/browser/web_contents.h" | 15 #include "content/public/browser/web_contents.h" |
| 15 #include "net/base/network_change_notifier.h" | 16 #include "net/base/network_change_notifier.h" |
| 16 #include "ui/gfx/geometry/size.h" | 17 #include "ui/gfx/geometry/size.h" |
| 17 | 18 |
| 18 namespace { | 19 namespace { |
| 19 // Whether to report DomContentLoaded event to the snapshot controller. | 20 // Whether to report DomContentLoaded event to the snapshot controller. |
| 20 bool kConsiderDclForSnapshot = false; | 21 bool kConsiderDclForSnapshot = false; |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 bool PrerenderingLoader::LoadPage(const GURL& url, | 92 bool PrerenderingLoader::LoadPage(const GURL& url, |
| 92 const LoadPageCallback& load_done_callback, | 93 const LoadPageCallback& load_done_callback, |
| 93 const ProgressCallback& progress_callback) { | 94 const ProgressCallback& progress_callback) { |
| 94 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 95 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 95 if (!IsIdle()) { | 96 if (!IsIdle()) { |
| 96 DVLOG(1) | 97 DVLOG(1) |
| 97 << "WARNING: Existing request in progress or waiting for StopLoading()"; | 98 << "WARNING: Existing request in progress or waiting for StopLoading()"; |
| 98 return false; | 99 return false; |
| 99 } | 100 } |
| 100 | 101 |
| 102 // Add this signal to signal_data_. |
| 103 std::string signal("StartLoading: "); |
| 104 signal += std::to_string(base::Time::Now().ToJavaTime()); |
| 105 signal_data_.push_back(signal); |
| 106 |
| 101 // Create a WebContents instance to define and hold a SessionStorageNamespace | 107 // Create a WebContents instance to define and hold a SessionStorageNamespace |
| 102 // for this load request. | 108 // for this load request. |
| 103 DCHECK(!session_contents_.get()); | 109 DCHECK(!session_contents_.get()); |
| 104 std::unique_ptr<content::WebContents> new_web_contents( | 110 std::unique_ptr<content::WebContents> new_web_contents( |
| 105 content::WebContents::Create( | 111 content::WebContents::Create( |
| 106 content::WebContents::CreateParams(browser_context_))); | 112 content::WebContents::CreateParams(browser_context_))); |
| 107 content::SessionStorageNamespace* sessionStorageNamespace = | 113 content::SessionStorageNamespace* sessionStorageNamespace = |
| 108 new_web_contents->GetController().GetDefaultSessionStorageNamespace(); | 114 new_web_contents->GetController().GetDefaultSessionStorageNamespace(); |
| 109 gfx::Size renderWindowSize = new_web_contents->GetContainerBounds().size(); | 115 gfx::Size renderWindowSize = new_web_contents->GetContainerBounds().size(); |
| 110 bool accepted = adapter_->StartPrerender( | 116 bool accepted = adapter_->StartPrerender( |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 adapter_ = std::move(prerender_adapter); | 151 adapter_ = std::move(prerender_adapter); |
| 146 } | 152 } |
| 147 | 153 |
| 148 void PrerenderingLoader::OnPrerenderStopLoading() { | 154 void PrerenderingLoader::OnPrerenderStopLoading() { |
| 149 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 155 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 150 DCHECK(!IsIdle()); | 156 DCHECK(!IsIdle()); |
| 151 DCHECK(adapter_->GetWebContents()); | 157 DCHECK(adapter_->GetWebContents()); |
| 152 // Inform SnapshotController of OnLoad event so it can determine | 158 // Inform SnapshotController of OnLoad event so it can determine |
| 153 // when to consider it really LOADED. | 159 // when to consider it really LOADED. |
| 154 snapshot_controller_->DocumentOnLoadCompletedInMainFrame(); | 160 snapshot_controller_->DocumentOnLoadCompletedInMainFrame(); |
| 161 |
| 162 // Add this signal to signal_data_. |
| 163 std::string signal("OnLoad: "); |
| 164 signal += std::to_string(base::Time::Now().ToJavaTime()); |
| 165 signal_data_.push_back(signal); |
| 155 } | 166 } |
| 156 | 167 |
| 157 void PrerenderingLoader::OnPrerenderDomContentLoaded() { | 168 void PrerenderingLoader::OnPrerenderDomContentLoaded() { |
| 158 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 169 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 159 DCHECK(!IsIdle()); | 170 DCHECK(!IsIdle()); |
| 160 if (!adapter_->GetWebContents()) { | 171 if (!adapter_->GetWebContents()) { |
| 161 // Without a WebContents object at this point, we are done. | 172 // Without a WebContents object at this point, we are done. |
| 162 HandleLoadingStopped(); | 173 HandleLoadingStopped(); |
| 163 } else { | 174 } else { |
| 164 is_lowbar_met_ = true; | 175 is_lowbar_met_ = true; |
| 165 if (kConsiderDclForSnapshot) { | 176 if (kConsiderDclForSnapshot) { |
| 166 // Inform SnapshotController of DomContentLoaded event so it can | 177 // Inform SnapshotController of DomContentLoaded event so it can |
| 167 // determine when to consider it really LOADED (e.g., some multiple | 178 // determine when to consider it really LOADED (e.g., some multiple |
| 168 // second delay from this event). | 179 // second delay from this event). |
| 169 snapshot_controller_->DocumentAvailableInMainFrame(); | 180 snapshot_controller_->DocumentAvailableInMainFrame(); |
| 170 } | 181 } |
| 182 |
| 183 // Add this signal to signal_data_. |
| 184 std::string signal("OnDomContentLoaded: "); |
| 185 signal += std::to_string(base::Time::Now().ToJavaTime()); |
| 186 signal_data_.push_back(signal); |
| 171 } | 187 } |
| 172 } | 188 } |
| 173 | 189 |
| 174 void PrerenderingLoader::OnPrerenderStop() { | 190 void PrerenderingLoader::OnPrerenderStop() { |
| 175 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 191 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 176 HandleLoadingStopped(); | 192 HandleLoadingStopped(); |
| 177 } | 193 } |
| 178 | 194 |
| 179 void PrerenderingLoader::OnPrerenderNetworkBytesChanged(int64_t bytes) { | 195 void PrerenderingLoader::OnPrerenderNetworkBytesChanged(int64_t bytes) { |
| 180 if (state_ == State::LOADING) | 196 if (state_ == State::LOADING) |
| 181 progress_callback_.Run(bytes); | 197 progress_callback_.Run(bytes); |
| 182 } | 198 } |
| 183 | 199 |
| 184 void PrerenderingLoader::StartSnapshot() { | 200 void PrerenderingLoader::StartSnapshot() { |
| 185 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 201 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 202 |
| 203 // Add this signal to signal_data_. |
| 204 std::string signal("Snapshotting: "); |
| 205 signal += std::to_string(base::Time::Now().ToJavaTime()); |
| 206 signal_data_.push_back(signal); |
| 207 |
| 186 HandleLoadEvent(); | 208 HandleLoadEvent(); |
| 187 } | 209 } |
| 188 | 210 |
| 189 bool PrerenderingLoader::IsLowbarMet() { | 211 bool PrerenderingLoader::IsLowbarMet() { |
| 190 return is_lowbar_met_; | 212 return is_lowbar_met_; |
| 191 } | 213 } |
| 192 | 214 |
| 193 void PrerenderingLoader::HandleLoadEvent() { | 215 void PrerenderingLoader::HandleLoadEvent() { |
| 194 // If still loading, check if the load succeeded or not, then update | 216 // If still loading, check if the load succeeded or not, then update |
| 195 // the internal state (LOADED for success or IDLE for failure) and post | 217 // the internal state (LOADED for success or IDLE for failure) and post |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 if (adapter_->IsActive()) { | 290 if (adapter_->IsActive()) { |
| 269 adapter_->DestroyActive(); | 291 adapter_->DestroyActive(); |
| 270 } | 292 } |
| 271 snapshot_controller_.reset(nullptr); | 293 snapshot_controller_.reset(nullptr); |
| 272 session_contents_.reset(nullptr); | 294 session_contents_.reset(nullptr); |
| 273 state_ = State::IDLE; | 295 state_ = State::IDLE; |
| 274 is_lowbar_met_ = false; | 296 is_lowbar_met_ = false; |
| 275 } | 297 } |
| 276 | 298 |
| 277 } // namespace offline_pages | 299 } // namespace offline_pages |
| OLD | NEW |