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 <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
11 #include "base/strings/string16.h" | 11 #include "base/strings/string16.h" |
12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
13 #include "base/time/time.h" | 13 #include "base/time/time.h" |
14 #include "chrome/browser/autofill/autofill_cc_infobar_delegate.h" | |
15 #include "chrome/browser/autofill/personal_data_manager_factory.h" | 14 #include "chrome/browser/autofill/personal_data_manager_factory.h" |
16 #include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h" | 15 #include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h" |
17 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 16 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
18 #include "chrome/test/base/testing_profile.h" | 17 #include "chrome/test/base/testing_profile.h" |
19 #include "components/autofill/core/browser/autofill_external_delegate.h" | 18 #include "components/autofill/core/browser/autofill_external_delegate.h" |
20 #include "components/autofill/core/browser/autofill_manager.h" | 19 #include "components/autofill/core/browser/autofill_manager.h" |
21 #include "components/autofill/core/browser/autofill_manager_delegate.h" | 20 #include "components/autofill/core/browser/autofill_manager_delegate.h" |
22 #include "components/autofill/core/browser/autofill_test_utils.h" | 21 #include "components/autofill/core/browser/autofill_test_utils.h" |
23 #include "components/autofill/core/browser/personal_data_manager.h" | 22 #include "components/autofill/core/browser/personal_data_manager.h" |
24 #include "components/autofill/core/browser/test_autofill_driver.h" | 23 #include "components/autofill/core/browser/test_autofill_driver.h" |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 } // namespace | 234 } // namespace |
236 | 235 |
237 class AutofillMetricsTest : public ChromeRenderViewHostTestHarness { | 236 class AutofillMetricsTest : public ChromeRenderViewHostTestHarness { |
238 public: | 237 public: |
239 virtual ~AutofillMetricsTest(); | 238 virtual ~AutofillMetricsTest(); |
240 | 239 |
241 virtual void SetUp() OVERRIDE; | 240 virtual void SetUp() OVERRIDE; |
242 virtual void TearDown() OVERRIDE; | 241 virtual void TearDown() OVERRIDE; |
243 | 242 |
244 protected: | 243 protected: |
245 scoped_ptr<ConfirmInfoBarDelegate> CreateDelegate( | |
246 MockAutofillMetrics* metric_logger); | |
247 | |
248 scoped_ptr<TestAutofillDriver> autofill_driver_; | 244 scoped_ptr<TestAutofillDriver> autofill_driver_; |
249 scoped_ptr<TestAutofillManager> autofill_manager_; | 245 scoped_ptr<TestAutofillManager> autofill_manager_; |
250 scoped_ptr<TestPersonalDataManager> personal_data_; | 246 scoped_ptr<TestPersonalDataManager> personal_data_; |
251 scoped_ptr<AutofillExternalDelegate> external_delegate_; | 247 scoped_ptr<AutofillExternalDelegate> external_delegate_; |
252 }; | 248 }; |
253 | 249 |
254 AutofillMetricsTest::~AutofillMetricsTest() { | 250 AutofillMetricsTest::~AutofillMetricsTest() { |
255 // Order of destruction is important as AutofillManager relies on | 251 // Order of destruction is important as AutofillManager relies on |
256 // PersonalDataManager to be around when it gets destroyed. | 252 // PersonalDataManager to be around when it gets destroyed. |
257 autofill_manager_.reset(); | 253 autofill_manager_.reset(); |
(...skipping 26 matching lines...) Expand all Loading... |
284 | 280 |
285 void AutofillMetricsTest::TearDown() { | 281 void AutofillMetricsTest::TearDown() { |
286 // Order of destruction is important as AutofillManager relies on | 282 // Order of destruction is important as AutofillManager relies on |
287 // PersonalDataManager to be around when it gets destroyed. | 283 // PersonalDataManager to be around when it gets destroyed. |
288 autofill_manager_.reset(); | 284 autofill_manager_.reset(); |
289 autofill_driver_.reset(); | 285 autofill_driver_.reset(); |
290 personal_data_.reset(); | 286 personal_data_.reset(); |
291 ChromeRenderViewHostTestHarness::TearDown(); | 287 ChromeRenderViewHostTestHarness::TearDown(); |
292 } | 288 } |
293 | 289 |
294 scoped_ptr<ConfirmInfoBarDelegate> AutofillMetricsTest::CreateDelegate( | |
295 MockAutofillMetrics* metric_logger) { | |
296 EXPECT_CALL(*metric_logger, | |
297 LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_SHOWN)); | |
298 | |
299 CreditCard credit_card; | |
300 return AutofillCCInfoBarDelegate::Create( | |
301 metric_logger, | |
302 base::Bind( | |
303 base::IgnoreResult(&TestPersonalDataManager::SaveImportedCreditCard), | |
304 base::Unretained(personal_data_.get()), credit_card)); | |
305 } | |
306 | |
307 // Test that we log quality metrics appropriately. | 290 // Test that we log quality metrics appropriately. |
308 TEST_F(AutofillMetricsTest, QualityMetrics) { | 291 TEST_F(AutofillMetricsTest, QualityMetrics) { |
309 // Set up our form data. | 292 // Set up our form data. |
310 FormData form; | 293 FormData form; |
311 form.name = ASCIIToUTF16("TestForm"); | 294 form.name = ASCIIToUTF16("TestForm"); |
312 form.method = ASCIIToUTF16("POST"); | 295 form.method = ASCIIToUTF16("POST"); |
313 form.origin = GURL("http://example.com/form.html"); | 296 form.origin = GURL("http://example.com/form.html"); |
314 form.action = GURL("http://example.com/submit.html"); | 297 form.action = GURL("http://example.com/submit.html"); |
315 form.user_submitted = true; | 298 form.user_submitted = true; |
316 | 299 |
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
715 | 698 |
716 // Establish our expectations. | 699 // Establish our expectations. |
717 EXPECT_CALL(*autofill_manager_->metric_logger(), | 700 EXPECT_CALL(*autofill_manager_->metric_logger(), |
718 LogIsAutofillEnabledAtPageLoad(false)).Times(1); | 701 LogIsAutofillEnabledAtPageLoad(false)).Times(1); |
719 | 702 |
720 autofill_manager_->set_autofill_enabled(false); | 703 autofill_manager_->set_autofill_enabled(false); |
721 autofill_manager_->OnFormsSeen(std::vector<FormData>(), TimeTicks(), | 704 autofill_manager_->OnFormsSeen(std::vector<FormData>(), TimeTicks(), |
722 autofill::NO_SPECIAL_FORMS_SEEN); | 705 autofill::NO_SPECIAL_FORMS_SEEN); |
723 } | 706 } |
724 | 707 |
725 // Test that credit card infobar metrics are logged correctly. | |
726 TEST_F(AutofillMetricsTest, CreditCardInfoBar) { | |
727 testing::NiceMock<MockAutofillMetrics> metric_logger; | |
728 ::testing::InSequence dummy; | |
729 | |
730 // Accept the infobar. | |
731 { | |
732 scoped_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegate(&metric_logger)); | |
733 ASSERT_TRUE(infobar); | |
734 EXPECT_CALL(*personal_data_, SaveImportedCreditCard(_)); | |
735 EXPECT_CALL(metric_logger, | |
736 LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_ACCEPTED)).Times(1); | |
737 EXPECT_CALL(metric_logger, | |
738 LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_IGNORED)).Times(0); | |
739 EXPECT_TRUE(infobar->Accept()); | |
740 } | |
741 | |
742 // Cancel the infobar. | |
743 { | |
744 scoped_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegate(&metric_logger)); | |
745 ASSERT_TRUE(infobar); | |
746 EXPECT_CALL(metric_logger, | |
747 LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_DENIED)).Times(1); | |
748 EXPECT_CALL(metric_logger, | |
749 LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_IGNORED)).Times(0); | |
750 EXPECT_TRUE(infobar->Cancel()); | |
751 } | |
752 | |
753 // Dismiss the infobar. | |
754 { | |
755 scoped_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegate(&metric_logger)); | |
756 ASSERT_TRUE(infobar); | |
757 EXPECT_CALL(metric_logger, | |
758 LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_DENIED)).Times(1); | |
759 EXPECT_CALL(metric_logger, | |
760 LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_IGNORED)).Times(0); | |
761 infobar->InfoBarDismissed(); | |
762 } | |
763 | |
764 // Ignore the infobar. | |
765 { | |
766 scoped_ptr<ConfirmInfoBarDelegate> infobar(CreateDelegate(&metric_logger)); | |
767 ASSERT_TRUE(infobar); | |
768 EXPECT_CALL(metric_logger, | |
769 LogCreditCardInfoBarMetric(AutofillMetrics::INFOBAR_IGNORED)).Times(1); | |
770 } | |
771 } | |
772 | |
773 // Verify that we correctly log user happiness metrics dealing with form loading | 708 // Verify that we correctly log user happiness metrics dealing with form loading |
774 // and form submission. | 709 // and form submission. |
775 TEST_F(AutofillMetricsTest, UserHappinessFormLoadAndSubmission) { | 710 TEST_F(AutofillMetricsTest, UserHappinessFormLoadAndSubmission) { |
776 // Start with a form with insufficiently many fields. | 711 // Start with a form with insufficiently many fields. |
777 FormData form; | 712 FormData form; |
778 form.name = ASCIIToUTF16("TestForm"); | 713 form.name = ASCIIToUTF16("TestForm"); |
779 form.method = ASCIIToUTF16("POST"); | 714 form.method = ASCIIToUTF16("POST"); |
780 form.origin = GURL("http://example.com/form.html"); | 715 form.origin = GURL("http://example.com/form.html"); |
781 form.action = GURL("http://example.com/submit.html"); | 716 form.action = GURL("http://example.com/submit.html"); |
782 form.user_submitted = true; | 717 form.user_submitted = true; |
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1126 TimeTicks::FromInternalValue(5)); | 1061 TimeTicks::FromInternalValue(5)); |
1127 autofill_manager_->OnTextFieldDidChange(form, form.fields.front(), | 1062 autofill_manager_->OnTextFieldDidChange(form, form.fields.front(), |
1128 TimeTicks::FromInternalValue(3)); | 1063 TimeTicks::FromInternalValue(3)); |
1129 autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17)); | 1064 autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17)); |
1130 autofill_manager_->Reset(); | 1065 autofill_manager_->Reset(); |
1131 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); | 1066 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); |
1132 } | 1067 } |
1133 } | 1068 } |
1134 | 1069 |
1135 } // namespace autofill | 1070 } // namespace autofill |
OLD | NEW |