| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/autofill/core/browser/autofill_metrics.h" | 5 #include "components/autofill/core/browser/autofill_metrics.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <utility> |
| 10 #include <vector> | 11 #include <vector> |
| 11 | 12 |
| 12 #include "base/feature_list.h" | 13 #include "base/feature_list.h" |
| 13 #include "base/macros.h" | 14 #include "base/macros.h" |
| 14 #include "base/memory/ptr_util.h" | 15 #include "base/memory/ptr_util.h" |
| 15 #include "base/metrics/metrics_hashes.h" | 16 #include "base/metrics/metrics_hashes.h" |
| 16 #include "base/run_loop.h" | 17 #include "base/run_loop.h" |
| 17 #include "base/strings/string16.h" | 18 #include "base/strings/string16.h" |
| 18 #include "base/strings/utf_string_conversions.h" | 19 #include "base/strings/utf_string_conversions.h" |
| 19 #include "base/test/histogram_tester.h" | 20 #include "base/test/histogram_tester.h" |
| (...skipping 27 matching lines...) Expand all Loading... |
| 47 #include "testing/gmock/include/gmock/gmock.h" | 48 #include "testing/gmock/include/gmock/gmock.h" |
| 48 #include "testing/gtest/include/gtest/gtest.h" | 49 #include "testing/gtest/include/gtest/gtest.h" |
| 49 #include "ui/gfx/geometry/rect.h" | 50 #include "ui/gfx/geometry/rect.h" |
| 50 #include "url/gurl.h" | 51 #include "url/gurl.h" |
| 51 | 52 |
| 52 using base::ASCIIToUTF16; | 53 using base::ASCIIToUTF16; |
| 53 using base::Bucket; | 54 using base::Bucket; |
| 54 using base::TimeTicks; | 55 using base::TimeTicks; |
| 55 using rappor::TestRapporServiceImpl; | 56 using rappor::TestRapporServiceImpl; |
| 56 using ::testing::ElementsAre; | 57 using ::testing::ElementsAre; |
| 57 using ::testing::UnorderedElementsAre; | 58 using ::testing::Matcher; |
| 59 using ::testing::Pointwise; |
| 58 | 60 |
| 59 namespace autofill { | 61 namespace autofill { |
| 60 namespace { | 62 namespace { |
| 61 | 63 |
| 62 class TestPersonalDataManager : public PersonalDataManager { | 64 class TestPersonalDataManager : public PersonalDataManager { |
| 63 public: | 65 public: |
| 64 TestPersonalDataManager() | 66 TestPersonalDataManager() |
| 65 : PersonalDataManager("en-US"), | 67 : PersonalDataManager("en-US"), |
| 66 autofill_enabled_(true) { | 68 autofill_enabled_(true) { |
| 67 CreateTestAutofillProfiles(&web_profiles_); | 69 CreateTestAutofillProfiles(&web_profiles_); |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 const std::vector<ServerFieldType>& server_types) { | 259 const std::vector<ServerFieldType>& server_types) { |
| 258 FormData empty_form = form; | 260 FormData empty_form = form; |
| 259 for (size_t i = 0; i < empty_form.fields.size(); ++i) { | 261 for (size_t i = 0; i < empty_form.fields.size(); ++i) { |
| 260 empty_form.fields[i].value = base::string16(); | 262 empty_form.fields[i].value = base::string16(); |
| 261 } | 263 } |
| 262 | 264 |
| 263 std::unique_ptr<TestFormStructure> form_structure = | 265 std::unique_ptr<TestFormStructure> form_structure = |
| 264 base::MakeUnique<TestFormStructure>(empty_form); | 266 base::MakeUnique<TestFormStructure>(empty_form); |
| 265 form_structure->SetFieldTypes(heuristic_types, server_types); | 267 form_structure->SetFieldTypes(heuristic_types, server_types); |
| 266 form_structures()->push_back(std::move(form_structure)); | 268 form_structures()->push_back(std::move(form_structure)); |
| 269 |
| 270 form_interactions_ukm_logger()->set_url(form.origin); |
| 271 form_interactions_ukm_logger()->set_form_loaded_timestamp(TimeTicks::Now()); |
| 267 } | 272 } |
| 268 | 273 |
| 269 // Calls AutofillManager::OnWillSubmitForm and waits for it to complete. | 274 // Calls AutofillManager::OnWillSubmitForm and waits for it to complete. |
| 270 void WillSubmitForm(const FormData& form, const TimeTicks& timestamp) { | 275 void WillSubmitForm(const FormData& form, const TimeTicks& timestamp) { |
| 271 ResetRunLoop(); | 276 ResetRunLoop(); |
| 272 if (!OnWillSubmitForm(form, timestamp)) | 277 if (!OnWillSubmitForm(form, timestamp)) |
| 273 return; | 278 return; |
| 274 | 279 |
| 275 // Wait for the asynchronous OnWillSubmitForm() call to complete. | 280 // Wait for the asynchronous OnWillSubmitForm() call to complete. |
| 276 RunRunLoop(); | 281 RunRunLoop(); |
| 277 } | 282 } |
| 278 | 283 |
| 279 // Calls both AutofillManager::OnWillSubmitForm and | 284 // Calls both AutofillManager::OnWillSubmitForm and |
| 280 // AutofillManager::OnFormSubmitted. | 285 // AutofillManager::OnFormSubmitted. |
| 281 void SubmitForm(const FormData& form, const TimeTicks& timestamp) { | 286 void SubmitForm(const FormData& form, const TimeTicks& timestamp) { |
| 282 WillSubmitForm(form, timestamp); | 287 WillSubmitForm(form, timestamp); |
| 283 OnFormSubmitted(form); | 288 OnFormSubmitted(form); |
| 284 } | 289 } |
| 285 | 290 |
| 286 // Control the run loop from within tests. | 291 // Control the run loop from within tests. |
| 287 void ResetRunLoop() { run_loop_.reset(new base::RunLoop()); } | 292 void ResetRunLoop() { run_loop_.reset(new base::RunLoop()); } |
| 288 void RunRunLoop() { run_loop_->Run(); } | 293 void RunRunLoop() { run_loop_->Run(); } |
| 289 | 294 |
| 290 void UploadFormDataAsyncCallback(const FormStructure* submitted_form, | 295 void UploadFormDataAsyncCallback(const FormStructure* submitted_form, |
| 291 const base::TimeTicks& load_time, | 296 const TimeTicks& load_time, |
| 292 const base::TimeTicks& interaction_time, | 297 const TimeTicks& interaction_time, |
| 293 const base::TimeTicks& submission_time, | 298 const TimeTicks& submission_time, |
| 294 bool observed_submission) override { | 299 bool observed_submission) override { |
| 295 run_loop_->Quit(); | 300 run_loop_->Quit(); |
| 296 | 301 |
| 297 AutofillManager::UploadFormDataAsyncCallback( | 302 AutofillManager::UploadFormDataAsyncCallback( |
| 298 submitted_form, load_time, interaction_time, submission_time, | 303 submitted_form, load_time, interaction_time, submission_time, |
| 299 observed_submission); | 304 observed_submission); |
| 300 } | 305 } |
| 301 | 306 |
| 302 private: | 307 private: |
| 303 bool autofill_enabled_; | 308 bool autofill_enabled_; |
| 304 std::unique_ptr<base::RunLoop> run_loop_; | 309 std::unique_ptr<base::RunLoop> run_loop_; |
| 305 | 310 |
| 306 DISALLOW_COPY_AND_ASSIGN(TestAutofillManager); | 311 DISALLOW_COPY_AND_ASSIGN(TestAutofillManager); |
| 307 }; | 312 }; |
| 308 | 313 |
| 309 // Finds the specified UKM metric by |name| in the specified UKM |metrics|. | 314 // Finds the specified UKM metric by |name| in the specified UKM |metrics|. |
| 310 const ukm::Entry_Metric* FindMetric( | 315 const ukm::Entry_Metric* FindMetric( |
| 311 const char* name, | 316 const char* name, |
| 312 const google::protobuf::RepeatedPtrField<ukm::Entry_Metric>& metrics) { | 317 const google::protobuf::RepeatedPtrField<ukm::Entry_Metric>& metrics) { |
| 313 for (const auto& metric : metrics) { | 318 for (const auto& metric : metrics) { |
| 314 if (metric.metric_hash() == base::HashMetricName(name)) | 319 if (metric.metric_hash() == base::HashMetricName(name)) |
| 315 return &metric; | 320 return &metric; |
| 316 } | 321 } |
| 317 return nullptr; | 322 return nullptr; |
| 318 } | 323 } |
| 319 | 324 |
| 325 MATCHER(CompareMetrics, "") { |
| 326 const ukm::Entry_Metric& lhs = ::testing::get<0>(arg); |
| 327 const std::pair<const char*, int64_t>& rhs = ::testing::get<1>(arg); |
| 328 return lhs.metric_hash() == base::HashMetricName(rhs.first) && |
| 329 lhs.value() == rhs.second; |
| 330 } |
| 331 |
| 332 void VerifyDeveloperEngagementUkm( |
| 333 const FormData& form, |
| 334 const ukm::TestUkmService* ukm_service, |
| 335 const std::vector<int64_t>& expected_metric_values) { |
| 336 const ukm::UkmEntry* entry = ukm_service->GetEntryForEntryName( |
| 337 internal::kUKMDeveloperEngagementEntryName); |
| 338 ASSERT_NE(nullptr, entry); |
| 339 ukm::Entry entry_proto; |
| 340 entry->PopulateProto(&entry_proto); |
| 341 |
| 342 const ukm::UkmSource* source = |
| 343 ukm_service->GetSourceForSourceId(entry_proto.source_id()); |
| 344 ASSERT_NE(nullptr, source); |
| 345 EXPECT_EQ(form.origin, source->url()); |
| 346 |
| 347 std::vector<std::pair<const char*, int64_t>> expected_metrics; |
| 348 for (const auto it : expected_metric_values) |
| 349 expected_metrics.push_back( |
| 350 {internal::kUKMDeveloperEngagementMetricName, it}); |
| 351 |
| 352 EXPECT_THAT(entry_proto.metrics(), |
| 353 Pointwise(CompareMetrics(), expected_metrics)); |
| 354 } |
| 355 |
| 356 void VerifyFormInteractionsUkm( |
| 357 const FormData& form, |
| 358 const ukm::TestUkmService* ukm_service, |
| 359 const std::vector<std::pair<const char*, int64_t>>& expected_events) { |
| 360 int entry_num = 0; |
| 361 // Skip |DeveloperEngagement| entries. |
| 362 ASSERT_GT(ukm_service->entries_count(), static_cast<size_t>(0)); |
| 363 while (ukm_service->GetEntry(entry_num)->event_hash() == |
| 364 base::HashMetricName(internal::kUKMDeveloperEngagementEntryName)) |
| 365 entry_num++; |
| 366 |
| 367 for (const auto& it : expected_events) { |
| 368 const ukm::UkmEntry* entry = ukm_service->GetEntry(entry_num++); |
| 369 ASSERT_NE(nullptr, entry); |
| 370 ukm::Entry entry_proto; |
| 371 entry->PopulateProto(&entry_proto); |
| 372 |
| 373 const ukm::UkmSource* source = |
| 374 ukm_service->GetSourceForSourceId(entry_proto.source_id()); |
| 375 ASSERT_NE(nullptr, source); |
| 376 EXPECT_EQ(form.origin, source->url()); |
| 377 |
| 378 ASSERT_EQ(2, entry_proto.metrics().size()); |
| 379 EXPECT_EQ(base::HashMetricName(it.first), |
| 380 entry_proto.metrics().Get(0).metric_hash()); |
| 381 EXPECT_EQ(it.second, entry_proto.metrics().Get(0).value()); |
| 382 |
| 383 EXPECT_EQ(base::HashMetricName( |
| 384 internal::kUKMMillisecondsSinceFormLoadedMetricName), |
| 385 entry_proto.metrics().Get(1).metric_hash()); |
| 386 } |
| 387 } |
| 388 |
| 389 void VerifyUniqueFormInteractionEventUkm(const FormData& form, |
| 390 const ukm::TestUkmService* ukm_service, |
| 391 const char* event_name, |
| 392 int expected_metric_value) { |
| 393 const ukm::UkmEntry* entry = ukm_service->GetEntryForEntryName(event_name); |
| 394 ASSERT_NE(nullptr, entry); |
| 395 ukm::Entry entry_proto; |
| 396 entry->PopulateProto(&entry_proto); |
| 397 |
| 398 const ukm::UkmSource* source = |
| 399 ukm_service->GetSourceForSourceId(entry_proto.source_id()); |
| 400 ASSERT_NE(nullptr, source); |
| 401 EXPECT_EQ(form.origin, source->url()); |
| 402 |
| 403 ASSERT_EQ(2, entry_proto.metrics().size()); |
| 404 EXPECT_EQ(base::HashMetricName(event_name), |
| 405 entry_proto.metrics().Get(0).metric_hash()); |
| 406 EXPECT_EQ(expected_metric_value, entry_proto.metrics().Get(0).value()); |
| 407 |
| 408 EXPECT_EQ( |
| 409 base::HashMetricName(internal::kUKMMillisecondsSinceFormLoadedMetricName), |
| 410 entry_proto.metrics().Get(1).metric_hash()); |
| 411 } |
| 412 |
| 320 } // namespace | 413 } // namespace |
| 321 | 414 |
| 322 // This is defined in the autofill_metrics.cc implementation file. | 415 // This is defined in the autofill_metrics.cc implementation file. |
| 323 int GetFieldTypeGroupMetric(ServerFieldType field_type, | 416 int GetFieldTypeGroupMetric(ServerFieldType field_type, |
| 324 AutofillMetrics::FieldTypeQualityMetric metric); | 417 AutofillMetrics::FieldTypeQualityMetric metric); |
| 325 | 418 |
| 326 class AutofillMetricsTest : public testing::Test { | 419 class AutofillMetricsTest : public testing::Test { |
| 327 public: | 420 public: |
| 328 ~AutofillMetricsTest() override; | 421 ~AutofillMetricsTest() override; |
| 329 | 422 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 // PersonalDataManager to be around when it gets destroyed. | 480 // PersonalDataManager to be around when it gets destroyed. |
| 388 autofill_manager_.reset(); | 481 autofill_manager_.reset(); |
| 389 autofill_driver_.reset(); | 482 autofill_driver_.reset(); |
| 390 personal_data_.reset(); | 483 personal_data_.reset(); |
| 391 signin_manager_->Shutdown(); | 484 signin_manager_->Shutdown(); |
| 392 signin_manager_.reset(); | 485 signin_manager_.reset(); |
| 393 account_tracker_->Shutdown(); | 486 account_tracker_->Shutdown(); |
| 394 account_tracker_.reset(); | 487 account_tracker_.reset(); |
| 395 signin_client_.reset(); | 488 signin_client_.reset(); |
| 396 test::ReenableSystemServices(); | 489 test::ReenableSystemServices(); |
| 490 autofill_client_.GetTestUkmService()->Purge(); |
| 397 } | 491 } |
| 398 | 492 |
| 399 void AutofillMetricsTest::EnableWalletSync() { | 493 void AutofillMetricsTest::EnableWalletSync() { |
| 400 signin_manager_->SetAuthenticatedAccountInfo("12345", "syncuser@example.com"); | 494 signin_manager_->SetAuthenticatedAccountInfo("12345", "syncuser@example.com"); |
| 401 } | 495 } |
| 402 | 496 |
| 403 void AutofillMetricsTest::EnableUkmLogging() { | 497 void AutofillMetricsTest::EnableUkmLogging() { |
| 404 scoped_feature_list_.InitAndEnableFeature(kAutofillUkmLogging); | 498 scoped_feature_list_.InitAndEnableFeature(kAutofillUkmLogging); |
| 405 } | 499 } |
| 406 | 500 |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 564 field.is_autofilled = false; | 658 field.is_autofilled = false; |
| 565 form.fields.push_back(field); | 659 form.fields.push_back(field); |
| 566 | 660 |
| 567 test::CreateTestFormField("Phone", "phone", "2345678901", "tel", &field); | 661 test::CreateTestFormField("Phone", "phone", "2345678901", "tel", &field); |
| 568 field.is_autofilled = false; | 662 field.is_autofilled = false; |
| 569 form.fields.push_back(field); | 663 form.fields.push_back(field); |
| 570 | 664 |
| 571 // Simulate a OnFormsSeen() call that should trigger the recording. | 665 // Simulate a OnFormsSeen() call that should trigger the recording. |
| 572 std::vector<FormData> forms; | 666 std::vector<FormData> forms; |
| 573 forms.push_back(form); | 667 forms.push_back(form); |
| 574 autofill_manager_->OnFormsSeen(forms, base::TimeTicks::Now()); | 668 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); |
| 575 | 669 |
| 576 // Because these metrics are related to timing, it is not possible to know in | 670 // Because these metrics are related to timing, it is not possible to know in |
| 577 // advance which bucket the sample will fall into, so we just need to make | 671 // advance which bucket the sample will fall into, so we just need to make |
| 578 // sure we have valid samples. | 672 // sure we have valid samples. |
| 579 EXPECT_FALSE( | 673 EXPECT_FALSE( |
| 580 histogram_tester.GetAllSamples("Autofill.Timing.DetermineHeuristicTypes") | 674 histogram_tester.GetAllSamples("Autofill.Timing.DetermineHeuristicTypes") |
| 581 .empty()); | 675 .empty()); |
| 582 EXPECT_FALSE( | 676 EXPECT_FALSE( |
| 583 histogram_tester.GetAllSamples("Autofill.Timing.ParseForm").empty()); | 677 histogram_tester.GetAllSamples("Autofill.Timing.ParseForm").empty()); |
| 584 } | 678 } |
| (...skipping 789 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1374 autofill_manager_->OnTextFieldDidChange(form, form.fields[0], TimeTicks()); | 1468 autofill_manager_->OnTextFieldDidChange(form, form.fields[0], TimeTicks()); |
| 1375 autofill_manager_->OnTextFieldDidChange(form, form.fields[1], TimeTicks()); | 1469 autofill_manager_->OnTextFieldDidChange(form, form.fields[1], TimeTicks()); |
| 1376 | 1470 |
| 1377 // Simulate form submission. | 1471 // Simulate form submission. |
| 1378 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 1472 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 1379 | 1473 |
| 1380 // An autofillable form was submitted, and the number of edited autofilled | 1474 // An autofillable form was submitted, and the number of edited autofilled |
| 1381 // fields is logged. | 1475 // fields is logged. |
| 1382 histogram_tester.ExpectUniqueSample( | 1476 histogram_tester.ExpectUniqueSample( |
| 1383 "Autofill.NumberOfEditedAutofilledFieldsAtSubmission", 2, 1); | 1477 "Autofill.NumberOfEditedAutofilledFieldsAtSubmission", 2, 1); |
| 1478 |
| 1479 // UKM must not be logged unless enabled. |
| 1480 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
| 1481 EXPECT_EQ(0U, ukm_service->sources_count()); |
| 1482 EXPECT_EQ(0U, ukm_service->entries_count()); |
| 1384 } | 1483 } |
| 1385 | 1484 |
| 1386 // Verify that when resetting the autofill manager (such as during a | 1485 // Verify that when resetting the autofill manager (such as during a |
| 1387 // navigation), the proper number of edited fields is logged. | 1486 // navigation), the proper number of edited fields is logged. |
| 1388 TEST_F(AutofillMetricsTest, NumberOfEditedAutofilledFields_NoSubmission) { | 1487 TEST_F(AutofillMetricsTest, NumberOfEditedAutofilledFields_NoSubmission) { |
| 1389 // Construct a fillable form. | 1488 // Construct a fillable form. |
| 1390 FormData form; | 1489 FormData form; |
| 1391 form.name = ASCIIToUTF16("TestForm"); | 1490 form.name = ASCIIToUTF16("TestForm"); |
| 1392 form.origin = GURL("http://example.com/form.html"); | 1491 form.origin = GURL("http://example.com/form.html"); |
| 1393 form.action = GURL("http://example.com/submit.html"); | 1492 form.action = GURL("http://example.com/submit.html"); |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1550 FormFieldData field; | 1649 FormFieldData field; |
| 1551 test::CreateTestFormField("Name", "name", "", "text", &field); | 1650 test::CreateTestFormField("Name", "name", "", "text", &field); |
| 1552 form.fields.push_back(field); | 1651 form.fields.push_back(field); |
| 1553 test::CreateTestFormField("Email", "email", "", "text", &field); | 1652 test::CreateTestFormField("Email", "email", "", "text", &field); |
| 1554 form.fields.push_back(field); | 1653 form.fields.push_back(field); |
| 1555 | 1654 |
| 1556 std::vector<FormData> forms(1, form); | 1655 std::vector<FormData> forms(1, form); |
| 1557 | 1656 |
| 1558 // Ensure no metrics are logged when loading a non-fillable form. | 1657 // Ensure no metrics are logged when loading a non-fillable form. |
| 1559 { | 1658 { |
| 1560 autofill_manager_->OnFormsSeen(forms, TimeTicks()); | 1659 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); |
| 1561 autofill_manager_->Reset(); | 1660 autofill_manager_->Reset(); |
| 1562 | 1661 |
| 1563 EXPECT_EQ(0U, ukm_service->sources_count()); | 1662 EXPECT_EQ(0U, ukm_service->sources_count()); |
| 1564 EXPECT_EQ(0U, ukm_service->entries_count()); | 1663 EXPECT_EQ(0U, ukm_service->entries_count()); |
| 1565 } | 1664 } |
| 1566 | 1665 |
| 1567 // Add another field to the form, so that it becomes fillable. | 1666 // Add another field to the form, so that it becomes fillable. |
| 1568 test::CreateTestFormField("Phone", "phone", "", "text", &field); | 1667 test::CreateTestFormField("Phone", "phone", "", "text", &field); |
| 1569 forms.back().fields.push_back(field); | 1668 forms.back().fields.push_back(field); |
| 1570 | 1669 |
| 1571 // Expect the "form parsed without field type hints" metric to be logged. | 1670 // Expect the "form parsed without field type hints" metric and the |
| 1671 // "form loaded" form interaction event to be logged. |
| 1572 { | 1672 { |
| 1573 autofill_manager_->OnFormsSeen(forms, TimeTicks()); | 1673 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); |
| 1574 autofill_manager_->Reset(); | 1674 autofill_manager_->Reset(); |
| 1575 | 1675 |
| 1576 ASSERT_EQ(1U, ukm_service->sources_count()); | 1676 // Expect an entry for |kUKMDeveloperEngagementEntryName| and another entry |
| 1577 const ukm::UkmSource* source = | 1677 // for |kUKMUserHappinessMetricName|. Both entries are for the same URL. |
| 1578 ukm_service->GetSourceForUrl(form.origin.spec().c_str()); | 1678 ASSERT_EQ(2U, ukm_service->entries_count()); |
| 1579 ASSERT_NE(nullptr, source); | 1679 ASSERT_EQ(2U, ukm_service->sources_count()); |
| 1580 | 1680 VerifyDeveloperEngagementUkm( |
| 1581 ASSERT_EQ(1U, ukm_service->entries_count()); | 1681 form, ukm_service, |
| 1582 const ukm::UkmEntry* entry = ukm_service->GetEntry(0); | 1682 {AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS}); |
| 1583 EXPECT_EQ(source->id(), entry->source_id()); | 1683 VerifyUniqueFormInteractionEventUkm(form, ukm_service, |
| 1584 | 1684 internal::kUKMUserHappinessMetricName, |
| 1585 ukm::Entry entry_proto; | 1685 AutofillMetrics::FORMS_LOADED); |
| 1586 entry->PopulateProto(&entry_proto); | |
| 1587 EXPECT_EQ(source->id(), entry_proto.source_id()); | |
| 1588 EXPECT_EQ(base::HashMetricName(internal::kUKMDeveloperEngagementEntryName), | |
| 1589 entry_proto.event_hash()); | |
| 1590 const ukm::Entry_Metric* metric = FindMetric( | |
| 1591 internal::kUKMDeveloperEngagementMetricName, entry_proto.metrics()); | |
| 1592 ASSERT_NE(nullptr, metric); | |
| 1593 EXPECT_EQ(AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS, | |
| 1594 metric->value()); | |
| 1595 } | 1686 } |
| 1596 } | 1687 } |
| 1597 | 1688 |
| 1598 // Verify that we correctly log UKM for form parsed with type hints regarding | 1689 // Verify that we correctly log UKM for form parsed with type hints regarding |
| 1599 // developer engagement. | 1690 // developer engagement. |
| 1600 TEST_F(AutofillMetricsTest, | 1691 TEST_F(AutofillMetricsTest, |
| 1601 UkmDeveloperEngagement_LogFillableFormParsedWithTypeHints) { | 1692 UkmDeveloperEngagement_LogFillableFormParsedWithTypeHints) { |
| 1602 EnableUkmLogging(); | 1693 EnableUkmLogging(); |
| 1603 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 1694 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
| 1604 | 1695 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1627 test::CreateTestFormField("", "", "", "text", &field); | 1718 test::CreateTestFormField("", "", "", "text", &field); |
| 1628 field.autocomplete_attribute = "given-name"; | 1719 field.autocomplete_attribute = "given-name"; |
| 1629 forms.back().fields.push_back(field); | 1720 forms.back().fields.push_back(field); |
| 1630 test::CreateTestFormField("", "", "", "text", &field); | 1721 test::CreateTestFormField("", "", "", "text", &field); |
| 1631 field.autocomplete_attribute = "email"; | 1722 field.autocomplete_attribute = "email"; |
| 1632 forms.back().fields.push_back(field); | 1723 forms.back().fields.push_back(field); |
| 1633 test::CreateTestFormField("", "", "", "text", &field); | 1724 test::CreateTestFormField("", "", "", "text", &field); |
| 1634 field.autocomplete_attribute = "address-line1"; | 1725 field.autocomplete_attribute = "address-line1"; |
| 1635 forms.back().fields.push_back(field); | 1726 forms.back().fields.push_back(field); |
| 1636 | 1727 |
| 1637 // Expect the "form parsed with field type hints" metric to be logged. | 1728 // Expect the "form parsed without field type hints" metric and the |
| 1729 // "form loaded" form interaction event to be logged. |
| 1638 { | 1730 { |
| 1639 autofill_manager_->OnFormsSeen(forms, TimeTicks()); | 1731 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); |
| 1640 autofill_manager_->Reset(); | 1732 autofill_manager_->Reset(); |
| 1641 | 1733 |
| 1642 ASSERT_EQ(1U, ukm_service->sources_count()); | 1734 // Expect an entry for |kUKMDeveloperEngagementEntryName| and another entry |
| 1643 const ukm::UkmSource* source = | 1735 // for |kUKMUserHappinessMetricName|. Both entries are for the same URL. |
| 1644 ukm_service->GetSourceForUrl(form.origin.spec().c_str()); | 1736 ASSERT_EQ(2U, ukm_service->entries_count()); |
| 1645 ASSERT_NE(nullptr, source); | 1737 ASSERT_EQ(2U, ukm_service->sources_count()); |
| 1646 | 1738 VerifyDeveloperEngagementUkm( |
| 1647 ASSERT_EQ(1U, ukm_service->entries_count()); | 1739 form, ukm_service, |
| 1648 const ukm::UkmEntry* entry = ukm_service->GetEntry(0); | 1740 {AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS}); |
| 1649 EXPECT_EQ(source->id(), entry->source_id()); | 1741 VerifyUniqueFormInteractionEventUkm(form, ukm_service, |
| 1650 | 1742 internal::kUKMUserHappinessMetricName, |
| 1651 ukm::Entry entry_proto; | 1743 AutofillMetrics::FORMS_LOADED); |
| 1652 entry->PopulateProto(&entry_proto); | |
| 1653 EXPECT_EQ(source->id(), entry_proto.source_id()); | |
| 1654 EXPECT_EQ(base::HashMetricName(internal::kUKMDeveloperEngagementEntryName), | |
| 1655 entry_proto.event_hash()); | |
| 1656 const ukm::Entry_Metric* metric = FindMetric( | |
| 1657 internal::kUKMDeveloperEngagementMetricName, entry_proto.metrics()); | |
| 1658 ASSERT_NE(nullptr, metric); | |
| 1659 EXPECT_EQ(AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS, | |
| 1660 metric->value()); | |
| 1661 } | 1744 } |
| 1662 } | 1745 } |
| 1663 | 1746 |
| 1664 // Verify that we correctly log UKM for form parsed with type hints regarding | 1747 // Verify that we correctly log UKM for form parsed with type hints regarding |
| 1665 // developer engagement. | 1748 // developer engagement. |
| 1666 TEST_F(AutofillMetricsTest, UkmDeveloperEngagement_LogUpiVpaTypeHint) { | 1749 TEST_F(AutofillMetricsTest, UkmDeveloperEngagement_LogUpiVpaTypeHint) { |
| 1667 EnableUkmLogging(); | 1750 EnableUkmLogging(); |
| 1668 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 1751 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
| 1669 | 1752 |
| 1670 FormData form; | 1753 FormData form; |
| 1671 form.name = ASCIIToUTF16("TestForm"); | 1754 form.name = ASCIIToUTF16("TestForm"); |
| 1672 form.origin = GURL("http://example.com/form.html"); | 1755 form.origin = GURL("http://example.com/form.html"); |
| 1673 form.action = GURL("http://example.com/submit.html"); | 1756 form.action = GURL("http://example.com/submit.html"); |
| 1674 | 1757 |
| 1675 FormFieldData field; | 1758 FormFieldData field; |
| 1676 test::CreateTestFormField("Name", "name", "", "text", &field); | 1759 test::CreateTestFormField("Name", "name", "", "text", &field); |
| 1677 form.fields.push_back(field); | 1760 form.fields.push_back(field); |
| 1678 test::CreateTestFormField("Email", "email", "", "text", &field); | 1761 test::CreateTestFormField("Email", "email", "", "text", &field); |
| 1679 form.fields.push_back(field); | 1762 form.fields.push_back(field); |
| 1680 test::CreateTestFormField("Payment", "payment", "", "text", &field); | 1763 test::CreateTestFormField("Payment", "payment", "", "text", &field); |
| 1681 field.autocomplete_attribute = "upi-vpa"; | 1764 field.autocomplete_attribute = "upi-vpa"; |
| 1682 form.fields.push_back(field); | 1765 form.fields.push_back(field); |
| 1683 | 1766 |
| 1684 std::vector<FormData> forms(1, form); | 1767 std::vector<FormData> forms(1, form); |
| 1685 | 1768 |
| 1686 // Expect the "upi-vpa hint" metric to be logged. | 1769 // Expect the "upi-vpa hint" metric to be logged and the "form loaded" form |
| 1770 // interaction event to be logged. |
| 1687 { | 1771 { |
| 1688 autofill_manager_->OnFormsSeen(forms, TimeTicks()); | 1772 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); |
| 1689 autofill_manager_->Reset(); | 1773 autofill_manager_->Reset(); |
| 1690 | 1774 |
| 1691 ASSERT_EQ(1U, ukm_service->sources_count()); | 1775 ASSERT_EQ(2U, ukm_service->entries_count()); |
| 1692 const ukm::UkmSource* source = | 1776 ASSERT_EQ(2U, ukm_service->sources_count()); |
| 1693 ukm_service->GetSourceForUrl(form.origin.spec().c_str()); | 1777 VerifyDeveloperEngagementUkm(form, ukm_service, |
| 1694 ASSERT_NE(nullptr, source); | 1778 {AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT}); |
| 1779 VerifyUniqueFormInteractionEventUkm(form, ukm_service, |
| 1780 internal::kUKMUserHappinessMetricName, |
| 1781 AutofillMetrics::FORMS_LOADED); |
| 1695 | 1782 |
| 1696 ASSERT_EQ(1U, ukm_service->entries_count()); | 1783 ukm_service->Purge(); |
| 1697 const ukm::UkmEntry* entry = ukm_service->GetEntry(0); | 1784 } |
| 1698 EXPECT_EQ(source->id(), entry->source_id()); | |
| 1699 | 1785 |
| 1700 ukm::Entry entry_proto; | 1786 // Add another field with an author-specified field type to the form. |
| 1701 entry->PopulateProto(&entry_proto); | 1787 test::CreateTestFormField("", "", "", "text", &field); |
| 1702 EXPECT_EQ(source->id(), entry_proto.source_id()); | 1788 field.autocomplete_attribute = "address-line1"; |
| 1703 EXPECT_EQ(base::HashMetricName(internal::kUKMDeveloperEngagementEntryName), | 1789 forms.back().fields.push_back(field); |
| 1704 entry_proto.event_hash()); | 1790 |
| 1705 const ukm::Entry_Metric* metric = FindMetric( | 1791 { |
| 1706 internal::kUKMDeveloperEngagementMetricName, entry_proto.metrics()); | 1792 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); |
| 1707 ASSERT_NE(nullptr, metric); | 1793 autofill_manager_->Reset(); |
| 1708 EXPECT_EQ(AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT, metric->value()); | 1794 |
| 1795 VerifyDeveloperEngagementUkm( |
| 1796 form, ukm_service, |
| 1797 {AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS, |
| 1798 AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT}); |
| 1709 } | 1799 } |
| 1710 } | 1800 } |
| 1711 | 1801 |
| 1712 // Test that the profile count is logged correctly. | 1802 // Test that the profile count is logged correctly. |
| 1713 TEST_F(AutofillMetricsTest, StoredProfileCount) { | 1803 TEST_F(AutofillMetricsTest, StoredProfileCount) { |
| 1714 // The metric should be logged when the profiles are first loaded. | 1804 // The metric should be logged when the profiles are first loaded. |
| 1715 { | 1805 { |
| 1716 base::HistogramTester histogram_tester; | 1806 base::HistogramTester histogram_tester; |
| 1717 personal_data_->LoadProfiles(); | 1807 personal_data_->LoadProfiles(); |
| 1718 histogram_tester.ExpectUniqueSample("Autofill.StoredProfileCount", 2, 1); | 1808 histogram_tester.ExpectUniqueSample("Autofill.StoredProfileCount", 2, 1); |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1881 // Simulate activating the autofill popup for the email field after typing. | 1971 // Simulate activating the autofill popup for the email field after typing. |
| 1882 form.fields[0].is_autofilled = true; | 1972 form.fields[0].is_autofilled = true; |
| 1883 base::HistogramTester histogram_tester; | 1973 base::HistogramTester histogram_tester; |
| 1884 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 1974 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
| 1885 histogram_tester.ExpectTotalCount("Autofill.AddressSuggestionsCount", 0); | 1975 histogram_tester.ExpectTotalCount("Autofill.AddressSuggestionsCount", 0); |
| 1886 } | 1976 } |
| 1887 } | 1977 } |
| 1888 | 1978 |
| 1889 // Test that the credit card checkout flow user actions are correctly logged. | 1979 // Test that the credit card checkout flow user actions are correctly logged. |
| 1890 TEST_F(AutofillMetricsTest, CreditCardCheckoutFlowUserActions) { | 1980 TEST_F(AutofillMetricsTest, CreditCardCheckoutFlowUserActions) { |
| 1981 EnableUkmLogging(); |
| 1982 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
| 1983 |
| 1891 personal_data_->RecreateCreditCards( | 1984 personal_data_->RecreateCreditCards( |
| 1892 true /* include_local_credit_card */, | 1985 true /* include_local_credit_card */, |
| 1893 false /* include_masked_server_credit_card */, | 1986 false /* include_masked_server_credit_card */, |
| 1894 false /* include_full_server_credit_card */); | 1987 false /* include_full_server_credit_card */); |
| 1895 | 1988 |
| 1896 // Set up our form data. | 1989 // Set up our form data. |
| 1897 FormData form; | 1990 FormData form; |
| 1898 form.name = ASCIIToUTF16("TestForm"); | 1991 form.name = ASCIIToUTF16("TestForm"); |
| 1899 form.origin = GURL("http://example.com/form.html"); | 1992 form.origin = GURL("http://example.com/form.html"); |
| 1900 form.action = GURL("http://example.com/submit.html"); | 1993 form.action = GURL("http://example.com/submit.html"); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1956 // Simulate submitting the credit card form. | 2049 // Simulate submitting the credit card form. |
| 1957 { | 2050 { |
| 1958 base::UserActionTester user_action_tester; | 2051 base::UserActionTester user_action_tester; |
| 1959 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 2052 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
| 1960 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 2053 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 1961 EXPECT_EQ(1, | 2054 EXPECT_EQ(1, |
| 1962 user_action_tester.GetActionCount("Autofill_OnWillSubmitForm")); | 2055 user_action_tester.GetActionCount("Autofill_OnWillSubmitForm")); |
| 1963 EXPECT_EQ(1, user_action_tester.GetActionCount( | 2056 EXPECT_EQ(1, user_action_tester.GetActionCount( |
| 1964 "Autofill_FormSubmitted_NonFillable")); | 2057 "Autofill_FormSubmitted_NonFillable")); |
| 1965 } | 2058 } |
| 2059 |
| 2060 // Expect 2 |FORM_EVENT_LOCAL_SUGGESTION_FILLED| events. First, from |
| 2061 // call to |external_delegate_->DidAcceptSuggestion|. Second, from call to |
| 2062 // |autofill_manager_->FillOrPreviewForm|. |
| 2063 // Expect |NON_FILLABLE_FORM_OR_NEW_DATA| in |AutofillFormSubmittedState| |
| 2064 // because |field.value| is empty in |DeterminePossibleFieldTypesForUpload|. |
| 2065 ASSERT_EQ(4U, ukm_service->entries_count()); |
| 2066 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 2067 VerifyFormInteractionsUkm( |
| 2068 form, ukm_service, |
| 2069 {{internal::kUKMCreditCardFormEventName, |
| 2070 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN}, |
| 2071 {internal::kUKMCreditCardFormEventName, |
| 2072 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED}, |
| 2073 {internal::kUKMCreditCardFormEventName, |
| 2074 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED}, |
| 2075 {internal::kUKMAutofillFormSubmittedStateName, |
| 2076 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}}); |
| 1966 } | 2077 } |
| 1967 | 2078 |
| 1968 // Test that the profile checkout flow user actions are correctly logged. | 2079 // Test that the profile checkout flow user actions are correctly logged. |
| 1969 TEST_F(AutofillMetricsTest, ProfileCheckoutFlowUserActions) { | 2080 TEST_F(AutofillMetricsTest, ProfileCheckoutFlowUserActions) { |
| 2081 EnableUkmLogging(); |
| 2082 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
| 2083 |
| 1970 // Create a profile. | 2084 // Create a profile. |
| 1971 personal_data_->RecreateProfile(); | 2085 personal_data_->RecreateProfile(); |
| 1972 | 2086 |
| 1973 // Set up our form data. | 2087 // Set up our form data. |
| 1974 FormData form; | 2088 FormData form; |
| 1975 form.name = ASCIIToUTF16("TestForm"); | 2089 form.name = ASCIIToUTF16("TestForm"); |
| 1976 form.origin = GURL("http://example.com/form.html"); | 2090 form.origin = GURL("http://example.com/form.html"); |
| 1977 form.action = GURL("http://example.com/submit.html"); | 2091 form.action = GURL("http://example.com/submit.html"); |
| 1978 | 2092 |
| 1979 FormFieldData field; | 2093 FormFieldData field; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 2007 EXPECT_EQ(1, user_action_tester.GetActionCount( | 2121 EXPECT_EQ(1, user_action_tester.GetActionCount( |
| 2008 "Autofill_ShowedProfileSuggestions")); | 2122 "Autofill_ShowedProfileSuggestions")); |
| 2009 } | 2123 } |
| 2010 | 2124 |
| 2011 // Simulate selecting a profile suggestions. | 2125 // Simulate selecting a profile suggestions. |
| 2012 { | 2126 { |
| 2013 base::UserActionTester user_action_tester; | 2127 base::UserActionTester user_action_tester; |
| 2014 std::string guid("00000000-0000-0000-0000-000000000001"); // local profile. | 2128 std::string guid("00000000-0000-0000-0000-000000000001"); // local profile. |
| 2015 external_delegate_->DidAcceptSuggestion( | 2129 external_delegate_->DidAcceptSuggestion( |
| 2016 ASCIIToUTF16("Test"), | 2130 ASCIIToUTF16("Test"), |
| 2017 autofill_manager_->MakeFrontendID(guid, std::string()), 0); | 2131 autofill_manager_->MakeFrontendID(std::string(), guid), 0); |
| 2018 EXPECT_EQ(1, | 2132 EXPECT_EQ(1, |
| 2019 user_action_tester.GetActionCount("Autofill_SelectedSuggestion")); | 2133 user_action_tester.GetActionCount("Autofill_SelectedSuggestion")); |
| 2020 } | 2134 } |
| 2021 | 2135 |
| 2022 // Simulate filling a profile suggestion. | 2136 // Simulate filling a profile suggestion. |
| 2023 { | 2137 { |
| 2024 base::UserActionTester user_action_tester; | 2138 base::UserActionTester user_action_tester; |
| 2025 std::string guid("00000000-0000-0000-0000-000000000001"); // local profile. | 2139 std::string guid("00000000-0000-0000-0000-000000000001"); // local profile. |
| 2026 autofill_manager_->FillOrPreviewForm( | 2140 autofill_manager_->FillOrPreviewForm( |
| 2027 AutofillDriver::FORM_DATA_ACTION_FILL, 0, form, form.fields.front(), | 2141 AutofillDriver::FORM_DATA_ACTION_FILL, 0, form, form.fields.front(), |
| 2028 autofill_manager_->MakeFrontendID(std::string(), guid)); | 2142 autofill_manager_->MakeFrontendID(std::string(), guid)); |
| 2029 EXPECT_EQ(1, user_action_tester.GetActionCount( | 2143 EXPECT_EQ(1, user_action_tester.GetActionCount( |
| 2030 "Autofill_FilledProfileSuggestion")); | 2144 "Autofill_FilledProfileSuggestion")); |
| 2031 } | 2145 } |
| 2032 | 2146 |
| 2033 // Simulate submitting the profile form. | 2147 // Simulate submitting the profile form. |
| 2034 { | 2148 { |
| 2035 base::UserActionTester user_action_tester; | 2149 base::UserActionTester user_action_tester; |
| 2036 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 2150 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
| 2037 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 2151 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 2038 EXPECT_EQ(1, | 2152 EXPECT_EQ(1, |
| 2039 user_action_tester.GetActionCount("Autofill_OnWillSubmitForm")); | 2153 user_action_tester.GetActionCount("Autofill_OnWillSubmitForm")); |
| 2040 EXPECT_EQ(1, user_action_tester.GetActionCount( | 2154 EXPECT_EQ(1, user_action_tester.GetActionCount( |
| 2041 "Autofill_FormSubmitted_NonFillable")); | 2155 "Autofill_FormSubmitted_NonFillable")); |
| 2042 } | 2156 } |
| 2157 |
| 2158 // Expect 2 |FORM_EVENT_LOCAL_SUGGESTION_FILLED| events. First, from |
| 2159 // call to |external_delegate_->DidAcceptSuggestion|. Second, from call to |
| 2160 // |autofill_manager_->FillOrPreviewForm|. |
| 2161 // Expect |NON_FILLABLE_FORM_OR_NEW_DATA| in |AutofillFormSubmittedState| |
| 2162 // because |field.value| is empty in |DeterminePossibleFieldTypesForUpload|. |
| 2163 VerifyFormInteractionsUkm( |
| 2164 form, ukm_service, |
| 2165 {{internal::kUKMAddressFormEventName, |
| 2166 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN}, |
| 2167 {internal::kUKMAddressFormEventName, |
| 2168 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED}, |
| 2169 {internal::kUKMAddressFormEventName, |
| 2170 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED}, |
| 2171 {internal::kUKMAutofillFormSubmittedStateName, |
| 2172 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}}); |
| 2173 ASSERT_EQ(4U, ukm_service->entries_count()); |
| 2174 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 2043 } | 2175 } |
| 2044 | 2176 |
| 2045 // Tests that the Autofill_PolledCreditCardSuggestions user action is only | 2177 // Tests that the Autofill_PolledCreditCardSuggestions user action is only |
| 2046 // logged once if the field is queried repeatedly. | 2178 // logged once if the field is queried repeatedly. |
| 2047 TEST_F(AutofillMetricsTest, PolledCreditCardSuggestions_DebounceLogs) { | 2179 TEST_F(AutofillMetricsTest, PolledCreditCardSuggestions_DebounceLogs) { |
| 2048 personal_data_->RecreateCreditCards( | 2180 personal_data_->RecreateCreditCards( |
| 2049 true /* include_local_credit_card */, | 2181 true /* include_local_credit_card */, |
| 2050 false /* include_masked_server_credit_card */, | 2182 false /* include_masked_server_credit_card */, |
| 2051 false /* include_full_server_credit_card */); | 2183 false /* include_full_server_credit_card */); |
| 2052 | 2184 |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2322 base::HistogramTester histogram_tester; | 2454 base::HistogramTester histogram_tester; |
| 2323 autofill_manager_->DidShowSuggestions(false /* is_new_popup */, form, | 2455 autofill_manager_->DidShowSuggestions(false /* is_new_popup */, form, |
| 2324 field); | 2456 field); |
| 2325 histogram_tester.ExpectBucketCount( | 2457 histogram_tester.ExpectBucketCount( |
| 2326 "Autofill.FormEvents.CreditCard", | 2458 "Autofill.FormEvents.CreditCard", |
| 2327 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN, 0); | 2459 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN, 0); |
| 2328 histogram_tester.ExpectBucketCount( | 2460 histogram_tester.ExpectBucketCount( |
| 2329 "Autofill.FormEvents.CreditCard", | 2461 "Autofill.FormEvents.CreditCard", |
| 2330 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN_ONCE, 0); | 2462 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN_ONCE, 0); |
| 2331 } | 2463 } |
| 2464 |
| 2465 // UKM must not be logged unless enabled. |
| 2466 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
| 2467 EXPECT_EQ(0U, ukm_service->sources_count()); |
| 2468 EXPECT_EQ(0U, ukm_service->entries_count()); |
| 2332 } | 2469 } |
| 2333 | 2470 |
| 2334 // Test that we log selected form event for credit cards. | 2471 // Test that we log selected form event for credit cards. |
| 2335 TEST_F(AutofillMetricsTest, CreditCardSelectedFormEvents) { | 2472 TEST_F(AutofillMetricsTest, CreditCardSelectedFormEvents) { |
| 2336 EnableWalletSync(); | 2473 EnableWalletSync(); |
| 2337 // Creating all kinds of cards. | 2474 // Creating all kinds of cards. |
| 2338 personal_data_->RecreateCreditCards( | 2475 personal_data_->RecreateCreditCards( |
| 2339 true /* include_local_credit_card */, | 2476 true /* include_local_credit_card */, |
| 2340 true /* include_masked_server_credit_card */, | 2477 true /* include_masked_server_credit_card */, |
| 2341 true /* include_full_server_credit_card */); | 2478 true /* include_full_server_credit_card */); |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2587 std::string()); | 2724 std::string()); |
| 2588 histogram_tester.ExpectTotalCount( | 2725 histogram_tester.ExpectTotalCount( |
| 2589 "Autofill.UnmaskPrompt.GetRealPanDuration", 1); | 2726 "Autofill.UnmaskPrompt.GetRealPanDuration", 1); |
| 2590 histogram_tester.ExpectTotalCount( | 2727 histogram_tester.ExpectTotalCount( |
| 2591 "Autofill.UnmaskPrompt.GetRealPanDuration.Failure", 1); | 2728 "Autofill.UnmaskPrompt.GetRealPanDuration.Failure", 1); |
| 2592 } | 2729 } |
| 2593 } | 2730 } |
| 2594 | 2731 |
| 2595 // Test that we log submitted form events for credit cards. | 2732 // Test that we log submitted form events for credit cards. |
| 2596 TEST_F(AutofillMetricsTest, CreditCardSubmittedFormEvents) { | 2733 TEST_F(AutofillMetricsTest, CreditCardSubmittedFormEvents) { |
| 2734 EnableUkmLogging(); |
| 2735 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
| 2736 |
| 2597 EnableWalletSync(); | 2737 EnableWalletSync(); |
| 2598 // Creating all kinds of cards. | 2738 // Creating all kinds of cards. |
| 2599 personal_data_->RecreateCreditCards( | 2739 personal_data_->RecreateCreditCards( |
| 2600 true /* include_local_credit_card */, | 2740 true /* include_local_credit_card */, |
| 2601 true /* include_masked_server_credit_card */, | 2741 true /* include_masked_server_credit_card */, |
| 2602 true /* include_full_server_credit_card */); | 2742 true /* include_full_server_credit_card */); |
| 2603 // Set up our form data. | 2743 // Set up our form data. |
| 2604 FormData form; | 2744 FormData form; |
| 2605 form.name = ASCIIToUTF16("TestForm"); | 2745 form.name = ASCIIToUTF16("TestForm"); |
| 2606 form.origin = GURL("http://example.com/form.html"); | 2746 form.origin = GURL("http://example.com/form.html"); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 2626 // Simulating submission with no filled data. | 2766 // Simulating submission with no filled data. |
| 2627 base::HistogramTester histogram_tester; | 2767 base::HistogramTester histogram_tester; |
| 2628 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 2768 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
| 2629 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 2769 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 2630 histogram_tester.ExpectBucketCount( | 2770 histogram_tester.ExpectBucketCount( |
| 2631 "Autofill.FormEvents.CreditCard", | 2771 "Autofill.FormEvents.CreditCard", |
| 2632 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 1); | 2772 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 1); |
| 2633 histogram_tester.ExpectBucketCount( | 2773 histogram_tester.ExpectBucketCount( |
| 2634 "Autofill.FormEvents.CreditCard", | 2774 "Autofill.FormEvents.CreditCard", |
| 2635 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_SUBMITTED_ONCE, 1); | 2775 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_SUBMITTED_ONCE, 1); |
| 2776 |
| 2777 ASSERT_EQ(1U, ukm_service->entries_count()); |
| 2778 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 2779 VerifyFormInteractionsUkm( |
| 2780 form, ukm_service, |
| 2781 {{internal::kUKMAutofillFormSubmittedStateName, |
| 2782 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}}); |
| 2783 ukm_service->Purge(); |
| 2636 } | 2784 } |
| 2637 | 2785 |
| 2638 // Reset the autofill manager state. | 2786 // Reset the autofill manager state. |
| 2639 autofill_manager_->Reset(); | 2787 autofill_manager_->Reset(); |
| 2640 autofill_manager_->AddSeenForm(form, field_types, field_types); | 2788 autofill_manager_->AddSeenForm(form, field_types, field_types); |
| 2641 | 2789 |
| 2642 { | 2790 { |
| 2643 // Simulating submission with suggestion shown. | 2791 // Simulating submission with suggestion shown. |
| 2644 base::HistogramTester histogram_tester; | 2792 base::HistogramTester histogram_tester; |
| 2645 autofill_manager_->DidShowSuggestions(true /* is_new_popup */, form, field); | 2793 autofill_manager_->DidShowSuggestions(true /* is_new_popup */, form, field); |
| 2646 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 2794 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
| 2647 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 2795 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 2648 histogram_tester.ExpectBucketCount( | 2796 histogram_tester.ExpectBucketCount( |
| 2649 "Autofill.FormEvents.CreditCard", | 2797 "Autofill.FormEvents.CreditCard", |
| 2650 AutofillMetrics::FORM_EVENT_SUGGESTION_SHOWN_SUBMITTED_ONCE, 1); | 2798 AutofillMetrics::FORM_EVENT_SUGGESTION_SHOWN_SUBMITTED_ONCE, 1); |
| 2651 histogram_tester.ExpectBucketCount( | 2799 histogram_tester.ExpectBucketCount( |
| 2652 "Autofill.FormEvents.CreditCard", | 2800 "Autofill.FormEvents.CreditCard", |
| 2653 AutofillMetrics::FORM_EVENT_SUGGESTION_SHOWN_WILL_SUBMIT_ONCE, 1); | 2801 AutofillMetrics::FORM_EVENT_SUGGESTION_SHOWN_WILL_SUBMIT_ONCE, 1); |
| 2802 |
| 2803 ASSERT_EQ(2U, ukm_service->entries_count()); |
| 2804 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 2805 VerifyFormInteractionsUkm( |
| 2806 form, ukm_service, |
| 2807 {{internal::kUKMCreditCardFormEventName, |
| 2808 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN}, |
| 2809 {internal::kUKMAutofillFormSubmittedStateName, |
| 2810 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}}); |
| 2811 ukm_service->Purge(); |
| 2654 } | 2812 } |
| 2655 | 2813 |
| 2656 // Reset the autofill manager state. | 2814 // Reset the autofill manager state. |
| 2657 autofill_manager_->Reset(); | 2815 autofill_manager_->Reset(); |
| 2658 autofill_manager_->AddSeenForm(form, field_types, field_types); | 2816 autofill_manager_->AddSeenForm(form, field_types, field_types); |
| 2659 | 2817 |
| 2660 { | 2818 { |
| 2661 // Simulating submission with filled local data. | 2819 // Simulating submission with filled local data. |
| 2662 base::HistogramTester histogram_tester; | 2820 base::HistogramTester histogram_tester; |
| 2663 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 2821 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
| 2664 std::string guid("10000000-0000-0000-0000-000000000001"); // local card | 2822 std::string guid("10000000-0000-0000-0000-000000000001"); // local card |
| 2665 autofill_manager_->FillOrPreviewForm( | 2823 autofill_manager_->FillOrPreviewForm( |
| 2666 AutofillDriver::FORM_DATA_ACTION_FILL, 0, form, form.fields.front(), | 2824 AutofillDriver::FORM_DATA_ACTION_FILL, 0, form, form.fields.front(), |
| 2667 autofill_manager_->MakeFrontendID(guid, std::string())); | 2825 autofill_manager_->MakeFrontendID(guid, std::string())); |
| 2668 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 2826 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 2669 histogram_tester.ExpectBucketCount( | 2827 histogram_tester.ExpectBucketCount( |
| 2670 "Autofill.FormEvents.CreditCard", | 2828 "Autofill.FormEvents.CreditCard", |
| 2671 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_WILL_SUBMIT_ONCE, 1); | 2829 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_WILL_SUBMIT_ONCE, 1); |
| 2672 histogram_tester.ExpectBucketCount( | 2830 histogram_tester.ExpectBucketCount( |
| 2673 "Autofill.FormEvents.CreditCard", | 2831 "Autofill.FormEvents.CreditCard", |
| 2674 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_SUBMITTED_ONCE, 1); | 2832 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_SUBMITTED_ONCE, 1); |
| 2833 |
| 2834 ASSERT_EQ(2U, ukm_service->entries_count()); |
| 2835 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 2836 VerifyFormInteractionsUkm( |
| 2837 form, ukm_service, |
| 2838 {{internal::kUKMCreditCardFormEventName, |
| 2839 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED}, |
| 2840 {internal::kUKMAutofillFormSubmittedStateName, |
| 2841 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}}); |
| 2842 ukm_service->Purge(); |
| 2675 } | 2843 } |
| 2676 | 2844 |
| 2677 // Reset the autofill manager state. | 2845 // Reset the autofill manager state. |
| 2678 autofill_manager_->Reset(); | 2846 autofill_manager_->Reset(); |
| 2679 autofill_manager_->AddSeenForm(form, field_types, field_types); | 2847 autofill_manager_->AddSeenForm(form, field_types, field_types); |
| 2680 | 2848 |
| 2681 { | 2849 { |
| 2682 // Simulating submission with filled server data. | 2850 // Simulating submission with filled server data. |
| 2683 base::HistogramTester histogram_tester; | 2851 base::HistogramTester histogram_tester; |
| 2684 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 2852 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
| 2685 std::string guid( | 2853 std::string guid( |
| 2686 "10000000-0000-0000-0000-000000000003"); // full server card | 2854 "10000000-0000-0000-0000-000000000003"); // full server card |
| 2687 autofill_manager_->FillOrPreviewForm( | 2855 autofill_manager_->FillOrPreviewForm( |
| 2688 AutofillDriver::FORM_DATA_ACTION_FILL, 0, form, form.fields.front(), | 2856 AutofillDriver::FORM_DATA_ACTION_FILL, 0, form, form.fields.front(), |
| 2689 autofill_manager_->MakeFrontendID(guid, std::string())); | 2857 autofill_manager_->MakeFrontendID(guid, std::string())); |
| 2690 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 2858 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 2691 histogram_tester.ExpectBucketCount( | 2859 histogram_tester.ExpectBucketCount( |
| 2692 "Autofill.FormEvents.CreditCard", | 2860 "Autofill.FormEvents.CreditCard", |
| 2693 AutofillMetrics::FORM_EVENT_SERVER_SUGGESTION_WILL_SUBMIT_ONCE, 1); | 2861 AutofillMetrics::FORM_EVENT_SERVER_SUGGESTION_WILL_SUBMIT_ONCE, 1); |
| 2694 histogram_tester.ExpectBucketCount( | 2862 histogram_tester.ExpectBucketCount( |
| 2695 "Autofill.FormEvents.CreditCard", | 2863 "Autofill.FormEvents.CreditCard", |
| 2696 AutofillMetrics::FORM_EVENT_SERVER_SUGGESTION_SUBMITTED_ONCE, 1); | 2864 AutofillMetrics::FORM_EVENT_SERVER_SUGGESTION_SUBMITTED_ONCE, 1); |
| 2865 |
| 2866 ASSERT_EQ(2U, ukm_service->entries_count()); |
| 2867 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 2868 VerifyFormInteractionsUkm( |
| 2869 form, ukm_service, |
| 2870 {{internal::kUKMCreditCardFormEventName, |
| 2871 AutofillMetrics::FORM_EVENT_SERVER_SUGGESTION_FILLED}, |
| 2872 {internal::kUKMAutofillFormSubmittedStateName, |
| 2873 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}}); |
| 2874 ukm_service->Purge(); |
| 2697 } | 2875 } |
| 2698 | 2876 |
| 2699 // Reset the autofill manager state. | 2877 // Reset the autofill manager state. |
| 2700 autofill_manager_->Reset(); | 2878 autofill_manager_->Reset(); |
| 2701 autofill_manager_->AddSeenForm(form, field_types, field_types); | 2879 autofill_manager_->AddSeenForm(form, field_types, field_types); |
| 2702 | 2880 |
| 2703 { | 2881 { |
| 2704 // Simulating submission with a masked card server suggestion. | 2882 // Simulating submission with a masked card server suggestion. |
| 2705 base::HistogramTester histogram_tester; | 2883 base::HistogramTester histogram_tester; |
| 2706 std::string guid( | 2884 std::string guid( |
| 2707 "10000000-0000-0000-0000-000000000002"); // masked server card | 2885 "10000000-0000-0000-0000-000000000002"); // masked server card |
| 2708 autofill_manager_->FillOrPreviewForm( | 2886 autofill_manager_->FillOrPreviewForm( |
| 2709 AutofillDriver::FORM_DATA_ACTION_FILL, 0, form, form.fields.back(), | 2887 AutofillDriver::FORM_DATA_ACTION_FILL, 0, form, form.fields.back(), |
| 2710 autofill_manager_->MakeFrontendID(guid, std::string())); | 2888 autofill_manager_->MakeFrontendID(guid, std::string())); |
| 2711 autofill_manager_->OnDidGetRealPan(AutofillClient::SUCCESS, | 2889 autofill_manager_->OnDidGetRealPan(AutofillClient::SUCCESS, |
| 2712 "6011000990139424"); | 2890 "6011000990139424"); |
| 2891 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 2713 histogram_tester.ExpectBucketCount( | 2892 histogram_tester.ExpectBucketCount( |
| 2714 "Autofill.FormEvents.CreditCard", | 2893 "Autofill.FormEvents.CreditCard", |
| 2715 AutofillMetrics::FORM_EVENT_MASKED_SERVER_CARD_SUGGESTION_FILLED, 1); | 2894 AutofillMetrics::FORM_EVENT_MASKED_SERVER_CARD_SUGGESTION_FILLED, 1); |
| 2716 histogram_tester.ExpectBucketCount( | 2895 histogram_tester.ExpectBucketCount( |
| 2717 "Autofill.FormEvents.CreditCard", | 2896 "Autofill.FormEvents.CreditCard", |
| 2718 AutofillMetrics::FORM_EVENT_MASKED_SERVER_CARD_SUGGESTION_FILLED_ONCE, | 2897 AutofillMetrics::FORM_EVENT_MASKED_SERVER_CARD_SUGGESTION_FILLED_ONCE, |
| 2719 1); | 2898 1); |
| 2899 |
| 2900 ASSERT_EQ(4U, ukm_service->entries_count()); |
| 2901 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 2902 VerifyFormInteractionsUkm( |
| 2903 form, ukm_service, |
| 2904 {{internal::kUKMUnmaskPromptEventName, |
| 2905 AutofillMetrics::UNMASK_PROMPT_SHOWN}, |
| 2906 {internal::kUKMCreditCardFormEventName, |
| 2907 AutofillMetrics::FORM_EVENT_MASKED_SERVER_CARD_SUGGESTION_SELECTED}, |
| 2908 {internal::kUKMCreditCardFormEventName, |
| 2909 AutofillMetrics::FORM_EVENT_MASKED_SERVER_CARD_SUGGESTION_FILLED}, |
| 2910 {internal::kUKMAutofillFormSubmittedStateName, |
| 2911 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}}); |
| 2912 ukm_service->Purge(); |
| 2720 } | 2913 } |
| 2721 | 2914 |
| 2915 // Reset the autofill manager state. |
| 2916 autofill_manager_->Reset(); |
| 2917 |
| 2722 // Recreating cards as the previous test should have upgraded the masked | 2918 // Recreating cards as the previous test should have upgraded the masked |
| 2723 // card to a full card. | 2919 // card to a full card. |
| 2724 personal_data_->RecreateCreditCards( | 2920 personal_data_->RecreateCreditCards( |
| 2725 true /* include_local_credit_card */, | 2921 true /* include_local_credit_card */, |
| 2726 true /* include_masked_server_credit_card */, | 2922 true /* include_masked_server_credit_card */, |
| 2727 true /* include_full_server_credit_card */); | 2923 true /* include_full_server_credit_card */); |
| 2728 | 2924 |
| 2729 // Reset the autofill manager state. | |
| 2730 autofill_manager_->Reset(); | |
| 2731 autofill_manager_->AddSeenForm(form, field_types, field_types); | 2925 autofill_manager_->AddSeenForm(form, field_types, field_types); |
| 2732 | 2926 |
| 2733 { | 2927 { |
| 2734 // Simulating multiple submissions. | 2928 // Simulating multiple submissions. |
| 2735 base::HistogramTester histogram_tester; | 2929 base::HistogramTester histogram_tester; |
| 2736 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 2930 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
| 2737 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 2931 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 2932 |
| 2933 ASSERT_EQ(1U, ukm_service->entries_count()); |
| 2934 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 2935 VerifyFormInteractionsUkm( |
| 2936 form, ukm_service, |
| 2937 {{internal::kUKMAutofillFormSubmittedStateName, |
| 2938 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}}); |
| 2939 ukm_service->Purge(); |
| 2940 |
| 2941 autofill_manager_->form_interactions_ukm_logger() |
| 2942 ->set_form_loaded_timestamp(TimeTicks::Now()); |
| 2738 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 2943 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 2944 |
| 2945 ASSERT_EQ(1U, ukm_service->entries_count()); |
| 2946 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 2947 VerifyFormInteractionsUkm( |
| 2948 form, ukm_service, |
| 2949 {{internal::kUKMAutofillFormSubmittedStateName, |
| 2950 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}}); |
| 2951 ukm_service->Purge(); |
| 2952 |
| 2739 histogram_tester.ExpectBucketCount( | 2953 histogram_tester.ExpectBucketCount( |
| 2740 "Autofill.FormEvents.CreditCard", | 2954 "Autofill.FormEvents.CreditCard", |
| 2741 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 1); | 2955 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 1); |
| 2742 histogram_tester.ExpectBucketCount( | 2956 histogram_tester.ExpectBucketCount( |
| 2743 "Autofill.FormEvents.CreditCard", | 2957 "Autofill.FormEvents.CreditCard", |
| 2744 AutofillMetrics::FORM_EVENT_SUGGESTION_SHOWN_WILL_SUBMIT_ONCE, 0); | 2958 AutofillMetrics::FORM_EVENT_SUGGESTION_SHOWN_WILL_SUBMIT_ONCE, 0); |
| 2745 histogram_tester.ExpectBucketCount( | 2959 histogram_tester.ExpectBucketCount( |
| 2746 "Autofill.FormEvents.CreditCard", | 2960 "Autofill.FormEvents.CreditCard", |
| 2747 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_WILL_SUBMIT_ONCE, 0); | 2961 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_WILL_SUBMIT_ONCE, 0); |
| 2748 histogram_tester.ExpectBucketCount( | 2962 histogram_tester.ExpectBucketCount( |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2809 "Autofill.FormEvents.CreditCard", | 3023 "Autofill.FormEvents.CreditCard", |
| 2810 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_WILL_SUBMIT_ONCE, 0); | 3024 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_WILL_SUBMIT_ONCE, 0); |
| 2811 histogram_tester.ExpectBucketCount( | 3025 histogram_tester.ExpectBucketCount( |
| 2812 "Autofill.FormEvents.CreditCard", | 3026 "Autofill.FormEvents.CreditCard", |
| 2813 AutofillMetrics::FORM_EVENT_SERVER_SUGGESTION_WILL_SUBMIT_ONCE, 0); | 3027 AutofillMetrics::FORM_EVENT_SERVER_SUGGESTION_WILL_SUBMIT_ONCE, 0); |
| 2814 histogram_tester.ExpectBucketCount( | 3028 histogram_tester.ExpectBucketCount( |
| 2815 "Autofill.FormEvents.CreditCard", | 3029 "Autofill.FormEvents.CreditCard", |
| 2816 AutofillMetrics:: | 3030 AutofillMetrics:: |
| 2817 FORM_EVENT_MASKED_SERVER_CARD_SUGGESTION_WILL_SUBMIT_ONCE, | 3031 FORM_EVENT_MASKED_SERVER_CARD_SUGGESTION_WILL_SUBMIT_ONCE, |
| 2818 0); | 3032 0); |
| 3033 |
| 3034 ASSERT_EQ(2U, ukm_service->entries_count()); |
| 3035 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 3036 VerifyFormInteractionsUkm( |
| 3037 form, ukm_service, |
| 3038 {{internal::kUKMCreditCardFormEventName, |
| 3039 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN}, |
| 3040 {internal::kUKMAutofillFormSubmittedStateName, |
| 3041 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}}); |
| 3042 ukm_service->Purge(); |
| 2819 } | 3043 } |
| 2820 } | 3044 } |
| 2821 | 3045 |
| 2822 // Test that we log "will submit" (but not submitted) form events for credit | 3046 // Test that we log "will submit" (but not submitted) form events for credit |
| 2823 // cards. Mirrors CreditCardSubmittedFormEvents test but does not expect any | 3047 // cards. Mirrors CreditCardSubmittedFormEvents test but does not expect any |
| 2824 // "submitted" metrics. | 3048 // "submitted" metrics. |
| 2825 TEST_F(AutofillMetricsTest, CreditCardWillSubmitFormEvents) { | 3049 TEST_F(AutofillMetricsTest, CreditCardWillSubmitFormEvents) { |
| 2826 EnableWalletSync(); | 3050 EnableWalletSync(); |
| 2827 // Creating all kinds of cards. | 3051 // Creating all kinds of cards. |
| 2828 personal_data_->RecreateCreditCards( | 3052 personal_data_->RecreateCreditCards( |
| (...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3230 "Autofill.FormEvents.Address", | 3454 "Autofill.FormEvents.Address", |
| 3231 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED, 2); | 3455 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED, 2); |
| 3232 histogram_tester.ExpectBucketCount( | 3456 histogram_tester.ExpectBucketCount( |
| 3233 "Autofill.FormEvents.Address", | 3457 "Autofill.FormEvents.Address", |
| 3234 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED_ONCE, 1); | 3458 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED_ONCE, 1); |
| 3235 } | 3459 } |
| 3236 } | 3460 } |
| 3237 | 3461 |
| 3238 // Test that we log submitted form events for address. | 3462 // Test that we log submitted form events for address. |
| 3239 TEST_F(AutofillMetricsTest, AddressSubmittedFormEvents) { | 3463 TEST_F(AutofillMetricsTest, AddressSubmittedFormEvents) { |
| 3464 EnableUkmLogging(); |
| 3465 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
| 3466 |
| 3240 EnableWalletSync(); | 3467 EnableWalletSync(); |
| 3241 // Create a profile. | 3468 // Create a profile. |
| 3242 personal_data_->RecreateProfile(); | 3469 personal_data_->RecreateProfile(); |
| 3243 // Set up our form data. | 3470 // Set up our form data. |
| 3244 FormData form; | 3471 FormData form; |
| 3245 form.name = ASCIIToUTF16("TestForm"); | 3472 form.name = ASCIIToUTF16("TestForm"); |
| 3246 form.origin = GURL("http://example.com/form.html"); | 3473 form.origin = GURL("http://example.com/form.html"); |
| 3247 form.action = GURL("http://example.com/submit.html"); | 3474 form.action = GURL("http://example.com/submit.html"); |
| 3248 | 3475 |
| 3249 FormFieldData field; | 3476 FormFieldData field; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 3266 // Simulating submission with no filled data. | 3493 // Simulating submission with no filled data. |
| 3267 base::HistogramTester histogram_tester; | 3494 base::HistogramTester histogram_tester; |
| 3268 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 3495 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
| 3269 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 3496 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 3270 histogram_tester.ExpectBucketCount( | 3497 histogram_tester.ExpectBucketCount( |
| 3271 "Autofill.FormEvents.Address", | 3498 "Autofill.FormEvents.Address", |
| 3272 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 1); | 3499 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 1); |
| 3273 histogram_tester.ExpectBucketCount( | 3500 histogram_tester.ExpectBucketCount( |
| 3274 "Autofill.FormEvents.Address", | 3501 "Autofill.FormEvents.Address", |
| 3275 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_SUBMITTED_ONCE, 1); | 3502 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_SUBMITTED_ONCE, 1); |
| 3503 |
| 3504 ASSERT_EQ(1U, ukm_service->entries_count()); |
| 3505 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 3506 VerifyFormInteractionsUkm( |
| 3507 form, ukm_service, |
| 3508 {{internal::kUKMAutofillFormSubmittedStateName, |
| 3509 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}}); |
| 3510 ukm_service->Purge(); |
| 3276 } | 3511 } |
| 3277 | 3512 |
| 3278 // Reset the autofill manager state. | 3513 // Reset the autofill manager state. |
| 3279 autofill_manager_->Reset(); | 3514 autofill_manager_->Reset(); |
| 3280 autofill_manager_->AddSeenForm(form, field_types, field_types); | 3515 autofill_manager_->AddSeenForm(form, field_types, field_types); |
| 3281 | 3516 |
| 3282 { | 3517 { |
| 3283 // Simulating submission with suggestion shown. | 3518 // Simulating submission with suggestion shown. |
| 3284 base::HistogramTester histogram_tester; | 3519 base::HistogramTester histogram_tester; |
| 3285 autofill_manager_->DidShowSuggestions(true /* is_new_popup */, form, field); | 3520 autofill_manager_->DidShowSuggestions(true /* is_new_popup */, form, field); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 3316 | 3551 |
| 3317 // Reset the autofill manager state. | 3552 // Reset the autofill manager state. |
| 3318 autofill_manager_->Reset(); | 3553 autofill_manager_->Reset(); |
| 3319 autofill_manager_->AddSeenForm(form, field_types, field_types); | 3554 autofill_manager_->AddSeenForm(form, field_types, field_types); |
| 3320 | 3555 |
| 3321 { | 3556 { |
| 3322 // Simulating multiple submissions. | 3557 // Simulating multiple submissions. |
| 3323 base::HistogramTester histogram_tester; | 3558 base::HistogramTester histogram_tester; |
| 3324 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 3559 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
| 3325 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 3560 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 3561 |
| 3562 autofill_manager_->form_interactions_ukm_logger() |
| 3563 ->set_form_loaded_timestamp(TimeTicks::Now()); |
| 3326 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 3564 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 3565 |
| 3327 histogram_tester.ExpectBucketCount( | 3566 histogram_tester.ExpectBucketCount( |
| 3328 "Autofill.FormEvents.Address", | 3567 "Autofill.FormEvents.Address", |
| 3329 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 1); | 3568 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 1); |
| 3330 histogram_tester.ExpectBucketCount( | 3569 histogram_tester.ExpectBucketCount( |
| 3331 "Autofill.FormEvents.Address", | 3570 "Autofill.FormEvents.Address", |
| 3332 AutofillMetrics::FORM_EVENT_SUGGESTION_SHOWN_WILL_SUBMIT_ONCE, 0); | 3571 AutofillMetrics::FORM_EVENT_SUGGESTION_SHOWN_WILL_SUBMIT_ONCE, 0); |
| 3333 histogram_tester.ExpectBucketCount( | 3572 histogram_tester.ExpectBucketCount( |
| 3334 "Autofill.FormEvents.Address", | 3573 "Autofill.FormEvents.Address", |
| 3335 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_WILL_SUBMIT_ONCE, 0); | 3574 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_WILL_SUBMIT_ONCE, 0); |
| 3336 histogram_tester.ExpectBucketCount( | 3575 histogram_tester.ExpectBucketCount( |
| (...skipping 16 matching lines...) Expand all Loading... |
| 3353 // Reset the autofill manager state. | 3592 // Reset the autofill manager state. |
| 3354 autofill_manager_->Reset(); | 3593 autofill_manager_->Reset(); |
| 3355 autofill_manager_->AddSeenForm(form, field_types, field_types); | 3594 autofill_manager_->AddSeenForm(form, field_types, field_types); |
| 3356 | 3595 |
| 3357 { | 3596 { |
| 3358 // Simulating submission with suggestion show but without previous | 3597 // Simulating submission with suggestion show but without previous |
| 3359 // interaction. | 3598 // interaction. |
| 3360 base::HistogramTester histogram_tester; | 3599 base::HistogramTester histogram_tester; |
| 3361 autofill_manager_->DidShowSuggestions(true /* is_new_popup */, form, field); | 3600 autofill_manager_->DidShowSuggestions(true /* is_new_popup */, form, field); |
| 3362 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 3601 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 3602 |
| 3363 histogram_tester.ExpectBucketCount( | 3603 histogram_tester.ExpectBucketCount( |
| 3364 "Autofill.FormEvents.Address", | 3604 "Autofill.FormEvents.Address", |
| 3365 AutofillMetrics::FORM_EVENT_SUGGESTION_SHOWN_WILL_SUBMIT_ONCE, 0); | 3605 AutofillMetrics::FORM_EVENT_SUGGESTION_SHOWN_WILL_SUBMIT_ONCE, 0); |
| 3366 histogram_tester.ExpectBucketCount( | 3606 histogram_tester.ExpectBucketCount( |
| 3367 "Autofill.FormEvents.Address", | 3607 "Autofill.FormEvents.Address", |
| 3368 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 0); | 3608 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 0); |
| 3369 histogram_tester.ExpectBucketCount( | 3609 histogram_tester.ExpectBucketCount( |
| 3370 "Autofill.FormEvents.Address", | 3610 "Autofill.FormEvents.Address", |
| 3371 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_WILL_SUBMIT_ONCE, 0); | 3611 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_WILL_SUBMIT_ONCE, 0); |
| 3372 histogram_tester.ExpectBucketCount( | 3612 histogram_tester.ExpectBucketCount( |
| (...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3723 { | 3963 { |
| 3724 // Simulate activating the autofill popup for the street field. | 3964 // Simulate activating the autofill popup for the street field. |
| 3725 base::HistogramTester histogram_tester; | 3965 base::HistogramTester histogram_tester; |
| 3726 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 3966 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
| 3727 histogram_tester.ExpectUniqueSample( | 3967 histogram_tester.ExpectUniqueSample( |
| 3728 "Autofill.FormEvents.Address.WithOnlyLocalData", | 3968 "Autofill.FormEvents.Address.WithOnlyLocalData", |
| 3729 AutofillMetrics::FORM_EVENT_INTERACTED_ONCE, 1); | 3969 AutofillMetrics::FORM_EVENT_INTERACTED_ONCE, 1); |
| 3730 } | 3970 } |
| 3731 } | 3971 } |
| 3732 | 3972 |
| 3733 | |
| 3734 // Test that we log that Autofill is enabled when filling a form. | 3973 // Test that we log that Autofill is enabled when filling a form. |
| 3735 TEST_F(AutofillMetricsTest, AutofillIsEnabledAtPageLoad) { | 3974 TEST_F(AutofillMetricsTest, AutofillIsEnabledAtPageLoad) { |
| 3736 base::HistogramTester histogram_tester; | 3975 base::HistogramTester histogram_tester; |
| 3737 autofill_manager_->set_autofill_enabled(true); | 3976 autofill_manager_->set_autofill_enabled(true); |
| 3738 autofill_manager_->OnFormsSeen(std::vector<FormData>(), TimeTicks()); | 3977 autofill_manager_->OnFormsSeen(std::vector<FormData>(), TimeTicks()); |
| 3739 histogram_tester.ExpectUniqueSample("Autofill.IsEnabled.PageLoad", true, 1); | 3978 histogram_tester.ExpectUniqueSample("Autofill.IsEnabled.PageLoad", true, 1); |
| 3740 } | 3979 } |
| 3741 | 3980 |
| 3742 // Test that we log that Autofill is disabled when filling a form. | 3981 // Test that we log that Autofill is disabled when filling a form. |
| 3743 TEST_F(AutofillMetricsTest, AutofillIsDisabledAtPageLoad) { | 3982 TEST_F(AutofillMetricsTest, AutofillIsDisabledAtPageLoad) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3762 base::HistogramTester histogram_tester; | 4001 base::HistogramTester histogram_tester; |
| 3763 AutofillProfile profile; | 4002 AutofillProfile profile; |
| 3764 profile.set_use_date(base::Time::Now() - base::TimeDelta::FromDays(13)); | 4003 profile.set_use_date(base::Time::Now() - base::TimeDelta::FromDays(13)); |
| 3765 profile.RecordAndLogUse(); | 4004 profile.RecordAndLogUse(); |
| 3766 histogram_tester.ExpectBucketCount("Autofill.DaysSinceLastUse.Profile", 13, | 4005 histogram_tester.ExpectBucketCount("Autofill.DaysSinceLastUse.Profile", 13, |
| 3767 1); | 4006 1); |
| 3768 } | 4007 } |
| 3769 | 4008 |
| 3770 // Verify that we correctly log the submitted form's state. | 4009 // Verify that we correctly log the submitted form's state. |
| 3771 TEST_F(AutofillMetricsTest, AutofillFormSubmittedState) { | 4010 TEST_F(AutofillMetricsTest, AutofillFormSubmittedState) { |
| 4011 EnableUkmLogging(); |
| 4012 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
| 4013 |
| 3772 // Start with a form with insufficiently many fields. | 4014 // Start with a form with insufficiently many fields. |
| 3773 FormData form; | 4015 FormData form; |
| 3774 form.name = ASCIIToUTF16("TestForm"); | 4016 form.name = ASCIIToUTF16("TestForm"); |
| 3775 form.origin = GURL("http://example.com/form.html"); | 4017 form.origin = GURL("http://example.com/form.html"); |
| 3776 form.action = GURL("http://example.com/submit.html"); | 4018 form.action = GURL("http://example.com/submit.html"); |
| 3777 | 4019 |
| 3778 FormFieldData field; | 4020 FormFieldData field; |
| 3779 test::CreateTestFormField("Name", "name", "", "text", &field); | 4021 test::CreateTestFormField("Name", "name", "", "text", &field); |
| 3780 form.fields.push_back(field); | 4022 form.fields.push_back(field); |
| 3781 test::CreateTestFormField("Email", "email", "", "text", &field); | 4023 test::CreateTestFormField("Email", "email", "", "text", &field); |
| 3782 form.fields.push_back(field); | 4024 form.fields.push_back(field); |
| 3783 test::CreateTestFormField("Phone", "phone", "", "text", &field); | 4025 test::CreateTestFormField("Phone", "phone", "", "text", &field); |
| 3784 form.fields.push_back(field); | 4026 form.fields.push_back(field); |
| 3785 test::CreateTestFormField("Unknown", "unknown", "", "text", &field); | 4027 test::CreateTestFormField("Unknown", "unknown", "", "text", &field); |
| 3786 form.fields.push_back(field); | 4028 form.fields.push_back(field); |
| 3787 std::vector<FormData> forms(1, form); | 4029 std::vector<FormData> forms(1, form); |
| 3788 | 4030 |
| 3789 // Expect no notifications when the form is first seen. | 4031 // Expect no notifications when the form is first seen. |
| 3790 { | 4032 { |
| 3791 base::HistogramTester histogram_tester; | 4033 base::HistogramTester histogram_tester; |
| 3792 autofill_manager_->OnFormsSeen(forms, TimeTicks()); | 4034 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); |
| 3793 histogram_tester.ExpectTotalCount("Autofill.FormSubmittedState", 0); | 4035 histogram_tester.ExpectTotalCount("Autofill.FormSubmittedState", 0); |
| 3794 } | 4036 } |
| 3795 | 4037 |
| 3796 // No data entered in the form. | 4038 // No data entered in the form. |
| 3797 { | 4039 { |
| 3798 base::HistogramTester histogram_tester; | 4040 base::HistogramTester histogram_tester; |
| 3799 base::UserActionTester user_action_tester; | 4041 base::UserActionTester user_action_tester; |
| 3800 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 4042 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 3801 histogram_tester.ExpectUniqueSample( | 4043 histogram_tester.ExpectUniqueSample( |
| 3802 "Autofill.FormSubmittedState", | 4044 "Autofill.FormSubmittedState", |
| 3803 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA, 1); | 4045 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA, 1); |
| 3804 EXPECT_EQ(1, user_action_tester.GetActionCount( | 4046 EXPECT_EQ(1, user_action_tester.GetActionCount( |
| 3805 "Autofill_FormSubmitted_NonFillable")); | 4047 "Autofill_FormSubmitted_NonFillable")); |
| 4048 |
| 4049 // Expect an entry for |DeveloperEngagement| and 2 entries for form |
| 4050 // interactions. All 3 entries are for the same URL. |
| 4051 ASSERT_EQ(3U, ukm_service->entries_count()); |
| 4052 ASSERT_EQ(2U, ukm_service->sources_count()); |
| 4053 VerifyDeveloperEngagementUkm( |
| 4054 form, ukm_service, |
| 4055 {AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS}); |
| 4056 VerifyUniqueFormInteractionEventUkm(form, ukm_service, |
| 4057 internal::kUKMUserHappinessMetricName, |
| 4058 AutofillMetrics::FORMS_LOADED); |
| 4059 VerifyUniqueFormInteractionEventUkm( |
| 4060 form, ukm_service, internal::kUKMAutofillFormSubmittedStateName, |
| 4061 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); |
| 4062 ukm_service->Purge(); |
| 3806 } | 4063 } |
| 3807 | 4064 |
| 3808 // Non fillable form. | 4065 // Non fillable form. |
| 3809 form.fields[0].value = ASCIIToUTF16("Elvis Aaron Presley"); | 4066 form.fields[0].value = ASCIIToUTF16("Elvis Aaron Presley"); |
| 3810 form.fields[1].value = ASCIIToUTF16("theking@gmail.com"); | 4067 form.fields[1].value = ASCIIToUTF16("theking@gmail.com"); |
| 3811 forms.front() = form; | 4068 forms.front() = form; |
| 3812 | 4069 |
| 3813 { | 4070 { |
| 3814 base::HistogramTester histogram_tester; | 4071 base::HistogramTester histogram_tester; |
| 3815 base::UserActionTester user_action_tester; | 4072 base::UserActionTester user_action_tester; |
| 4073 autofill_manager_->form_interactions_ukm_logger() |
| 4074 ->set_form_loaded_timestamp(TimeTicks::Now()); |
| 3816 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 4075 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 3817 histogram_tester.ExpectUniqueSample( | 4076 histogram_tester.ExpectUniqueSample( |
| 3818 "Autofill.FormSubmittedState", | 4077 "Autofill.FormSubmittedState", |
| 3819 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA, 1); | 4078 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA, 1); |
| 3820 EXPECT_EQ(1, user_action_tester.GetActionCount( | 4079 EXPECT_EQ(1, user_action_tester.GetActionCount( |
| 3821 "Autofill_FormSubmitted_NonFillable")); | 4080 "Autofill_FormSubmitted_NonFillable")); |
| 4081 |
| 4082 ASSERT_EQ(1U, ukm_service->entries_count()); |
| 4083 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 4084 VerifyFormInteractionsUkm( |
| 4085 form, ukm_service, |
| 4086 {{internal::kUKMAutofillFormSubmittedStateName, |
| 4087 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}}); |
| 4088 ukm_service->Purge(); |
| 3822 } | 4089 } |
| 3823 | 4090 |
| 3824 // Fill in the third field. | 4091 // Fill in the third field. |
| 3825 form.fields[2].value = ASCIIToUTF16("12345678901"); | 4092 form.fields[2].value = ASCIIToUTF16("12345678901"); |
| 3826 forms.front() = form; | 4093 forms.front() = form; |
| 3827 | 4094 |
| 3828 // Autofilled none with no suggestions shown. | 4095 // Autofilled none with no suggestions shown. |
| 3829 { | 4096 { |
| 3830 base::HistogramTester histogram_tester; | 4097 base::HistogramTester histogram_tester; |
| 3831 base::UserActionTester user_action_tester; | 4098 base::UserActionTester user_action_tester; |
| 4099 autofill_manager_->form_interactions_ukm_logger() |
| 4100 ->set_form_loaded_timestamp(TimeTicks::Now()); |
| 3832 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 4101 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 3833 histogram_tester.ExpectUniqueSample( | 4102 histogram_tester.ExpectUniqueSample( |
| 3834 "Autofill.FormSubmittedState", | 4103 "Autofill.FormSubmittedState", |
| 3835 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_NONE_DID_NOT_SHOW_SUGGESTIONS, | 4104 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_NONE_DID_NOT_SHOW_SUGGESTIONS, |
| 3836 1); | 4105 1); |
| 3837 EXPECT_EQ(1, user_action_tester.GetActionCount( | 4106 EXPECT_EQ(1, user_action_tester.GetActionCount( |
| 3838 "Autofill_FormSubmitted_FilledNone_SuggestionsNotShown")); | 4107 "Autofill_FormSubmitted_FilledNone_SuggestionsNotShown")); |
| 4108 |
| 4109 ASSERT_EQ(1U, ukm_service->entries_count()); |
| 4110 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 4111 VerifyFormInteractionsUkm( |
| 4112 form, ukm_service, |
| 4113 {{internal::kUKMAutofillFormSubmittedStateName, |
| 4114 AutofillMetrics:: |
| 4115 FILLABLE_FORM_AUTOFILLED_NONE_DID_NOT_SHOW_SUGGESTIONS}}); |
| 4116 ukm_service->Purge(); |
| 3839 } | 4117 } |
| 3840 | 4118 |
| 3841 // Autofilled none with suggestions shown. | 4119 // Autofilled none with suggestions shown. |
| 4120 autofill_manager_->form_interactions_ukm_logger()->set_form_loaded_timestamp( |
| 4121 TimeTicks::Now()); |
| 3842 autofill_manager_->DidShowSuggestions(true, form, form.fields[2]); | 4122 autofill_manager_->DidShowSuggestions(true, form, form.fields[2]); |
| 3843 { | 4123 { |
| 3844 base::HistogramTester histogram_tester; | 4124 base::HistogramTester histogram_tester; |
| 3845 base::UserActionTester user_action_tester; | 4125 base::UserActionTester user_action_tester; |
| 3846 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 4126 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 3847 histogram_tester.ExpectUniqueSample( | 4127 histogram_tester.ExpectUniqueSample( |
| 3848 "Autofill.FormSubmittedState", | 4128 "Autofill.FormSubmittedState", |
| 3849 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_NONE_DID_SHOW_SUGGESTIONS, 1); | 4129 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_NONE_DID_SHOW_SUGGESTIONS, 1); |
| 3850 EXPECT_EQ(1, user_action_tester.GetActionCount( | 4130 EXPECT_EQ(1, user_action_tester.GetActionCount( |
| 3851 "Autofill_FormSubmitted_FilledNone_SuggestionsShown")); | 4131 "Autofill_FormSubmitted_FilledNone_SuggestionsShown")); |
| 4132 |
| 4133 ASSERT_EQ(2U, ukm_service->entries_count()); |
| 4134 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 4135 VerifyFormInteractionsUkm( |
| 4136 form, ukm_service, |
| 4137 {{internal::kUKMAddressFormEventName, |
| 4138 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN}, |
| 4139 {internal::kUKMAutofillFormSubmittedStateName, |
| 4140 AutofillMetrics:: |
| 4141 FILLABLE_FORM_AUTOFILLED_NONE_DID_SHOW_SUGGESTIONS}}); |
| 4142 ukm_service->Purge(); |
| 3852 } | 4143 } |
| 3853 | 4144 |
| 3854 // Mark one of the fields as autofilled. | 4145 // Mark one of the fields as autofilled. |
| 3855 form.fields[1].is_autofilled = true; | 4146 form.fields[1].is_autofilled = true; |
| 3856 forms.front() = form; | 4147 forms.front() = form; |
| 3857 | 4148 |
| 3858 // Autofilled some of the fields. | 4149 // Autofilled some of the fields. |
| 3859 { | 4150 { |
| 3860 base::HistogramTester histogram_tester; | 4151 base::HistogramTester histogram_tester; |
| 3861 base::UserActionTester user_action_tester; | 4152 base::UserActionTester user_action_tester; |
| 4153 autofill_manager_->form_interactions_ukm_logger() |
| 4154 ->set_form_loaded_timestamp(TimeTicks::Now()); |
| 3862 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 4155 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 3863 histogram_tester.ExpectUniqueSample( | 4156 histogram_tester.ExpectUniqueSample( |
| 3864 "Autofill.FormSubmittedState", | 4157 "Autofill.FormSubmittedState", |
| 3865 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_SOME, 1); | 4158 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_SOME, 1); |
| 3866 EXPECT_EQ(1, user_action_tester.GetActionCount( | 4159 EXPECT_EQ(1, user_action_tester.GetActionCount( |
| 3867 "Autofill_FormSubmitted_FilledSome")); | 4160 "Autofill_FormSubmitted_FilledSome")); |
| 4161 |
| 4162 ASSERT_EQ(1U, ukm_service->entries_count()); |
| 4163 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 4164 VerifyFormInteractionsUkm( |
| 4165 form, ukm_service, |
| 4166 {{internal::kUKMAutofillFormSubmittedStateName, |
| 4167 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_SOME}}); |
| 4168 ukm_service->Purge(); |
| 3868 } | 4169 } |
| 3869 | 4170 |
| 3870 // Mark all of the fillable fields as autofilled. | 4171 // Mark all of the fillable fields as autofilled. |
| 3871 form.fields[0].is_autofilled = true; | 4172 form.fields[0].is_autofilled = true; |
| 3872 form.fields[2].is_autofilled = true; | 4173 form.fields[2].is_autofilled = true; |
| 3873 forms.front() = form; | 4174 forms.front() = form; |
| 3874 | 4175 |
| 3875 // Autofilled all the fields. | 4176 // Autofilled all the fields. |
| 3876 { | 4177 { |
| 3877 base::HistogramTester histogram_tester; | 4178 base::HistogramTester histogram_tester; |
| 3878 base::UserActionTester user_action_tester; | 4179 base::UserActionTester user_action_tester; |
| 4180 autofill_manager_->form_interactions_ukm_logger() |
| 4181 ->set_form_loaded_timestamp(TimeTicks::Now()); |
| 3879 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 4182 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 3880 histogram_tester.ExpectUniqueSample( | 4183 histogram_tester.ExpectUniqueSample( |
| 3881 "Autofill.FormSubmittedState", | 4184 "Autofill.FormSubmittedState", |
| 3882 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_ALL, 1); | 4185 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_ALL, 1); |
| 3883 EXPECT_EQ(1, user_action_tester.GetActionCount( | 4186 EXPECT_EQ(1, user_action_tester.GetActionCount( |
| 3884 "Autofill_FormSubmitted_FilledAll")); | 4187 "Autofill_FormSubmitted_FilledAll")); |
| 4188 |
| 4189 ASSERT_EQ(1U, ukm_service->entries_count()); |
| 4190 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 4191 VerifyFormInteractionsUkm( |
| 4192 form, ukm_service, |
| 4193 {{internal::kUKMAutofillFormSubmittedStateName, |
| 4194 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_ALL}}); |
| 4195 ukm_service->Purge(); |
| 3885 } | 4196 } |
| 3886 | 4197 |
| 3887 // Clear out the third field's value. | 4198 // Clear out the third field's value. |
| 3888 form.fields[2].value = base::string16(); | 4199 form.fields[2].value = base::string16(); |
| 3889 forms.front() = form; | 4200 forms.front() = form; |
| 3890 | 4201 |
| 3891 // Non fillable form. | 4202 // Non fillable form. |
| 3892 { | 4203 { |
| 3893 base::HistogramTester histogram_tester; | 4204 base::HistogramTester histogram_tester; |
| 3894 base::UserActionTester user_action_tester; | 4205 base::UserActionTester user_action_tester; |
| 4206 autofill_manager_->form_interactions_ukm_logger() |
| 4207 ->set_form_loaded_timestamp(TimeTicks::Now()); |
| 3895 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 4208 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 3896 histogram_tester.ExpectUniqueSample( | 4209 histogram_tester.ExpectUniqueSample( |
| 3897 "Autofill.FormSubmittedState", | 4210 "Autofill.FormSubmittedState", |
| 3898 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA, 1); | 4211 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA, 1); |
| 3899 EXPECT_EQ(1, user_action_tester.GetActionCount( | 4212 EXPECT_EQ(1, user_action_tester.GetActionCount( |
| 3900 "Autofill_FormSubmitted_NonFillable")); | 4213 "Autofill_FormSubmitted_NonFillable")); |
| 4214 |
| 4215 ASSERT_EQ(1U, ukm_service->entries_count()); |
| 4216 ASSERT_EQ(1U, ukm_service->sources_count()); |
| 4217 VerifyFormInteractionsUkm( |
| 4218 form, ukm_service, |
| 4219 {{internal::kUKMAutofillFormSubmittedStateName, |
| 4220 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}}); |
| 4221 ukm_service->Purge(); |
| 3901 } | 4222 } |
| 3902 } | 4223 } |
| 3903 | 4224 |
| 3904 // Verify that we correctly log user happiness metrics dealing with form | 4225 // Verify that we correctly log user happiness metrics dealing with form |
| 3905 // interaction. | 4226 // interaction. |
| 3906 TEST_F(AutofillMetricsTest, UserHappinessFormInteraction) { | 4227 TEST_F(AutofillMetricsTest, UserHappinessFormInteraction) { |
| 4228 EnableUkmLogging(); |
| 4229 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
| 4230 |
| 3907 // Load a fillable form. | 4231 // Load a fillable form. |
| 3908 FormData form; | 4232 FormData form; |
| 3909 form.name = ASCIIToUTF16("TestForm"); | 4233 form.name = ASCIIToUTF16("TestForm"); |
| 3910 form.origin = GURL("http://example.com/form.html"); | 4234 form.origin = GURL("http://example.com/form.html"); |
| 3911 form.action = GURL("http://example.com/submit.html"); | 4235 form.action = GURL("http://example.com/submit.html"); |
| 3912 | 4236 |
| 3913 FormFieldData field; | 4237 FormFieldData field; |
| 3914 test::CreateTestFormField("Name", "name", "", "text", &field); | 4238 test::CreateTestFormField("Name", "name", "", "text", &field); |
| 3915 form.fields.push_back(field); | 4239 form.fields.push_back(field); |
| 3916 test::CreateTestFormField("Email", "email", "", "text", &field); | 4240 test::CreateTestFormField("Email", "email", "", "text", &field); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3996 } | 4320 } |
| 3997 | 4321 |
| 3998 // Simulate editing another autofilled field. | 4322 // Simulate editing another autofilled field. |
| 3999 { | 4323 { |
| 4000 base::HistogramTester histogram_tester; | 4324 base::HistogramTester histogram_tester; |
| 4001 autofill_manager_->OnTextFieldDidChange(form, form.fields[1], TimeTicks()); | 4325 autofill_manager_->OnTextFieldDidChange(form, form.fields[1], TimeTicks()); |
| 4002 histogram_tester.ExpectUniqueSample( | 4326 histogram_tester.ExpectUniqueSample( |
| 4003 "Autofill.UserHappiness", | 4327 "Autofill.UserHappiness", |
| 4004 AutofillMetrics::USER_DID_EDIT_AUTOFILLED_FIELD, 1); | 4328 AutofillMetrics::USER_DID_EDIT_AUTOFILLED_FIELD, 1); |
| 4005 } | 4329 } |
| 4330 |
| 4331 autofill_manager_->Reset(); |
| 4332 |
| 4333 // Verify UKM logs. |
| 4334 VerifyFormInteractionsUkm( |
| 4335 form, ukm_service, |
| 4336 {{internal::kUKMUserHappinessMetricName, AutofillMetrics::FORMS_LOADED}, |
| 4337 {internal::kUKMUserHappinessMetricName, AutofillMetrics::USER_DID_TYPE}, |
| 4338 {internal::kUKMAddressFormEventName, |
| 4339 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN}, |
| 4340 {internal::kUKMAddressFormEventName, |
| 4341 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN}, |
| 4342 {internal::kUKMUserHappinessMetricName, |
| 4343 AutofillMetrics::USER_DID_AUTOFILL}, |
| 4344 {internal::kUKMAddressFormEventName, |
| 4345 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED}, |
| 4346 {internal::kUKMUserHappinessMetricName, |
| 4347 AutofillMetrics::USER_DID_EDIT_AUTOFILLED_FIELD}, |
| 4348 {internal::kUKMUserHappinessMetricName, |
| 4349 AutofillMetrics::USER_DID_AUTOFILL}, |
| 4350 {internal::kUKMUserHappinessMetricName, |
| 4351 AutofillMetrics::USER_DID_EDIT_AUTOFILLED_FIELD}}); |
| 4006 } | 4352 } |
| 4007 | 4353 |
| 4008 // Verify that we correctly log metrics tracking the duration of form fill. | 4354 // Verify that we correctly log metrics tracking the duration of form fill. |
| 4009 TEST_F(AutofillMetricsTest, FormFillDuration) { | 4355 TEST_F(AutofillMetricsTest, FormFillDuration) { |
| 4010 // Load a fillable form. | 4356 // Load a fillable form. |
| 4011 FormData form; | 4357 FormData form; |
| 4012 form.name = ASCIIToUTF16("TestForm"); | 4358 form.name = ASCIIToUTF16("TestForm"); |
| 4013 form.origin = GURL("http://example.com/form.html"); | 4359 form.origin = GURL("http://example.com/form.html"); |
| 4014 form.action = GURL("http://example.com/submit.html"); | 4360 form.action = GURL("http://example.com/submit.html"); |
| 4015 | 4361 |
| (...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4573 ["Autofill.FormEvents.CreditCard.OnNonsecurePage"]); | 4919 ["Autofill.FormEvents.CreditCard.OnNonsecurePage"]); |
| 4574 } | 4920 } |
| 4575 } | 4921 } |
| 4576 | 4922 |
| 4577 // Tests that logging CardUploadDecision UKM works as expected. | 4923 // Tests that logging CardUploadDecision UKM works as expected. |
| 4578 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric) { | 4924 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric) { |
| 4579 EnableUkmLogging(); | 4925 EnableUkmLogging(); |
| 4580 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 4926 ukm::UkmServiceTestingHarness ukm_service_test_harness; |
| 4581 GURL url("https://www.google.com"); | 4927 GURL url("https://www.google.com"); |
| 4582 int upload_decision = 1; | 4928 int upload_decision = 1; |
| 4583 std::map<std::string, int> metrics = { | 4929 std::vector<std::pair<const char*, int>> metrics = { |
| 4584 {internal::kUKMCardUploadDecisionMetricName, upload_decision}}; | 4930 {internal::kUKMCardUploadDecisionMetricName, upload_decision}}; |
| 4585 | 4931 |
| 4586 EXPECT_TRUE(AutofillMetrics::LogUkm( | 4932 EXPECT_TRUE(AutofillMetrics::LogUkm( |
| 4587 ukm_service_test_harness.test_ukm_service(), url, | 4933 ukm_service_test_harness.test_ukm_service(), url, |
| 4588 internal::kUKMCardUploadDecisionEntryName, metrics)); | 4934 internal::kUKMCardUploadDecisionEntryName, metrics)); |
| 4589 | 4935 |
| 4590 // Make sure that the UKM was logged correctly. | 4936 // Make sure that the UKM was logged correctly. |
| 4591 ukm::TestUkmService* ukm_service = | 4937 ukm::TestUkmService* ukm_service = |
| 4592 ukm_service_test_harness.test_ukm_service(); | 4938 ukm_service_test_harness.test_ukm_service(); |
| 4593 | 4939 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 4614 ASSERT_NE(nullptr, metric); | 4960 ASSERT_NE(nullptr, metric); |
| 4615 EXPECT_EQ(upload_decision, metric->value()); | 4961 EXPECT_EQ(upload_decision, metric->value()); |
| 4616 } | 4962 } |
| 4617 | 4963 |
| 4618 // Tests that logging DeveloperEngagement UKM works as expected. | 4964 // Tests that logging DeveloperEngagement UKM works as expected. |
| 4619 TEST_F(AutofillMetricsTest, RecordDeveloperEngagementMetric) { | 4965 TEST_F(AutofillMetricsTest, RecordDeveloperEngagementMetric) { |
| 4620 EnableUkmLogging(); | 4966 EnableUkmLogging(); |
| 4621 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 4967 ukm::UkmServiceTestingHarness ukm_service_test_harness; |
| 4622 GURL url("https://www.google.com"); | 4968 GURL url("https://www.google.com"); |
| 4623 int form_structure_metric = 1; | 4969 int form_structure_metric = 1; |
| 4624 std::map<std::string, int> metrics = { | 4970 std::vector<std::pair<const char*, int>> metrics = { |
| 4625 {internal::kUKMDeveloperEngagementMetricName, form_structure_metric}}; | 4971 {internal::kUKMDeveloperEngagementMetricName, form_structure_metric}}; |
| 4626 | 4972 |
| 4627 EXPECT_TRUE(AutofillMetrics::LogUkm( | 4973 EXPECT_TRUE(AutofillMetrics::LogUkm( |
| 4628 ukm_service_test_harness.test_ukm_service(), url, | 4974 ukm_service_test_harness.test_ukm_service(), url, |
| 4629 internal::kUKMDeveloperEngagementEntryName, metrics)); | 4975 internal::kUKMDeveloperEngagementEntryName, metrics)); |
| 4630 | 4976 |
| 4631 // Make sure that the UKM was logged correctly. | 4977 // Make sure that the UKM was logged correctly. |
| 4632 ukm::TestUkmService* ukm_service = | 4978 ukm::TestUkmService* ukm_service = |
| 4633 ukm_service_test_harness.test_ukm_service(); | 4979 ukm_service_test_harness.test_ukm_service(); |
| 4634 | 4980 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 4654 internal::kUKMDeveloperEngagementMetricName, entry_proto.metrics()); | 5000 internal::kUKMDeveloperEngagementMetricName, entry_proto.metrics()); |
| 4655 ASSERT_NE(nullptr, metric); | 5001 ASSERT_NE(nullptr, metric); |
| 4656 EXPECT_EQ(form_structure_metric, metric->value()); | 5002 EXPECT_EQ(form_structure_metric, metric->value()); |
| 4657 } | 5003 } |
| 4658 | 5004 |
| 4659 // Tests that no UKM is logged when the URL is not valid. | 5005 // Tests that no UKM is logged when the URL is not valid. |
| 4660 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_InvalidUrl) { | 5006 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_InvalidUrl) { |
| 4661 EnableUkmLogging(); | 5007 EnableUkmLogging(); |
| 4662 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 5008 ukm::UkmServiceTestingHarness ukm_service_test_harness; |
| 4663 GURL url(""); | 5009 GURL url(""); |
| 4664 std::map<std::string, int> metrics = {{"metric", 1}}; | 5010 std::vector<std::pair<const char*, int>> metrics = {{"metric", 1}}; |
| 4665 | 5011 |
| 4666 EXPECT_FALSE(AutofillMetrics::LogUkm( | 5012 EXPECT_FALSE(AutofillMetrics::LogUkm( |
| 4667 ukm_service_test_harness.test_ukm_service(), url, "test_ukm", metrics)); | 5013 ukm_service_test_harness.test_ukm_service(), url, "test_ukm", metrics)); |
| 4668 EXPECT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); | 5014 EXPECT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); |
| 4669 } | 5015 } |
| 4670 | 5016 |
| 4671 // Tests that no UKM is logged when the metrics map is empty. | 5017 // Tests that no UKM is logged when the metrics map is empty. |
| 4672 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_NoMetrics) { | 5018 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_NoMetrics) { |
| 4673 EnableUkmLogging(); | 5019 EnableUkmLogging(); |
| 4674 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 5020 ukm::UkmServiceTestingHarness ukm_service_test_harness; |
| 4675 GURL url("https://www.google.com"); | 5021 GURL url("https://www.google.com"); |
| 4676 std::map<std::string, int> metrics; | 5022 std::vector<std::pair<const char*, int>> metrics; |
| 4677 | 5023 |
| 4678 EXPECT_FALSE(AutofillMetrics::LogUkm( | 5024 EXPECT_FALSE(AutofillMetrics::LogUkm( |
| 4679 ukm_service_test_harness.test_ukm_service(), url, "test_ukm", metrics)); | 5025 ukm_service_test_harness.test_ukm_service(), url, "test_ukm", metrics)); |
| 4680 EXPECT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); | 5026 EXPECT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); |
| 4681 } | 5027 } |
| 4682 | 5028 |
| 4683 // Tests that no UKM is logged when the ukm service is null. | 5029 // Tests that no UKM is logged when the ukm service is null. |
| 4684 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_NoUkmService) { | 5030 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_NoUkmService) { |
| 4685 EnableUkmLogging(); | 5031 EnableUkmLogging(); |
| 4686 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 5032 ukm::UkmServiceTestingHarness ukm_service_test_harness; |
| 4687 GURL url("https://www.google.com"); | 5033 GURL url("https://www.google.com"); |
| 4688 std::map<std::string, int> metrics = {{"metric", 1}}; | 5034 std::vector<std::pair<const char*, int>> metrics = {{"metric", 1}}; |
| 4689 | 5035 |
| 4690 EXPECT_FALSE(AutofillMetrics::LogUkm(nullptr, url, "test_ukm", metrics)); | 5036 EXPECT_FALSE(AutofillMetrics::LogUkm(nullptr, url, "test_ukm", metrics)); |
| 4691 ASSERT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); | 5037 ASSERT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); |
| 4692 } | 5038 } |
| 4693 | 5039 |
| 4694 // Tests that no UKM is logged when the ukm logging feature is disabled. | 5040 // Tests that no UKM is logged when the ukm logging feature is disabled. |
| 4695 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_FeatureDisabled) { | 5041 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_FeatureDisabled) { |
| 4696 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 5042 ukm::UkmServiceTestingHarness ukm_service_test_harness; |
| 4697 GURL url("https://www.google.com"); | 5043 GURL url("https://www.google.com"); |
| 4698 std::map<std::string, int> metrics = {{"metric", 1}}; | 5044 std::vector<std::pair<const char*, int>> metrics = {{"metric", 1}}; |
| 4699 | 5045 |
| 4700 EXPECT_FALSE(AutofillMetrics::LogUkm( | 5046 EXPECT_FALSE(AutofillMetrics::LogUkm( |
| 4701 ukm_service_test_harness.test_ukm_service(), url, "test_ukm", metrics)); | 5047 ukm_service_test_harness.test_ukm_service(), url, "test_ukm", metrics)); |
| 4702 EXPECT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); | 5048 EXPECT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); |
| 4703 } | 5049 } |
| 4704 | 5050 |
| 4705 } // namespace autofill | 5051 } // namespace autofill |
| OLD | NEW |