Commit f3fe12aa authored by Jan Wilken Dörrie's avatar Jan Wilken Dörrie Committed by Commit Bot

[base] Migrate off Value::GetList() in //c/{autofill,password_manager}

This change replaces existing usages of mutable base::Value::GetList()
with newly introduced ListValue APIs in //components/autofill and
//components/password_manager.


Bug: 646113
Change-Id: I0b0bea5d341951585698ad7438a43be459198c2a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1872212Reviewed-by: default avatarVadym Doroshenko <dvadym@chromium.org>
Commit-Queue: Jan Wilken Dörrie <jdoerrie@chromium.org>
Cr-Commit-Position: refs/heads/master@{#708152}
parent 61a7a7a8
...@@ -274,8 +274,7 @@ class CreditCardAccessManagerTest : public testing::Test { ...@@ -274,8 +274,7 @@ class CreditCardAccessManagerTest : public testing::Test {
key_info.SetKey("credential_id", base::Value(kCredentialId)); key_info.SetKey("credential_id", base::Value(kCredentialId));
request_options.SetKey("key_info", base::Value(base::Value::Type::LIST)); request_options.SetKey("key_info", base::Value(base::Value::Type::LIST));
request_options.FindKeyOfType("key_info", base::Value::Type::LIST) request_options.FindKeyOfType("key_info", base::Value::Type::LIST)
->GetList() ->Append(std::move(key_info));
.push_back(std::move(key_info));
return request_options; return request_options;
} }
......
...@@ -185,13 +185,11 @@ class CreditCardFIDOAuthenticatorTest : public testing::Test { ...@@ -185,13 +185,11 @@ class CreditCardFIDOAuthenticatorTest : public testing::Test {
key_info key_info
.FindKeyOfType("authenticator_transport_support", .FindKeyOfType("authenticator_transport_support",
base::Value::Type::LIST) base::Value::Type::LIST)
->GetList() ->Append("INTERNAL");
.push_back(base::Value("INTERNAL"));
request_options.SetKey("key_info", base::Value(base::Value::Type::LIST)); request_options.SetKey("key_info", base::Value(base::Value::Type::LIST));
request_options.FindKeyOfType("key_info", base::Value::Type::LIST) request_options.FindKeyOfType("key_info", base::Value::Type::LIST)
->GetList() ->Append(std::move(key_info));
.push_back(std::move(key_info));
return request_options; return request_options;
} }
......
...@@ -122,14 +122,12 @@ void TestPaymentsClient::AddFidoEligibleCard(std::string server_id, ...@@ -122,14 +122,12 @@ void TestPaymentsClient::AddFidoEligibleCard(std::string server_id,
base::Value(base::Value::Type::LIST)); base::Value(base::Value::Type::LIST));
key_info key_info
.FindKeyOfType("authenticator_transport_support", base::Value::Type::LIST) .FindKeyOfType("authenticator_transport_support", base::Value::Type::LIST)
->GetList() ->Append("INTERNAL");
.push_back(base::Value("INTERNAL"));
unmask_details_.fido_request_options.SetKey( unmask_details_.fido_request_options.SetKey(
"key_info", base::Value(base::Value::Type::LIST)); "key_info", base::Value(base::Value::Type::LIST));
unmask_details_.fido_request_options unmask_details_.fido_request_options
.FindKeyOfType("key_info", base::Value::Type::LIST) .FindKeyOfType("key_info", base::Value::Type::LIST)
->GetList() ->Append(std::move(key_info));
.push_back(std::move(key_info));
} }
void TestPaymentsClient::SetServerIdForCardUpload(std::string server_id) { void TestPaymentsClient::SetServerIdForCardUpload(std::string server_id) {
......
...@@ -101,11 +101,10 @@ base::Value LogBuffer::RetrieveResult() { ...@@ -101,11 +101,10 @@ base::Value LogBuffer::RetrieveResult() {
if (!children || children->GetList().empty()) if (!children || children->GetList().empty())
return base::Value(); return base::Value();
// If the fragment has a single child, return that directly. // If the fragment has a single child, remove it from |children| and return
// that directly.
if (children->GetList().size() == 1) { if (children->GetList().size() == 1) {
base::Value result = std::move(children->GetList().back()); return std::move(children->TakeList().back());
children->GetList().pop_back();
return result;
} }
return std::exchange(buffer_.back(), CreateEmptyFragment()); return std::exchange(buffer_.back(), CreateEmptyFragment());
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <vector> #include <vector>
#include "base/base64.h" #include "base/base64.h"
#include "base/stl_util.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
#include "components/os_crypt/os_crypt.h" #include "components/os_crypt/os_crypt.h"
#include "components/password_manager/core/common/password_manager_pref_names.h" #include "components/password_manager/core/common/password_manager_pref_names.h"
...@@ -58,26 +59,6 @@ std::string EncryptString(const std::string& plain_text) { ...@@ -58,26 +59,6 @@ std::string EncryptString(const std::string& plain_text) {
return encrypted_base64_text; return encrypted_base64_text;
} }
void RemoveOldestSignInPasswordHashData(
std::vector<base::Value>* password_hash_data_list) {
auto oldest_it = password_hash_data_list->end();
double oldest_signin_time = base::Time::Now().ToDoubleT();
for (auto it = password_hash_data_list->begin();
it != password_hash_data_list->end(); it++) {
const base::Value* last_signin_value = it->FindKey(kLastSignInTimeFieldKey);
DCHECK(last_signin_value);
double signin_time = last_signin_value->GetDouble();
if (signin_time < oldest_signin_time) {
oldest_signin_time = signin_time;
oldest_it = it;
}
}
DCHECK(oldest_it != password_hash_data_list->end());
password_hash_data_list->erase(oldest_it);
}
std::string GetAndDecryptField(const base::Value& dict, std::string GetAndDecryptField(const base::Value& dict,
const std::string& field_key) { const std::string& field_key) {
const base::Value* encrypted_field_value = dict.FindKey(field_key); const base::Value* encrypted_field_value = dict.FindKey(field_key);
...@@ -200,17 +181,14 @@ void HashPasswordManager::ClearSavedPasswordHash() { ...@@ -200,17 +181,14 @@ void HashPasswordManager::ClearSavedPasswordHash() {
void HashPasswordManager::ClearSavedPasswordHash(const std::string& username, void HashPasswordManager::ClearSavedPasswordHash(const std::string& username,
bool is_gaia_password) { bool is_gaia_password) {
if (prefs_) { if (!prefs_)
ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList); return;
for (auto it = update->GetList().begin(); it != update->GetList().end();) {
if (AreUsernamesSame(GetAndDecryptField(*it, kUsernameFieldKey), ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList);
IsGaiaPassword(*it), username, is_gaia_password)) { update->EraseListValueIf([&](const auto& dict) {
it = update->GetList().erase(it); return AreUsernamesSame(GetAndDecryptField(dict, kUsernameFieldKey),
} else { IsGaiaPassword(dict), username, is_gaia_password);
it++; });
}
}
}
} }
void HashPasswordManager::ClearAllPasswordHash(bool is_gaia_password) { void HashPasswordManager::ClearAllPasswordHash(bool is_gaia_password) {
...@@ -218,14 +196,10 @@ void HashPasswordManager::ClearAllPasswordHash(bool is_gaia_password) { ...@@ -218,14 +196,10 @@ void HashPasswordManager::ClearAllPasswordHash(bool is_gaia_password) {
return; return;
ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList); ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList);
for (auto it = update->GetList().begin(); it != update->GetList().end();) { update->EraseListValueIf([&](const auto& dict) {
if (GetAndDecryptField(*it, kIsGaiaFieldKey) == return GetAndDecryptField(dict, kIsGaiaFieldKey) ==
BooleanToString(is_gaia_password)) { BooleanToString(is_gaia_password);
it = update->GetList().erase(it); });
} else {
it++;
}
}
} }
void HashPasswordManager::ClearAllNonGmailPasswordHash() { void HashPasswordManager::ClearAllNonGmailPasswordHash() {
...@@ -233,8 +207,7 @@ void HashPasswordManager::ClearAllNonGmailPasswordHash() { ...@@ -233,8 +207,7 @@ void HashPasswordManager::ClearAllNonGmailPasswordHash() {
return; return;
ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList); ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList);
update->EraseListValueIf([](const base::Value& data) {
base::EraseIf(update->GetList(), [](const base::Value& data) {
if (GetAndDecryptField(data, kIsGaiaFieldKey) == "false") { if (GetAndDecryptField(data, kIsGaiaFieldKey) == "false") {
return false; return false;
} }
...@@ -342,24 +315,22 @@ bool HashPasswordManager::EncryptAndSave( ...@@ -342,24 +315,22 @@ bool HashPasswordManager::EncryptAndSave(
encrypted_password_hash_entry.SetKey( encrypted_password_hash_entry.SetKey(
kLastSignInTimeFieldKey, base::Value(base::Time::Now().ToDoubleT())); kLastSignInTimeFieldKey, base::Value(base::Time::Now().ToDoubleT()));
ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList); ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList);
bool replace_old_entry = false; size_t num_erased = update->EraseListValueIf([&](const auto& dict) {
for (auto it = update->GetList().begin(); it != update->GetList().end();) { return AreUsernamesSame(GetAndDecryptField(dict, kUsernameFieldKey),
if (AreUsernamesSame(GetAndDecryptField(*it, kUsernameFieldKey), IsGaiaPassword(dict), password_hash_data.username,
IsGaiaPassword(*it), password_hash_data.username, password_hash_data.is_gaia_password);
password_hash_data.is_gaia_password)) { });
it = update->GetList().erase(it);
replace_old_entry = true;
} else {
it++;
}
}
if (replace_old_entry) {
update->Append(std::move(encrypted_password_hash_entry));
return true;
}
if (update->GetList().size() >= kMaxPasswordHashDataDictSize) if (num_erased == 0 &&
RemoveOldestSignInPasswordHashData(&update->GetList()); update->GetList().size() >= kMaxPasswordHashDataDictSize) {
// Erase the oldest sign-in password hash data.
update->EraseListIter(std::min_element(
update->GetList().begin(), update->GetList().end(),
[](const auto& lhs, const auto& rhs) {
return lhs.FindKey(kLastSignInTimeFieldKey)->GetDouble() <
rhs.FindKey(kLastSignInTimeFieldKey)->GetDouble();
}));
}
update->Append(std::move(encrypted_password_hash_entry)); update->Append(std::move(encrypted_password_hash_entry));
return true; return true;
......
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