blob: d632b4c9f64fdf1a4a580cda6d52c9c5a8fb7e82 [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/omnibox/browser/omnibox_pref_names.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 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
// 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);
// Bottom omnibox position
local_state()->SetBoolean(prefs::kBottomOmnibox, true);
// Verify initial state before migration.
// 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);
// Check bottom omnibox position.
EXPECT_TRUE(local_state()->GetBoolean(prefs::kBottomOmnibox));
EXPECT_TRUE(local_state()
->FindPreference(omnibox::kIsOmniboxInBottomPosition)
->IsDefaultValue());
// Perform migration
MigrateObsoleteLocalStatePrefs(local_state());
MigrateObsoleteProfilePrefs(&pref_service_);
// Verify state after migration.
// 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);
// Check bottom omnibox position.
EXPECT_TRUE(
local_state()->FindPreference(prefs::kBottomOmnibox)->IsDefaultValue());
EXPECT_TRUE(local_state()->GetBoolean(omnibox::kIsOmniboxInBottomPosition));
}
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));
}