Chromium Code Reviews| Index: chrome/browser/permissions/permission_uma_util_unittest.cc |
| diff --git a/chrome/browser/permissions/permission_uma_util_unittest.cc b/chrome/browser/permissions/permission_uma_util_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..56a0983b884cc0651e0ad290c2b54760d15a7d87 |
| --- /dev/null |
| +++ b/chrome/browser/permissions/permission_uma_util_unittest.cc |
| @@ -0,0 +1,160 @@ |
| +// Copyright 2016 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/permissions/permission_uma_util.h" |
| + |
| +#include "base/test/scoped_command_line.h" |
| +#include "chrome/browser/signin/fake_signin_manager_builder.h" |
| +#include "chrome/browser/signin/signin_manager_factory.h" |
| +#include "chrome/browser/sync/profile_sync_service_factory.h" |
| +#include "chrome/common/chrome_switches.h" |
| +#include "chrome/common/pref_names.h" |
| +#include "chrome/test/base/testing_profile.h" |
| +#include "components/browser_sync/browser/profile_sync_service.h" |
| +#include "components/browser_sync/common/browser_sync_switches.h" |
| +#include "components/prefs/pref_service.h" |
| +#include "components/sync_driver/glue/sync_backend_host_mock.h" |
| +#include "content/public/test/test_browser_thread_bundle.h" |
| +#include "sync/internal_api/public/base/model_type.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +namespace { |
| +constexpr char kTestingGaiaId[] = "gaia_id"; |
| +constexpr char kTestingUsername[] = "fake_username"; |
| +} // namespace |
| + |
| +class PermissionUmaUtilTest : public testing::Test { |
| + protected: |
| + PermissionUmaUtilTest() {} |
| + |
| + static bool IsOptedIntoPermissionActionReporting(Profile* profile) { |
| + return PermissionUmaUtil::IsOptedIntoPermissionActionReporting(profile); |
| + } |
| + |
| + void SetUp() override { profile_.reset(new TestingProfile()); } |
| + |
| + void FakeSignIn() { |
| + SigninManagerBase* signin_manager = |
| + static_cast<FakeSigninManagerForTesting*>( |
|
Lei Zhang
2016/07/15 00:26:07
As mentioned on the previous CL, this only works i
stefanocs
2016/07/15 01:05:02
Yes, you were right, I have added this to the prof
|
| + SigninManagerFactory::GetForProfile(profile())); |
| + signin_manager->SetAuthenticatedAccountInfo(kTestingGaiaId, |
| + kTestingUsername); |
| + // Attach a sync backend to the profile sync service. |
| + GetProfileSyncService()->backend_.reset( |
|
pavely
2016/07/14 19:29:28
Your code in permission_uma_util.cc relies on inte
stefanocs
2016/07/15 01:05:02
Acknowledged.
|
| + new browser_sync::SyncBackendHostMock()); |
| + GetProfileSyncService()->backend_initialized_ = true; |
| + } |
| + |
| + void SetKeepEverythingSyncedFalse() { |
| + GetProfileSyncService()->sync_prefs_.SetKeepEverythingSynced(false); |
|
pavely
2016/07/14 19:29:28
You can create SyncPrefs object on the stack. No n
stefanocs
2016/07/15 01:05:02
Done.
|
| + } |
| + |
| + void SetSafeBrowsing(bool enabled) { |
| + PrefService* preferences = profile_->GetPrefs(); |
| + preferences->SetBoolean(prefs::kSafeBrowsingEnabled, enabled); |
| + } |
| + |
| + ProfileSyncService* GetProfileSyncService() { |
| + return ProfileSyncServiceFactory::GetForProfile(profile()); |
| + } |
| + |
| + Profile* profile() { return profile_.get(); } |
| + |
| + private: |
| + content::TestBrowserThreadBundle thread_bundle_; |
| + std::unique_ptr<Profile> profile_; |
| +}; |
| + |
| +// Test that PermissionUmaUtil::IsOptedIntoPermissionActionReporting returns |
| +// true if Safe Browsing is enabled, Permission Action Reporting flag is |
| +// enabled, not in incognito mode and signed in with default sync preferences. |
| +TEST_F(PermissionUmaUtilTest, IsOptedIntoPermissionActionReportingSignInCheck) { |
| + base::test::ScopedCommandLine scoped_command_line; |
| + SetSafeBrowsing(true); |
| + scoped_command_line.GetProcessCommandLine()->AppendSwitch( |
| + switches::kEnablePermissionActionReporting); |
| + EXPECT_FALSE(IsOptedIntoPermissionActionReporting(profile())); |
| + |
| + FakeSignIn(); |
| + EXPECT_FALSE(IsOptedIntoPermissionActionReporting( |
| + profile()->GetOffTheRecordProfile())); |
| + EXPECT_TRUE(IsOptedIntoPermissionActionReporting(profile())); |
| +} |
| + |
| +// Test that PermissionUmaUtil::IsOptedIntoPermissionActionReporting returns |
| +// false if Permission Action Reporting is not enabled. |
| +TEST_F(PermissionUmaUtilTest, IsOptedIntoPermissionActionReportingFlagCheck) { |
| + SetSafeBrowsing(true); |
| + FakeSignIn(); |
| + { |
| + base::test::ScopedCommandLine scoped_command_line; |
| + scoped_command_line.GetProcessCommandLine()->AppendSwitch( |
| + switches::kEnablePermissionActionReporting); |
| + EXPECT_TRUE(IsOptedIntoPermissionActionReporting(profile())); |
| + } // Reset the command line. |
| + |
| + EXPECT_FALSE(IsOptedIntoPermissionActionReporting(profile())); |
| + |
| + base::test::ScopedCommandLine scoped_command_line; |
| + scoped_command_line.GetProcessCommandLine()->AppendSwitch( |
| + switches::kDisablePermissionActionReporting); |
| + EXPECT_FALSE(IsOptedIntoPermissionActionReporting(profile())); |
| +} |
| + |
| +// Test that PermissionUmaUtil::IsOptedIntoPermissionActionReporting returns |
| +// false if Safe Browsing is disabled. |
| +TEST_F(PermissionUmaUtilTest, |
| + IsOptedIntoPermissionActionReportingSafeBrowsingCheck) { |
| + base::test::ScopedCommandLine scoped_command_line; |
| + scoped_command_line.GetProcessCommandLine()->AppendSwitch( |
| + switches::kEnablePermissionActionReporting); |
| + FakeSignIn(); |
| + SetSafeBrowsing(true); |
| + EXPECT_TRUE(IsOptedIntoPermissionActionReporting(profile())); |
| + |
| + SetSafeBrowsing(false); |
| + EXPECT_FALSE(IsOptedIntoPermissionActionReporting(profile())); |
| +} |
| + |
| +// Test that PermissionUmaUtil::IsOptedIntoPermissionActionReporting returns |
| +// false if Sync is disabled. |
| +TEST_F(PermissionUmaUtilTest, |
| + IsOptedIntoPermissionActionReportingProfileSyncServiceCheck) { |
| + base::test::ScopedCommandLine scoped_command_line; |
| + scoped_command_line.GetProcessCommandLine()->AppendSwitch( |
| + switches::kEnablePermissionActionReporting); |
| + SetSafeBrowsing(true); |
| + FakeSignIn(); |
| + EXPECT_TRUE(IsOptedIntoPermissionActionReporting(profile())); |
| + |
| + scoped_command_line.GetProcessCommandLine()->AppendSwitch( |
| + switches::kDisableSync); |
| + EXPECT_FALSE(IsOptedIntoPermissionActionReporting(profile())); |
| +} |
| + |
| +// Test that PermissionUmaUtil::IsOptedIntoPermissionActionReporting returns |
| +// false if Tab Sync and Pref Sync are not both enabled. |
| +TEST_F(PermissionUmaUtilTest, |
| + IsOptedIntoPermissionActionReportingSyncPreferenceCheck) { |
| + base::test::ScopedCommandLine scoped_command_line; |
| + scoped_command_line.GetProcessCommandLine()->AppendSwitch( |
| + switches::kEnablePermissionActionReporting); |
| + SetSafeBrowsing(true); |
| + FakeSignIn(); |
| + EXPECT_TRUE(IsOptedIntoPermissionActionReporting(profile())); |
| + |
| + SetKeepEverythingSyncedFalse(); |
| + |
| + GetProfileSyncService()->ChangePreferredDataTypes( |
| + syncer::ModelTypeSet(syncer::PROXY_TABS)); |
| + EXPECT_FALSE(IsOptedIntoPermissionActionReporting(profile())); |
| + |
| + GetProfileSyncService()->ChangePreferredDataTypes( |
| + syncer::ModelTypeSet(syncer::PRIORITY_PREFERENCES)); |
| + EXPECT_FALSE(IsOptedIntoPermissionActionReporting(profile())); |
| + |
| + GetProfileSyncService()->ChangePreferredDataTypes( |
| + syncer::ModelTypeSet(syncer::PROXY_TABS, syncer::PRIORITY_PREFERENCES)); |
| + EXPECT_TRUE(IsOptedIntoPermissionActionReporting(profile())); |
| +} |