Commit c3061bdc authored by Moe Ahmadi's avatar Moe Ahmadi Committed by Commit Bot

[AF] Migrate the value of kAutofillEnabledDeprecated to the new prefs

Sets the value of the new Autofill prefs "once" to the value of the now
deprecated Autofill master pref once all profile prefs are registered.
This is required for those users who had Autofill disabled before
introduction of the new prefs.

Bug: 870328,877801
Cq-Include-Trybots: luci.chromium.try:ios-simulator-cronet;luci.chromium.try:ios-simulator-full-configs
Change-Id: Iac4c1f7325c3a058b3d0fda0af0500a0ff23106a
Reviewed-on: https://chromium-review.googlesource.com/1194598
Commit-Queue: Moe Ahmadi <mahmadi@chromium.org>
Reviewed-by: default avatarPeter Lee <pkl@chromium.org>
Reviewed-by: default avatarDominic Battré <battre@chromium.org>
Reviewed-by: default avatarMathieu Perreault <mathp@chromium.org>
Reviewed-by: default avatarSebastien Seguin-Gagnon <sebsg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#587613}
parent 1b422567
...@@ -817,5 +817,8 @@ void MigrateObsoleteProfilePrefs(Profile* profile) { ...@@ -817,5 +817,8 @@ void MigrateObsoleteProfilePrefs(Profile* profile) {
// Added 5/2018 // Added 5/2018
profile_prefs->ClearPref(kDismissedRecentOfflineTabSuggestions); profile_prefs->ClearPref(kDismissedRecentOfflineTabSuggestions);
// Added 8/2018.
autofill::prefs::MigrateDeprecatedAutofillPrefs(profile_prefs);
#endif // defined(OS_ANDROID) #endif // defined(OS_ANDROID)
} }
...@@ -68,6 +68,7 @@ source_set("unit_tests") { ...@@ -68,6 +68,7 @@ source_set("unit_tests") {
testonly = true testonly = true
sources = [ sources = [
"autofill_l10n_util_unittest.cc", "autofill_l10n_util_unittest.cc",
"autofill_prefs_unittest.cc",
"autofill_regexes_unittest.cc", "autofill_regexes_unittest.cc",
"autofill_util_unittest.cc", "autofill_util_unittest.cc",
"form_data_unittest.cc", "form_data_unittest.cc",
...@@ -81,6 +82,9 @@ source_set("unit_tests") { ...@@ -81,6 +82,9 @@ source_set("unit_tests") {
"//base", "//base",
"//base:i18n", "//base:i18n",
"//base/test:test_support", "//base/test:test_support",
"//components/pref_registry",
"//components/prefs",
"//components/prefs:test_support",
"//testing/gmock", "//testing/gmock",
"//testing/gtest", "//testing/gtest",
"//url", "//url",
......
...@@ -106,6 +106,36 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { ...@@ -106,6 +106,36 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF); user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF);
} }
void MigrateDeprecatedAutofillPrefs(PrefService* prefs) {
// If kAutofillCreditCardEnabled and kAutofillProfileEnabled prefs are
// currently using their default value and kAutofillEnabledDeprecated has a
// non-default value, override the valuAues of the new prefs. The following
// blocks should execute only once and are needed for those users who had
// Autofill disabled before introduction of the fine-grained prefs.
// TODO(crbug.com/870328): Remove these once M70- users are sufficiently low.
const PrefService::Preference* deprecated_autofill_pref =
prefs->FindPreference(prefs::kAutofillEnabledDeprecated);
DCHECK(deprecated_autofill_pref);
const PrefService::Preference* autofill_credit_card_pref =
prefs->FindPreference(prefs::kAutofillCreditCardEnabled);
DCHECK(autofill_credit_card_pref);
if (autofill_credit_card_pref->IsDefaultValue() &&
!deprecated_autofill_pref->IsDefaultValue()) {
prefs->SetBoolean(kAutofillCreditCardEnabled,
prefs->GetBoolean(kAutofillEnabledDeprecated));
}
const PrefService::Preference* autofill_profile_pref =
prefs->FindPreference(prefs::kAutofillProfileEnabled);
DCHECK(autofill_profile_pref);
if (autofill_profile_pref->IsDefaultValue() &&
!deprecated_autofill_pref->IsDefaultValue()) {
prefs->SetBoolean(kAutofillProfileEnabled,
prefs->GetBoolean(kAutofillEnabledDeprecated));
}
}
bool IsAutocompleteEnabled(const PrefService* prefs) { bool IsAutocompleteEnabled(const PrefService* prefs) {
return IsProfileAutofillEnabled(prefs); return IsProfileAutofillEnabled(prefs);
} }
......
...@@ -20,6 +20,7 @@ namespace prefs { ...@@ -20,6 +20,7 @@ namespace prefs {
// component. Keep alphabetized, and document each in the .cc file. // component. Keep alphabetized, and document each in the .cc file.
extern const char kAutofillAcceptSaveCreditCardPromptState[]; extern const char kAutofillAcceptSaveCreditCardPromptState[];
extern const char kAutofillBillingCustomerNumber[]; extern const char kAutofillBillingCustomerNumber[];
// Do not get/set the value of this pref directly. Use provided getter/setter.
extern const char kAutofillCreditCardEnabled[]; extern const char kAutofillCreditCardEnabled[];
extern const char kAutofillCreditCardSigninPromoImpressionCount[]; extern const char kAutofillCreditCardSigninPromoImpressionCount[];
// Please use kAutofillCreditCardEnabled and kAutofillProfileEnabled instead. // Please use kAutofillCreditCardEnabled and kAutofillProfileEnabled instead.
...@@ -29,6 +30,7 @@ extern const char kAutofillLastVersionDeduped[]; ...@@ -29,6 +30,7 @@ extern const char kAutofillLastVersionDeduped[];
extern const char kAutofillLastVersionDisusedAddressesDeleted[]; extern const char kAutofillLastVersionDisusedAddressesDeleted[];
extern const char kAutofillLastVersionDisusedCreditCardsDeleted[]; extern const char kAutofillLastVersionDisusedCreditCardsDeleted[];
extern const char kAutofillOrphanRowsRemoved[]; extern const char kAutofillOrphanRowsRemoved[];
// Do not get/set the value of this pref directly. Use provided getter/setter.
extern const char kAutofillProfileEnabled[]; extern const char kAutofillProfileEnabled[];
extern const char kAutofillWalletImportEnabled[]; extern const char kAutofillWalletImportEnabled[];
extern const char kAutofillWalletImportStorageCheckboxState[]; extern const char kAutofillWalletImportStorageCheckboxState[];
...@@ -46,6 +48,9 @@ enum PreviousSaveCreditCardPromptUserDecision { ...@@ -46,6 +48,9 @@ enum PreviousSaveCreditCardPromptUserDecision {
// Registers Autofill prefs. // Registers Autofill prefs.
void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
// Migrates deprecated Autofill prefs values.
void MigrateDeprecatedAutofillPrefs(PrefService* prefs);
bool IsAutocompleteEnabled(const PrefService* prefs); bool IsAutocompleteEnabled(const PrefService* prefs);
bool IsAutofillEnabled(const PrefService* prefs); bool IsAutofillEnabled(const PrefService* prefs);
......
// Copyright 2018 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 "components/autofill/core/common/autofill_prefs.h"
#include <memory>
#include "components/pref_registry/pref_registry_syncable.h"
#include "components/prefs/pref_service.h"
#include "components/prefs/pref_service_factory.h"
#include "components/prefs/testing_pref_store.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace autofill {
namespace prefs {
class AutofillPrefsTest : public testing::Test {
protected:
AutofillPrefsTest() {}
~AutofillPrefsTest() override {}
void SetUp() override { pref_service_ = CreatePrefServiceAndRegisterPrefs(); }
// Creates a PrefService and registers Autofill prefs.
std::unique_ptr<PrefService> CreatePrefServiceAndRegisterPrefs() {
scoped_refptr<user_prefs::PrefRegistrySyncable> registry(
new user_prefs::PrefRegistrySyncable());
RegisterProfilePrefs(registry.get());
PrefServiceFactory factory;
factory.set_user_prefs(base::MakeRefCounted<TestingPrefStore>());
return factory.Create(registry);
}
PrefService* pref_service() { return pref_service_.get(); }
private:
std::unique_ptr<PrefService> pref_service_;
};
// Tests migrating the value of the deprecated Autofill master pref to the new
// prefs and that this operation takes place only once.
TEST_F(AutofillPrefsTest, MigrateDeprecatedAutofillPrefs) {
// All prefs should be enabled by default.
ASSERT_TRUE(pref_service()->GetBoolean(kAutofillEnabledDeprecated));
ASSERT_TRUE(pref_service()->GetBoolean(kAutofillProfileEnabled));
ASSERT_TRUE(pref_service()->GetBoolean(kAutofillCreditCardEnabled));
// Disable the deprecated master pref and make sure the new fine-grained prefs
// are not affected by that.
pref_service()->SetBoolean(kAutofillEnabledDeprecated, false);
EXPECT_FALSE(pref_service()->GetBoolean(kAutofillEnabledDeprecated));
EXPECT_TRUE(pref_service()->GetBoolean(kAutofillProfileEnabled));
EXPECT_TRUE(pref_service()->GetBoolean(kAutofillCreditCardEnabled));
// Migrate the deprecated master pref's value to the new fine-grained prefs.
// Their values should become the same as the deprecated master pref's value.
MigrateDeprecatedAutofillPrefs(pref_service());
EXPECT_FALSE(pref_service()->GetBoolean(kAutofillProfileEnabled));
EXPECT_FALSE(pref_service()->GetBoolean(kAutofillCreditCardEnabled));
// Enable the deprecated master pref and make sure the new fine-grained prefs
// are not affected by that.
pref_service()->SetBoolean(kAutofillEnabledDeprecated, true);
EXPECT_TRUE(pref_service()->GetBoolean(kAutofillEnabledDeprecated));
EXPECT_FALSE(pref_service()->GetBoolean(kAutofillProfileEnabled));
EXPECT_FALSE(pref_service()->GetBoolean(kAutofillCreditCardEnabled));
// Migrate the deprecated master pref's value to the new fine-grained prefs.
// Their values should not be affected when migration happens a second time.
MigrateDeprecatedAutofillPrefs(pref_service());
EXPECT_FALSE(pref_service()->GetBoolean(kAutofillProfileEnabled));
EXPECT_FALSE(pref_service()->GetBoolean(kAutofillCreditCardEnabled));
}
} // namespace prefs
} // namespace autofill
\ No newline at end of file
...@@ -178,4 +178,7 @@ void MigrateObsoleteBrowserStatePrefs(PrefService* prefs) { ...@@ -178,4 +178,7 @@ void MigrateObsoleteBrowserStatePrefs(PrefService* prefs) {
// Added 01/2018. // Added 01/2018.
prefs->ClearPref(::prefs::kNtpShownPage); prefs->ClearPref(::prefs::kNtpShownPage);
// Added 8/2018.
autofill::prefs::MigrateDeprecatedAutofillPrefs(prefs);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment