| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/prerender/prerender_tab_helper.h" | 5 #include "chrome/browser/prerender/prerender_tab_helper.h" |
| 6 | 6 |
| 7 #include "base/metrics/histogram.h" | 7 #include "base/metrics/histogram.h" |
| 8 #include "base/string_number_conversions.h" | 8 #include "base/string_number_conversions.h" |
| 9 #include "base/time.h" | 9 #include "base/time.h" |
| 10 #include "chrome/browser/prerender/prerender_manager.h" | 10 #include "chrome/browser/prerender/prerender_manager.h" |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 return; // PrerenderManager needs a delegate to handle the swap. | 185 return; // PrerenderManager needs a delegate to handle the swap. |
| 186 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); | 186 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); |
| 187 if (!prerender_manager) | 187 if (!prerender_manager) |
| 188 return; | 188 return; |
| 189 if (prerender_manager->IsTabContentsPrerendering(tab_contents())) | 189 if (prerender_manager->IsTabContentsPrerendering(tab_contents())) |
| 190 return; | 190 return; |
| 191 prerender_manager->MarkTabContentsAsNotPrerendered(tab_contents()); | 191 prerender_manager->MarkTabContentsAsNotPrerendered(tab_contents()); |
| 192 MaybeUsePrerenderedPage(url, has_opener_set); | 192 MaybeUsePrerenderedPage(url, has_opener_set); |
| 193 } | 193 } |
| 194 | 194 |
| 195 bool PrerenderTabHelper::OnMessageReceived(const IPC::Message& message) { | 195 void PrerenderTabHelper::UpdateTargetURL(int32 page_id, const GURL& url) { |
| 196 IPC_BEGIN_MESSAGE_MAP(PrerenderTabHelper, message) | |
| 197 IPC_MESSAGE_HANDLER(ViewHostMsg_DidStartProvisionalLoadForFrame, | |
| 198 OnDidStartProvisionalLoadForFrame) | |
| 199 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateTargetURL, OnMsgUpdateTargetURL) | |
| 200 IPC_END_MESSAGE_MAP() | |
| 201 return false; | |
| 202 } | |
| 203 | |
| 204 void PrerenderTabHelper::OnDidStartProvisionalLoadForFrame(int64 frame_id, | |
| 205 bool is_main_frame, | |
| 206 bool has_opener_set, | |
| 207 const GURL& url) { | |
| 208 if (is_main_frame) { | |
| 209 RecordPageviewEvent(PAGEVIEW_EVENT_LOAD_START); | |
| 210 if (IsTopSite(url)) | |
| 211 RecordPageviewEvent(PAGEVIEW_EVENT_TOP_SITE_LOAD_START); | |
| 212 | |
| 213 // Record the beginning of a new PPLT navigation. | |
| 214 pplt_load_start_ = base::TimeTicks::Now(); | |
| 215 | |
| 216 // Update hover stats. | |
| 217 for (int i = 0; i < kNumHoverThresholds; i++) | |
| 218 last_hovers_[i].RecordNavigation(url); | |
| 219 | |
| 220 MaybeLogCurrentHover(current_hover_url_ == url); | |
| 221 } | |
| 222 } | |
| 223 | |
| 224 void PrerenderTabHelper::OnMsgUpdateTargetURL(int32 page_id, const GURL& url) { | |
| 225 for (int i = 0; i < kNumHoverThresholds; i++) | 196 for (int i = 0; i < kNumHoverThresholds; i++) |
| 226 last_hovers_[i].RecordHover(url); | 197 last_hovers_[i].RecordHover(url); |
| 227 | 198 |
| 228 if (url != current_hover_url_) { | 199 if (url != current_hover_url_) { |
| 229 MaybeLogCurrentHover(false); | 200 MaybeLogCurrentHover(false); |
| 230 current_hover_url_ = url; | 201 current_hover_url_ = url; |
| 231 current_hover_time_ = base::TimeTicks::Now(); | 202 current_hover_time_ = base::TimeTicks::Now(); |
| 232 } | 203 } |
| 233 } | 204 } |
| 234 | 205 |
| 235 void PrerenderTabHelper::DidStopLoading() { | 206 void PrerenderTabHelper::DidStopLoading() { |
| 236 // Don't include prerendered pages in the PPLT metric until after they are | 207 // Don't include prerendered pages in the PPLT metric until after they are |
| 237 // swapped in. | 208 // swapped in. |
| 238 | 209 |
| 239 // Compute the PPLT metric and report it in a histogram, if needed. | 210 // Compute the PPLT metric and report it in a histogram, if needed. |
| 240 if (!pplt_load_start_.is_null() && !IsPrerendering()) { | 211 if (!pplt_load_start_.is_null() && !IsPrerendering()) { |
| 241 PrerenderManager::RecordPerceivedPageLoadTime( | 212 PrerenderManager::RecordPerceivedPageLoadTime( |
| 242 base::TimeTicks::Now() - pplt_load_start_, tab_contents()); | 213 base::TimeTicks::Now() - pplt_load_start_, tab_contents()); |
| 243 } | 214 } |
| 244 | 215 |
| 245 // Reset the PPLT metric. | 216 // Reset the PPLT metric. |
| 246 pplt_load_start_ = base::TimeTicks(); | 217 pplt_load_start_ = base::TimeTicks(); |
| 247 } | 218 } |
| 248 | 219 |
| 220 void PrerenderTabHelper::DidStartProvisionalLoadForFrame( |
| 221 int64 frame_id, |
| 222 bool is_main_frame, |
| 223 const GURL& validated_url, |
| 224 bool is_error_page, |
| 225 RenderViewHost* render_view_host) { |
| 226 if (is_main_frame) { |
| 227 RecordPageviewEvent(PAGEVIEW_EVENT_LOAD_START); |
| 228 if (IsTopSite(validated_url)) |
| 229 RecordPageviewEvent(PAGEVIEW_EVENT_TOP_SITE_LOAD_START); |
| 230 |
| 231 // Record the beginning of a new PPLT navigation. |
| 232 pplt_load_start_ = base::TimeTicks::Now(); |
| 233 |
| 234 // Update hover stats. |
| 235 for (int i = 0; i < kNumHoverThresholds; i++) |
| 236 last_hovers_[i].RecordNavigation(validated_url); |
| 237 |
| 238 MaybeLogCurrentHover(current_hover_url_ == validated_url); |
| 239 } |
| 240 } |
| 241 |
| 249 PrerenderManager* PrerenderTabHelper::MaybeGetPrerenderManager() const { | 242 PrerenderManager* PrerenderTabHelper::MaybeGetPrerenderManager() const { |
| 250 Profile* profile = | 243 Profile* profile = |
| 251 Profile::FromBrowserContext(tab_contents()->browser_context()); | 244 Profile::FromBrowserContext(tab_contents()->browser_context()); |
| 252 if (!profile) | 245 if (!profile) |
| 253 return NULL; | 246 return NULL; |
| 254 return profile->GetPrerenderManager(); | 247 return profile->GetPrerenderManager(); |
| 255 } | 248 } |
| 256 | 249 |
| 257 bool PrerenderTabHelper::MaybeUsePrerenderedPage(const GURL& url, | 250 bool PrerenderTabHelper::MaybeUsePrerenderedPage(const GURL& url, |
| 258 bool has_opener_set) { | 251 bool has_opener_set) { |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 | 302 |
| 310 current_hover_url_ = GURL(); | 303 current_hover_url_ = GURL(); |
| 311 } | 304 } |
| 312 | 305 |
| 313 bool PrerenderTabHelper::IsTopSite(const GURL& url) { | 306 bool PrerenderTabHelper::IsTopSite(const GURL& url) { |
| 314 PrerenderManager* pm = MaybeGetPrerenderManager(); | 307 PrerenderManager* pm = MaybeGetPrerenderManager(); |
| 315 return (pm && pm->IsTopSite(url)); | 308 return (pm && pm->IsTopSite(url)); |
| 316 } | 309 } |
| 317 | 310 |
| 318 } // namespace prerender | 311 } // namespace prerender |
| OLD | NEW |