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 {
key_info.SetKey("credential_id", base::Value(kCredentialId));
request_options.SetKey("key_info", base::Value(base::Value::Type::LIST));
request_options.FindKeyOfType("key_info", base::Value::Type::LIST)
->GetList()
.push_back(std::move(key_info));
->Append(std::move(key_info));
return request_options;
}
......
......@@ -185,13 +185,11 @@ class CreditCardFIDOAuthenticatorTest : public testing::Test {
key_info
.FindKeyOfType("authenticator_transport_support",
base::Value::Type::LIST)
->GetList()
.push_back(base::Value("INTERNAL"));
->Append("INTERNAL");
request_options.SetKey("key_info", base::Value(base::Value::Type::LIST));
request_options.FindKeyOfType("key_info", base::Value::Type::LIST)
->GetList()
.push_back(std::move(key_info));
->Append(std::move(key_info));
return request_options;
}
......
......@@ -122,14 +122,12 @@ void TestPaymentsClient::AddFidoEligibleCard(std::string server_id,
base::Value(base::Value::Type::LIST));
key_info
.FindKeyOfType("authenticator_transport_support", base::Value::Type::LIST)
->GetList()
.push_back(base::Value("INTERNAL"));
->Append("INTERNAL");
unmask_details_.fido_request_options.SetKey(
"key_info", base::Value(base::Value::Type::LIST));
unmask_details_.fido_request_options
.FindKeyOfType("key_info", base::Value::Type::LIST)
->GetList()
.push_back(std::move(key_info));
->Append(std::move(key_info));
}
void TestPaymentsClient::SetServerIdForCardUpload(std::string server_id) {
......
......@@ -101,11 +101,10 @@ base::Value LogBuffer::RetrieveResult() {
if (!children || children->GetList().empty())
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) {
base::Value result = std::move(children->GetList().back());
children->GetList().pop_back();
return result;
return std::move(children->TakeList().back());
}
return std::exchange(buffer_.back(), CreateEmptyFragment());
......
......@@ -7,6 +7,7 @@
#include <vector>
#include "base/base64.h"
#include "base/stl_util.h"
#include "base/strings/string_number_conversions.h"
#include "components/os_crypt/os_crypt.h"
#include "components/password_manager/core/common/password_manager_pref_names.h"
......@@ -58,26 +59,6 @@ std::string EncryptString(const std::string& plain_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,
const std::string& field_key) {
const base::Value* encrypted_field_value = dict.FindKey(field_key);
......@@ -200,17 +181,14 @@ void HashPasswordManager::ClearSavedPasswordHash() {
void HashPasswordManager::ClearSavedPasswordHash(const std::string& username,
bool is_gaia_password) {
if (prefs_) {
ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList);
for (auto it = update->GetList().begin(); it != update->GetList().end();) {
if (AreUsernamesSame(GetAndDecryptField(*it, kUsernameFieldKey),
IsGaiaPassword(*it), username, is_gaia_password)) {
it = update->GetList().erase(it);
} else {
it++;
}
}
}
if (!prefs_)
return;
ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList);
update->EraseListValueIf([&](const auto& dict) {
return AreUsernamesSame(GetAndDecryptField(dict, kUsernameFieldKey),
IsGaiaPassword(dict), username, is_gaia_password);
});
}
void HashPasswordManager::ClearAllPasswordHash(bool is_gaia_password) {
......@@ -218,14 +196,10 @@ void HashPasswordManager::ClearAllPasswordHash(bool is_gaia_password) {
return;
ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList);
for (auto it = update->GetList().begin(); it != update->GetList().end();) {
if (GetAndDecryptField(*it, kIsGaiaFieldKey) ==
BooleanToString(is_gaia_password)) {
it = update->GetList().erase(it);
} else {
it++;
}
}
update->EraseListValueIf([&](const auto& dict) {
return GetAndDecryptField(dict, kIsGaiaFieldKey) ==
BooleanToString(is_gaia_password);
});
}
void HashPasswordManager::ClearAllNonGmailPasswordHash() {
......@@ -233,8 +207,7 @@ void HashPasswordManager::ClearAllNonGmailPasswordHash() {
return;
ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList);
base::EraseIf(update->GetList(), [](const base::Value& data) {
update->EraseListValueIf([](const base::Value& data) {
if (GetAndDecryptField(data, kIsGaiaFieldKey) == "false") {
return false;
}
......@@ -342,24 +315,22 @@ bool HashPasswordManager::EncryptAndSave(
encrypted_password_hash_entry.SetKey(
kLastSignInTimeFieldKey, base::Value(base::Time::Now().ToDoubleT()));
ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList);
bool replace_old_entry = false;
for (auto it = update->GetList().begin(); it != update->GetList().end();) {
if (AreUsernamesSame(GetAndDecryptField(*it, kUsernameFieldKey),
IsGaiaPassword(*it), password_hash_data.username,
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;
}
size_t num_erased = update->EraseListValueIf([&](const auto& dict) {
return AreUsernamesSame(GetAndDecryptField(dict, kUsernameFieldKey),
IsGaiaPassword(dict), password_hash_data.username,
password_hash_data.is_gaia_password);
});
if (update->GetList().size() >= kMaxPasswordHashDataDictSize)
RemoveOldestSignInPasswordHashData(&update->GetList());
if (num_erased == 0 &&
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));
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