blob: bffcae2f2fef9badf20204832cc45ae1239f120e [file] [log] [blame]
// Copyright 2015 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 IOS_CHROME_BROWSER_METRICS_IOS_CHROME_METRICS_SERVICES_MANAGER_CLIENT_H_
#define IOS_CHROME_BROWSER_METRICS_IOS_CHROME_METRICS_SERVICES_MANAGER_CLIENT_H_
#include <memory>
#include "base/macros.h"
#include "base/threading/thread_checker.h"
#include "components/metrics_services_manager/metrics_services_manager_client.h"
class PrefService;
namespace metrics {
class EnabledStateProvider;
class MetricsStateManager;
}
// Provides an //ios/chrome-specific implementation of
// MetricsServicesManagerClient.
class IOSChromeMetricsServicesManagerClient
: public metrics_services_manager::MetricsServicesManagerClient {
public:
explicit IOSChromeMetricsServicesManagerClient(PrefService* local_state);
~IOSChromeMetricsServicesManagerClient() override;
private:
// This is defined as a member class to get access to
// IOSChromeMetricsServiceAccessor through
// IOSChromeMetricsServicesManagerClient's friendship.
class IOSChromeEnabledStateProvider;
// metrics_services_manager::MetricsServicesManagerClient:
std::unique_ptr<variations::VariationsService> CreateVariationsService()
override;
std::unique_ptr<metrics::MetricsServiceClient> CreateMetricsServiceClient()
override;
metrics::MetricsStateManager* GetMetricsStateManager() override;
scoped_refptr<network::SharedURLLoaderFactory> GetURLLoaderFactory() override;
bool IsMetricsReportingEnabled() override;
bool IsMetricsConsentGiven() override;
bool IsOffTheRecordSessionActive() override;
// Static helper for |IsOffTheRecordSessionActive()|, suitable for binding
// into callbacks. |true| if any browser states have any incognito WebStates
// in any Browser.
static bool AreIncognitoTabsPresent();
// MetricsStateManager which is passed as a parameter to service constructors.
std::unique_ptr<metrics::MetricsStateManager> metrics_state_manager_;
// EnabledStateProvider to communicate if the client has consented to metrics
// reporting, and if it's enabled.
std::unique_ptr<metrics::EnabledStateProvider> enabled_state_provider_;
// Ensures that all functions are called from the same thread.
base::ThreadChecker thread_checker_;
// Weak pointer to the local state prefs store.
PrefService* local_state_;
DISALLOW_COPY_AND_ASSIGN(IOSChromeMetricsServicesManagerClient);
};
#endif // IOS_CHROME_BROWSER_METRICS_IOS_CHROME_METRICS_SERVICES_MANAGER_CLIENT_H_