Chromium Code Reviews| 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 // This file defines a service that collects information about the user | 5 // This file defines a service that collects information about the user |
| 6 // experience in order to help improve future versions of the app. | 6 // experience in order to help improve future versions of the app. |
| 7 | 7 |
| 8 #ifndef CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ | 8 #ifndef CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ |
| 9 #define CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ | 9 #define CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ |
| 10 | 10 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 64 namespace webkit { | 64 namespace webkit { |
| 65 struct WebPluginInfo; | 65 struct WebPluginInfo; |
| 66 } | 66 } |
| 67 | 67 |
| 68 class MetricsService | 68 class MetricsService |
| 69 : public chrome_browser_metrics::TrackingSynchronizerObserver, | 69 : public chrome_browser_metrics::TrackingSynchronizerObserver, |
| 70 public content::NotificationObserver, | 70 public content::NotificationObserver, |
| 71 public net::URLFetcherDelegate, | 71 public net::URLFetcherDelegate, |
| 72 public MetricsServiceBase { | 72 public MetricsServiceBase { |
| 73 public: | 73 public: |
| 74 // Designates which entropy source was returned from this MetricsService. | |
| 75 // This is used for testing to validate that we return the correct source | |
| 76 // depending on the state of the service. | |
| 77 enum EntropySourceReturned { | |
| 78 LAST_ENTROPY_NONE, | |
| 79 LAST_ENTROPY_LOW, | |
| 80 LAST_ENTROPY_HIGH, | |
| 81 }; | |
|
Ilya Sherman
2012/08/09 20:41:18
nit: Can we make this (and the corresponding gette
SteveT
2012/08/09 21:07:59
Sure can! Done.
| |
| 82 | |
| 74 MetricsService(); | 83 MetricsService(); |
| 75 virtual ~MetricsService(); | 84 virtual ~MetricsService(); |
| 76 | 85 |
| 77 // Start/stop the metrics recording and uploading machine. These should be | 86 // Start/stop the metrics recording and uploading machine. These should be |
| 78 // used on startup and when the user clicks the checkbox in the prefs. | 87 // used on startup and when the user clicks the checkbox in the prefs. |
| 79 // StartRecordingOnly starts the metrics recording but not reporting, for use | 88 // StartRecordingOnly starts the metrics recording but not reporting, for use |
| 80 // in tests only. | 89 // in tests only. |
| 81 void Start(); | 90 void Start(); |
| 82 void StartRecordingOnly(); | 91 void StartRecordingOnly(); |
| 83 void Stop(); | 92 void Stop(); |
| 84 | 93 |
| 85 // Returns the client ID for this client, or the empty string if metrics | 94 // Returns the client ID for this client, or the empty string if metrics |
| 86 // recording is not currently running. | 95 // recording is not currently running. |
| 87 std::string GetClientId(); | 96 std::string GetClientId(); |
| 88 | 97 |
| 89 // Returns the preferred entropy source used to seed persistent activities | 98 // Returns the preferred entropy source used to seed persistent activities |
| 90 // based on whether or not metrics reporting is permitted on this client. If | 99 // based on whether or not metrics reporting will permitted on this client. |
| 91 // it is permitted, this returns the client ID concatenated with the low | 100 // The caller must determine if metrics reporting will be enabled for this |
| 92 // entropy source. Otherwise, this just returns the low entropy source. | 101 // client and pass that state in as |reporting_will_be_enabled|. If |
| 93 std::string GetEntropySource(); | 102 // |reporting_will_be_enabled| is true, this method returns the client ID |
| 103 // concatenated with the low entropy source. Otherwise, this method just | |
| 104 // returns the low entropy source. Note that this reporting state can not be | |
| 105 // checked by reporting_active() because this method may need to be called | |
| 106 // before the MetricsService needs to be started. | |
| 107 std::string GetEntropySource(bool reporting_will_be_enabled); | |
| 108 | |
| 109 // Returns the last entropy source that was returned by this service since | |
| 110 // start up, or NONE if neither was returned yet. This is exposed for testing | |
| 111 // only. | |
| 112 EntropySourceReturned entropy_source_returned() const { | |
| 113 return entropy_source_returned_; | |
| 114 } | |
| 94 | 115 |
| 95 // Force the client ID to be generated. This is useful in case it's needed | 116 // Force the client ID to be generated. This is useful in case it's needed |
| 96 // before recording. | 117 // before recording. |
| 97 void ForceClientIdCreation(); | 118 void ForceClientIdCreation(); |
| 98 | 119 |
| 99 // At startup, prefs needs to be called with a list of all the pref names and | 120 // At startup, prefs needs to be called with a list of all the pref names and |
| 100 // types we'll be using. | 121 // types we'll be using. |
| 101 static void RegisterPrefs(PrefService* local_state); | 122 static void RegisterPrefs(PrefService* local_state); |
| 102 | 123 |
| 103 // Set up notifications which indicate that a user is performing work. This is | 124 // Set up notifications which indicate that a user is performing work. This is |
| (...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 455 | 476 |
| 456 // Indicates that an asynchronous reporting step is running. | 477 // Indicates that an asynchronous reporting step is running. |
| 457 // This is used only for debugging. | 478 // This is used only for debugging. |
| 458 bool waiting_for_asynchronous_reporting_step_; | 479 bool waiting_for_asynchronous_reporting_step_; |
| 459 | 480 |
| 460 #if defined(OS_CHROMEOS) | 481 #if defined(OS_CHROMEOS) |
| 461 // The external metric service is used to log ChromeOS UMA events. | 482 // The external metric service is used to log ChromeOS UMA events. |
| 462 scoped_refptr<chromeos::ExternalMetrics> external_metrics_; | 483 scoped_refptr<chromeos::ExternalMetrics> external_metrics_; |
| 463 #endif | 484 #endif |
| 464 | 485 |
| 486 // The last entropy source returned by this service, used for testing. | |
| 487 EntropySourceReturned entropy_source_returned_; | |
| 488 | |
| 465 // Reduntant marker to check that we completed our shutdown, and set the | 489 // Reduntant marker to check that we completed our shutdown, and set the |
| 466 // exited-cleanly bit in the prefs. | 490 // exited-cleanly bit in the prefs. |
| 467 static ShutdownCleanliness clean_shutdown_status_; | 491 static ShutdownCleanliness clean_shutdown_status_; |
| 468 | 492 |
| 469 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, ClientIdCorrectlyFormatted); | 493 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, ClientIdCorrectlyFormatted); |
| 470 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, IsPluginProcess); | 494 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, IsPluginProcess); |
| 471 | 495 |
| 472 DISALLOW_COPY_AND_ASSIGN(MetricsService); | 496 DISALLOW_COPY_AND_ASSIGN(MetricsService); |
| 473 }; | 497 }; |
| 474 | 498 |
| 475 // This class limits and documents access to the IsMetricsReportingEnabled() | 499 // This class limits and documents access to the IsMetricsReportingEnabled() |
| 476 // method. Since the method is private, each user has to be explicitly declared | 500 // method. Since the method is private, each user has to be explicitly declared |
| 477 // as a 'friend' below. | 501 // as a 'friend' below. |
| 478 class MetricsServiceHelper { | 502 class MetricsServiceHelper { |
| 479 private: | 503 private: |
| 480 friend bool prerender::IsOmniboxEnabled(Profile* profile); | 504 friend bool prerender::IsOmniboxEnabled(Profile* profile); |
| 481 friend class extensions::ExtensionDownloader; | 505 friend class extensions::ExtensionDownloader; |
| 482 | 506 |
| 483 // Returns true if prefs::kMetricsReportingEnabled is set. | 507 // Returns true if prefs::kMetricsReportingEnabled is set. |
| 484 static bool IsMetricsReportingEnabled(); | 508 static bool IsMetricsReportingEnabled(); |
| 485 | 509 |
| 486 DISALLOW_IMPLICIT_CONSTRUCTORS(MetricsServiceHelper); | 510 DISALLOW_IMPLICIT_CONSTRUCTORS(MetricsServiceHelper); |
| 487 }; | 511 }; |
| 488 | 512 |
| 489 #endif // CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ | 513 #endif // CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ |
| OLD | NEW |