OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 // Generating a fingerprint consists of two major steps: | 5 // Generating a fingerprint consists of two major steps: |
6 // (1) Gather all the necessary data. | 6 // (1) Gather all the necessary data. |
7 // (2) Write it into a protocol buffer. | 7 // (2) Write it into a protocol buffer. |
8 // | 8 // |
9 // Step (2) is as simple as it sounds -- it's really just a matter of copying | 9 // Step (2) is as simple as it sounds -- it's really just a matter of copying |
10 // data. Step (1) requires waiting on several asynchronous callbacks, which are | 10 // data. Step (1) requires waiting on several asynchronous callbacks, which are |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 // Data that will be loaded asynchronously. | 240 // Data that will be loaded asynchronously. |
241 scoped_ptr<base::ListValue> fonts_; | 241 scoped_ptr<base::ListValue> fonts_; |
242 std::vector<content::WebPluginInfo> plugins_; | 242 std::vector<content::WebPluginInfo> plugins_; |
243 bool waiting_on_plugins_; | 243 bool waiting_on_plugins_; |
244 content::Geoposition geoposition_; | 244 content::Geoposition geoposition_; |
245 | 245 |
246 // Timer to enforce a maximum timeout before the |callback_| is called, even | 246 // Timer to enforce a maximum timeout before the |callback_| is called, even |
247 // if not all asynchronous data has been loaded. | 247 // if not all asynchronous data has been loaded. |
248 base::OneShotTimer<FingerprintDataLoader> timeout_timer_; | 248 base::OneShotTimer<FingerprintDataLoader> timeout_timer_; |
249 | 249 |
250 // For invalidating asynchronous callbacks that might arrive after |this| | |
251 // instance is destroyed. | |
252 base::WeakPtrFactory<FingerprintDataLoader> weak_ptr_factory_; | |
253 | |
254 // The callback that will be called once all the data is available. | 250 // The callback that will be called once all the data is available. |
255 base::Callback<void(scoped_ptr<Fingerprint>)> callback_; | 251 base::Callback<void(scoped_ptr<Fingerprint>)> callback_; |
256 | 252 |
257 // The callback used as an "observer" of the GeolocationProvider. | 253 // The callback used as an "observer" of the GeolocationProvider. |
258 scoped_ptr<content::GeolocationProvider::Subscription> | 254 scoped_ptr<content::GeolocationProvider::Subscription> |
259 geolocation_subscription_; | 255 geolocation_subscription_; |
260 | 256 |
| 257 // For invalidating asynchronous callbacks that might arrive after |this| |
| 258 // instance is destroyed. |
| 259 base::WeakPtrFactory<FingerprintDataLoader> weak_ptr_factory_; |
| 260 |
261 DISALLOW_COPY_AND_ASSIGN(FingerprintDataLoader); | 261 DISALLOW_COPY_AND_ASSIGN(FingerprintDataLoader); |
262 }; | 262 }; |
263 | 263 |
264 FingerprintDataLoader::FingerprintDataLoader( | 264 FingerprintDataLoader::FingerprintDataLoader( |
265 uint64 obfuscated_gaia_id, | 265 uint64 obfuscated_gaia_id, |
266 const gfx::Rect& window_bounds, | 266 const gfx::Rect& window_bounds, |
267 const gfx::Rect& content_bounds, | 267 const gfx::Rect& content_bounds, |
268 const WebScreenInfo& screen_info, | 268 const WebScreenInfo& screen_info, |
269 const std::string& version, | 269 const std::string& version, |
270 const std::string& charset, | 270 const std::string& charset, |
271 const std::string& accept_languages, | 271 const std::string& accept_languages, |
272 const base::Time& install_time, | 272 const base::Time& install_time, |
273 const std::string& app_locale, | 273 const std::string& app_locale, |
274 const std::string& user_agent, | 274 const std::string& user_agent, |
275 const base::TimeDelta& timeout, | 275 const base::TimeDelta& timeout, |
276 const base::Callback<void(scoped_ptr<Fingerprint>)>& callback) | 276 const base::Callback<void(scoped_ptr<Fingerprint>)>& callback) |
277 : gpu_data_manager_(content::GpuDataManager::GetInstance()), | 277 : gpu_data_manager_(content::GpuDataManager::GetInstance()), |
278 gpu_observer_(this), | 278 gpu_observer_(this), |
279 obfuscated_gaia_id_(obfuscated_gaia_id), | 279 obfuscated_gaia_id_(obfuscated_gaia_id), |
280 window_bounds_(window_bounds), | 280 window_bounds_(window_bounds), |
281 content_bounds_(content_bounds), | 281 content_bounds_(content_bounds), |
282 screen_info_(screen_info), | 282 screen_info_(screen_info), |
283 version_(version), | 283 version_(version), |
284 charset_(charset), | 284 charset_(charset), |
285 accept_languages_(accept_languages), | 285 accept_languages_(accept_languages), |
286 app_locale_(app_locale), | 286 app_locale_(app_locale), |
287 user_agent_(user_agent), | 287 user_agent_(user_agent), |
288 install_time_(install_time), | 288 install_time_(install_time), |
289 waiting_on_plugins_(true), | 289 waiting_on_plugins_(true), |
290 weak_ptr_factory_(this), | 290 callback_(callback), |
291 callback_(callback) { | 291 weak_ptr_factory_(this) { |
292 DCHECK(!install_time_.is_null()); | 292 DCHECK(!install_time_.is_null()); |
293 | 293 |
294 timeout_timer_.Start(FROM_HERE, timeout, | 294 timeout_timer_.Start(FROM_HERE, timeout, |
295 base::Bind(&FingerprintDataLoader::MaybeFillFingerprint, | 295 base::Bind(&FingerprintDataLoader::MaybeFillFingerprint, |
296 weak_ptr_factory_.GetWeakPtr())); | 296 weak_ptr_factory_.GetWeakPtr())); |
297 | 297 |
298 // Load GPU data if needed. | 298 // Load GPU data if needed. |
299 if (gpu_data_manager_->GpuAccessAllowed(NULL) && | 299 if (gpu_data_manager_->GpuAccessAllowed(NULL) && |
300 !gpu_data_manager_->IsEssentialGpuInfoAvailable()) { | 300 !gpu_data_manager_->IsEssentialGpuInfoAvailable()) { |
301 gpu_observer_.Add(gpu_data_manager_); | 301 gpu_observer_.Add(gpu_data_manager_); |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 host_view->GetRenderWidgetHost()->GetWebScreenInfo(&screen_info); | 484 host_view->GetRenderWidgetHost()->GetWebScreenInfo(&screen_info); |
485 | 485 |
486 internal::GetFingerprintInternal( | 486 internal::GetFingerprintInternal( |
487 obfuscated_gaia_id, window_bounds, content_bounds, screen_info, version, | 487 obfuscated_gaia_id, window_bounds, content_bounds, screen_info, version, |
488 charset, accept_languages, install_time, app_locale, user_agent, | 488 charset, accept_languages, install_time, app_locale, user_agent, |
489 base::TimeDelta::FromSeconds(kTimeoutSeconds), callback); | 489 base::TimeDelta::FromSeconds(kTimeoutSeconds), callback); |
490 } | 490 } |
491 | 491 |
492 } // namespace risk | 492 } // namespace risk |
493 } // namespace autofill | 493 } // namespace autofill |
OLD | NEW |