123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- // Copyright 2014 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef COMPONENTS_METRICS_METRICS_SERVICE_CLIENT_H_
- #define COMPONENTS_METRICS_METRICS_SERVICE_CLIENT_H_
- #include <stdint.h>
- #include <memory>
- #include <string>
- #include "base/callback.h"
- #include "base/time/time.h"
- #include "components/metrics/metrics_log_store.h"
- #include "components/metrics/metrics_log_uploader.h"
- #include "components/metrics/metrics_reporting_default_state.h"
- #include "third_party/metrics_proto/system_profile.pb.h"
- #include "url/gurl.h"
- namespace ukm {
- class UkmService;
- }
- namespace network_time {
- class NetworkTimeTracker;
- }
- namespace variations {
- class SyntheticTrialRegistry;
- }
- namespace metrics {
- class MetricsLogUploader;
- class MetricsService;
- // An abstraction of operations that depend on the embedder's (e.g. Chrome)
- // environment.
- class MetricsServiceClient {
- public:
- MetricsServiceClient();
- MetricsServiceClient(const MetricsServiceClient&) = delete;
- MetricsServiceClient& operator=(const MetricsServiceClient&) = delete;
- virtual ~MetricsServiceClient();
- // Returns the synthetic trial registry shared by MetricsService and
- // UkmService.
- virtual variations::SyntheticTrialRegistry* GetSyntheticTrialRegistry() = 0;
- // Returns the MetricsService instance that this client is associated with.
- // With the exception of testing contexts, the returned instance must be valid
- // for the lifetime of this object (typically, the embedder's client
- // implementation will own the MetricsService instance being returned).
- virtual MetricsService* GetMetricsService() = 0;
- // Returns the UkmService instance that this client is associated with.
- virtual ukm::UkmService* GetUkmService();
- // Returns true if metrics should be uploaded for the given |user_id|, which
- // corresponds to the |user_id| field in ChromeUserMetricsExtension.
- virtual bool ShouldUploadMetricsForUserId(uint64_t user_id);
- // Registers the client id with other services (e.g. crash reporting), called
- // when metrics recording gets enabled.
- virtual void SetMetricsClientId(const std::string& client_id) = 0;
- // Returns the product value to use in uploaded reports, which will be used to
- // set the ChromeUserMetricsExtension.product field. See comments on that
- // field on why it's an int32_t rather than an enum.
- virtual int32_t GetProduct() = 0;
- // Returns the current application locale (e.g. "en-US").
- virtual std::string GetApplicationLocale() = 0;
- // Return a NetworkTimeTracker for access to a server-provided clock.
- virtual const network_time::NetworkTimeTracker* GetNetworkTimeTracker() = 0;
- // Retrieves the brand code string associated with the install, returning
- // false if no brand code is available.
- virtual bool GetBrand(std::string* brand_code) = 0;
- // Returns the release channel (e.g. stable, beta, etc) of the application.
- virtual SystemProfileProto::Channel GetChannel() = 0;
- // Returns true if the application is on the extended stable channel.
- virtual bool IsExtendedStableChannel() = 0;
- // Returns the version of the application as a string.
- virtual std::string GetVersionString() = 0;
- // Called by the metrics service when a new environment has been recorded.
- // Takes the serialized environment as a parameter. The contents of
- // |serialized_environment| are consumed by the call, but the caller maintains
- // ownership.
- virtual void OnEnvironmentUpdate(std::string* serialized_environment) {}
- // Called prior to a metrics log being closed, allowing the client to collect
- // extra histograms that will go in that log. Asynchronous API - the client
- // implementation should call |done_callback| when complete.
- virtual void CollectFinalMetricsForLog(base::OnceClosure done_callback) = 0;
- // Get the URL of the metrics server.
- virtual GURL GetMetricsServerUrl();
- // Get the fallback HTTP URL of the metrics server.
- virtual GURL GetInsecureMetricsServerUrl();
- // Creates a MetricsLogUploader with the specified parameters (see comments on
- // MetricsLogUploader for details).
- virtual std::unique_ptr<MetricsLogUploader> CreateUploader(
- const GURL& server_url,
- const GURL& insecure_server_url,
- base::StringPiece mime_type,
- metrics::MetricsLogUploader::MetricServiceType service_type,
- const MetricsLogUploader::UploadCallback& on_upload_complete) = 0;
- // Returns the interval between upload attempts. Checks if debugging flags
- // have been set, otherwise defaults to GetStandardUploadInterval().
- base::TimeDelta GetUploadInterval();
- // Returns the standard interval between upload attempts.
- virtual base::TimeDelta GetStandardUploadInterval() = 0;
- // Whether or not the MetricsService should start up quickly and upload the
- // initial report quickly. By default, this work may be delayed by some
- // amount. Only the default behavior should be used in production, but clients
- // can override this in tests if tests need to make assertions on the log
- // data.
- virtual bool ShouldStartUpFastForTesting() const;
- // Called when loading state changed, e.g. start/stop loading.
- virtual void LoadingStateChanged(bool is_loading) {}
- // Called on renderer crashes in some embedders (e.g., those that do not use
- // //content and thus do not have //content's notification system available
- // as a mechanism for observing renderer crashes).
- virtual void OnRendererProcessCrash() {}
- // Returns whether metrics reporting is managed by policy.
- virtual bool IsReportingPolicyManaged();
- // Gets information about the default value for the metrics reporting checkbox
- // shown during first-run.
- virtual EnableMetricsDefault GetMetricsReportingDefaultState();
- // Returns whether cellular logic is enabled for metrics reporting.
- virtual bool IsUMACellularUploadLogicEnabled();
- // Returns whether the allowlist for external experiment ids is enabled. Some
- // embedders like WebLayer disable it. For Chrome, it should be enabled.
- virtual bool IsExternalExperimentAllowlistEnabled();
- // Returns true iff UKM is allowed for all profiles.
- // See //components/ukm/observers/ukm_consent_state_observer.h for details.
- virtual bool IsUkmAllowedForAllProfiles();
- // Returns true iff UKM is allowed to capture extensions for all profiles.
- // See //components/ukm/observers/ukm_consent_state_observer.h for details.
- virtual bool IsUkmAllowedWithExtensionsForAllProfiles();
- // Returns whether UKM notification listeners were attached to all profiles.
- virtual bool AreNotificationListenersEnabledOnAllProfiles();
- // Gets the app package name (as defined by the embedder). Since package name
- // is only meaningful for Android, other platforms should return the empty
- // string (this is the same as the default behavior). If the package name
- // should not be logged for privacy/fingerprintability reasons, the embedder
- // should return the empty string.
- virtual std::string GetAppPackageNameIfLoggable();
- // Gets the key used to sign metrics uploads. This will be used to compute an
- // HMAC-SHA256 signature of an uploaded log.
- virtual std::string GetUploadSigningKey();
- // Checks if the cloned install detector says that client ids should be reset.
- virtual bool ShouldResetClientIdsOnClonedInstall();
- // Specifies local log storage requirements and restrictions.
- virtual MetricsLogStore::StorageLimits GetStorageLimits() const;
- // Sets the callback to run MetricsServiceManager::UpdateRunningServices.
- void SetUpdateRunningServicesCallback(const base::RepeatingClosure& callback);
- // Notify MetricsServiceManager to UpdateRunningServices using callback.
- void UpdateRunningServices();
- // Checks if the user has forced metrics collection on via the override flag.
- bool IsMetricsReportingForceEnabled() const;
- // Initializes per-user metrics collection. For more details what per-user
- // metrics collection is, refer to MetricsService::InitPerUserMetrics.
- //
- // Since the concept of a user is only applicable in Ash Chrome, this function
- // should no-op for other platforms.
- virtual void InitPerUserMetrics() {}
- // Updates the current user's metrics consent. This allows embedders to update
- // the user consent. If there is no current user, then this function will
- // no-op.
- //
- // Since the concept of a user is only applicable on Ash Chrome, this function
- // should no-op for other platforms.
- virtual void UpdateCurrentUserMetricsConsent(bool user_metrics_consent) {}
- // Returns the current user metrics consent if it should be applied to decide
- // the current metrics reporting state. This allows embedders to determine
- // when a user metric consent state should not be applied (ie no logged in
- // user or managed policy).
- //
- // Will return absl::nullopt if there is no current user or current user
- // metrics consent should not be applied to determine metrics reporting state.
- //
- // Not all platforms support per-user consent. If per-user consent is not
- // supported, this function should return absl::nullopt.
- virtual absl::optional<bool> GetCurrentUserMetricsConsent() const;
- // Returns the current user id.
- //
- // Will return absl::nullopt if there is no current user, metrics reporting is
- // disabled, or current user should not have a user id.
- //
- // Not all platforms support per-user consent. If per-user consent is not
- // supported, this function should return absl::nullopt.
- virtual absl::optional<std::string> GetCurrentUserId() const;
- private:
- base::RepeatingClosure update_running_services_;
- };
- } // namespace metrics
- #endif // COMPONENTS_METRICS_METRICS_SERVICE_CLIENT_H_
|