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 18 matching lines...) Expand all Loading... |
29 #include "base/values.h" | 29 #include "base/values.h" |
30 #include "components/autofill/content/browser/risk/proto/fingerprint.pb.h" | 30 #include "components/autofill/content/browser/risk/proto/fingerprint.pb.h" |
31 #include "content/public/browser/browser_thread.h" | 31 #include "content/public/browser/browser_thread.h" |
32 #include "content/public/browser/font_list_async.h" | 32 #include "content/public/browser/font_list_async.h" |
33 #include "content/public/browser/gpu_data_manager.h" | 33 #include "content/public/browser/gpu_data_manager.h" |
34 #include "content/public/browser/gpu_data_manager_observer.h" | 34 #include "content/public/browser/gpu_data_manager_observer.h" |
35 #include "content/public/browser/plugin_service.h" | 35 #include "content/public/browser/plugin_service.h" |
36 #include "content/public/browser/render_widget_host.h" | 36 #include "content/public/browser/render_widget_host.h" |
37 #include "content/public/browser/render_widget_host_view.h" | 37 #include "content/public/browser/render_widget_host_view.h" |
38 #include "content/public/browser/web_contents.h" | 38 #include "content/public/browser/web_contents.h" |
| 39 #include "content/public/common/screen_info.h" |
39 #include "content/public/common/webplugininfo.h" | 40 #include "content/public/common/webplugininfo.h" |
40 #include "device/geolocation/geolocation_provider.h" | 41 #include "device/geolocation/geolocation_provider.h" |
41 #include "device/geolocation/geoposition.h" | 42 #include "device/geolocation/geoposition.h" |
42 #include "gpu/config/gpu_info.h" | 43 #include "gpu/config/gpu_info.h" |
43 #include "third_party/WebKit/public/platform/WebRect.h" | 44 #include "third_party/WebKit/public/platform/WebRect.h" |
44 #include "third_party/WebKit/public/platform/WebScreenInfo.h" | |
45 #include "ui/display/display.h" | 45 #include "ui/display/display.h" |
46 #include "ui/display/screen.h" | 46 #include "ui/display/screen.h" |
47 #include "ui/gfx/geometry/rect.h" | 47 #include "ui/gfx/geometry/rect.h" |
48 | 48 |
49 using blink::WebScreenInfo; | |
50 | |
51 namespace autofill { | 49 namespace autofill { |
52 namespace risk { | 50 namespace risk { |
53 | 51 |
54 namespace { | 52 namespace { |
55 | 53 |
56 const int32_t kFingerprinterVersion = 1; | 54 const int32_t kFingerprinterVersion = 1; |
57 | 55 |
58 // Maximum amount of time, in seconds, to wait for loading asynchronous | 56 // Maximum amount of time, in seconds, to wait for loading asynchronous |
59 // fingerprint data. | 57 // fingerprint data. |
60 const int kTimeoutSeconds = 4; | 58 const int kTimeoutSeconds = 4; |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 machine->add_requested_language(lang); | 120 machine->add_requested_language(lang); |
123 } | 121 } |
124 | 122 |
125 // This function writes | 123 // This function writes |
126 // (a) the number of screens, | 124 // (a) the number of screens, |
127 // (b) the primary display's screen size, | 125 // (b) the primary display's screen size, |
128 // (c) the screen's color depth, and | 126 // (c) the screen's color depth, and |
129 // (d) the size of the screen unavailable to web page content, | 127 // (d) the size of the screen unavailable to web page content, |
130 // i.e. the Taskbar size on Windows | 128 // i.e. the Taskbar size on Windows |
131 // into the |machine|. | 129 // into the |machine|. |
132 void AddScreenInfoToFingerprint(const WebScreenInfo& screen_info, | 130 void AddScreenInfoToFingerprint(const content::ScreenInfo& screen_info, |
133 Fingerprint::MachineCharacteristics* machine) { | 131 Fingerprint::MachineCharacteristics* machine) { |
134 machine->set_screen_count(display::Screen::GetScreen()->GetNumDisplays()); | 132 machine->set_screen_count(display::Screen::GetScreen()->GetNumDisplays()); |
135 | 133 |
136 const gfx::Size screen_size = | 134 const gfx::Size screen_size = |
137 display::Screen::GetScreen()->GetPrimaryDisplay().GetSizeInPixel(); | 135 display::Screen::GetScreen()->GetPrimaryDisplay().GetSizeInPixel(); |
138 machine->mutable_screen_size()->set_width(screen_size.width()); | 136 machine->mutable_screen_size()->set_width(screen_size.width()); |
139 machine->mutable_screen_size()->set_height(screen_size.height()); | 137 machine->mutable_screen_size()->set_height(screen_size.height()); |
140 | 138 |
141 machine->set_screen_color_depth(screen_info.depth); | 139 machine->set_screen_color_depth(screen_info.depth); |
142 | 140 |
143 const gfx::Rect screen_rect(screen_info.rect); | 141 const gfx::Rect screen_rect(screen_info.rect); |
144 const gfx::Rect available_rect(screen_info.availableRect); | 142 const gfx::Rect available_rect(screen_info.available_rect); |
145 const gfx::Rect unavailable_rect = | 143 const gfx::Rect unavailable_rect = |
146 gfx::SubtractRects(screen_rect, available_rect); | 144 gfx::SubtractRects(screen_rect, available_rect); |
147 machine->mutable_unavailable_screen_size()->set_width( | 145 machine->mutable_unavailable_screen_size()->set_width( |
148 unavailable_rect.width()); | 146 unavailable_rect.width()); |
149 machine->mutable_unavailable_screen_size()->set_height( | 147 machine->mutable_unavailable_screen_size()->set_height( |
150 unavailable_rect.height()); | 148 unavailable_rect.height()); |
151 } | 149 } |
152 | 150 |
153 // Writes info about the machine's CPU into the |machine|. | 151 // Writes info about the machine's CPU into the |machine|. |
154 void AddCpuInfoToFingerprint(Fingerprint::MachineCharacteristics* machine) { | 152 void AddCpuInfoToFingerprint(Fingerprint::MachineCharacteristics* machine) { |
(...skipping 19 matching lines...) Expand all Loading... |
174 } | 172 } |
175 | 173 |
176 // Waits for all asynchronous data required for the fingerprint to be loaded, | 174 // Waits for all asynchronous data required for the fingerprint to be loaded, |
177 // then fills out the fingerprint. | 175 // then fills out the fingerprint. |
178 class FingerprintDataLoader : public content::GpuDataManagerObserver { | 176 class FingerprintDataLoader : public content::GpuDataManagerObserver { |
179 public: | 177 public: |
180 FingerprintDataLoader( | 178 FingerprintDataLoader( |
181 uint64_t obfuscated_gaia_id, | 179 uint64_t obfuscated_gaia_id, |
182 const gfx::Rect& window_bounds, | 180 const gfx::Rect& window_bounds, |
183 const gfx::Rect& content_bounds, | 181 const gfx::Rect& content_bounds, |
184 const WebScreenInfo& screen_info, | 182 const content::ScreenInfo& screen_info, |
185 const std::string& version, | 183 const std::string& version, |
186 const std::string& charset, | 184 const std::string& charset, |
187 const std::string& accept_languages, | 185 const std::string& accept_languages, |
188 const base::Time& install_time, | 186 const base::Time& install_time, |
189 const std::string& app_locale, | 187 const std::string& app_locale, |
190 const std::string& user_agent, | 188 const std::string& user_agent, |
191 const base::TimeDelta& timeout, | 189 const base::TimeDelta& timeout, |
192 const base::Callback<void(std::unique_ptr<Fingerprint>)>& callback); | 190 const base::Callback<void(std::unique_ptr<Fingerprint>)>& callback); |
193 | 191 |
194 private: | 192 private: |
(...skipping 20 matching lines...) Expand all Loading... |
215 | 213 |
216 // Ensures that any observer registrations for the GPU data are cleaned up by | 214 // Ensures that any observer registrations for the GPU data are cleaned up by |
217 // the time this object is destroyed. | 215 // the time this object is destroyed. |
218 ScopedObserver<content::GpuDataManager, FingerprintDataLoader> gpu_observer_; | 216 ScopedObserver<content::GpuDataManager, FingerprintDataLoader> gpu_observer_; |
219 | 217 |
220 // Data that will be passed on to the next loading phase. See the comment for | 218 // Data that will be passed on to the next loading phase. See the comment for |
221 // GetFingerprint() for a description of these variables. | 219 // GetFingerprint() for a description of these variables. |
222 const uint64_t obfuscated_gaia_id_; | 220 const uint64_t obfuscated_gaia_id_; |
223 const gfx::Rect window_bounds_; | 221 const gfx::Rect window_bounds_; |
224 const gfx::Rect content_bounds_; | 222 const gfx::Rect content_bounds_; |
225 const WebScreenInfo screen_info_; | 223 const content::ScreenInfo screen_info_; |
226 const std::string version_; | 224 const std::string version_; |
227 const std::string charset_; | 225 const std::string charset_; |
228 const std::string accept_languages_; | 226 const std::string accept_languages_; |
229 const std::string app_locale_; | 227 const std::string app_locale_; |
230 const std::string user_agent_; | 228 const std::string user_agent_; |
231 const base::Time install_time_; | 229 const base::Time install_time_; |
232 | 230 |
233 // Data that will be loaded asynchronously. | 231 // Data that will be loaded asynchronously. |
234 std::unique_ptr<base::ListValue> fonts_; | 232 std::unique_ptr<base::ListValue> fonts_; |
235 std::vector<content::WebPluginInfo> plugins_; | 233 std::vector<content::WebPluginInfo> plugins_; |
(...skipping 15 matching lines...) Expand all Loading... |
251 // instance is destroyed. | 249 // instance is destroyed. |
252 base::WeakPtrFactory<FingerprintDataLoader> weak_ptr_factory_; | 250 base::WeakPtrFactory<FingerprintDataLoader> weak_ptr_factory_; |
253 | 251 |
254 DISALLOW_COPY_AND_ASSIGN(FingerprintDataLoader); | 252 DISALLOW_COPY_AND_ASSIGN(FingerprintDataLoader); |
255 }; | 253 }; |
256 | 254 |
257 FingerprintDataLoader::FingerprintDataLoader( | 255 FingerprintDataLoader::FingerprintDataLoader( |
258 uint64_t obfuscated_gaia_id, | 256 uint64_t obfuscated_gaia_id, |
259 const gfx::Rect& window_bounds, | 257 const gfx::Rect& window_bounds, |
260 const gfx::Rect& content_bounds, | 258 const gfx::Rect& content_bounds, |
261 const WebScreenInfo& screen_info, | 259 const content::ScreenInfo& screen_info, |
262 const std::string& version, | 260 const std::string& version, |
263 const std::string& charset, | 261 const std::string& charset, |
264 const std::string& accept_languages, | 262 const std::string& accept_languages, |
265 const base::Time& install_time, | 263 const base::Time& install_time, |
266 const std::string& app_locale, | 264 const std::string& app_locale, |
267 const std::string& user_agent, | 265 const std::string& user_agent, |
268 const base::TimeDelta& timeout, | 266 const base::TimeDelta& timeout, |
269 const base::Callback<void(std::unique_ptr<Fingerprint>)>& callback) | 267 const base::Callback<void(std::unique_ptr<Fingerprint>)>& callback) |
270 : gpu_data_manager_(content::GpuDataManager::GetInstance()), | 268 : gpu_data_manager_(content::GpuDataManager::GetInstance()), |
271 gpu_observer_(this), | 269 gpu_observer_(this), |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 } | 429 } |
432 | 430 |
433 } // namespace | 431 } // namespace |
434 | 432 |
435 namespace internal { | 433 namespace internal { |
436 | 434 |
437 void GetFingerprintInternal( | 435 void GetFingerprintInternal( |
438 uint64_t obfuscated_gaia_id, | 436 uint64_t obfuscated_gaia_id, |
439 const gfx::Rect& window_bounds, | 437 const gfx::Rect& window_bounds, |
440 const gfx::Rect& content_bounds, | 438 const gfx::Rect& content_bounds, |
441 const blink::WebScreenInfo& screen_info, | 439 const content::ScreenInfo& screen_info, |
442 const std::string& version, | 440 const std::string& version, |
443 const std::string& charset, | 441 const std::string& charset, |
444 const std::string& accept_languages, | 442 const std::string& accept_languages, |
445 const base::Time& install_time, | 443 const base::Time& install_time, |
446 const std::string& app_locale, | 444 const std::string& app_locale, |
447 const std::string& user_agent, | 445 const std::string& user_agent, |
448 const base::TimeDelta& timeout, | 446 const base::TimeDelta& timeout, |
449 const base::Callback<void(std::unique_ptr<Fingerprint>)>& callback) { | 447 const base::Callback<void(std::unique_ptr<Fingerprint>)>& callback) { |
450 // Begin loading all of the data that we need to load asynchronously. | 448 // Begin loading all of the data that we need to load asynchronously. |
451 // This class is responsible for freeing its own memory. | 449 // This class is responsible for freeing its own memory. |
(...skipping 11 matching lines...) Expand all Loading... |
463 content::WebContents* web_contents, | 461 content::WebContents* web_contents, |
464 const std::string& version, | 462 const std::string& version, |
465 const std::string& charset, | 463 const std::string& charset, |
466 const std::string& accept_languages, | 464 const std::string& accept_languages, |
467 const base::Time& install_time, | 465 const base::Time& install_time, |
468 const std::string& app_locale, | 466 const std::string& app_locale, |
469 const std::string& user_agent, | 467 const std::string& user_agent, |
470 const base::Callback<void(std::unique_ptr<Fingerprint>)>& callback) { | 468 const base::Callback<void(std::unique_ptr<Fingerprint>)>& callback) { |
471 gfx::Rect content_bounds = web_contents->GetContainerBounds(); | 469 gfx::Rect content_bounds = web_contents->GetContainerBounds(); |
472 | 470 |
473 blink::WebScreenInfo screen_info; | 471 content::ScreenInfo screen_info; |
474 const content::RenderWidgetHostView* host_view = | 472 const content::RenderWidgetHostView* host_view = |
475 web_contents->GetRenderWidgetHostView(); | 473 web_contents->GetRenderWidgetHostView(); |
476 if (host_view) | 474 if (host_view) |
477 host_view->GetRenderWidgetHost()->GetWebScreenInfo(&screen_info); | 475 host_view->GetRenderWidgetHost()->GetScreenInfo(&screen_info); |
478 | 476 |
479 internal::GetFingerprintInternal( | 477 internal::GetFingerprintInternal( |
480 obfuscated_gaia_id, window_bounds, content_bounds, screen_info, version, | 478 obfuscated_gaia_id, window_bounds, content_bounds, screen_info, version, |
481 charset, accept_languages, install_time, app_locale, user_agent, | 479 charset, accept_languages, install_time, app_locale, user_agent, |
482 base::TimeDelta::FromSeconds(kTimeoutSeconds), callback); | 480 base::TimeDelta::FromSeconds(kTimeoutSeconds), callback); |
483 } | 481 } |
484 | 482 |
485 } // namespace risk | 483 } // namespace risk |
486 } // namespace autofill | 484 } // namespace autofill |
OLD | NEW |