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 20 matching lines...) Expand all Loading... |
31 #include "content/public/browser/browser_child_process_observer.h" | 31 #include "content/public/browser/browser_child_process_observer.h" |
32 #include "content/public/browser/notification_observer.h" | 32 #include "content/public/browser/notification_observer.h" |
33 #include "content/public/browser/notification_registrar.h" | 33 #include "content/public/browser/notification_registrar.h" |
34 #include "content/public/browser/user_metrics.h" | 34 #include "content/public/browser/user_metrics.h" |
35 #include "net/url_request/url_fetcher_delegate.h" | 35 #include "net/url_request/url_fetcher_delegate.h" |
36 | 36 |
37 #if defined(OS_ANDROID) | 37 #if defined(OS_ANDROID) |
38 #include "chrome/browser/android/activity_type_ids.h" | 38 #include "chrome/browser/android/activity_type_ids.h" |
39 #endif | 39 #endif |
40 | 40 |
41 class ChromeBrowserMetricsServiceObserver; | |
42 class MetricsReportingScheduler; | 41 class MetricsReportingScheduler; |
43 class PrefService; | 42 class PrefService; |
44 class PrefRegistrySimple; | 43 class PrefRegistrySimple; |
45 class Profile; | |
46 class TemplateURLService; | |
47 | |
48 namespace { | |
49 class CrashesDOMHandler; | |
50 class FlashDOMHandler; | |
51 } | |
52 | 44 |
53 namespace base { | 45 namespace base { |
54 class DictionaryValue; | 46 class DictionaryValue; |
55 class MessageLoopProxy; | 47 class MessageLoopProxy; |
56 } | 48 } |
57 | 49 |
58 namespace variations { | 50 namespace variations { |
59 struct ActiveGroupId; | 51 struct ActiveGroupId; |
60 } | 52 } |
61 | 53 |
62 namespace content { | 54 namespace content { |
63 class RenderProcessHost; | 55 class RenderProcessHost; |
64 class WebContents; | 56 class WebContents; |
65 struct WebPluginInfo; | 57 struct WebPluginInfo; |
66 } | 58 } |
67 | 59 |
68 namespace extensions { | |
69 class ExtensionDownloader; | |
70 class ManifestFetchData; | |
71 class MetricsPrivateGetIsCrashReportingEnabledFunction; | |
72 } | |
73 | |
74 namespace metrics { | 60 namespace metrics { |
75 class MetricsStateManager; | 61 class MetricsStateManager; |
76 } | 62 } |
77 | 63 |
78 namespace net { | 64 namespace net { |
79 class URLFetcher; | 65 class URLFetcher; |
80 } | 66 } |
81 | 67 |
82 namespace prerender { | |
83 bool IsOmniboxEnabled(Profile* profile); | |
84 } | |
85 | |
86 namespace system_logs { | |
87 class ChromeInternalLogSource; | |
88 } | |
89 | |
90 namespace tracked_objects { | 68 namespace tracked_objects { |
91 struct ProcessDataSnapshot; | 69 struct ProcessDataSnapshot; |
92 } | 70 } |
93 | 71 |
94 // A Field Trial and its selected group, which represent a particular | 72 // A Field Trial and its selected group, which represent a particular |
95 // Chrome configuration state. For example, the trial name could map to | 73 // Chrome configuration state. For example, the trial name could map to |
96 // a preference name, and the group name could map to a preference value. | 74 // a preference name, and the group name could map to a preference value. |
97 struct SyntheticTrialGroup { | 75 struct SyntheticTrialGroup { |
98 public: | 76 public: |
99 ~SyntheticTrialGroup(); | 77 ~SyntheticTrialGroup(); |
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
583 static ShutdownCleanliness clean_shutdown_status_; | 561 static ShutdownCleanliness clean_shutdown_status_; |
584 | 562 |
585 // Field trial groups that map to Chrome configuration states. | 563 // Field trial groups that map to Chrome configuration states. |
586 SyntheticTrialGroups synthetic_trial_groups_; | 564 SyntheticTrialGroups synthetic_trial_groups_; |
587 | 565 |
588 ObserverList<MetricsServiceObserver> observers_; | 566 ObserverList<MetricsServiceObserver> observers_; |
589 | 567 |
590 // Confirms single-threaded access to |observers_| in debug builds. | 568 // Confirms single-threaded access to |observers_| in debug builds. |
591 base::ThreadChecker thread_checker_; | 569 base::ThreadChecker thread_checker_; |
592 | 570 |
593 friend class MetricsServiceHelper; | 571 friend class ChromeMetricsServiceAccessor; |
594 | 572 |
595 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, IsPluginProcess); | 573 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, IsPluginProcess); |
596 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, MetricsServiceObserver); | 574 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, MetricsServiceObserver); |
597 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, | 575 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, |
598 PermutedEntropyCacheClearedWhenLowEntropyReset); | 576 PermutedEntropyCacheClearedWhenLowEntropyReset); |
599 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, RegisterSyntheticTrial); | 577 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, RegisterSyntheticTrial); |
600 | 578 |
601 DISALLOW_COPY_AND_ASSIGN(MetricsService); | 579 DISALLOW_COPY_AND_ASSIGN(MetricsService); |
602 }; | 580 }; |
603 | 581 |
604 // This class limits and documents access to metrics service helper methods. | |
605 // Since these methods are private, each user has to be explicitly declared | |
606 // as a 'friend' below. | |
607 class MetricsServiceHelper { | |
608 private: | |
609 friend bool prerender::IsOmniboxEnabled(Profile* profile); | |
610 friend class ::ChromeBrowserMetricsServiceObserver; | |
611 friend class ChromeRenderMessageFilter; | |
612 friend class ::CrashesDOMHandler; | |
613 friend class extensions::ExtensionDownloader; | |
614 friend class extensions::ManifestFetchData; | |
615 friend class extensions::MetricsPrivateGetIsCrashReportingEnabledFunction; | |
616 friend class ::FlashDOMHandler; | |
617 friend class system_logs::ChromeInternalLogSource; | |
618 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, MetricsReportingEnabled); | |
619 FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, CrashReportingEnabled); | |
620 | |
621 // Returns true if prefs::kMetricsReportingEnabled is set. | |
622 // TODO(asvitkine): Consolidate the method in MetricsStateManager. | |
623 // TODO(asvitkine): This function does not report the correct value on | |
624 // Android and ChromeOS, see http://crbug.com/362192. | |
625 static bool IsMetricsReportingEnabled(); | |
626 | |
627 // Returns true if crash reporting is enabled. This is set at the platform | |
628 // level for Android and ChromeOS, and otherwise is the same as | |
629 // IsMetricsReportingEnabled for desktop Chrome. | |
630 static bool IsCrashReportingEnabled(); | |
631 | |
632 // Registers/unregisters |observer| to receive MetricsLog notifications | |
633 // from metrics service. | |
634 static void AddMetricsServiceObserver(MetricsServiceObserver* observer); | |
635 static void RemoveMetricsServiceObserver(MetricsServiceObserver* observer); | |
636 | |
637 DISALLOW_IMPLICIT_CONSTRUCTORS(MetricsServiceHelper); | |
638 }; | |
639 | |
640 #endif // CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ | 582 #endif // CHROME_BROWSER_METRICS_METRICS_SERVICE_H_ |
OLD | NEW |