| Index: chrome/browser/metrics/metrics_service.h
|
| diff --git a/chrome/browser/metrics/metrics_service.h b/chrome/browser/metrics/metrics_service.h
|
| index 82c3c30d6f8146a804ebafab5696be2e6d018a68..4e214e57f870e266b19a4d7936b44115f0be32f7 100644
|
| --- a/chrome/browser/metrics/metrics_service.h
|
| +++ b/chrome/browser/metrics/metrics_service.h
|
| @@ -18,6 +18,7 @@
|
| #include "base/memory/weak_ptr.h"
|
| #include "base/metrics/field_trial.h"
|
| #include "base/metrics/user_metrics.h"
|
| +#include "base/observer_list.h"
|
| #include "base/process/kill.h"
|
| #include "base/time/time.h"
|
| #include "chrome/browser/metrics/metrics_log.h"
|
| @@ -36,6 +37,7 @@
|
| #include "chrome/browser/chromeos/external_metrics.h"
|
| #endif
|
|
|
| +class ChromeBrowserMetricsLogObserver;
|
| class MetricsReportingScheduler;
|
| class PrefService;
|
| class PrefRegistrySimple;
|
| @@ -108,6 +110,19 @@ struct SyntheticTrialGroup {
|
| SyntheticTrialGroup(uint32 trial, uint32 group);
|
| };
|
|
|
| +class MetricsLogObserver {
|
| + public:
|
| + // Will be called when a new MetricsLog is created.
|
| + virtual void OnNewMetricsLog() = 0;
|
| +
|
| + protected:
|
| + MetricsLogObserver() {}
|
| + virtual ~MetricsLogObserver() {}
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(MetricsLogObserver);
|
| +};
|
| +
|
| class MetricsService
|
| : public chrome_browser_metrics::TrackingSynchronizerObserver,
|
| public content::BrowserChildProcessObserver,
|
| @@ -402,6 +417,11 @@ class MetricsService
|
| // Generates a new client ID to use to identify self to metrics server.
|
| static std::string GenerateClientID();
|
|
|
| + // Registers/Unregsiters |observer| to receive MetricsLog notifications.
|
| + void AddMetricsLogObserver(MetricsLogObserver* observer);
|
| + void RemoveMetricsLogObserver(MetricsLogObserver* observer);
|
| + void NotifyOnNewMetricsLog();
|
| +
|
| // Schedule the next save of LocalState information. This is called
|
| // automatically by the task that performs each save to schedule the next one.
|
| void ScheduleNextStateSave();
|
| @@ -628,8 +648,13 @@ class MetricsService
|
| // Field trial groups that map to Chrome configuration states.
|
| SyntheticTrialGroups synthetic_trial_groups_;
|
|
|
| + // Observers of MetricsLog.
|
| + ObserverList<MetricsLogObserver> metrics_log_observers_;
|
| +
|
| scoped_ptr<metrics::ClonedInstallDetector> cloned_install_detector_;
|
|
|
| + friend class MetricsServiceHelper;
|
| +
|
| FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, ClientIdCorrectlyFormatted);
|
| FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, IsPluginProcess);
|
| FRIEND_TEST_ALL_PREFIXES(MetricsServiceTest, LowEntropySource0NotReset);
|
| @@ -645,13 +670,14 @@ class MetricsService
|
| DISALLOW_COPY_AND_ASSIGN(MetricsService);
|
| };
|
|
|
| -// This class limits and documents access to the IsMetricsReportingEnabled() and
|
| -// IsCrashReportingEnabled() methods. Since these methods are private, each user
|
| -// has to be explicitly declared as a 'friend' below.
|
| +// This class limits and documents access to metrics service helper methods.
|
| +// Since these methods are private, each user has to be explicitly declared
|
| +// as a 'friend' below.
|
| class MetricsServiceHelper {
|
| private:
|
| friend bool prerender::IsOmniboxEnabled(Profile* profile);
|
| friend class ChromeRenderMessageFilter;
|
| + friend class ::ChromeBrowserMetricsLogObserver;
|
| friend class ::CrashesDOMHandler;
|
| friend class extensions::ExtensionDownloader;
|
| friend class extensions::ManifestFetchData;
|
| @@ -669,6 +695,11 @@ class MetricsServiceHelper {
|
| // IsMetricsReportingEnabled for desktop Chrome.
|
| static bool IsCrashReportingEnabled();
|
|
|
| + // Registers/Unregsiters |observer| to receive MetricsLog notifications
|
| + // from metric service.
|
| + static void AddMetricsLogObserver(MetricsLogObserver* observer);
|
| + static void RemoveMetricsLogObserver(MetricsLogObserver* observer);
|
| +
|
| DISALLOW_IMPLICIT_CONSTRUCTORS(MetricsServiceHelper);
|
| };
|
|
|
|
|