| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/string16.h" | 8 #include "base/string16.h" |
| 9 #include "base/time.h" | 9 #include "base/time.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 private: | 171 private: |
| 172 std::string server_experiment_id_; | 172 std::string server_experiment_id_; |
| 173 DISALLOW_COPY_AND_ASSIGN(TestFormStructure); | 173 DISALLOW_COPY_AND_ASSIGN(TestFormStructure); |
| 174 }; | 174 }; |
| 175 | 175 |
| 176 class TestAutofillManager : public AutofillManager { | 176 class TestAutofillManager : public AutofillManager { |
| 177 public: | 177 public: |
| 178 TestAutofillManager(TabContentsWrapper* tab_contents, | 178 TestAutofillManager(TabContentsWrapper* tab_contents, |
| 179 TestPersonalDataManager* personal_manager) | 179 TestPersonalDataManager* personal_manager) |
| 180 : AutofillManager(tab_contents, personal_manager), | 180 : AutofillManager(tab_contents, personal_manager), |
| 181 autofill_enabled_(true) { | 181 autofill_enabled_(true), |
| 182 did_finish_async_form_submit_(false), |
| 183 message_loop_is_running_(false) { |
| 182 set_metric_logger(new MockAutofillMetrics); | 184 set_metric_logger(new MockAutofillMetrics); |
| 183 } | 185 } |
| 184 virtual ~TestAutofillManager() {} | |
| 185 | 186 |
| 186 virtual bool IsAutofillEnabled() const { return autofill_enabled_; } | 187 virtual bool IsAutofillEnabled() const { return autofill_enabled_; } |
| 187 | 188 |
| 188 void set_autofill_enabled(bool autofill_enabled) { | 189 void set_autofill_enabled(bool autofill_enabled) { |
| 189 autofill_enabled_ = autofill_enabled; | 190 autofill_enabled_ = autofill_enabled; |
| 190 } | 191 } |
| 191 | 192 |
| 192 MockAutofillMetrics* metric_logger() { | 193 MockAutofillMetrics* metric_logger() { |
| 193 return static_cast<MockAutofillMetrics*>(const_cast<AutofillMetrics*>( | 194 return static_cast<MockAutofillMetrics*>(const_cast<AutofillMetrics*>( |
| 194 AutofillManager::metric_logger())); | 195 AutofillManager::metric_logger())); |
| 195 } | 196 } |
| 196 | 197 |
| 197 void AddSeenForm(const FormData& form, | 198 void AddSeenForm(const FormData& form, |
| 198 const std::vector<AutofillFieldType>& heuristic_types, | 199 const std::vector<AutofillFieldType>& heuristic_types, |
| 199 const std::vector<AutofillFieldType>& server_types, | 200 const std::vector<AutofillFieldType>& server_types, |
| 200 const std::string& experiment_id) { | 201 const std::string& experiment_id) { |
| 201 FormData empty_form = form; | 202 FormData empty_form = form; |
| 202 for (size_t i = 0; i < empty_form.fields.size(); ++i) { | 203 for (size_t i = 0; i < empty_form.fields.size(); ++i) { |
| 203 empty_form.fields[i].value = string16(); | 204 empty_form.fields[i].value = string16(); |
| 204 } | 205 } |
| 205 | 206 |
| 206 // |form_structure| will be owned by |form_structures()|. | 207 // |form_structure| will be owned by |form_structures()|. |
| 207 TestFormStructure* form_structure = new TestFormStructure(empty_form); | 208 TestFormStructure* form_structure = new TestFormStructure(empty_form); |
| 208 form_structure->SetFieldTypes(heuristic_types, server_types); | 209 form_structure->SetFieldTypes(heuristic_types, server_types); |
| 209 form_structure->set_server_experiment_id(experiment_id); | 210 form_structure->set_server_experiment_id(experiment_id); |
| 210 form_structures()->push_back(form_structure); | 211 form_structures()->push_back(form_structure); |
| 211 } | 212 } |
| 212 | 213 |
| 214 void FormSubmitted(const FormData& form, const TimeTicks& timestamp) { |
| 215 if (!OnFormSubmitted(form, timestamp)) |
| 216 return; |
| 217 |
| 218 // Wait for the asynchronous FormSubmitted() call to complete. |
| 219 if (!did_finish_async_form_submit_) { |
| 220 // TODO(isherman): It seems silly to need this variable. Is there some |
| 221 // way I can just query the message loop's state? |
| 222 message_loop_is_running_ = true; |
| 223 MessageLoop::current()->Run(); |
| 224 } else { |
| 225 did_finish_async_form_submit_ = false; |
| 226 } |
| 227 } |
| 228 |
| 229 virtual void UploadFormDataAsyncCallback( |
| 230 const FormStructure* submitted_form, |
| 231 const base::TimeTicks& load_time, |
| 232 const base::TimeTicks& interaction_time, |
| 233 const base::TimeTicks& submission_time) OVERRIDE { |
| 234 if (message_loop_is_running_) { |
| 235 MessageLoop::current()->Quit(); |
| 236 message_loop_is_running_ = false; |
| 237 } else { |
| 238 did_finish_async_form_submit_ = true; |
| 239 } |
| 240 |
| 241 AutofillManager::UploadFormDataAsyncCallback(submitted_form, |
| 242 load_time, |
| 243 interaction_time, |
| 244 submission_time); |
| 245 } |
| 246 |
| 213 private: | 247 private: |
| 248 // AutofillManager is ref counted. |
| 249 virtual ~TestAutofillManager() {} |
| 250 |
| 214 bool autofill_enabled_; | 251 bool autofill_enabled_; |
| 252 bool did_finish_async_form_submit_; |
| 253 bool message_loop_is_running_; |
| 215 | 254 |
| 216 DISALLOW_COPY_AND_ASSIGN(TestAutofillManager); | 255 DISALLOW_COPY_AND_ASSIGN(TestAutofillManager); |
| 217 }; | 256 }; |
| 218 | 257 |
| 219 } // namespace | 258 } // namespace |
| 220 | 259 |
| 221 class AutofillMetricsTest : public TabContentsWrapperTestHarness { | 260 class AutofillMetricsTest : public TabContentsWrapperTestHarness { |
| 222 public: | 261 public: |
| 223 AutofillMetricsTest(); | 262 AutofillMetricsTest(); |
| 224 virtual ~AutofillMetricsTest(); | 263 virtual ~AutofillMetricsTest(); |
| 225 | 264 |
| 226 virtual void SetUp(); | 265 virtual void SetUp() OVERRIDE; |
| 266 virtual void TearDown() OVERRIDE; |
| 227 | 267 |
| 228 protected: | 268 protected: |
| 229 AutofillCCInfoBarDelegate* CreateDelegate(MockAutofillMetrics* metric_logger, | 269 AutofillCCInfoBarDelegate* CreateDelegate(MockAutofillMetrics* metric_logger, |
| 230 CreditCard** created_card); | 270 CreditCard** created_card); |
| 231 | 271 |
| 232 scoped_ptr<TestAutofillManager> autofill_manager_; | 272 content::TestBrowserThread ui_thread_; |
| 273 content::TestBrowserThread file_thread_; |
| 274 |
| 275 scoped_refptr<TestAutofillManager> autofill_manager_; |
| 233 TestPersonalDataManager personal_data_; | 276 TestPersonalDataManager personal_data_; |
| 234 | 277 |
| 235 private: | 278 private: |
| 236 content::TestBrowserThread browser_thread_; | |
| 237 | |
| 238 DISALLOW_COPY_AND_ASSIGN(AutofillMetricsTest); | 279 DISALLOW_COPY_AND_ASSIGN(AutofillMetricsTest); |
| 239 }; | 280 }; |
| 240 | 281 |
| 241 AutofillMetricsTest::AutofillMetricsTest() | 282 AutofillMetricsTest::AutofillMetricsTest() |
| 242 : TabContentsWrapperTestHarness(), | 283 : TabContentsWrapperTestHarness(), |
| 243 browser_thread_(BrowserThread::UI, &message_loop_) { | 284 ui_thread_(BrowserThread::UI, &message_loop_), |
| 285 file_thread_(BrowserThread::FILE) { |
| 244 } | 286 } |
| 245 | 287 |
| 246 AutofillMetricsTest::~AutofillMetricsTest() { | 288 AutofillMetricsTest::~AutofillMetricsTest() { |
| 247 // Order of destruction is important as AutofillManager relies on | 289 // Order of destruction is important as AutofillManager relies on |
| 248 // PersonalDataManager to be around when it gets destroyed. | 290 // PersonalDataManager to be around when it gets destroyed. |
| 249 autofill_manager_.reset(NULL); | 291 autofill_manager_ = NULL; |
| 250 } | 292 } |
| 251 | 293 |
| 252 void AutofillMetricsTest::SetUp() { | 294 void AutofillMetricsTest::SetUp() { |
| 253 Profile* profile = new TestingProfile(); | 295 Profile* profile = new TestingProfile(); |
| 254 browser_context_.reset(profile); | 296 browser_context_.reset(profile); |
| 255 PersonalDataManagerFactory::GetInstance()->SetTestingFactory( | 297 PersonalDataManagerFactory::GetInstance()->SetTestingFactory( |
| 256 profile, TestPersonalDataManager::Build); | 298 profile, TestPersonalDataManager::Build); |
| 257 | 299 |
| 258 TabContentsWrapperTestHarness::SetUp(); | 300 TabContentsWrapperTestHarness::SetUp(); |
| 259 autofill_manager_.reset(new TestAutofillManager(contents_wrapper(), | 301 autofill_manager_ = new TestAutofillManager(contents_wrapper(), |
| 260 &personal_data_)); | 302 &personal_data_); |
| 303 |
| 304 file_thread_.Start(); |
| 305 } |
| 306 |
| 307 void AutofillMetricsTest::TearDown() { |
| 308 file_thread_.Stop(); |
| 309 TabContentsWrapperTestHarness::TearDown(); |
| 261 } | 310 } |
| 262 | 311 |
| 263 AutofillCCInfoBarDelegate* AutofillMetricsTest::CreateDelegate( | 312 AutofillCCInfoBarDelegate* AutofillMetricsTest::CreateDelegate( |
| 264 MockAutofillMetrics* metric_logger, | 313 MockAutofillMetrics* metric_logger, |
| 265 CreditCard** created_card) { | 314 CreditCard** created_card) { |
| 266 EXPECT_CALL(*metric_logger, | 315 EXPECT_CALL(*metric_logger, |
| 267 LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_SHOWN)); | 316 LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_SHOWN)); |
| 268 // The delegate created below will take ownership of this object. | 317 // The delegate created below will take ownership of this object. |
| 269 CreditCard* credit_card = new CreditCard(); | 318 CreditCard* credit_card = new CreditCard(); |
| 270 if (created_card) | 319 if (created_card) |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 LogOverallTypePrediction(AutofillMetrics::TYPE_MATCH, | 462 LogOverallTypePrediction(AutofillMetrics::TYPE_MATCH, |
| 414 PHONE_HOME_WHOLE_NUMBER, std::string())); | 463 PHONE_HOME_WHOLE_NUMBER, std::string())); |
| 415 EXPECT_CALL(*autofill_manager_->metric_logger(), | 464 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 416 LogQualityMetric(AutofillMetrics::FIELD_AUTOFILLED, | 465 LogQualityMetric(AutofillMetrics::FIELD_AUTOFILLED, |
| 417 std::string())); | 466 std::string())); |
| 418 EXPECT_CALL(*autofill_manager_->metric_logger(), | 467 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 419 LogUserHappinessMetric( | 468 LogUserHappinessMetric( |
| 420 AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_SOME)); | 469 AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_SOME)); |
| 421 | 470 |
| 422 // Simulate form submission. | 471 // Simulate form submission. |
| 423 EXPECT_NO_FATAL_FAILURE(autofill_manager_->OnFormSubmitted(form, | 472 EXPECT_NO_FATAL_FAILURE(autofill_manager_->FormSubmitted(form, |
| 424 TimeTicks::Now())); | 473 TimeTicks::Now())); |
| 425 } | 474 } |
| 426 | 475 |
| 427 // Test that we log the appropriate additional metrics when Autofill failed. | 476 // Test that we log the appropriate additional metrics when Autofill failed. |
| 428 TEST_F(AutofillMetricsTest, QualityMetricsForFailure) { | 477 TEST_F(AutofillMetricsTest, QualityMetricsForFailure) { |
| 429 // Set up our form data. | 478 // Set up our form data. |
| 430 FormData form; | 479 FormData form; |
| 431 form.name = ASCIIToUTF16("TestForm"); | 480 form.name = ASCIIToUTF16("TestForm"); |
| 432 form.method = ASCIIToUTF16("POST"); | 481 form.method = ASCIIToUTF16("POST"); |
| 433 form.origin = GURL("http://example.com/form.html"); | 482 form.origin = GURL("http://example.com/form.html"); |
| 434 form.action = GURL("http://example.com/submit.html"); | 483 form.action = GURL("http://example.com/submit.html"); |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 std::string())); | 580 std::string())); |
| 532 EXPECT_CALL(*autofill_manager_->metric_logger(), | 581 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 533 LogQualityMetric(failure_cases[i].heuristic_metric, | 582 LogQualityMetric(failure_cases[i].heuristic_metric, |
| 534 std::string())); | 583 std::string())); |
| 535 EXPECT_CALL(*autofill_manager_->metric_logger(), | 584 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 536 LogQualityMetric(failure_cases[i].server_metric, | 585 LogQualityMetric(failure_cases[i].server_metric, |
| 537 std::string())); | 586 std::string())); |
| 538 } | 587 } |
| 539 | 588 |
| 540 // Simulate form submission. | 589 // Simulate form submission. |
| 541 EXPECT_NO_FATAL_FAILURE(autofill_manager_->OnFormSubmitted(form, | 590 EXPECT_NO_FATAL_FAILURE(autofill_manager_->FormSubmitted(form, |
| 542 TimeTicks::Now())); | 591 TimeTicks::Now())); |
| 543 } | 592 } |
| 544 | 593 |
| 545 // Test that we behave sanely when the cached form differs from the submitted | 594 // Test that we behave sanely when the cached form differs from the submitted |
| 546 // one. | 595 // one. |
| 547 TEST_F(AutofillMetricsTest, SaneMetricsWithCacheMismatch) { | 596 TEST_F(AutofillMetricsTest, SaneMetricsWithCacheMismatch) { |
| 548 // Set up our form data. | 597 // Set up our form data. |
| 549 FormData form; | 598 FormData form; |
| 550 form.name = ASCIIToUTF16("TestForm"); | 599 form.name = ASCIIToUTF16("TestForm"); |
| 551 form.method = ASCIIToUTF16("POST"); | 600 form.method = ASCIIToUTF16("POST"); |
| 552 form.origin = GURL("http://example.com/form.html"); | 601 form.origin = GURL("http://example.com/form.html"); |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 689 LogServerTypePrediction(AutofillMetrics::TYPE_MATCH, | 738 LogServerTypePrediction(AutofillMetrics::TYPE_MATCH, |
| 690 NAME_FULL, std::string())); | 739 NAME_FULL, std::string())); |
| 691 EXPECT_CALL(*autofill_manager_->metric_logger(), | 740 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 692 LogOverallTypePrediction(AutofillMetrics::TYPE_MATCH, | 741 LogOverallTypePrediction(AutofillMetrics::TYPE_MATCH, |
| 693 NAME_FULL, std::string())); | 742 NAME_FULL, std::string())); |
| 694 EXPECT_CALL(*autofill_manager_->metric_logger(), | 743 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 695 LogQualityMetric(AutofillMetrics::FIELD_AUTOFILLED, | 744 LogQualityMetric(AutofillMetrics::FIELD_AUTOFILLED, |
| 696 std::string())); | 745 std::string())); |
| 697 | 746 |
| 698 // Simulate form submission. | 747 // Simulate form submission. |
| 699 EXPECT_NO_FATAL_FAILURE(autofill_manager_->OnFormSubmitted(form, | 748 EXPECT_NO_FATAL_FAILURE(autofill_manager_->FormSubmitted(form, |
| 700 TimeTicks::Now())); | 749 TimeTicks::Now())); |
| 701 } | 750 } |
| 702 | 751 |
| 703 // Test that we don't log quality metrics for non-autofillable forms. | 752 // Test that we don't log quality metrics for non-autofillable forms. |
| 704 TEST_F(AutofillMetricsTest, NoQualityMetricsForNonAutofillableForms) { | 753 TEST_F(AutofillMetricsTest, NoQualityMetricsForNonAutofillableForms) { |
| 705 // Forms must include at least three fields to be auto-fillable. | 754 // Forms must include at least three fields to be auto-fillable. |
| 706 FormData form; | 755 FormData form; |
| 707 form.name = ASCIIToUTF16("TestForm"); | 756 form.name = ASCIIToUTF16("TestForm"); |
| 708 form.method = ASCIIToUTF16("POST"); | 757 form.method = ASCIIToUTF16("POST"); |
| 709 form.origin = GURL("http://example.com/form.html"); | 758 form.origin = GURL("http://example.com/form.html"); |
| 710 form.action = GURL("http://example.com/submit.html"); | 759 form.action = GURL("http://example.com/submit.html"); |
| 711 form.user_submitted = true; | 760 form.user_submitted = true; |
| 712 | 761 |
| 713 FormField field; | 762 FormField field; |
| 714 autofill_test::CreateTestFormField( | 763 autofill_test::CreateTestFormField( |
| 715 "Autofilled", "autofilled", "Elvis Presley", "text", &field); | 764 "Autofilled", "autofilled", "Elvis Presley", "text", &field); |
| 716 field.is_autofilled = true; | 765 field.is_autofilled = true; |
| 717 form.fields.push_back(field); | 766 form.fields.push_back(field); |
| 718 autofill_test::CreateTestFormField( | 767 autofill_test::CreateTestFormField( |
| 719 "Autofill Failed", "autofillfailed", "buddy@gmail.com", "text", &field); | 768 "Autofill Failed", "autofillfailed", "buddy@gmail.com", "text", &field); |
| 720 form.fields.push_back(field); | 769 form.fields.push_back(field); |
| 721 | 770 |
| 722 // Simulate form submission. | 771 // Simulate form submission. |
| 723 EXPECT_CALL(*autofill_manager_->metric_logger(), | 772 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 724 LogQualityMetric(AutofillMetrics::FIELD_SUBMITTED, | 773 LogQualityMetric(AutofillMetrics::FIELD_SUBMITTED, |
| 725 std::string())).Times(0); | 774 std::string())).Times(0); |
| 726 EXPECT_NO_FATAL_FAILURE(autofill_manager_->OnFormSubmitted(form, | 775 EXPECT_NO_FATAL_FAILURE(autofill_manager_->FormSubmitted(form, |
| 727 TimeTicks::Now())); | 776 TimeTicks::Now())); |
| 728 | 777 |
| 729 // Search forms are not auto-fillable. | 778 // Search forms are not auto-fillable. |
| 730 form.action = GURL("http://example.com/search?q=Elvis%20Presley"); | 779 form.action = GURL("http://example.com/search?q=Elvis%20Presley"); |
| 731 autofill_test::CreateTestFormField( | 780 autofill_test::CreateTestFormField( |
| 732 "Empty", "empty", "", "text", &field); | 781 "Empty", "empty", "", "text", &field); |
| 733 form.fields.push_back(field); | 782 form.fields.push_back(field); |
| 734 | 783 |
| 735 // Simulate form submission. | 784 // Simulate form submission. |
| 736 EXPECT_CALL(*autofill_manager_->metric_logger(), | 785 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 737 LogQualityMetric(AutofillMetrics::FIELD_SUBMITTED, | 786 LogQualityMetric(AutofillMetrics::FIELD_SUBMITTED, |
| 738 std::string())).Times(0); | 787 std::string())).Times(0); |
| 739 EXPECT_NO_FATAL_FAILURE(autofill_manager_->OnFormSubmitted(form, | 788 EXPECT_NO_FATAL_FAILURE(autofill_manager_->FormSubmitted(form, |
| 740 TimeTicks::Now())); | 789 TimeTicks::Now())); |
| 741 } | 790 } |
| 742 | 791 |
| 743 // Test that we recored the experiment id appropriately. | 792 // Test that we recored the experiment id appropriately. |
| 744 TEST_F(AutofillMetricsTest, QualityMetricsWithExperimentId) { | 793 TEST_F(AutofillMetricsTest, QualityMetricsWithExperimentId) { |
| 745 // Set up our form data. | 794 // Set up our form data. |
| 746 FormData form; | 795 FormData form; |
| 747 form.name = ASCIIToUTF16("TestForm"); | 796 form.name = ASCIIToUTF16("TestForm"); |
| 748 form.method = ASCIIToUTF16("POST"); | 797 form.method = ASCIIToUTF16("POST"); |
| 749 form.origin = GURL("http://example.com/form.html"); | 798 form.origin = GURL("http://example.com/form.html"); |
| 750 form.action = GURL("http://example.com/submit.html"); | 799 form.action = GURL("http://example.com/submit.html"); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 855 LogHeuristicTypePrediction(AutofillMetrics::TYPE_UNKNOWN, | 904 LogHeuristicTypePrediction(AutofillMetrics::TYPE_UNKNOWN, |
| 856 ADDRESS_HOME_COUNTRY, experiment_id)); | 905 ADDRESS_HOME_COUNTRY, experiment_id)); |
| 857 EXPECT_CALL(*autofill_manager_->metric_logger(), | 906 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 858 LogServerTypePrediction(AutofillMetrics::TYPE_UNKNOWN, | 907 LogServerTypePrediction(AutofillMetrics::TYPE_UNKNOWN, |
| 859 ADDRESS_HOME_COUNTRY, experiment_id)); | 908 ADDRESS_HOME_COUNTRY, experiment_id)); |
| 860 EXPECT_CALL(*autofill_manager_->metric_logger(), | 909 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 861 LogOverallTypePrediction(AutofillMetrics::TYPE_UNKNOWN, | 910 LogOverallTypePrediction(AutofillMetrics::TYPE_UNKNOWN, |
| 862 ADDRESS_HOME_COUNTRY, experiment_id)); | 911 ADDRESS_HOME_COUNTRY, experiment_id)); |
| 863 | 912 |
| 864 // Simulate form submission. | 913 // Simulate form submission. |
| 865 EXPECT_NO_FATAL_FAILURE(autofill_manager_->OnFormSubmitted(form, | 914 EXPECT_NO_FATAL_FAILURE(autofill_manager_->FormSubmitted(form, |
| 866 TimeTicks::Now())); | 915 TimeTicks::Now())); |
| 867 } | 916 } |
| 868 | 917 |
| 869 // Test that the profile count is logged correctly. | 918 // Test that the profile count is logged correctly. |
| 870 TEST_F(AutofillMetricsTest, StoredProfileCount) { | 919 TEST_F(AutofillMetricsTest, StoredProfileCount) { |
| 871 // The metric should be logged when the profiles are first loaded. | 920 // The metric should be logged when the profiles are first loaded. |
| 872 EXPECT_CALL(*personal_data_.metric_logger(), | 921 EXPECT_CALL(*personal_data_.metric_logger(), |
| 873 LogStoredProfileCount(2)).Times(1); | 922 LogStoredProfileCount(2)).Times(1); |
| 874 personal_data_.LoadProfiles(); | 923 personal_data_.LoadProfiles(); |
| 875 | 924 |
| 876 // The metric should only be logged once. | 925 // The metric should only be logged once. |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1099 LogUserHappinessMetric( | 1148 LogUserHappinessMetric( |
| 1100 AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_SOME)).Times(0); | 1149 AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_SOME)).Times(0); |
| 1101 EXPECT_CALL( | 1150 EXPECT_CALL( |
| 1102 *autofill_manager_->metric_logger(), | 1151 *autofill_manager_->metric_logger(), |
| 1103 LogUserHappinessMetric( | 1152 LogUserHappinessMetric( |
| 1104 AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_NONE)).Times(0); | 1153 AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_NONE)).Times(0); |
| 1105 EXPECT_CALL( | 1154 EXPECT_CALL( |
| 1106 *autofill_manager_->metric_logger(), | 1155 *autofill_manager_->metric_logger(), |
| 1107 LogUserHappinessMetric( | 1156 LogUserHappinessMetric( |
| 1108 AutofillMetrics::SUBMITTED_NON_FILLABLE_FORM)).Times(0); | 1157 AutofillMetrics::SUBMITTED_NON_FILLABLE_FORM)).Times(0); |
| 1109 autofill_manager_->OnFormSubmitted(form, TimeTicks::Now()); | 1158 autofill_manager_->FormSubmitted(form, TimeTicks::Now()); |
| 1110 } | 1159 } |
| 1111 | 1160 |
| 1112 // Add more fields to the form. | 1161 // Add more fields to the form. |
| 1113 autofill_test::CreateTestFormField("Phone", "phone", "", "text", &field); | 1162 autofill_test::CreateTestFormField("Phone", "phone", "", "text", &field); |
| 1114 form.fields.push_back(field); | 1163 form.fields.push_back(field); |
| 1115 autofill_test::CreateTestFormField("Unknown", "unknown", "", "text", &field); | 1164 autofill_test::CreateTestFormField("Unknown", "unknown", "", "text", &field); |
| 1116 form.fields.push_back(field); | 1165 form.fields.push_back(field); |
| 1117 forms.front() = form; | 1166 forms.front() = form; |
| 1118 | 1167 |
| 1119 // Expect a notification when the form is first seen. | 1168 // Expect a notification when the form is first seen. |
| 1120 { | 1169 { |
| 1121 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1170 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1122 LogUserHappinessMetric(AutofillMetrics::FORMS_LOADED)); | 1171 LogUserHappinessMetric(AutofillMetrics::FORMS_LOADED)); |
| 1123 autofill_manager_->OnFormsSeen(forms, TimeTicks()); | 1172 autofill_manager_->OnFormsSeen(forms, TimeTicks()); |
| 1124 } | 1173 } |
| 1125 | 1174 |
| 1126 // Expect a notification when the form is submitted. | 1175 // Expect a notification when the form is submitted. |
| 1127 { | 1176 { |
| 1128 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1177 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1129 LogUserHappinessMetric( | 1178 LogUserHappinessMetric( |
| 1130 AutofillMetrics::SUBMITTED_NON_FILLABLE_FORM)); | 1179 AutofillMetrics::SUBMITTED_NON_FILLABLE_FORM)); |
| 1131 autofill_manager_->OnFormSubmitted(form, TimeTicks::Now()); | 1180 autofill_manager_->FormSubmitted(form, TimeTicks::Now()); |
| 1132 } | 1181 } |
| 1133 | 1182 |
| 1134 // Fill in two of the fields. | 1183 // Fill in two of the fields. |
| 1135 form.fields[0].value = ASCIIToUTF16("Elvis Aaron Presley"); | 1184 form.fields[0].value = ASCIIToUTF16("Elvis Aaron Presley"); |
| 1136 form.fields[1].value = ASCIIToUTF16("theking@gmail.com"); | 1185 form.fields[1].value = ASCIIToUTF16("theking@gmail.com"); |
| 1137 forms.front() = form; | 1186 forms.front() = form; |
| 1138 | 1187 |
| 1139 // Expect a notification when the form is submitted. | 1188 // Expect a notification when the form is submitted. |
| 1140 { | 1189 { |
| 1141 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1190 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1142 LogUserHappinessMetric( | 1191 LogUserHappinessMetric( |
| 1143 AutofillMetrics::SUBMITTED_NON_FILLABLE_FORM)); | 1192 AutofillMetrics::SUBMITTED_NON_FILLABLE_FORM)); |
| 1144 autofill_manager_->OnFormSubmitted(form, TimeTicks::Now()); | 1193 autofill_manager_->FormSubmitted(form, TimeTicks::Now()); |
| 1145 } | 1194 } |
| 1146 | 1195 |
| 1147 // Fill in the third field. | 1196 // Fill in the third field. |
| 1148 form.fields[2].value = ASCIIToUTF16("12345678901"); | 1197 form.fields[2].value = ASCIIToUTF16("12345678901"); |
| 1149 forms.front() = form; | 1198 forms.front() = form; |
| 1150 | 1199 |
| 1151 // Expect notifications when the form is submitted. | 1200 // Expect notifications when the form is submitted. |
| 1152 { | 1201 { |
| 1153 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1202 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1154 LogUserHappinessMetric( | 1203 LogUserHappinessMetric( |
| 1155 AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_NONE)); | 1204 AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_NONE)); |
| 1156 autofill_manager_->OnFormSubmitted(form, TimeTicks::Now()); | 1205 autofill_manager_->FormSubmitted(form, TimeTicks::Now()); |
| 1157 } | 1206 } |
| 1158 | 1207 |
| 1159 | 1208 |
| 1160 // Mark one of the fields as autofilled. | 1209 // Mark one of the fields as autofilled. |
| 1161 form.fields[1].is_autofilled = true; | 1210 form.fields[1].is_autofilled = true; |
| 1162 forms.front() = form; | 1211 forms.front() = form; |
| 1163 | 1212 |
| 1164 // Expect notifications when the form is submitted. | 1213 // Expect notifications when the form is submitted. |
| 1165 { | 1214 { |
| 1166 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1215 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1167 LogUserHappinessMetric( | 1216 LogUserHappinessMetric( |
| 1168 AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_SOME)); | 1217 AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_SOME)); |
| 1169 autofill_manager_->OnFormSubmitted(form, TimeTicks::Now()); | 1218 autofill_manager_->FormSubmitted(form, TimeTicks::Now()); |
| 1170 } | 1219 } |
| 1171 | 1220 |
| 1172 // Mark all of the fillable fields as autofilled. | 1221 // Mark all of the fillable fields as autofilled. |
| 1173 form.fields[0].is_autofilled = true; | 1222 form.fields[0].is_autofilled = true; |
| 1174 form.fields[2].is_autofilled = true; | 1223 form.fields[2].is_autofilled = true; |
| 1175 forms.front() = form; | 1224 forms.front() = form; |
| 1176 | 1225 |
| 1177 // Expect notifications when the form is submitted. | 1226 // Expect notifications when the form is submitted. |
| 1178 { | 1227 { |
| 1179 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1228 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1180 LogUserHappinessMetric( | 1229 LogUserHappinessMetric( |
| 1181 AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_ALL)); | 1230 AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_ALL)); |
| 1182 autofill_manager_->OnFormSubmitted(form, TimeTicks::Now()); | 1231 autofill_manager_->FormSubmitted(form, TimeTicks::Now()); |
| 1183 } | 1232 } |
| 1184 | 1233 |
| 1185 // Clear out the third field's value. | 1234 // Clear out the third field's value. |
| 1186 form.fields[2].value = string16(); | 1235 form.fields[2].value = string16(); |
| 1187 forms.front() = form; | 1236 forms.front() = form; |
| 1188 | 1237 |
| 1189 // Expect notifications when the form is submitted. | 1238 // Expect notifications when the form is submitted. |
| 1190 { | 1239 { |
| 1191 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1240 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1192 LogUserHappinessMetric( | 1241 LogUserHappinessMetric( |
| 1193 AutofillMetrics::SUBMITTED_NON_FILLABLE_FORM)); | 1242 AutofillMetrics::SUBMITTED_NON_FILLABLE_FORM)); |
| 1194 autofill_manager_->OnFormSubmitted(form, TimeTicks::Now()); | 1243 autofill_manager_->FormSubmitted(form, TimeTicks::Now()); |
| 1195 } | 1244 } |
| 1196 } | 1245 } |
| 1197 | 1246 |
| 1198 // Verify that we correctly log user happiness metrics dealing with form | 1247 // Verify that we correctly log user happiness metrics dealing with form |
| 1199 // interaction. | 1248 // interaction. |
| 1200 TEST_F(AutofillMetricsTest, UserHappinessFormInteraction) { | 1249 TEST_F(AutofillMetricsTest, UserHappinessFormInteraction) { |
| 1201 // Load a fillable form. | 1250 // Load a fillable form. |
| 1202 FormData form; | 1251 FormData form; |
| 1203 form.name = ASCIIToUTF16("TestForm"); | 1252 form.name = ASCIIToUTF16("TestForm"); |
| 1204 form.method = ASCIIToUTF16("POST"); | 1253 form.method = ASCIIToUTF16("POST"); |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1337 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1386 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1338 LogFormFillDurationFromLoadWithAutofill(_)).Times(0); | 1387 LogFormFillDurationFromLoadWithAutofill(_)).Times(0); |
| 1339 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1388 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1340 LogFormFillDurationFromLoadWithoutAutofill( | 1389 LogFormFillDurationFromLoadWithoutAutofill( |
| 1341 TimeDelta::FromInternalValue(16))); | 1390 TimeDelta::FromInternalValue(16))); |
| 1342 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1391 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1343 LogFormFillDurationFromInteractionWithAutofill(_)).Times(0); | 1392 LogFormFillDurationFromInteractionWithAutofill(_)).Times(0); |
| 1344 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1393 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1345 LogFormFillDurationFromInteractionWithoutAutofill(_)).Times(0); | 1394 LogFormFillDurationFromInteractionWithoutAutofill(_)).Times(0); |
| 1346 autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1)); | 1395 autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1)); |
| 1347 autofill_manager_->OnFormSubmitted(form, TimeTicks::FromInternalValue(17)); | 1396 autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17)); |
| 1348 autofill_manager_->Reset(); | 1397 autofill_manager_->Reset(); |
| 1349 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); | 1398 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); |
| 1350 } | 1399 } |
| 1351 | 1400 |
| 1352 // Expect metric to be logged if the user manually edited a form field. | 1401 // Expect metric to be logged if the user manually edited a form field. |
| 1353 { | 1402 { |
| 1354 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1403 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1355 LogFormFillDurationFromLoadWithAutofill(_)).Times(0); | 1404 LogFormFillDurationFromLoadWithAutofill(_)).Times(0); |
| 1356 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1405 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1357 LogFormFillDurationFromLoadWithoutAutofill( | 1406 LogFormFillDurationFromLoadWithoutAutofill( |
| 1358 TimeDelta::FromInternalValue(16))); | 1407 TimeDelta::FromInternalValue(16))); |
| 1359 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1408 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1360 LogFormFillDurationFromInteractionWithAutofill(_)).Times(0); | 1409 LogFormFillDurationFromInteractionWithAutofill(_)).Times(0); |
| 1361 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1410 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1362 LogFormFillDurationFromInteractionWithoutAutofill( | 1411 LogFormFillDurationFromInteractionWithoutAutofill( |
| 1363 TimeDelta::FromInternalValue(14))); | 1412 TimeDelta::FromInternalValue(14))); |
| 1364 autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1)); | 1413 autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1)); |
| 1365 autofill_manager_->OnTextFieldDidChange(form, form.fields.front(), | 1414 autofill_manager_->OnTextFieldDidChange(form, form.fields.front(), |
| 1366 TimeTicks::FromInternalValue(3)); | 1415 TimeTicks::FromInternalValue(3)); |
| 1367 autofill_manager_->OnFormSubmitted(form, TimeTicks::FromInternalValue(17)); | 1416 autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17)); |
| 1368 autofill_manager_->Reset(); | 1417 autofill_manager_->Reset(); |
| 1369 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); | 1418 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); |
| 1370 } | 1419 } |
| 1371 | 1420 |
| 1372 // Expect metric to be logged if the user autofilled the form. | 1421 // Expect metric to be logged if the user autofilled the form. |
| 1373 form.fields[0].is_autofilled = true; | 1422 form.fields[0].is_autofilled = true; |
| 1374 { | 1423 { |
| 1375 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1424 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1376 LogFormFillDurationFromLoadWithAutofill( | 1425 LogFormFillDurationFromLoadWithAutofill( |
| 1377 TimeDelta::FromInternalValue(16))); | 1426 TimeDelta::FromInternalValue(16))); |
| 1378 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1427 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1379 LogFormFillDurationFromLoadWithoutAutofill(_)).Times(0); | 1428 LogFormFillDurationFromLoadWithoutAutofill(_)).Times(0); |
| 1380 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1429 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1381 LogFormFillDurationFromInteractionWithAutofill( | 1430 LogFormFillDurationFromInteractionWithAutofill( |
| 1382 TimeDelta::FromInternalValue(12))); | 1431 TimeDelta::FromInternalValue(12))); |
| 1383 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1432 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1384 LogFormFillDurationFromInteractionWithoutAutofill(_)).Times(0); | 1433 LogFormFillDurationFromInteractionWithoutAutofill(_)).Times(0); |
| 1385 autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1)); | 1434 autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1)); |
| 1386 autofill_manager_->OnDidFillAutofillFormData( | 1435 autofill_manager_->OnDidFillAutofillFormData( |
| 1387 TimeTicks::FromInternalValue(5)); | 1436 TimeTicks::FromInternalValue(5)); |
| 1388 autofill_manager_->OnFormSubmitted(form, TimeTicks::FromInternalValue(17)); | 1437 autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17)); |
| 1389 autofill_manager_->Reset(); | 1438 autofill_manager_->Reset(); |
| 1390 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); | 1439 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); |
| 1391 } | 1440 } |
| 1392 | 1441 |
| 1393 // Expect metric to be logged if the user both manually filled some fields | 1442 // Expect metric to be logged if the user both manually filled some fields |
| 1394 // and autofilled others. Messages can arrive out of order, so make sure they | 1443 // and autofilled others. Messages can arrive out of order, so make sure they |
| 1395 // take precedence appropriately. | 1444 // take precedence appropriately. |
| 1396 { | 1445 { |
| 1397 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1446 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1398 LogFormFillDurationFromLoadWithAutofill( | 1447 LogFormFillDurationFromLoadWithAutofill( |
| 1399 TimeDelta::FromInternalValue(16))); | 1448 TimeDelta::FromInternalValue(16))); |
| 1400 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1449 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1401 LogFormFillDurationFromLoadWithoutAutofill(_)).Times(0); | 1450 LogFormFillDurationFromLoadWithoutAutofill(_)).Times(0); |
| 1402 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1451 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1403 LogFormFillDurationFromInteractionWithAutofill( | 1452 LogFormFillDurationFromInteractionWithAutofill( |
| 1404 TimeDelta::FromInternalValue(14))); | 1453 TimeDelta::FromInternalValue(14))); |
| 1405 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1454 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1406 LogFormFillDurationFromInteractionWithoutAutofill(_)).Times(0); | 1455 LogFormFillDurationFromInteractionWithoutAutofill(_)).Times(0); |
| 1407 autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1)); | 1456 autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1)); |
| 1408 autofill_manager_->OnDidFillAutofillFormData( | 1457 autofill_manager_->OnDidFillAutofillFormData( |
| 1409 TimeTicks::FromInternalValue(5)); | 1458 TimeTicks::FromInternalValue(5)); |
| 1410 autofill_manager_->OnTextFieldDidChange(form, form.fields.front(), | 1459 autofill_manager_->OnTextFieldDidChange(form, form.fields.front(), |
| 1411 TimeTicks::FromInternalValue(3)); | 1460 TimeTicks::FromInternalValue(3)); |
| 1412 autofill_manager_->OnFormSubmitted(form, TimeTicks::FromInternalValue(17)); | 1461 autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17)); |
| 1413 autofill_manager_->Reset(); | 1462 autofill_manager_->Reset(); |
| 1414 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); | 1463 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); |
| 1415 } | 1464 } |
| 1416 | 1465 |
| 1417 // Restore the global Gmock verbosity level to its default value. | 1466 // Restore the global Gmock verbosity level to its default value. |
| 1418 ::testing::FLAGS_gmock_verbose = "warning"; | 1467 ::testing::FLAGS_gmock_verbose = "warning"; |
| 1419 } | 1468 } |
| OLD | NEW |