blob: 35dddad1209de32129306ec0608a56865898b22d [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/shared/model/prefs/browser_prefs.h"
#import "components/password_manager/core/common/password_manager_pref_names.h"
#import "components/policy/core/common/policy_pref_names.h"
#import "components/signin/public/identity_manager/identity_manager.h"
#import "components/sync_preferences/testing_pref_service_syncable.h"
#import "ios/chrome/browser/content_suggestions/ui_bundled/safety_check/safety_check_prefs.h"
#import "ios/chrome/browser/ntp_tiles/model/tab_resumption/tab_resumption_prefs.h"
#import "ios/chrome/browser/safety_check/model/ios_chrome_safety_check_manager_constants.h"
#import "ios/chrome/browser/shared/model/prefs/pref_names.h"
#import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h"
#import "ios/chrome/test/testing_application_context.h"
#import "testing/gtest/include/gtest/gtest.h"
#import "testing/platform_test.h"
class BrowserPrefsTest : public PlatformTest {
protected:
BrowserPrefsTest() {
RegisterProfilePrefs(pref_service_.registry());
// TODO(crbug.com/40282890): Remove this line ~one year after full launch.
// Manually register IdentityManagerFactory preferences as ProfilePrefs do
// not register KeyedService factories prefs.
signin::IdentityManager::RegisterProfilePrefs(pref_service_.registry());
}
PrefService* local_state() {
return GetApplicationContext()->GetLocalState();
}
protected:
// Application pref service.
IOSChromeScopedTestingLocalState local_state_;
// Profile pref service.
sync_preferences::TestingPrefServiceSyncable pref_service_;
};
// Check that the migration of a pref from profile prefService to
// localState prefService is performed correctly.
TEST_F(BrowserPrefsTest, VerifyProfilePrefsMigration) {
base::Time now = base::Time::Now();
// Simulate registering a value different from default in profile prefService.
pref_service_.SetBoolean(
password_manager::prefs::kCredentialProviderEnabledOnStartup, true);
pref_service_.SetTime(prefs::kIdentityConfirmationSnackbarLastPromptTime,
now);
pref_service_.SetInteger(prefs::kIdentityConfirmationSnackbarDisplayCount, 1);
pref_service_.SetBoolean(prefs::kIncognitoInterstitialEnabled, true);
pref_service_.SetInteger(prefs::kAddressBarSettingsNewBadgeShownCount, 1);
EXPECT_EQ(pref_service_.GetBoolean(
password_manager::prefs::kCredentialProviderEnabledOnStartup),
true);
EXPECT_EQ(local_state()->GetBoolean(
password_manager::prefs::kCredentialProviderEnabledOnStartup),
false);
EXPECT_EQ(
pref_service_.GetTime(prefs::kIdentityConfirmationSnackbarLastPromptTime),
now);
EXPECT_EQ(local_state()->GetTime(
prefs::kIdentityConfirmationSnackbarLastPromptTime),
base::Time());
EXPECT_EQ(pref_service_.GetInteger(
prefs::kIdentityConfirmationSnackbarDisplayCount),
1);
EXPECT_EQ(local_state()->GetInteger(
prefs::kIdentityConfirmationSnackbarDisplayCount),
0);
EXPECT_EQ(pref_service_.GetBoolean(prefs::kIncognitoInterstitialEnabled),
true);
EXPECT_EQ(local_state()->GetBoolean(prefs::kIncognitoInterstitialEnabled),
false);
EXPECT_EQ(
pref_service_.GetInteger(prefs::kAddressBarSettingsNewBadgeShownCount),
1);
EXPECT_EQ(
local_state()->GetInteger(prefs::kAddressBarSettingsNewBadgeShownCount),
0);
MigrateObsoleteProfilePrefs(&pref_service_);
// Verify that the prefs were migrated successfully.
EXPECT_EQ(pref_service_.GetBoolean(
password_manager::prefs::kCredentialProviderEnabledOnStartup),
false);
EXPECT_EQ(local_state()->GetBoolean(
password_manager::prefs::kCredentialProviderEnabledOnStartup),
true);
EXPECT_EQ(
pref_service_.GetTime(prefs::kIdentityConfirmationSnackbarLastPromptTime),
base::Time());
EXPECT_EQ(local_state()->GetTime(
prefs::kIdentityConfirmationSnackbarLastPromptTime),
now);
EXPECT_EQ(pref_service_.GetInteger(
prefs::kIdentityConfirmationSnackbarDisplayCount),
0);
EXPECT_EQ(local_state()->GetInteger(
prefs::kIdentityConfirmationSnackbarDisplayCount),
1);
EXPECT_EQ(pref_service_.GetBoolean(prefs::kIncognitoInterstitialEnabled),
false);
EXPECT_EQ(local_state()->GetBoolean(prefs::kIncognitoInterstitialEnabled),
true);
EXPECT_EQ(
pref_service_.GetInteger(prefs::kAddressBarSettingsNewBadgeShownCount),
0);
EXPECT_EQ(
local_state()->GetInteger(prefs::kAddressBarSettingsNewBadgeShownCount),
1);
}
// Check that the migration of a pref from localState prefService to
// profile prefService is performed correctly.
TEST_F(BrowserPrefsTest, VerifyLocalStatePrefsMigration) {
// Setup test data
base::Value::List list_example = base::Value::List().Append("Example");
base::Value::Dict dict_example;
dict_example.Set("Example_key", "Example_value");
// Set initial values in local_state
// Account Info
local_state()->SetDict(prefs::kIosPreRestoreAccountInfo,
dict_example.Clone());
// Magic Stack Segmentation Impressions
local_state()->SetInteger(
prefs::kIosMagicStackSegmentationMVTImpressionsSinceFreshness, 5);
local_state()->SetInteger(
prefs::kIosMagicStackSegmentationShortcutsImpressionsSinceFreshness, 3);
local_state()->SetInteger(
prefs::kIosMagicStackSegmentationSafetyCheckImpressionsSinceFreshness, 7);
local_state()->SetInteger(
prefs::kIosMagicStackSegmentationTabResumptionImpressionsSinceFreshness,
2);
local_state()->SetInteger(
prefs::kIosMagicStackSegmentationParcelTrackingImpressionsSinceFreshness,
4);
local_state()->SetInteger(
prefs::kHomeCustomizationMagicStackSafetyCheckIssuesCount, 6);
local_state()->SetInteger(prefs::kNTPLensEntryPointNewBadgeShownCount, 3);
local_state()->SetInteger(prefs::kNTPHomeCustomizationNewBadgeImpressionCount,
99);
// Verify initial state before migration
// Check Account Info
EXPECT_EQ(pref_service_.GetDict(prefs::kIosPreRestoreAccountInfo).size(),
0ul);
EXPECT_EQ(local_state()->GetDict(prefs::kIosPreRestoreAccountInfo),
dict_example);
// Check Magic Stack Segmentation Impressions in pref_service (should be -1)
EXPECT_EQ(pref_service_.GetInteger(
prefs::kIosMagicStackSegmentationMVTImpressionsSinceFreshness),
-1);
EXPECT_EQ(
pref_service_.GetInteger(
prefs::kIosMagicStackSegmentationShortcutsImpressionsSinceFreshness),
-1);
EXPECT_EQ(
pref_service_.GetInteger(
prefs::
kIosMagicStackSegmentationSafetyCheckImpressionsSinceFreshness),
-1);
EXPECT_EQ(
pref_service_.GetInteger(
prefs::
kIosMagicStackSegmentationTabResumptionImpressionsSinceFreshness),
-1);
EXPECT_EQ(pref_service_.GetInteger(
prefs::kHomeCustomizationMagicStackSafetyCheckIssuesCount),
0);
// Check Magic Stack Segmentation Impressions in local_state
EXPECT_EQ(local_state()->GetInteger(
prefs::kIosMagicStackSegmentationMVTImpressionsSinceFreshness),
5);
EXPECT_EQ(
local_state()->GetInteger(
prefs::kIosMagicStackSegmentationShortcutsImpressionsSinceFreshness),
3);
EXPECT_EQ(
local_state()->GetInteger(
prefs::
kIosMagicStackSegmentationSafetyCheckImpressionsSinceFreshness),
7);
EXPECT_EQ(
local_state()->GetInteger(
prefs::
kIosMagicStackSegmentationTabResumptionImpressionsSinceFreshness),
2);
EXPECT_EQ(
local_state()->GetInteger(
prefs::
kIosMagicStackSegmentationParcelTrackingImpressionsSinceFreshness),
4);
EXPECT_EQ(local_state()->GetInteger(
prefs::kHomeCustomizationMagicStackSafetyCheckIssuesCount),
6);
EXPECT_EQ(
local_state()->GetInteger(prefs::kNTPLensEntryPointNewBadgeShownCount),
3);
EXPECT_EQ(local_state()->GetInteger(
prefs::kNTPHomeCustomizationNewBadgeImpressionCount),
99);
// Perform migration
MigrateObsoleteLocalStatePrefs(local_state());
MigrateObsoleteProfilePrefs(&pref_service_);
// Verify state after migration
// Check Account Info
EXPECT_EQ(pref_service_.GetDict(prefs::kIosPreRestoreAccountInfo),
dict_example);
EXPECT_EQ(local_state()->GetDict(prefs::kIosPreRestoreAccountInfo).size(),
0ul);
// Check Magic Stack Segmentation Impressions in pref_service
EXPECT_EQ(pref_service_.GetInteger(
prefs::kIosMagicStackSegmentationMVTImpressionsSinceFreshness),
5);
EXPECT_EQ(
pref_service_.GetInteger(
prefs::kIosMagicStackSegmentationShortcutsImpressionsSinceFreshness),
3);
EXPECT_EQ(
pref_service_.GetInteger(
prefs::
kIosMagicStackSegmentationSafetyCheckImpressionsSinceFreshness),
7);
EXPECT_EQ(
pref_service_.GetInteger(
prefs::
kIosMagicStackSegmentationTabResumptionImpressionsSinceFreshness),
2);
EXPECT_EQ(pref_service_.GetInteger(
prefs::kHomeCustomizationMagicStackSafetyCheckIssuesCount),
6);
// Check Magic Stack Segmentation Impressions in local_state (should be -1)
EXPECT_EQ(local_state()->GetInteger(
prefs::kIosMagicStackSegmentationMVTImpressionsSinceFreshness),
-1);
EXPECT_EQ(
local_state()->GetInteger(
prefs::kIosMagicStackSegmentationShortcutsImpressionsSinceFreshness),
-1);
EXPECT_EQ(
local_state()->GetInteger(
prefs::
kIosMagicStackSegmentationSafetyCheckImpressionsSinceFreshness),
-1);
EXPECT_EQ(
local_state()->GetInteger(
prefs::
kIosMagicStackSegmentationTabResumptionImpressionsSinceFreshness),
-1);
EXPECT_EQ(
local_state()->GetInteger(
prefs::
kIosMagicStackSegmentationParcelTrackingImpressionsSinceFreshness),
-1);
EXPECT_EQ(local_state()->GetInteger(
prefs::kHomeCustomizationMagicStackSafetyCheckIssuesCount),
0);
EXPECT_EQ(
local_state()->GetInteger(prefs::kNTPLensEntryPointNewBadgeShownCount),
0);
EXPECT_EQ(local_state()->GetInteger(
prefs::kNTPHomeCustomizationNewBadgeImpressionCount),
0);
}
TEST_F(BrowserPrefsTest, VerifyUserDefaultsToProfilePrefsMigration) {
NSString* kSyncDisabledAlertShownKey = @"SyncDisabledAlertShown";
// Sets the value to migrate.
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:YES forKey:kSyncDisabledAlertShownKey];
ASSERT_TRUE([defaults boolForKey:kSyncDisabledAlertShownKey]);
EXPECT_FALSE(
pref_service_.GetBoolean(policy::policy_prefs::kSyncDisabledAlertShown));
auto* sync_disabled_alert_shown_pref = pref_service_.FindPreference(
policy::policy_prefs::kSyncDisabledAlertShown);
ASSERT_TRUE(sync_disabled_alert_shown_pref);
ASSERT_TRUE(sync_disabled_alert_shown_pref->IsDefaultValue());
// Perform migration.
MigrateObsoleteProfilePrefs(&pref_service_);
// Verify migration.
ASSERT_FALSE(sync_disabled_alert_shown_pref->IsDefaultValue());
ASSERT_FALSE([defaults boolForKey:kSyncDisabledAlertShownKey]);
EXPECT_TRUE(
pref_service_.GetBoolean(policy::policy_prefs::kSyncDisabledAlertShown));
// Perform migration again.
MigrateObsoleteProfilePrefs(&pref_service_);
ASSERT_FALSE(sync_disabled_alert_shown_pref->IsDefaultValue());
ASSERT_FALSE([defaults boolForKey:kSyncDisabledAlertShownKey]);
EXPECT_TRUE(
pref_service_.GetBoolean(policy::policy_prefs::kSyncDisabledAlertShown));
}