blob: 08b9fcb36e5de144ddde41fe618898d04e18fe8c [file] [log] [blame]
// Copyright 2019 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.
#include "chrome/browser/metrics/chrome_metrics_services_manager_client.h"
#include "base/base_switches.h"
#include "base/command_line.h"
#include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
#include "components/metrics/enabled_state_provider.h"
#include "components/metrics/metrics_pref_names.h"
#include "components/metrics/metrics_reporting_default_state.h"
#include "components/metrics/metrics_service_accessor.h"
#include "components/prefs/pref_registry_simple.h"
#include "components/prefs/testing_pref_service.h"
#include "testing/gtest/include/gtest/gtest.h"
TEST(ChromeMetricsServicesManagerClientTest, ForceTrialsDisablesReporting) {
TestingPrefServiceSimple local_state;
metrics::RegisterMetricsReportingStatePrefs(local_state.registry());
// First, test with UMA reporting setting defaulting to off.
local_state.registry()->RegisterBooleanPref(
metrics::prefs::kMetricsReportingEnabled, false);
// Force the pref to be used, even in unofficial builds.
ChromeMetricsServiceAccessor::SetForceIsMetricsReportingEnabledPrefLookup(
true);
ChromeMetricsServicesManagerClient client(&local_state);
const metrics::EnabledStateProvider& provider =
client.GetEnabledStateProviderForTesting();
metrics_services_manager::MetricsServicesManagerClient* base_client = &client;
// The provider and client APIs should agree.
EXPECT_EQ(provider.IsConsentGiven(), base_client->IsMetricsConsentGiven());
EXPECT_EQ(provider.IsReportingEnabled(),
base_client->IsMetricsReportingEnabled());
// Both consent and reporting should be false.
EXPECT_FALSE(provider.IsConsentGiven());
EXPECT_FALSE(provider.IsReportingEnabled());
// Set the pref to true.
local_state.SetBoolean(metrics::prefs::kMetricsReportingEnabled, true);
// The provider and client APIs should agree.
EXPECT_EQ(provider.IsConsentGiven(), base_client->IsMetricsConsentGiven());
EXPECT_EQ(provider.IsReportingEnabled(),
base_client->IsMetricsReportingEnabled());
// Both consent and reporting should be true.
EXPECT_TRUE(provider.IsConsentGiven());
EXPECT_TRUE(provider.IsReportingEnabled());
// Set --force-fieldtrials= command-line flag, which should disable reporting
// but not consent.
base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
switches::kForceFieldTrials, "Foo/Bar");
// The provider and client APIs should agree.
EXPECT_EQ(provider.IsConsentGiven(), base_client->IsMetricsConsentGiven());
EXPECT_EQ(provider.IsReportingEnabled(),
base_client->IsMetricsReportingEnabled());
// Consent should be true but reporting should be false.
EXPECT_TRUE(provider.IsConsentGiven());
EXPECT_FALSE(provider.IsReportingEnabled());
}