| Index: components/password_manager/core/browser/password_syncable_service.cc
|
| diff --git a/components/password_manager/core/browser/password_syncable_service.cc b/components/password_manager/core/browser/password_syncable_service.cc
|
| index 951dfeffea7afba5d5c8778b6cc929b5bf9f1458..4328f89f5891db22dade4bc59c047eefe41e85b2 100644
|
| --- a/components/password_manager/core/browser/password_syncable_service.cc
|
| +++ b/components/password_manager/core/browser/password_syncable_service.cc
|
| @@ -4,11 +4,13 @@
|
|
|
| #include "components/password_manager/core/browser/password_syncable_service.h"
|
|
|
| +#include <algorithm>
|
| +#include <iterator>
|
| #include <utility>
|
|
|
| #include "base/auto_reset.h"
|
| #include "base/location.h"
|
| -#include "base/memory/scoped_vector.h"
|
| +#include "base/memory/ptr_util.h"
|
| #include "base/metrics/histogram_macros.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "components/autofill/core/common/password_form.h"
|
| @@ -83,9 +85,9 @@ syncer::SyncChange::SyncChangeType GetSyncChangeType(
|
| void AppendPasswordFromSpecifics(
|
| const sync_pb::PasswordSpecificsData& specifics,
|
| base::Time sync_time,
|
| - ScopedVector<autofill::PasswordForm>* entries) {
|
| - entries->push_back(
|
| - new autofill::PasswordForm(PasswordFromSpecifics(specifics)));
|
| + std::vector<std::unique_ptr<autofill::PasswordForm>>* entries) {
|
| + entries->push_back(base::MakeUnique<autofill::PasswordForm>(
|
| + PasswordFromSpecifics(specifics)));
|
| entries->back()->date_synced = sync_time;
|
| }
|
|
|
| @@ -105,7 +107,7 @@ bool IsEmptyPasswordSpecificsData(
|
| } // namespace
|
|
|
| struct PasswordSyncableService::SyncEntries {
|
| - ScopedVector<autofill::PasswordForm>* EntriesForChangeType(
|
| + std::vector<std::unique_ptr<autofill::PasswordForm>>* EntriesForChangeType(
|
| syncer::SyncChange::SyncChangeType type) {
|
| switch (type) {
|
| case syncer::SyncChange::ACTION_ADD:
|
| @@ -122,15 +124,15 @@ struct PasswordSyncableService::SyncEntries {
|
| }
|
|
|
| // List that contains the entries that are known only to sync.
|
| - ScopedVector<autofill::PasswordForm> new_entries;
|
| + std::vector<std::unique_ptr<autofill::PasswordForm>> new_entries;
|
|
|
| // List that contains the entries that are known to both sync and the local
|
| // database but have updates in sync. They need to be updated in the local
|
| // database.
|
| - ScopedVector<autofill::PasswordForm> updated_entries;
|
| + std::vector<std::unique_ptr<autofill::PasswordForm>> updated_entries;
|
|
|
| // The list of entries to be deleted from the local database.
|
| - ScopedVector<autofill::PasswordForm> deleted_entries;
|
| + std::vector<std::unique_ptr<autofill::PasswordForm>> deleted_entries;
|
| };
|
|
|
| PasswordSyncableService::PasswordSyncableService(
|
| @@ -154,7 +156,7 @@ syncer::SyncMergeResult PasswordSyncableService::MergeDataAndStartSyncing(
|
| // We add all the db entries as |new_local_entries| initially. During model
|
| // association entries that match a sync entry will be removed and this list
|
| // will only contain entries that are not in sync.
|
| - ScopedVector<autofill::PasswordForm> password_entries;
|
| + std::vector<std::unique_ptr<autofill::PasswordForm>> password_entries;
|
| PasswordEntryMap new_local_entries;
|
| if (!ReadFromPasswordStore(&password_entries, &new_local_entries)) {
|
| merge_result.set_error(sync_error_factory->CreateAndUploadError(
|
| @@ -193,7 +195,7 @@ syncer::SyncMergeResult PasswordSyncableService::MergeDataAndStartSyncing(
|
| // cleaned up. This should happen in M43 and can be verified using crash
|
| // reports.
|
| sync_entries.deleted_entries.push_back(
|
| - new autofill::PasswordForm(*it->second));
|
| + base::MakeUnique<autofill::PasswordForm>(*it->second));
|
| } else {
|
| updated_db_entries.push_back(
|
| syncer::SyncChange(FROM_HERE,
|
| @@ -238,14 +240,16 @@ syncer::SyncDataList PasswordSyncableService::GetAllSyncData(
|
| syncer::ModelType type) const {
|
| DCHECK(CalledOnValidThread());
|
| DCHECK_EQ(syncer::PASSWORDS, type);
|
| - ScopedVector<autofill::PasswordForm> password_entries;
|
| + std::vector<std::unique_ptr<autofill::PasswordForm>> password_entries;
|
| ReadFromPasswordStore(&password_entries, nullptr);
|
|
|
| syncer::SyncDataList sync_data;
|
| - for (PasswordForms::iterator it = password_entries.begin();
|
| - it != password_entries.end(); ++it) {
|
| - sync_data.push_back(SyncDataFromPassword(**it));
|
| - }
|
| + sync_data.reserve(password_entries.size());
|
| + std::transform(password_entries.begin(), password_entries.end(),
|
| + std::back_inserter(sync_data),
|
| + [](const std::unique_ptr<autofill::PasswordForm>& form) {
|
| + return SyncDataFromPassword(*form);
|
| + });
|
| return sync_data;
|
| }
|
|
|
| @@ -260,7 +264,7 @@ syncer::SyncError PasswordSyncableService::ProcessSyncChanges(
|
| for (syncer::SyncChangeList::const_iterator it = change_list.begin();
|
| it != change_list.end(); ++it) {
|
| const sync_pb::EntitySpecifics& specifics = it->sync_data().GetSpecifics();
|
| - ScopedVector<autofill::PasswordForm>* entries =
|
| + std::vector<std::unique_ptr<autofill::PasswordForm>>* entries =
|
| sync_entries.EntriesForChangeType(it->change_type());
|
| if (!entries) {
|
| return sync_error_factory_->CreateAndUploadError(
|
| @@ -310,7 +314,7 @@ void PasswordSyncableService::InjectStartSyncFlare(
|
| }
|
|
|
| bool PasswordSyncableService::ReadFromPasswordStore(
|
| - ScopedVector<autofill::PasswordForm>* password_entries,
|
| + std::vector<std::unique_ptr<autofill::PasswordForm>>* password_entries,
|
| PasswordEntryMap* passwords_entry_map) const {
|
| DCHECK(password_entries);
|
| std::vector<std::unique_ptr<autofill::PasswordForm>> autofillable_entries;
|
| @@ -324,24 +328,19 @@ bool PasswordSyncableService::ReadFromPasswordStore(
|
| syncer::MODEL_TYPE_COUNT);
|
| return false;
|
| }
|
| - password_entries->clear();
|
| password_entries->resize(autofillable_entries.size() +
|
| blacklist_entries.size());
|
| - auto next = password_entries->begin();
|
| - for (auto& autofillable : autofillable_entries) {
|
| - *next++ = autofillable.release();
|
| - }
|
| - for (auto& blacklisted : blacklist_entries) {
|
| - *next++ = blacklisted.release();
|
| - }
|
| + std::move(autofillable_entries.begin(), autofillable_entries.end(),
|
| + password_entries->begin());
|
| + std::move(blacklist_entries.begin(), blacklist_entries.end(),
|
| + password_entries->begin() + autofillable_entries.size());
|
|
|
| if (!passwords_entry_map)
|
| return true;
|
|
|
| PasswordEntryMap& entry_map = *passwords_entry_map;
|
| - for (PasswordForms::iterator it = password_entries->begin();
|
| - it != password_entries->end(); ++it) {
|
| - autofill::PasswordForm* password_form = *it;
|
| + for (const auto& form : *password_entries) {
|
| + autofill::PasswordForm* password_form = form.get();
|
| entry_map[MakePasswordSyncTag(*password_form)] = password_form;
|
| }
|
|
|
| @@ -350,12 +349,12 @@ bool PasswordSyncableService::ReadFromPasswordStore(
|
|
|
| void PasswordSyncableService::WriteToPasswordStore(const SyncEntries& entries) {
|
| PasswordStoreChangeList changes;
|
| - WriteEntriesToDatabase(&PasswordStoreSync::AddLoginSync,
|
| - entries.new_entries.get(), &changes);
|
| + WriteEntriesToDatabase(&PasswordStoreSync::AddLoginSync, entries.new_entries,
|
| + &changes);
|
| WriteEntriesToDatabase(&PasswordStoreSync::UpdateLoginSync,
|
| - entries.updated_entries.get(), &changes);
|
| + entries.updated_entries, &changes);
|
| WriteEntriesToDatabase(&PasswordStoreSync::RemoveLoginSync,
|
| - entries.deleted_entries.get(), &changes);
|
| + entries.deleted_entries, &changes);
|
|
|
| // We have to notify password store observers of the change by hand since
|
| // we use internal password store interfaces to make changes synchronously.
|
| @@ -431,11 +430,10 @@ void PasswordSyncableService::CreateOrUpdateEntry(
|
|
|
| void PasswordSyncableService::WriteEntriesToDatabase(
|
| DatabaseOperation operation,
|
| - const PasswordForms& entries,
|
| + const std::vector<std::unique_ptr<autofill::PasswordForm>>& entries,
|
| PasswordStoreChangeList* all_changes) {
|
| - for (PasswordForms::const_iterator it = entries.begin(); it != entries.end();
|
| - ++it) {
|
| - PasswordStoreChangeList new_changes = (password_store_->*operation)(**it);
|
| + for (const std::unique_ptr<autofill::PasswordForm>& form : entries) {
|
| + PasswordStoreChangeList new_changes = (password_store_->*operation)(*form);
|
| all_changes->insert(all_changes->end(),
|
| new_changes.begin(),
|
| new_changes.end());
|
|
|