| Index: components/autofill/core/browser/autofill_metrics_unittest.cc
|
| diff --git a/components/autofill/core/browser/autofill_metrics_unittest.cc b/components/autofill/core/browser/autofill_metrics_unittest.cc
|
| index 39ae287e789e7366d6652f5df9b7cbac824e0ff9..681b131a408b697d2af156bd8d9634642c22aca1 100644
|
| --- a/components/autofill/core/browser/autofill_metrics_unittest.cc
|
| +++ b/components/autofill/core/browser/autofill_metrics_unittest.cc
|
| @@ -10,6 +10,7 @@
|
| #include <vector>
|
|
|
| #include "base/macros.h"
|
| +#include "base/memory/ptr_util.h"
|
| #include "base/run_loop.h"
|
| #include "base/strings/string16.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| @@ -64,40 +65,47 @@ class TestPersonalDataManager : public PersonalDataManager {
|
| // for the side-effect of logging the profile count.
|
| void LoadProfiles() override {
|
| {
|
| - std::vector<AutofillProfile*> profiles;
|
| - web_profiles_.release(&profiles);
|
| - WDResult<std::vector<AutofillProfile*> > result(AUTOFILL_PROFILES_RESULT,
|
| - profiles);
|
| + std::vector<std::unique_ptr<AutofillProfile>> profiles;
|
| + web_profiles_.swap(profiles);
|
| + std::unique_ptr<WDTypedResult> result = base::MakeUnique<
|
| + WDResult<std::vector<std::unique_ptr<AutofillProfile>>>>(
|
| + AUTOFILL_PROFILES_RESULT, std::move(profiles));
|
| pending_profiles_query_ = 123;
|
| - OnWebDataServiceRequestDone(pending_profiles_query_, &result);
|
| + OnWebDataServiceRequestDone(pending_profiles_query_, std::move(result));
|
| }
|
| {
|
| - std::vector<AutofillProfile*> profiles;
|
| - server_profiles_.release(&profiles);
|
| - WDResult<std::vector<AutofillProfile*> > result(AUTOFILL_PROFILES_RESULT,
|
| - profiles);
|
| + std::vector<std::unique_ptr<AutofillProfile>> profiles;
|
| + server_profiles_.swap(profiles);
|
| + std::unique_ptr<WDTypedResult> result = base::MakeUnique<
|
| + WDResult<std::vector<std::unique_ptr<AutofillProfile>>>>(
|
| + AUTOFILL_PROFILES_RESULT, std::move(profiles));
|
| pending_server_profiles_query_ = 124;
|
| - OnWebDataServiceRequestDone(pending_server_profiles_query_, &result);
|
| + OnWebDataServiceRequestDone(pending_server_profiles_query_,
|
| + std::move(result));
|
| }
|
| }
|
|
|
| // Overridden to avoid a trip to the database.
|
| void LoadCreditCards() override {
|
| {
|
| - std::vector<CreditCard*> credit_cards;
|
| - local_credit_cards_.release(&credit_cards);
|
| - WDResult<std::vector<CreditCard*> > result(
|
| - AUTOFILL_CREDITCARDS_RESULT, credit_cards);
|
| + std::vector<std::unique_ptr<CreditCard>> credit_cards;
|
| + local_credit_cards_.swap(credit_cards);
|
| + std::unique_ptr<WDTypedResult> result =
|
| + base::MakeUnique<WDResult<std::vector<std::unique_ptr<CreditCard>>>>(
|
| + AUTOFILL_CREDITCARDS_RESULT, std::move(credit_cards));
|
| pending_creditcards_query_ = 125;
|
| - OnWebDataServiceRequestDone(pending_creditcards_query_, &result);
|
| + OnWebDataServiceRequestDone(pending_creditcards_query_,
|
| + std::move(result));
|
| }
|
| {
|
| - std::vector<CreditCard*> credit_cards;
|
| - server_credit_cards_.release(&credit_cards);
|
| - WDResult<std::vector<CreditCard*> > result(
|
| - AUTOFILL_CREDITCARDS_RESULT, credit_cards);
|
| + std::vector<std::unique_ptr<CreditCard>> credit_cards;
|
| + server_credit_cards_.swap(credit_cards);
|
| + std::unique_ptr<WDTypedResult> result =
|
| + base::MakeUnique<WDResult<std::vector<std::unique_ptr<CreditCard>>>>(
|
| + AUTOFILL_CREDITCARDS_RESULT, std::move(credit_cards));
|
| pending_server_creditcards_query_ = 126;
|
| - OnWebDataServiceRequestDone(pending_server_creditcards_query_, &result);
|
| + OnWebDataServiceRequestDone(pending_server_creditcards_query_,
|
| + std::move(result));
|
| }
|
| }
|
|
|
| @@ -108,10 +116,8 @@ class TestPersonalDataManager : public PersonalDataManager {
|
| // Only need to copy all the profiles. This adds any new profiles created at
|
| // form submission.
|
| web_profiles_.clear();
|
| - for (std::vector<AutofillProfile>::iterator iter = profiles->begin();
|
| - iter != profiles->end(); ++iter) {
|
| - web_profiles_.push_back(new AutofillProfile(*iter));
|
| - }
|
| + for (const auto& profile : *profiles)
|
| + web_profiles_.push_back(base::MakeUnique<AutofillProfile>(profile));
|
| }
|
|
|
| void set_autofill_enabled(bool autofill_enabled) {
|
| @@ -119,60 +125,61 @@ class TestPersonalDataManager : public PersonalDataManager {
|
| }
|
|
|
| // Removes all existing profiles and creates 0 or 1 local profiles and 0 or 1
|
| - // server profile according to the paramters.
|
| + // server profile according to the parameters.
|
| void RecreateProfiles(bool include_local_profile,
|
| bool include_server_profile) {
|
| web_profiles_.clear();
|
| server_profiles_.clear();
|
| if (include_local_profile) {
|
| - AutofillProfile* profile = new AutofillProfile;
|
| - test::SetProfileInfo(profile, "Elvis", "Aaron",
|
| - "Presley", "theking@gmail.com", "RCA",
|
| - "3734 Elvis Presley Blvd.", "Apt. 10",
|
| - "Memphis", "Tennessee", "38116", "US",
|
| - "12345678901");
|
| + std::unique_ptr<AutofillProfile> profile =
|
| + base::MakeUnique<AutofillProfile>();
|
| + test::SetProfileInfo(profile.get(), "Elvis", "Aaron", "Presley",
|
| + "theking@gmail.com", "RCA",
|
| + "3734 Elvis Presley Blvd.", "Apt. 10", "Memphis",
|
| + "Tennessee", "38116", "US", "12345678901");
|
| profile->set_guid("00000000-0000-0000-0000-000000000001");
|
| - web_profiles_.push_back(profile);
|
| + web_profiles_.push_back(std::move(profile));
|
| }
|
| if (include_server_profile) {
|
| - AutofillProfile* profile = new AutofillProfile(
|
| - AutofillProfile::SERVER_PROFILE, "server_id");
|
| - test::SetProfileInfo(profile, "Charles", "Hardin",
|
| - "Holley", "buddy@gmail.com", "Decca",
|
| - "123 Apple St.", "unit 6", "Lubbock",
|
| - "Texas", "79401", "US", "2345678901");
|
| + std::unique_ptr<AutofillProfile> profile =
|
| + base::MakeUnique<AutofillProfile>(AutofillProfile::SERVER_PROFILE,
|
| + "server_id");
|
| + test::SetProfileInfo(profile.get(), "Charles", "Hardin", "Holley",
|
| + "buddy@gmail.com", "Decca", "123 Apple St.",
|
| + "unit 6", "Lubbock", "Texas", "79401", "US",
|
| + "2345678901");
|
| profile->set_guid("00000000-0000-0000-0000-000000000002");
|
| - server_profiles_.push_back(profile);
|
| + server_profiles_.push_back(std::move(profile));
|
| }
|
| Refresh();
|
| }
|
|
|
| // Removes all existing credit cards and creates 0 or 1 local profiles and
|
| - // 0 or 1 server profile according to the paramters.
|
| + // 0 or 1 server profile according to the parameters.
|
| void RecreateCreditCards(bool include_local_credit_card,
|
| bool include_masked_server_credit_card,
|
| bool include_full_server_credit_card) {
|
| local_credit_cards_.clear();
|
| server_credit_cards_.clear();
|
| if (include_local_credit_card) {
|
| - std::unique_ptr<CreditCard> credit_card(new CreditCard(
|
| - "10000000-0000-0000-0000-000000000001", std::string()));
|
| + std::unique_ptr<CreditCard> credit_card = base::MakeUnique<CreditCard>(
|
| + "10000000-0000-0000-0000-000000000001", std::string());
|
| test::SetCreditCardInfo(credit_card.get(), nullptr, "4111111111111111",
|
| "12", "24");
|
| - local_credit_cards_.push_back(credit_card.release());
|
| + local_credit_cards_.push_back(std::move(credit_card));
|
| }
|
| if (include_masked_server_credit_card) {
|
| - std::unique_ptr<CreditCard> credit_card(new CreditCard(
|
| - CreditCard::MASKED_SERVER_CARD, "server_id"));
|
| + std::unique_ptr<CreditCard> credit_card = base::MakeUnique<CreditCard>(
|
| + CreditCard::MASKED_SERVER_CARD, "server_id");
|
| credit_card->set_guid("10000000-0000-0000-0000-000000000002");
|
| credit_card->SetTypeForMaskedCard(kDiscoverCard);
|
| - server_credit_cards_.push_back(credit_card.release());
|
| + server_credit_cards_.push_back(std::move(credit_card));
|
| }
|
| if (include_full_server_credit_card) {
|
| - std::unique_ptr<CreditCard> credit_card(new CreditCard(
|
| - CreditCard::FULL_SERVER_CARD, "server_id"));
|
| + std::unique_ptr<CreditCard> credit_card = base::MakeUnique<CreditCard>(
|
| + CreditCard::FULL_SERVER_CARD, "server_id");
|
| credit_card->set_guid("10000000-0000-0000-0000-000000000003");
|
| - server_credit_cards_.push_back(credit_card.release());
|
| + server_credit_cards_.push_back(std::move(credit_card));
|
| }
|
| Refresh();
|
| }
|
| @@ -180,22 +187,22 @@ class TestPersonalDataManager : public PersonalDataManager {
|
| bool IsAutofillEnabled() const override { return autofill_enabled_; }
|
|
|
| private:
|
| - void CreateTestAutofillProfiles(ScopedVector<AutofillProfile>* profiles) {
|
| - AutofillProfile* profile = new AutofillProfile;
|
| - test::SetProfileInfo(profile, "Elvis", "Aaron",
|
| - "Presley", "theking@gmail.com", "RCA",
|
| - "3734 Elvis Presley Blvd.", "Apt. 10",
|
| - "Memphis", "Tennessee", "38116", "US",
|
| + void CreateTestAutofillProfiles(
|
| + std::vector<std::unique_ptr<AutofillProfile>>* profiles) {
|
| + std::unique_ptr<AutofillProfile> profile =
|
| + base::MakeUnique<AutofillProfile>();
|
| + test::SetProfileInfo(profile.get(), "Elvis", "Aaron", "Presley",
|
| + "theking@gmail.com", "RCA", "3734 Elvis Presley Blvd.",
|
| + "Apt. 10", "Memphis", "Tennessee", "38116", "US",
|
| "12345678901");
|
| profile->set_guid("00000000-0000-0000-0000-000000000001");
|
| - profiles->push_back(profile);
|
| - profile = new AutofillProfile;
|
| - test::SetProfileInfo(profile, "Charles", "Hardin",
|
| - "Holley", "buddy@gmail.com", "Decca",
|
| - "123 Apple St.", "unit 6", "Lubbock",
|
| - "Texas", "79401", "US", "2345678901");
|
| + profiles->push_back(std::move(profile));
|
| + profile = base::MakeUnique<AutofillProfile>();
|
| + test::SetProfileInfo(profile.get(), "Charles", "Hardin", "Holley",
|
| + "buddy@gmail.com", "Decca", "123 Apple St.", "unit 6",
|
| + "Lubbock", "Texas", "79401", "US", "2345678901");
|
| profile->set_guid("00000000-0000-0000-0000-000000000002");
|
| - profiles->push_back(profile);
|
| + profiles->push_back(std::move(profile));
|
| }
|
|
|
| bool autofill_enabled_;
|
| @@ -250,10 +257,10 @@ class TestAutofillManager : public AutofillManager {
|
| empty_form.fields[i].value = base::string16();
|
| }
|
|
|
| - // |form_structure| will be owned by |form_structures()|.
|
| - TestFormStructure* form_structure = new TestFormStructure(empty_form);
|
| + std::unique_ptr<TestFormStructure> form_structure =
|
| + base::MakeUnique<TestFormStructure>(empty_form);
|
| form_structure->SetFieldTypes(heuristic_types, server_types);
|
| - form_structures()->push_back(form_structure);
|
| + form_structures()->push_back(std::move(form_structure));
|
| }
|
|
|
| // Calls AutofillManager::OnWillSubmitForm and waits for it to complete.
|
| @@ -737,9 +744,11 @@ TEST_F(AutofillMetricsTest, QualityMetrics_BasedOnAutocomplete) {
|
| field.autocomplete_attribute = "";
|
| form.fields.push_back(field);
|
|
|
| - TestFormStructure* form_structure = new TestFormStructure(form);
|
| + std::unique_ptr<TestFormStructure> form_structure =
|
| + base::MakeUnique<TestFormStructure>(form);
|
| + TestFormStructure* form_structure_ptr = form_structure.get();
|
| form_structure->DetermineHeuristicTypes();
|
| - autofill_manager_->form_structures()->push_back(form_structure);
|
| + autofill_manager_->form_structures()->push_back(std::move(form_structure));
|
|
|
| AutofillQueryResponseContents response;
|
| // Server response will match with autocomplete.
|
| @@ -755,7 +764,7 @@ TEST_F(AutofillMetricsTest, QualityMetrics_BasedOnAutocomplete) {
|
| ASSERT_TRUE(response.SerializeToString(&response_string));
|
|
|
| std::vector<std::string> signatures;
|
| - signatures.push_back(form_structure->FormSignatureAsStr());
|
| + signatures.push_back(form_structure_ptr->FormSignatureAsStr());
|
|
|
| base::HistogramTester histogram_tester;
|
| autofill_manager_->OnLoadedServerPredictions(response_string, signatures);
|
| @@ -768,10 +777,11 @@ TEST_F(AutofillMetricsTest, QualityMetrics_BasedOnAutocomplete) {
|
| AutofillMetrics::QUERY_RESPONSE_PARSED, 1);
|
|
|
| // Autocomplete-derived types are eventually what's inferred.
|
| - EXPECT_EQ(NAME_LAST, form_structure->field(0)->Type().GetStorableType());
|
| - EXPECT_EQ(NAME_MIDDLE, form_structure->field(1)->Type().GetStorableType());
|
| + EXPECT_EQ(NAME_LAST, form_structure_ptr->field(0)->Type().GetStorableType());
|
| + EXPECT_EQ(NAME_MIDDLE,
|
| + form_structure_ptr->field(1)->Type().GetStorableType());
|
| EXPECT_EQ(ADDRESS_HOME_ZIP,
|
| - form_structure->field(2)->Type().GetStorableType());
|
| + form_structure_ptr->field(2)->Type().GetStorableType());
|
|
|
| // Heuristic predictions.
|
| // Unknown:
|
| @@ -4001,14 +4011,15 @@ class AutofillMetricsParseQueryResponseTest : public testing::Test {
|
| field.name = ASCIIToUTF16("address");
|
| form.fields.push_back(field);
|
|
|
| - // Checkable fields should be ignored in parsing
|
| + // Checkable fields should be ignored in parsing.
|
| FormFieldData checkable_field;
|
| checkable_field.label = ASCIIToUTF16("radio_button");
|
| checkable_field.form_control_type = "radio";
|
| checkable_field.check_status = FormFieldData::CHECKABLE_BUT_UNCHECKED;
|
| form.fields.push_back(checkable_field);
|
|
|
| - forms_.push_back(new FormStructure(form));
|
| + owned_forms_.push_back(base::MakeUnique<FormStructure>(form));
|
| + forms_.push_back(owned_forms_.back().get());
|
|
|
| field.label = ASCIIToUTF16("email");
|
| field.name = ASCIIToUTF16("email");
|
| @@ -4019,12 +4030,14 @@ class AutofillMetricsParseQueryResponseTest : public testing::Test {
|
| field.form_control_type = "password";
|
| form.fields.push_back(field);
|
|
|
| - forms_.push_back(new FormStructure(form));
|
| + owned_forms_.push_back(base::MakeUnique<FormStructure>(form));
|
| + forms_.push_back(owned_forms_.back().get());
|
| }
|
|
|
| protected:
|
| TestRapporService rappor_service_;
|
| - ScopedVector<FormStructure> forms_;
|
| + std::vector<std::unique_ptr<FormStructure>> owned_forms_;
|
| + std::vector<FormStructure*> forms_;
|
| };
|
|
|
| TEST_F(AutofillMetricsParseQueryResponseTest, ServerHasData) {
|
| @@ -4038,8 +4051,7 @@ TEST_F(AutofillMetricsParseQueryResponseTest, ServerHasData) {
|
| ASSERT_TRUE(response.SerializeToString(&response_string));
|
|
|
| base::HistogramTester histogram_tester;
|
| - FormStructure::ParseQueryResponse(response_string, forms_.get(),
|
| - &rappor_service_);
|
| + FormStructure::ParseQueryResponse(response_string, forms_, &rappor_service_);
|
| EXPECT_THAT(
|
| histogram_tester.GetAllSamples("Autofill.ServerResponseHasDataForForm"),
|
| ElementsAre(Bucket(true, 2)));
|
| @@ -4062,8 +4074,7 @@ TEST_F(AutofillMetricsParseQueryResponseTest, OneFormNoServerData) {
|
| ASSERT_TRUE(response.SerializeToString(&response_string));
|
|
|
| base::HistogramTester histogram_tester;
|
| - FormStructure::ParseQueryResponse(response_string, forms_.get(),
|
| - &rappor_service_);
|
| + FormStructure::ParseQueryResponse(response_string, forms_, &rappor_service_);
|
| EXPECT_THAT(
|
| histogram_tester.GetAllSamples("Autofill.ServerResponseHasDataForForm"),
|
| ElementsAre(Bucket(false, 1), Bucket(true, 1)));
|
| @@ -4089,8 +4100,7 @@ TEST_F(AutofillMetricsParseQueryResponseTest, AllFormsNoServerData) {
|
| ASSERT_TRUE(response.SerializeToString(&response_string));
|
|
|
| base::HistogramTester histogram_tester;
|
| - FormStructure::ParseQueryResponse(response_string, forms_.get(),
|
| - &rappor_service_);
|
| + FormStructure::ParseQueryResponse(response_string, forms_, &rappor_service_);
|
| EXPECT_THAT(
|
| histogram_tester.GetAllSamples("Autofill.ServerResponseHasDataForForm"),
|
| ElementsAre(Bucket(false, 2)));
|
| @@ -4119,8 +4129,7 @@ TEST_F(AutofillMetricsParseQueryResponseTest, PartialNoServerData) {
|
| ASSERT_TRUE(response.SerializeToString(&response_string));
|
|
|
| base::HistogramTester histogram_tester;
|
| - FormStructure::ParseQueryResponse(response_string, forms_.get(),
|
| - &rappor_service_);
|
| + FormStructure::ParseQueryResponse(response_string, forms_, &rappor_service_);
|
| EXPECT_THAT(
|
| histogram_tester.GetAllSamples("Autofill.ServerResponseHasDataForForm"),
|
| ElementsAre(Bucket(true, 2)));
|
|
|