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/bind.h" |
7 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
8 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
9 #include "base/time/time.h" | 10 #include "base/time/time.h" |
| 11 #include "chrome/browser/password_manager/password_manager.h" |
10 #include "chrome/browser/predictors/logged_in_predictor_table.h" | 12 #include "chrome/browser/predictors/logged_in_predictor_table.h" |
11 #include "chrome/browser/prerender/prerender_histograms.h" | 13 #include "chrome/browser/prerender/prerender_histograms.h" |
12 #include "chrome/browser/prerender/prerender_local_predictor.h" | 14 #include "chrome/browser/prerender/prerender_local_predictor.h" |
13 #include "chrome/browser/prerender/prerender_manager.h" | 15 #include "chrome/browser/prerender/prerender_manager.h" |
14 #include "chrome/browser/prerender/prerender_manager_factory.h" | 16 #include "chrome/browser/prerender/prerender_manager_factory.h" |
15 #include "chrome/browser/profiles/profile.h" | 17 #include "chrome/browser/profiles/profile.h" |
16 #include "content/public/browser/browser_thread.h" | 18 #include "content/public/browser/browser_thread.h" |
17 #include "content/public/browser/navigation_details.h" | 19 #include "content/public/browser/navigation_details.h" |
18 #include "content/public/browser/navigation_entry.h" | 20 #include "content/public/browser/navigation_entry.h" |
19 #include "content/public/browser/render_view_host.h" | 21 #include "content/public/browser/render_view_host.h" |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 // Bitmap of what the last swapped in prerendered tab looked like at swapin, | 145 // Bitmap of what the last swapped in prerendered tab looked like at swapin, |
144 // and the WebContents that it was swapped into. | 146 // and the WebContents that it was swapped into. |
145 scoped_ptr<SkBitmap> bitmap_; | 147 scoped_ptr<SkBitmap> bitmap_; |
146 WebContents* bitmap_web_contents_; | 148 WebContents* bitmap_web_contents_; |
147 | 149 |
148 base::WeakPtrFactory<PixelStats> weak_factory_; | 150 base::WeakPtrFactory<PixelStats> weak_factory_; |
149 | 151 |
150 PrerenderTabHelper* tab_helper_; | 152 PrerenderTabHelper* tab_helper_; |
151 }; | 153 }; |
152 | 154 |
153 PrerenderTabHelper::PrerenderTabHelper(content::WebContents* web_contents) | 155 // static |
| 156 void PrerenderTabHelper::CreateForWebContentsWithPasswordManager( |
| 157 content::WebContents* web_contents, |
| 158 PasswordManager* password_manager) { |
| 159 if (!FromWebContents(web_contents)) { |
| 160 web_contents->SetUserData(UserDataKey(), |
| 161 new PrerenderTabHelper(web_contents, |
| 162 password_manager)); |
| 163 } |
| 164 } |
| 165 |
| 166 PrerenderTabHelper::PrerenderTabHelper(content::WebContents* web_contents, |
| 167 PasswordManager* password_manager) |
154 : content::WebContentsObserver(web_contents), | 168 : content::WebContentsObserver(web_contents), |
155 weak_factory_(this) { | 169 weak_factory_(this) { |
| 170 password_manager->AddSubmissionCallback( |
| 171 base::Bind(&PrerenderTabHelper::PasswordSubmitted, |
| 172 weak_factory_.GetWeakPtr())); |
156 } | 173 } |
157 | 174 |
158 PrerenderTabHelper::~PrerenderTabHelper() { | 175 PrerenderTabHelper::~PrerenderTabHelper() { |
159 } | 176 } |
160 | 177 |
161 void PrerenderTabHelper::ProvisionalChangeToMainFrameUrl( | 178 void PrerenderTabHelper::ProvisionalChangeToMainFrameUrl( |
162 const GURL& url, | 179 const GURL& url, |
163 content::RenderViewHost* render_view_host) { | 180 content::RenderViewHost* render_view_host) { |
164 url_ = url; | 181 url_ = url; |
165 RecordEvent(EVENT_MAINFRAME_CHANGE); | 182 RecordEvent(EVENT_MAINFRAME_CHANGE); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 bool is_error_page, | 253 bool is_error_page, |
237 bool is_iframe_srcdoc, | 254 bool is_iframe_srcdoc, |
238 content::RenderViewHost* render_view_host) { | 255 content::RenderViewHost* render_view_host) { |
239 if (is_main_frame) { | 256 if (is_main_frame) { |
240 // Record the beginning of a new PPLT navigation. | 257 // Record the beginning of a new PPLT navigation. |
241 pplt_load_start_ = base::TimeTicks::Now(); | 258 pplt_load_start_ = base::TimeTicks::Now(); |
242 actual_load_start_ = base::TimeTicks(); | 259 actual_load_start_ = base::TimeTicks(); |
243 } | 260 } |
244 } | 261 } |
245 | 262 |
246 void PrerenderTabHelper::DidNavigateAnyFrame( | 263 void PrerenderTabHelper::PasswordSubmitted(const content::PasswordForm& form) { |
247 const content::LoadCommittedDetails& details, | |
248 const content::FrameNavigateParams& params) { | |
249 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); | 264 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); |
250 if (params.password_form.origin.is_valid() && prerender_manager) { | 265 if (prerender_manager) { |
251 prerender_manager->RecordLikelyLoginOnURL(params.url); | 266 prerender_manager->RecordLikelyLoginOnURL(form.origin); |
252 RecordEvent(EVENT_LOGIN_ACTION_ADDED); | 267 RecordEvent(EVENT_LOGIN_ACTION_ADDED); |
253 if (details.is_main_frame) { | 268 if (form.password_value.empty()) |
254 RecordEvent(EVENT_LOGIN_ACTION_ADDED_MAINFRAME); | 269 RecordEvent(EVENT_LOGIN_ACTION_ADDED_PW_EMPTY); |
255 if (params.password_form.password_value.empty()) | |
256 RecordEvent(EVENT_LOGIN_ACTION_ADDED_MAINFRAME_PW_EMPTY); | |
257 } else { | |
258 RecordEvent(EVENT_LOGIN_ACTION_ADDED_SUBFRAME); | |
259 if (params.password_form.password_value.empty()) | |
260 RecordEvent(EVENT_LOGIN_ACTION_ADDED_SUBFRAME_PW_EMPTY); | |
261 } | |
262 } | 270 } |
263 } | 271 } |
264 | 272 |
265 PrerenderManager* PrerenderTabHelper::MaybeGetPrerenderManager() const { | 273 PrerenderManager* PrerenderTabHelper::MaybeGetPrerenderManager() const { |
266 return PrerenderManagerFactory::GetForProfile( | 274 return PrerenderManagerFactory::GetForProfile( |
267 Profile::FromBrowserContext(web_contents()->GetBrowserContext())); | 275 Profile::FromBrowserContext(web_contents()->GetBrowserContext())); |
268 } | 276 } |
269 | 277 |
270 bool PrerenderTabHelper::IsPrerendering() { | 278 bool PrerenderTabHelper::IsPrerendering() { |
271 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); | 279 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 | 336 |
329 void PrerenderTabHelper::RecordEventIfLoggedInURLResult( | 337 void PrerenderTabHelper::RecordEventIfLoggedInURLResult( |
330 PrerenderTabHelper::Event event, | 338 PrerenderTabHelper::Event event, |
331 scoped_ptr<bool> is_present, | 339 scoped_ptr<bool> is_present, |
332 scoped_ptr<bool> lookup_succeeded) { | 340 scoped_ptr<bool> lookup_succeeded) { |
333 if (*lookup_succeeded && *is_present) | 341 if (*lookup_succeeded && *is_present) |
334 RecordEvent(event); | 342 RecordEvent(event); |
335 } | 343 } |
336 | 344 |
337 } // namespace prerender | 345 } // namespace prerender |
OLD | NEW |