| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" | 
| 9 #include "base/time.h" | 9 #include "base/time.h" | 
| 10 #include "chrome/browser/predictors/logged_in_predictor_table.h" | 10 #include "chrome/browser/predictors/logged_in_predictor_table.h" | 
| 11 #include "chrome/browser/prerender/prerender_histograms.h" | 11 #include "chrome/browser/prerender/prerender_histograms.h" | 
|  | 12 #include "chrome/browser/prerender/prerender_local_predictor.h" | 
| 12 #include "chrome/browser/prerender/prerender_manager.h" | 13 #include "chrome/browser/prerender/prerender_manager.h" | 
| 13 #include "chrome/browser/prerender/prerender_manager_factory.h" | 14 #include "chrome/browser/prerender/prerender_manager_factory.h" | 
| 14 #include "chrome/browser/profiles/profile.h" | 15 #include "chrome/browser/profiles/profile.h" | 
| 15 #include "content/public/browser/browser_thread.h" | 16 #include "content/public/browser/browser_thread.h" | 
| 16 #include "content/public/browser/navigation_details.h" | 17 #include "content/public/browser/navigation_details.h" | 
| 17 #include "content/public/browser/navigation_entry.h" | 18 #include "content/public/browser/navigation_entry.h" | 
| 18 #include "content/public/browser/render_view_host.h" | 19 #include "content/public/browser/render_view_host.h" | 
| 19 #include "content/public/browser/web_contents.h" | 20 #include "content/public/browser/web_contents.h" | 
| 20 #include "content/public/browser/web_contents_view.h" | 21 #include "content/public/browser/web_contents_view.h" | 
| 21 #include "content/public/common/frame_navigate_params.h" | 22 #include "content/public/common/frame_navigate_params.h" | 
| 22 #include "skia/ext/platform_canvas.h" | 23 #include "skia/ext/platform_canvas.h" | 
| 23 #include "third_party/skia/include/core/SkBitmap.h" | 24 #include "third_party/skia/include/core/SkBitmap.h" | 
| 24 #include "ui/gfx/rect.h" | 25 #include "ui/gfx/rect.h" | 
| 25 | 26 | 
| 26 using content::WebContents; | 27 using content::WebContents; | 
| 27 | 28 | 
| 28 DEFINE_WEB_CONTENTS_USER_DATA_KEY(prerender::PrerenderTabHelper); | 29 DEFINE_WEB_CONTENTS_USER_DATA_KEY(prerender::PrerenderTabHelper); | 
| 29 | 30 | 
| 30 namespace prerender { | 31 namespace prerender { | 
| 31 | 32 | 
|  | 33 namespace { | 
|  | 34 | 
|  | 35 void ReportTabHelperURLSeenToLocalPredictor( | 
|  | 36     PrerenderManager* prerender_manager, | 
|  | 37     const GURL& url, | 
|  | 38     WebContents* web_contents) { | 
|  | 39   if (!prerender_manager) | 
|  | 40     return; | 
|  | 41   PrerenderLocalPredictor* local_predictor = | 
|  | 42       prerender_manager->local_predictor(); | 
|  | 43   if (!local_predictor) | 
|  | 44     return; | 
|  | 45   local_predictor->OnTabHelperURLSeen(url, web_contents); | 
|  | 46 } | 
|  | 47 | 
|  | 48 }  // namespace | 
|  | 49 | 
| 32 // Helper class to compute pixel-based stats on the paint progress | 50 // Helper class to compute pixel-based stats on the paint progress | 
| 33 // between when a prerendered page is swapped in and when the onload event | 51 // between when a prerendered page is swapped in and when the onload event | 
| 34 // fires. | 52 // fires. | 
| 35 class PrerenderTabHelper::PixelStats { | 53 class PrerenderTabHelper::PixelStats { | 
| 36  public: | 54  public: | 
| 37   explicit PixelStats(PrerenderTabHelper* tab_helper) : | 55   explicit PixelStats(PrerenderTabHelper* tab_helper) : | 
| 38       bitmap_web_contents_(NULL), | 56       bitmap_web_contents_(NULL), | 
| 39       weak_factory_(this), | 57       weak_factory_(this), | 
| 40       tab_helper_(tab_helper) { | 58       tab_helper_(tab_helper) { | 
| 41   } | 59   } | 
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 145     content::RenderViewHost* render_view_host) { | 163     content::RenderViewHost* render_view_host) { | 
| 146   url_ = url; | 164   url_ = url; | 
| 147   RecordEvent(EVENT_MAINFRAME_CHANGE); | 165   RecordEvent(EVENT_MAINFRAME_CHANGE); | 
| 148   RecordEventIfLoggedInURL(EVENT_MAINFRAME_CHANGE_DOMAIN_LOGGED_IN, url); | 166   RecordEventIfLoggedInURL(EVENT_MAINFRAME_CHANGE_DOMAIN_LOGGED_IN, url); | 
| 149   PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); | 167   PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); | 
| 150   if (!prerender_manager) | 168   if (!prerender_manager) | 
| 151     return; | 169     return; | 
| 152   if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL)) | 170   if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL)) | 
| 153     return; | 171     return; | 
| 154   prerender_manager->MarkWebContentsAsNotPrerendered(web_contents()); | 172   prerender_manager->MarkWebContentsAsNotPrerendered(web_contents()); | 
|  | 173   ReportTabHelperURLSeenToLocalPredictor(prerender_manager, url, | 
|  | 174                                          web_contents()); | 
| 155 } | 175 } | 
| 156 | 176 | 
| 157 void PrerenderTabHelper::DidCommitProvisionalLoadForFrame( | 177 void PrerenderTabHelper::DidCommitProvisionalLoadForFrame( | 
| 158     int64 frame_id, | 178     int64 frame_id, | 
| 159     bool is_main_frame, | 179     bool is_main_frame, | 
| 160     const GURL& validated_url, | 180     const GURL& validated_url, | 
| 161     content::PageTransition transition_type, | 181     content::PageTransition transition_type, | 
| 162     content::RenderViewHost* render_view_host) { | 182     content::RenderViewHost* render_view_host) { | 
| 163   if (!is_main_frame) | 183   if (!is_main_frame) | 
| 164     return; | 184     return; | 
| 165   RecordEvent(EVENT_MAINFRAME_COMMIT); | 185   RecordEvent(EVENT_MAINFRAME_COMMIT); | 
| 166   RecordEventIfLoggedInURL(EVENT_MAINFRAME_COMMIT_DOMAIN_LOGGED_IN, | 186   RecordEventIfLoggedInURL(EVENT_MAINFRAME_COMMIT_DOMAIN_LOGGED_IN, | 
| 167                            validated_url); | 187                            validated_url); | 
| 168   url_ = validated_url; | 188   url_ = validated_url; | 
| 169   PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); | 189   PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); | 
| 170   if (!prerender_manager) | 190   if (!prerender_manager) | 
| 171     return; | 191     return; | 
| 172   if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL)) | 192   if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL)) | 
| 173     return; | 193     return; | 
| 174   prerender_manager->RecordNavigation(validated_url); | 194   prerender_manager->RecordNavigation(validated_url); | 
|  | 195   ReportTabHelperURLSeenToLocalPredictor(prerender_manager, validated_url, | 
|  | 196                                          web_contents()); | 
| 175 } | 197 } | 
| 176 | 198 | 
| 177 void PrerenderTabHelper::DidStopLoading( | 199 void PrerenderTabHelper::DidStopLoading( | 
| 178     content::RenderViewHost* render_view_host) { | 200     content::RenderViewHost* render_view_host) { | 
| 179   // Compute the PPLT metric and report it in a histogram, if needed. | 201   // Compute the PPLT metric and report it in a histogram, if needed. | 
| 180   // We include pages that are still prerendering and have just finished | 202   // We include pages that are still prerendering and have just finished | 
| 181   // loading -- PrerenderManager will sort this out and handle it correctly | 203   // loading -- PrerenderManager will sort this out and handle it correctly | 
| 182   // (putting those times into a separate histogram). | 204   // (putting those times into a separate histogram). | 
| 183   if (!pplt_load_start_.is_null()) { | 205   if (!pplt_load_start_.is_null()) { | 
| 184     double fraction_elapsed_at_swapin = -1.0; | 206     double fraction_elapsed_at_swapin = -1.0; | 
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 297 | 319 | 
| 298 void PrerenderTabHelper::RecordEventIfLoggedInURLResult( | 320 void PrerenderTabHelper::RecordEventIfLoggedInURLResult( | 
| 299     PrerenderTabHelper::Event event, | 321     PrerenderTabHelper::Event event, | 
| 300     scoped_ptr<bool> is_present, | 322     scoped_ptr<bool> is_present, | 
| 301     scoped_ptr<bool> lookup_succeeded) { | 323     scoped_ptr<bool> lookup_succeeded) { | 
| 302   if (*lookup_succeeded && *is_present) | 324   if (*lookup_succeeded && *is_present) | 
| 303     RecordEvent(event); | 325     RecordEvent(event); | 
| 304 } | 326 } | 
| 305 | 327 | 
| 306 }  // namespace prerender | 328 }  // namespace prerender | 
| OLD | NEW | 
|---|