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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 struct WebPluginInfo; | 62 struct WebPluginInfo; |
63 } | 63 } |
64 | 64 |
65 namespace extensions { | 65 namespace extensions { |
66 class ExtensionDownloader; | 66 class ExtensionDownloader; |
67 class ManifestFetchData; | 67 class ManifestFetchData; |
68 class MetricsPrivateGetIsCrashReportingEnabledFunction; | 68 class MetricsPrivateGetIsCrashReportingEnabledFunction; |
69 } | 69 } |
70 | 70 |
71 namespace metrics { | 71 namespace metrics { |
72 class MetricsStateManager; | 72 class ClonedInstallDetector; |
73 } | 73 } |
74 | 74 |
75 namespace net { | 75 namespace net { |
76 class URLFetcher; | 76 class URLFetcher; |
77 } | 77 } |
78 | 78 |
79 namespace prerender { | 79 namespace prerender { |
80 bool IsOmniboxEnabled(Profile* profile); | 80 bool IsOmniboxEnabled(Profile* profile); |
81 } | 81 } |
82 | 82 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 UNINITIALIZED_PHASE = 0, | 120 UNINITIALIZED_PHASE = 0, |
121 START_METRICS_RECORDING = 100, | 121 START_METRICS_RECORDING = 100, |
122 CREATE_PROFILE = 200, | 122 CREATE_PROFILE = 200, |
123 STARTUP_TIMEBOMB_ARM = 300, | 123 STARTUP_TIMEBOMB_ARM = 300, |
124 THREAD_WATCHER_START = 400, | 124 THREAD_WATCHER_START = 400, |
125 MAIN_MESSAGE_LOOP_RUN = 500, | 125 MAIN_MESSAGE_LOOP_RUN = 500, |
126 SHUTDOWN_TIMEBOMB_ARM = 600, | 126 SHUTDOWN_TIMEBOMB_ARM = 600, |
127 SHUTDOWN_COMPLETE = 700, | 127 SHUTDOWN_COMPLETE = 700, |
128 }; | 128 }; |
129 | 129 |
| 130 enum ReportingState { |
| 131 REPORTING_ENABLED, |
| 132 REPORTING_DISABLED, |
| 133 }; |
| 134 |
130 MetricsService(); | 135 MetricsService(); |
131 virtual ~MetricsService(); | 136 virtual ~MetricsService(); |
132 | 137 |
133 // Initializes metrics recording state. Updates various bookkeeping values in | 138 // Initializes metrics recording state. Updates various bookkeeping values in |
134 // prefs and sets up the scheduler. This is a separate function rather than | 139 // prefs and sets up the scheduler. This is a separate function rather than |
135 // being done by the constructor so that field trials could be created before | 140 // being done by the constructor so that field trials could be created before |
136 // this is run. | 141 // this is run. Takes |reporting_state| parameter which specifies whether UMA |
137 void InitializeMetricsRecordingState(); | 142 // is enabled. |
| 143 void InitializeMetricsRecordingState(ReportingState reporting_state); |
138 | 144 |
139 // Starts the metrics system, turning on recording and uploading of metrics. | 145 // Starts the metrics system, turning on recording and uploading of metrics. |
140 // Should be called when starting up with metrics enabled, or when metrics | 146 // Should be called when starting up with metrics enabled, or when metrics |
141 // are turned on. | 147 // are turned on. |
142 void Start(); | 148 void Start(); |
143 | 149 |
144 // If metrics reporting is enabled, starts the metrics service. Returns | |
145 // whether the metrics service was started. | |
146 bool StartIfMetricsReportingEnabled(); | |
147 | |
148 // Starts the metrics system in a special test-only mode. Metrics won't ever | 150 // Starts the metrics system in a special test-only mode. Metrics won't ever |
149 // be uploaded or persisted in this mode, but metrics will be recorded in | 151 // be uploaded or persisted in this mode, but metrics will be recorded in |
150 // memory. | 152 // memory. |
151 void StartRecordingForTests(); | 153 void StartRecordingForTests(); |
152 | 154 |
153 // Shuts down the metrics system. Should be called at shutdown, or if metrics | 155 // Shuts down the metrics system. Should be called at shutdown, or if metrics |
154 // are turned off. | 156 // are turned off. |
155 void Stop(); | 157 void Stop(); |
156 | 158 |
157 // Enable/disable transmission of accumulated logs and crash reports (dumps). | 159 // Enable/disable transmission of accumulated logs and crash reports (dumps). |
158 // Calling Start() automatically enables reporting, but sending is | 160 // Calling Start() automatically enables reporting, but sending is |
159 // asyncronous so this can be called immediately after Start() to prevent | 161 // asyncronous so this can be called immediately after Start() to prevent |
160 // any uploading. | 162 // any uploading. |
161 void EnableReporting(); | 163 void EnableReporting(); |
162 void DisableReporting(); | 164 void DisableReporting(); |
163 | 165 |
164 // Returns the client ID for this client, or the empty string if metrics | 166 // Returns the client ID for this client, or the empty string if metrics |
165 // recording is not currently running. | 167 // recording is not currently running. |
166 std::string GetClientId(); | 168 std::string GetClientId(); |
167 | 169 |
168 // Returns the preferred entropy provider used to seed persistent activities | 170 // Returns the preferred entropy provider used to seed persistent activities |
169 // based on whether or not metrics reporting will be permitted on this client. | 171 // based on whether or not metrics reporting will be permitted on this client. |
| 172 // The caller must determine if metrics reporting will be enabled for this |
| 173 // client and pass that state in as |reporting_will_be_enabled|. |
170 // | 174 // |
171 // If metrics reporting is enabled, this method returns an entropy provider | 175 // If |reporting_will_be_enabled| is true, this method returns an entropy |
172 // that has a high source of entropy, partially based on the client ID. | 176 // provider that has a high source of entropy, partially based on the client |
173 // Otherwise, it returns an entropy provider that is based on a low entropy | 177 // ID. Otherwise, an entropy provider that is based on a low entropy source |
174 // source. | 178 // is returned. |
175 scoped_ptr<const base::FieldTrial::EntropyProvider> CreateEntropyProvider(); | 179 // |
| 180 // Note that this reporting state can not be checked by reporting_active() |
| 181 // because this method may need to be called before the MetricsService needs |
| 182 // to be started. |
| 183 scoped_ptr<const base::FieldTrial::EntropyProvider> CreateEntropyProvider( |
| 184 ReportingState reporting_state); |
| 185 |
| 186 // Force the client ID to be generated. This is useful in case it's needed |
| 187 // before recording. |
| 188 void ForceClientIdCreation(); |
176 | 189 |
177 // At startup, prefs needs to be called with a list of all the pref names and | 190 // At startup, prefs needs to be called with a list of all the pref names and |
178 // types we'll be using. | 191 // types we'll be using. |
179 static void RegisterPrefs(PrefRegistrySimple* registry); | 192 static void RegisterPrefs(PrefRegistrySimple* registry); |
180 #if defined(OS_ANDROID) | 193 #if defined(OS_ANDROID) |
181 static void RegisterPrefsAndroid(PrefRegistrySimple* registry); | 194 static void RegisterPrefsAndroid(PrefRegistrySimple* registry); |
182 #endif // defined(OS_ANDROID) | 195 #endif // defined(OS_ANDROID) |
183 | 196 |
184 // Set up notifications which indicate that a user is performing work. This is | 197 // Set up notifications which indicate that a user is performing work. This is |
185 // useful to allow some features to sleep, until the machine becomes active, | 198 // useful to allow some features to sleep, until the machine becomes active, |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
292 SENDING_INITIAL_METRICS_LOG, // Initial metrics log being sent. | 305 SENDING_INITIAL_METRICS_LOG, // Initial metrics log being sent. |
293 SENDING_OLD_LOGS, // Sending unsent logs from last session. | 306 SENDING_OLD_LOGS, // Sending unsent logs from last session. |
294 SENDING_CURRENT_LOGS, // Sending ongoing logs as they accrue. | 307 SENDING_CURRENT_LOGS, // Sending ongoing logs as they accrue. |
295 }; | 308 }; |
296 | 309 |
297 enum ShutdownCleanliness { | 310 enum ShutdownCleanliness { |
298 CLEANLY_SHUTDOWN = 0xdeadbeef, | 311 CLEANLY_SHUTDOWN = 0xdeadbeef, |
299 NEED_TO_SHUTDOWN = ~CLEANLY_SHUTDOWN | 312 NEED_TO_SHUTDOWN = ~CLEANLY_SHUTDOWN |
300 }; | 313 }; |
301 | 314 |
| 315 // Designates which entropy source was returned from this MetricsService. |
| 316 // This is used for testing to validate that we return the correct source |
| 317 // depending on the state of the service. |
| 318 enum EntropySourceReturned { |
| 319 LAST_ENTROPY_NONE, |
| 320 LAST_ENTROPY_LOW, |
| 321 LAST_ENTROPY_HIGH, |
| 322 }; |
| 323 |
302 struct ChildProcessStats; | 324 struct ChildProcessStats; |
303 | 325 |
304 typedef std::vector<SyntheticTrialGroup> SyntheticTrialGroups; | 326 typedef std::vector<SyntheticTrialGroup> SyntheticTrialGroups; |
305 | 327 |
306 // First part of the init task. Called on the FILE thread to load hardware | 328 // First part of the init task. Called on the FILE thread to load hardware |
307 // class information. | 329 // class information. |
308 static void InitTaskGetHardwareClass(base::WeakPtr<MetricsService> self, | 330 static void InitTaskGetHardwareClass(base::WeakPtr<MetricsService> self, |
309 base::MessageLoopProxy* target_loop); | 331 base::MessageLoopProxy* target_loop); |
310 | 332 |
311 // Callback from InitTaskGetHardwareClass() that continues the init task by | 333 // Callback from InitTaskGetHardwareClass() that continues the init task by |
(...skipping 27 matching lines...) Expand all Loading... |
339 // Get the amount of uptime since this process started and since the last | 361 // Get the amount of uptime since this process started and since the last |
340 // call to this function. Also updates the cumulative uptime metric (stored | 362 // call to this function. Also updates the cumulative uptime metric (stored |
341 // as a pref) for uninstall. Uptimes are measured using TimeTicks, which | 363 // as a pref) for uninstall. Uptimes are measured using TimeTicks, which |
342 // guarantees that it is monotonic and does not jump if the user changes | 364 // guarantees that it is monotonic and does not jump if the user changes |
343 // his/her clock. The TimeTicks implementation also makes the clock not | 365 // his/her clock. The TimeTicks implementation also makes the clock not |
344 // count time the computer is suspended. | 366 // count time the computer is suspended. |
345 void GetUptimes(PrefService* pref, | 367 void GetUptimes(PrefService* pref, |
346 base::TimeDelta* incremental_uptime, | 368 base::TimeDelta* incremental_uptime, |
347 base::TimeDelta* uptime); | 369 base::TimeDelta* uptime); |
348 | 370 |
| 371 // Reset the client id and low entropy source if the kMetricsResetMetricIDs |
| 372 // pref is true. |
| 373 void ResetMetricsIDsIfNecessary(); |
| 374 |
| 375 // Returns the low entropy source for this client. This is a random value |
| 376 // that is non-identifying amongst browser clients. This method will |
| 377 // generate the entropy source value if it has not been called before. |
| 378 int GetLowEntropySource(); |
| 379 |
| 380 // Returns the first entropy source that was returned by this service since |
| 381 // start up, or NONE if neither was returned yet. This is exposed for testing |
| 382 // only. |
| 383 EntropySourceReturned entropy_source_returned() const { |
| 384 return entropy_source_returned_; |
| 385 } |
| 386 |
349 // Turns recording on or off. | 387 // Turns recording on or off. |
350 // DisableRecording() also forces a persistent save of logging state (if | 388 // DisableRecording() also forces a persistent save of logging state (if |
351 // anything has been recorded, or transmitted). | 389 // anything has been recorded, or transmitted). |
352 void EnableRecording(); | 390 void EnableRecording(); |
353 void DisableRecording(); | 391 void DisableRecording(); |
354 | 392 |
355 // If in_idle is true, sets idle_since_last_transmission to true. | 393 // If in_idle is true, sets idle_since_last_transmission to true. |
356 // If in_idle is false and idle_since_last_transmission_ is true, sets | 394 // If in_idle is false and idle_since_last_transmission_ is true, sets |
357 // idle_since_last_transmission to false and starts the timer (provided | 395 // idle_since_last_transmission to false and starts the timer (provided |
358 // starting the timer is permitted). | 396 // starting the timer is permitted). |
359 void HandleIdleSinceLastTransmission(bool in_idle); | 397 void HandleIdleSinceLastTransmission(bool in_idle); |
360 | 398 |
361 // Set up client ID, session ID, etc. | 399 // Set up client ID, session ID, etc. |
362 void InitializeMetricsState(); | 400 void InitializeMetricsState(ReportingState reporting_state); |
| 401 |
| 402 // Generates a new client ID to use to identify self to metrics server. |
| 403 static std::string GenerateClientID(); |
363 | 404 |
364 // Schedule the next save of LocalState information. This is called | 405 // Schedule the next save of LocalState information. This is called |
365 // automatically by the task that performs each save to schedule the next one. | 406 // automatically by the task that performs each save to schedule the next one. |
366 void ScheduleNextStateSave(); | 407 void ScheduleNextStateSave(); |
367 | 408 |
368 // Save the LocalState information immediately. This should not be called by | 409 // Save the LocalState information immediately. This should not be called by |
369 // anybody other than the scheduler to avoid doing too many writes. When you | 410 // anybody other than the scheduler to avoid doing too many writes. When you |
370 // make a change, call ScheduleNextStateSave() instead. | 411 // make a change, call ScheduleNextStateSave() instead. |
371 void SaveLocalState(); | 412 void SaveLocalState(); |
372 | 413 |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
464 | 505 |
465 // Returns true if process of type |type| should be counted as a plugin | 506 // Returns true if process of type |type| should be counted as a plugin |
466 // process, and false otherwise. | 507 // process, and false otherwise. |
467 static bool IsPluginProcess(int process_type); | 508 static bool IsPluginProcess(int process_type); |
468 | 509 |
469 // Returns a list of synthetic field trials that were active for the entire | 510 // Returns a list of synthetic field trials that were active for the entire |
470 // duration of the current log. | 511 // duration of the current log. |
471 void GetCurrentSyntheticFieldTrials( | 512 void GetCurrentSyntheticFieldTrials( |
472 std::vector<chrome_variations::ActiveGroupId>* synthetic_trials); | 513 std::vector<chrome_variations::ActiveGroupId>* synthetic_trials); |
473 | 514 |
474 // Used to manage various metrics reporting state prefs, such as client id, | |
475 // low entropy source and whether metrics reporting is enabled. | |
476 scoped_ptr<metrics::MetricsStateManager> state_manager_; | |
477 | |
478 base::ActionCallback action_callback_; | 515 base::ActionCallback action_callback_; |
479 | 516 |
480 content::NotificationRegistrar registrar_; | 517 content::NotificationRegistrar registrar_; |
481 | 518 |
482 // Set to true when |ResetMetricsIDsIfNecessary| is called for the first time. | 519 // Set to true when |ResetMetricsIDsIfNecessary| is called for the first time. |
483 // This prevents multiple resets within the same Chrome session. | 520 // This prevents multiple resets within the same Chrome session. |
484 bool metrics_ids_reset_check_performed_; | 521 bool metrics_ids_reset_check_performed_; |
485 | 522 |
486 // Indicate whether recording and reporting are currently happening. | 523 // Indicate whether recording and reporting are currently happening. |
487 // These should not be set directly, but by calling SetRecording and | 524 // These should not be set directly, but by calling SetRecording and |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
519 | 556 |
520 // The outstanding transmission appears as a URL Fetch operation. | 557 // The outstanding transmission appears as a URL Fetch operation. |
521 scoped_ptr<net::URLFetcher> current_fetch_; | 558 scoped_ptr<net::URLFetcher> current_fetch_; |
522 | 559 |
523 // The TCP/UDP echo server to collect network connectivity stats. | 560 // The TCP/UDP echo server to collect network connectivity stats. |
524 std::string network_stats_server_; | 561 std::string network_stats_server_; |
525 | 562 |
526 // The HTTP pipelining test server. | 563 // The HTTP pipelining test server. |
527 std::string http_pipelining_test_server_; | 564 std::string http_pipelining_test_server_; |
528 | 565 |
| 566 // The identifier that's sent to the server with the log reports. |
| 567 std::string client_id_; |
| 568 |
| 569 // The non-identifying low entropy source value. |
| 570 int low_entropy_source_; |
| 571 |
529 // Whether the MetricsService object has received any notifications since | 572 // Whether the MetricsService object has received any notifications since |
530 // the last time a transmission was sent. | 573 // the last time a transmission was sent. |
531 bool idle_since_last_transmission_; | 574 bool idle_since_last_transmission_; |
532 | 575 |
533 // A number that identifies the how many times the app has been launched. | 576 // A number that identifies the how many times the app has been launched. |
534 int session_id_; | 577 int session_id_; |
535 | 578 |
536 // Maps WebContentses (corresponding to tabs) or Browsers (corresponding to | 579 // Maps WebContentses (corresponding to tabs) or Browsers (corresponding to |
537 // Windows) to a unique integer that we will use to identify them. | 580 // Windows) to a unique integer that we will use to identify them. |
538 // |next_window_id_| is used to track which IDs we have used so far. | 581 // |next_window_id_| is used to track which IDs we have used so far. |
(...skipping 20 matching lines...) Expand all Loading... |
559 bool waiting_for_asynchronous_reporting_step_; | 602 bool waiting_for_asynchronous_reporting_step_; |
560 | 603 |
561 // Number of async histogram fetch requests in progress. | 604 // Number of async histogram fetch requests in progress. |
562 int num_async_histogram_fetches_in_progress_; | 605 int num_async_histogram_fetches_in_progress_; |
563 | 606 |
564 #if defined(OS_CHROMEOS) | 607 #if defined(OS_CHROMEOS) |
565 // The external metric service is used to log ChromeOS UMA events. | 608 // The external metric service is used to log ChromeOS UMA events. |
566 scoped_refptr<chromeos::ExternalMetrics> external_metrics_; | 609 scoped_refptr<chromeos::ExternalMetrics> external_metrics_; |
567 #endif | 610 #endif |
568 | 611 |
| 612 // The last entropy source returned by this service, used for testing. |
| 613 EntropySourceReturned entropy_source_returned_; |
| 614 |
569 // Stores the time of the first call to |GetUptimes()|. | 615 // Stores the time of the first call to |GetUptimes()|. |
570 base::TimeTicks first_updated_time_; | 616 base::TimeTicks first_updated_time_; |
571 | 617 |
572 // Stores the time of the last call to |GetUptimes()|. | 618 // Stores the time of the last call to |GetUptimes()|. |
573 base::TimeTicks last_updated_time_; | 619 base::TimeTicks last_updated_time_; |
574 | 620 |
575 // Execution phase the browser is in. | 621 // Execution phase the browser is in. |
576 static ExecutionPhase execution_phase_; | 622 static ExecutionPhase execution_phase_; |
577 | 623 |
578 // Reduntant marker to check that we completed our shutdown, and set the | 624 // Reduntant marker to check that we completed our shutdown, and set the |
579 // exited-cleanly bit in the prefs. | 625 // exited-cleanly bit in the prefs. |
580 static ShutdownCleanliness clean_shutdown_status_; | 626 static ShutdownCleanliness clean_shutdown_status_; |
581 | 627 |
582 // Field trial groups that map to Chrome configuration states. | 628 // Field trial groups that map to Chrome configuration states. |
583 SyntheticTrialGroups synthetic_trial_groups_; | 629 SyntheticTrialGroups synthetic_trial_groups_; |
584 | 630 |
| 631 scoped_ptr<metrics::ClonedInstallDetector> cloned_install_detector_; |
| 632 |
| 633 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, ClientIdCorrectlyFormatted); |
585 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, IsPluginProcess); | 634 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, IsPluginProcess); |
| 635 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, LowEntropySource0NotReset); |
586 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, | 636 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, |
587 PermutedEntropyCacheClearedWhenLowEntropyReset); | 637 PermutedEntropyCacheClearedWhenLowEntropyReset); |
588 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, RegisterSyntheticTrial); | 638 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, RegisterSyntheticTrial); |
| 639 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, ResetMetricsIDs); |
| 640 FRIEND_TEST_ALL_PREFIXES(MetricsServiceBrowserTest, |
| 641 CheckLowEntropySourceUsed); |
| 642 FRIEND_TEST_ALL_PREFIXES(MetricsServiceReportingTest, |
| 643 CheckHighEntropySourceUsed); |
589 | 644 |
590 DISALLOW_COPY_AND_ASSIGN(MetricsService); | 645 DISALLOW_COPY_AND_ASSIGN(MetricsService); |
591 }; | 646 }; |
592 | 647 |
593 // This class limits and documents access to the IsMetricsReportingEnabled() and | 648 // This class limits and documents access to the IsMetricsReportingEnabled() and |
594 // IsCrashReportingEnabled() methods. Since these methods are private, each user | 649 // IsCrashReportingEnabled() methods. Since these methods are private, each user |
595 // has to be explicitly declared as a 'friend' below. | 650 // has to be explicitly declared as a 'friend' below. |
596 class MetricsServiceHelper { | 651 class MetricsServiceHelper { |
597 private: | 652 private: |
598 friend bool prerender::IsOmniboxEnabled(Profile* profile); | 653 friend bool prerender::IsOmniboxEnabled(Profile* profile); |
599 friend class ChromeRenderMessageFilter; | 654 friend class ChromeRenderMessageFilter; |
600 friend class ::CrashesDOMHandler; | 655 friend class ::CrashesDOMHandler; |
601 friend class extensions::ExtensionDownloader; | 656 friend class extensions::ExtensionDownloader; |
602 friend class extensions::ManifestFetchData; | 657 friend class extensions::ManifestFetchData; |
603 friend class extensions::MetricsPrivateGetIsCrashReportingEnabledFunction; | 658 friend class extensions::MetricsPrivateGetIsCrashReportingEnabledFunction; |
604 friend class ::FlashDOMHandler; | 659 friend class ::FlashDOMHandler; |
605 friend class system_logs::ChromeInternalLogSource; | 660 friend class system_logs::ChromeInternalLogSource; |
606 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, MetricsReportingEnabled); | 661 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, MetricsReportingEnabled); |
607 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, CrashReportingEnabled); | 662 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, CrashReportingEnabled); |
608 | 663 |
609 // Returns true if prefs::kMetricsReportingEnabled is set. | 664 // Returns true if prefs::kMetricsReportingEnabled is set. |
610 // TODO(asvitkine): Consolidate the method in MetricsStateManager. | |
611 // TODO(asvitkine): This function does not report the correct value on | |
612 // Android and ChromeOS, see http://crbug.com/362192. | |
613 static bool IsMetricsReportingEnabled(); | 665 static bool IsMetricsReportingEnabled(); |
614 | 666 |
615 // Returns true if crash reporting is enabled. This is set at the platform | 667 // Returns true if crash reporting is enabled. This is set at the platform |
616 // level for Android and ChromeOS, and otherwise is the same as | 668 // level for Android and ChromeOS, and otherwise is the same as |
617 // IsMetricsReportingEnabled for desktop Chrome. | 669 // IsMetricsReportingEnabled for desktop Chrome. |
618 static bool IsCrashReportingEnabled(); | 670 static bool IsCrashReportingEnabled(); |
619 | 671 |
620 DISALLOW_IMPLICIT_CONSTRUCTORS(MetricsServiceHelper); | 672 DISALLOW_IMPLICIT_CONSTRUCTORS(MetricsServiceHelper); |
621 }; | 673 }; |
622 | 674 |
623 #endif // CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ | 675 #endif // CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ |
OLD | NEW |