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

Side by Side Diff: trunk/src/chrome/browser/prerender/prerender_tab_helper.cc

Issue 13995007: Revert 194484 "Add the LoggedIn Predictor, to detect which websi..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 years, 8 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 | Annotate | Revision Log
OLDNEW
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"
11 #include "chrome/browser/prerender/prerender_histograms.h" 10 #include "chrome/browser/prerender/prerender_histograms.h"
12 #include "chrome/browser/prerender/prerender_manager.h" 11 #include "chrome/browser/prerender/prerender_manager.h"
13 #include "chrome/browser/prerender/prerender_manager_factory.h" 12 #include "chrome/browser/prerender/prerender_manager_factory.h"
14 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile.h"
15 #include "content/public/browser/browser_thread.h"
16 #include "content/public/browser/navigation_details.h"
17 #include "content/public/browser/navigation_entry.h"
18 #include "content/public/browser/render_view_host.h" 14 #include "content/public/browser/render_view_host.h"
19 #include "content/public/browser/web_contents.h" 15 #include "content/public/browser/web_contents.h"
20 #include "content/public/browser/web_contents_view.h" 16 #include "content/public/browser/web_contents_view.h"
21 #include "content/public/common/frame_navigate_params.h"
22 #include "skia/ext/platform_canvas.h" 17 #include "skia/ext/platform_canvas.h"
23 #include "third_party/skia/include/core/SkBitmap.h" 18 #include "third_party/skia/include/core/SkBitmap.h"
24 #include "ui/gfx/rect.h" 19 #include "ui/gfx/rect.h"
25 20
26 using content::WebContents; 21 using content::WebContents;
27 22
28 DEFINE_WEB_CONTENTS_USER_DATA_KEY(prerender::PrerenderTabHelper); 23 DEFINE_WEB_CONTENTS_USER_DATA_KEY(prerender::PrerenderTabHelper);
29 24
30 namespace prerender { 25 namespace prerender {
31 26
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 // and the WebContents that it was swapped into. 121 // and the WebContents that it was swapped into.
127 scoped_ptr<SkBitmap> bitmap_; 122 scoped_ptr<SkBitmap> bitmap_;
128 WebContents* bitmap_web_contents_; 123 WebContents* bitmap_web_contents_;
129 124
130 base::WeakPtrFactory<PixelStats> weak_factory_; 125 base::WeakPtrFactory<PixelStats> weak_factory_;
131 126
132 PrerenderTabHelper* tab_helper_; 127 PrerenderTabHelper* tab_helper_;
133 }; 128 };
134 129
135 PrerenderTabHelper::PrerenderTabHelper(content::WebContents* web_contents) 130 PrerenderTabHelper::PrerenderTabHelper(content::WebContents* web_contents)
136 : content::WebContentsObserver(web_contents), 131 : content::WebContentsObserver(web_contents) {
137 weak_factory_(this) {
138 } 132 }
139 133
140 PrerenderTabHelper::~PrerenderTabHelper() { 134 PrerenderTabHelper::~PrerenderTabHelper() {
141 } 135 }
142 136
143 void PrerenderTabHelper::ProvisionalChangeToMainFrameUrl( 137 void PrerenderTabHelper::ProvisionalChangeToMainFrameUrl(
144 const GURL& url, 138 const GURL& url,
145 content::RenderViewHost* render_view_host) { 139 content::RenderViewHost* render_view_host) {
146 url_ = url; 140 url_ = url;
147 RecordEvent(EVENT_MAINFRAME_CHANGE);
148 RecordEventIfLoggedInURL(EVENT_MAINFRAME_CHANGE_DOMAIN_LOGGED_IN, url);
149 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 141 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
150 if (!prerender_manager) 142 if (!prerender_manager)
151 return; 143 return;
152 if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL)) 144 if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL))
153 return; 145 return;
154 prerender_manager->MarkWebContentsAsNotPrerendered(web_contents()); 146 prerender_manager->MarkWebContentsAsNotPrerendered(web_contents());
155 } 147 }
156 148
157 void PrerenderTabHelper::DidCommitProvisionalLoadForFrame( 149 void PrerenderTabHelper::DidCommitProvisionalLoadForFrame(
158 int64 frame_id, 150 int64 frame_id,
159 bool is_main_frame, 151 bool is_main_frame,
160 const GURL& validated_url, 152 const GURL& validated_url,
161 content::PageTransition transition_type, 153 content::PageTransition transition_type,
162 content::RenderViewHost* render_view_host) { 154 content::RenderViewHost* render_view_host) {
163 if (!is_main_frame) 155 if (!is_main_frame)
164 return; 156 return;
165 RecordEvent(EVENT_MAINFRAME_COMMIT);
166 RecordEventIfLoggedInURL(EVENT_MAINFRAME_COMMIT_DOMAIN_LOGGED_IN,
167 validated_url);
168 url_ = validated_url; 157 url_ = validated_url;
169 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 158 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
170 if (!prerender_manager) 159 if (!prerender_manager)
171 return; 160 return;
172 if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL)) 161 if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL))
173 return; 162 return;
174 prerender_manager->RecordNavigation(validated_url); 163 prerender_manager->RecordNavigation(validated_url);
175 } 164 }
176 165
177 void PrerenderTabHelper::DidStopLoading( 166 void PrerenderTabHelper::DidStopLoading(
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 bool is_error_page, 203 bool is_error_page,
215 bool is_iframe_srcdoc, 204 bool is_iframe_srcdoc,
216 content::RenderViewHost* render_view_host) { 205 content::RenderViewHost* render_view_host) {
217 if (is_main_frame) { 206 if (is_main_frame) {
218 // Record the beginning of a new PPLT navigation. 207 // Record the beginning of a new PPLT navigation.
219 pplt_load_start_ = base::TimeTicks::Now(); 208 pplt_load_start_ = base::TimeTicks::Now();
220 actual_load_start_ = base::TimeTicks(); 209 actual_load_start_ = base::TimeTicks();
221 } 210 }
222 } 211 }
223 212
224 void PrerenderTabHelper::DidNavigateAnyFrame(
225 const content::LoadCommittedDetails& details,
226 const content::FrameNavigateParams& params) {
227 scoped_refptr<predictors::LoggedInPredictorTable> logged_in_table =
228 MaybeGetLoggedInTable();
229 if (params.password_form.origin.is_valid() && logged_in_table.get()) {
230 content::BrowserThread::PostTask(
231 content::BrowserThread::DB, FROM_HERE,
232 base::Bind(&predictors::LoggedInPredictorTable::Add,
233 logged_in_table,
234 params.url));
235 RecordEvent(EVENT_LOGIN_ACTION_ADDED);
236 }
237 }
238
239 PrerenderManager* PrerenderTabHelper::MaybeGetPrerenderManager() const { 213 PrerenderManager* PrerenderTabHelper::MaybeGetPrerenderManager() const {
240 return PrerenderManagerFactory::GetForProfile( 214 return PrerenderManagerFactory::GetForProfile(
241 Profile::FromBrowserContext(web_contents()->GetBrowserContext())); 215 Profile::FromBrowserContext(web_contents()->GetBrowserContext()));
242 } 216 }
243 217
244 scoped_refptr<predictors::LoggedInPredictorTable>
245 PrerenderTabHelper::MaybeGetLoggedInTable() const {
246 RecordEvent(EVENT_LOGGED_IN_TABLE_REQUESTED);
247 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
248 if (prerender_manager) {
249 predictors::LoggedInPredictorTable* result =
250 prerender_manager->logged_in_predictor_table();
251 if (result)
252 RecordEvent(EVENT_LOGGED_IN_TABLE_PRESENT);
253 return result;
254 }
255 return NULL;
256 }
257
258 bool PrerenderTabHelper::IsPrerendering() { 218 bool PrerenderTabHelper::IsPrerendering() {
259 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 219 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
260 if (!prerender_manager) 220 if (!prerender_manager)
261 return false; 221 return false;
262 return prerender_manager->IsWebContentsPrerendering(web_contents(), NULL); 222 return prerender_manager->IsWebContentsPrerendering(web_contents(), NULL);
263 } 223 }
264 224
265 bool PrerenderTabHelper::IsPrerendered() { 225 bool PrerenderTabHelper::IsPrerendered() {
266 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 226 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
267 if (!prerender_manager) 227 if (!prerender_manager)
(...skipping 14 matching lines...) Expand all
282 } else { 242 } else {
283 // If we have not finished loading yet, record the actual load start, and 243 // If we have not finished loading yet, record the actual load start, and
284 // rebase the start time to now. 244 // rebase the start time to now.
285 actual_load_start_ = pplt_load_start_; 245 actual_load_start_ = pplt_load_start_;
286 pplt_load_start_ = base::TimeTicks::Now(); 246 pplt_load_start_ = base::TimeTicks::Now();
287 if (pixel_stats_.get()) 247 if (pixel_stats_.get())
288 pixel_stats_->GetBitmap(PixelStats::BITMAP_SWAP_IN, web_contents()); 248 pixel_stats_->GetBitmap(PixelStats::BITMAP_SWAP_IN, web_contents());
289 } 249 }
290 } 250 }
291 251
292 void PrerenderTabHelper::RecordEvent(PrerenderTabHelper::Event event) const {
293 UMA_HISTOGRAM_ENUMERATION("Prerender.TabHelperEvent",
294 event, PrerenderTabHelper::EVENT_MAX_VALUE);
295 }
296
297 void PrerenderTabHelper::RecordEventIfLoggedInURL(
298 PrerenderTabHelper::Event event, const GURL& url) {
299 scoped_refptr<predictors::LoggedInPredictorTable> logged_in_table =
300 MaybeGetLoggedInTable();
301 if (!logged_in_table.get())
302 return;
303 scoped_ptr<bool> is_present(new bool);
304 scoped_ptr<bool> lookup_succeeded(new bool);
305 bool* is_present_ptr = is_present.get();
306 bool* lookup_succeeded_ptr = lookup_succeeded.get();
307 content::BrowserThread::PostTaskAndReply(
308 content::BrowserThread::DB, FROM_HERE,
309 base::Bind(&predictors::LoggedInPredictorTable::HasUserLoggedIn,
310 logged_in_table,
311 url,
312 is_present_ptr,
313 lookup_succeeded_ptr),
314 base::Bind(&PrerenderTabHelper::RecordEventIfLoggedInURLResult,
315 weak_factory_.GetWeakPtr(),
316 event,
317 base::Passed(&is_present),
318 base::Passed(&lookup_succeeded)));
319 }
320
321 void PrerenderTabHelper::RecordEventIfLoggedInURLResult(
322 PrerenderTabHelper::Event event,
323 scoped_ptr<bool> is_present,
324 scoped_ptr<bool> lookup_succeeded) {
325 if (*lookup_succeeded && *is_present)
326 RecordEvent(event);
327 }
328
329 } // namespace prerender 252 } // namespace prerender
OLDNEW
« no previous file with comments | « trunk/src/chrome/browser/prerender/prerender_tab_helper.h ('k') | trunk/src/chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698