| Index: chrome/browser/autofill/autofill_metrics_unittest.cc
|
| diff --git a/chrome/browser/autofill/autofill_metrics_unittest.cc b/chrome/browser/autofill/autofill_metrics_unittest.cc
|
| index 26b7af03ea69ed69624764ffedf5d77de2edeb82..fc86dc7a1c8d9df38fd46b0cec3891cc8e354c4e 100644
|
| --- a/chrome/browser/autofill/autofill_metrics_unittest.cc
|
| +++ b/chrome/browser/autofill/autofill_metrics_unittest.cc
|
| @@ -178,10 +178,11 @@ class TestAutofillManager : public AutofillManager {
|
| TestAutofillManager(TabContentsWrapper* tab_contents,
|
| TestPersonalDataManager* personal_manager)
|
| : AutofillManager(tab_contents, personal_manager),
|
| - autofill_enabled_(true) {
|
| + autofill_enabled_(true),
|
| + did_finish_async_form_submit_(false),
|
| + message_loop_is_running_(false) {
|
| set_metric_logger(new MockAutofillMetrics);
|
| }
|
| - virtual ~TestAutofillManager() {}
|
|
|
| virtual bool IsAutofillEnabled() const { return autofill_enabled_; }
|
|
|
| @@ -210,8 +211,46 @@ class TestAutofillManager : public AutofillManager {
|
| form_structures()->push_back(form_structure);
|
| }
|
|
|
| + void FormSubmitted(const FormData& form, const TimeTicks& timestamp) {
|
| + if (!OnFormSubmitted(form, timestamp))
|
| + return;
|
| +
|
| + // Wait for the asynchronous FormSubmitted() call to complete.
|
| + if (!did_finish_async_form_submit_) {
|
| + // TODO(isherman): It seems silly to need this variable. Is there some
|
| + // way I can just query the message loop's state?
|
| + message_loop_is_running_ = true;
|
| + MessageLoop::current()->Run();
|
| + } else {
|
| + did_finish_async_form_submit_ = false;
|
| + }
|
| + }
|
| +
|
| + virtual void UploadFormDataAsyncCallback(
|
| + const FormStructure* submitted_form,
|
| + const base::TimeTicks& load_time,
|
| + const base::TimeTicks& interaction_time,
|
| + const base::TimeTicks& submission_time) OVERRIDE {
|
| + if (message_loop_is_running_) {
|
| + MessageLoop::current()->Quit();
|
| + message_loop_is_running_ = false;
|
| + } else {
|
| + did_finish_async_form_submit_ = true;
|
| + }
|
| +
|
| + AutofillManager::UploadFormDataAsyncCallback(submitted_form,
|
| + load_time,
|
| + interaction_time,
|
| + submission_time);
|
| + }
|
| +
|
| private:
|
| + // AutofillManager is ref counted.
|
| + virtual ~TestAutofillManager() {}
|
| +
|
| bool autofill_enabled_;
|
| + bool did_finish_async_form_submit_;
|
| + bool message_loop_is_running_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(TestAutofillManager);
|
| };
|
| @@ -223,30 +262,33 @@ class AutofillMetricsTest : public TabContentsWrapperTestHarness {
|
| AutofillMetricsTest();
|
| virtual ~AutofillMetricsTest();
|
|
|
| - virtual void SetUp();
|
| + virtual void SetUp() OVERRIDE;
|
| + virtual void TearDown() OVERRIDE;
|
|
|
| protected:
|
| AutofillCCInfoBarDelegate* CreateDelegate(MockAutofillMetrics* metric_logger,
|
| CreditCard** created_card);
|
|
|
| - scoped_ptr<TestAutofillManager> autofill_manager_;
|
| + content::TestBrowserThread ui_thread_;
|
| + content::TestBrowserThread file_thread_;
|
| +
|
| + scoped_refptr<TestAutofillManager> autofill_manager_;
|
| TestPersonalDataManager personal_data_;
|
|
|
| private:
|
| - content::TestBrowserThread browser_thread_;
|
| -
|
| DISALLOW_COPY_AND_ASSIGN(AutofillMetricsTest);
|
| };
|
|
|
| AutofillMetricsTest::AutofillMetricsTest()
|
| : TabContentsWrapperTestHarness(),
|
| - browser_thread_(BrowserThread::UI, &message_loop_) {
|
| + ui_thread_(BrowserThread::UI, &message_loop_),
|
| + file_thread_(BrowserThread::FILE) {
|
| }
|
|
|
| AutofillMetricsTest::~AutofillMetricsTest() {
|
| // Order of destruction is important as AutofillManager relies on
|
| // PersonalDataManager to be around when it gets destroyed.
|
| - autofill_manager_.reset(NULL);
|
| + autofill_manager_ = NULL;
|
| }
|
|
|
| void AutofillMetricsTest::SetUp() {
|
| @@ -256,8 +298,15 @@ void AutofillMetricsTest::SetUp() {
|
| profile, TestPersonalDataManager::Build);
|
|
|
| TabContentsWrapperTestHarness::SetUp();
|
| - autofill_manager_.reset(new TestAutofillManager(contents_wrapper(),
|
| - &personal_data_));
|
| + autofill_manager_ = new TestAutofillManager(contents_wrapper(),
|
| + &personal_data_);
|
| +
|
| + file_thread_.Start();
|
| +}
|
| +
|
| +void AutofillMetricsTest::TearDown() {
|
| + file_thread_.Stop();
|
| + TabContentsWrapperTestHarness::TearDown();
|
| }
|
|
|
| AutofillCCInfoBarDelegate* AutofillMetricsTest::CreateDelegate(
|
| @@ -420,8 +469,8 @@ TEST_F(AutofillMetricsTest, QualityMetrics) {
|
| AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_SOME));
|
|
|
| // Simulate form submission.
|
| - EXPECT_NO_FATAL_FAILURE(autofill_manager_->OnFormSubmitted(form,
|
| - TimeTicks::Now()));
|
| + EXPECT_NO_FATAL_FAILURE(autofill_manager_->FormSubmitted(form,
|
| + TimeTicks::Now()));
|
| }
|
|
|
| // Test that we log the appropriate additional metrics when Autofill failed.
|
| @@ -538,8 +587,8 @@ TEST_F(AutofillMetricsTest, QualityMetricsForFailure) {
|
| }
|
|
|
| // Simulate form submission.
|
| - EXPECT_NO_FATAL_FAILURE(autofill_manager_->OnFormSubmitted(form,
|
| - TimeTicks::Now()));
|
| + EXPECT_NO_FATAL_FAILURE(autofill_manager_->FormSubmitted(form,
|
| + TimeTicks::Now()));
|
| }
|
|
|
| // Test that we behave sanely when the cached form differs from the submitted
|
| @@ -696,8 +745,8 @@ TEST_F(AutofillMetricsTest, SaneMetricsWithCacheMismatch) {
|
| std::string()));
|
|
|
| // Simulate form submission.
|
| - EXPECT_NO_FATAL_FAILURE(autofill_manager_->OnFormSubmitted(form,
|
| - TimeTicks::Now()));
|
| + EXPECT_NO_FATAL_FAILURE(autofill_manager_->FormSubmitted(form,
|
| + TimeTicks::Now()));
|
| }
|
|
|
| // Test that we don't log quality metrics for non-autofillable forms.
|
| @@ -723,8 +772,8 @@ TEST_F(AutofillMetricsTest, NoQualityMetricsForNonAutofillableForms) {
|
| EXPECT_CALL(*autofill_manager_->metric_logger(),
|
| LogQualityMetric(AutofillMetrics::FIELD_SUBMITTED,
|
| std::string())).Times(0);
|
| - EXPECT_NO_FATAL_FAILURE(autofill_manager_->OnFormSubmitted(form,
|
| - TimeTicks::Now()));
|
| + EXPECT_NO_FATAL_FAILURE(autofill_manager_->FormSubmitted(form,
|
| + TimeTicks::Now()));
|
|
|
| // Search forms are not auto-fillable.
|
| form.action = GURL("http://example.com/search?q=Elvis%20Presley");
|
| @@ -736,8 +785,8 @@ TEST_F(AutofillMetricsTest, NoQualityMetricsForNonAutofillableForms) {
|
| EXPECT_CALL(*autofill_manager_->metric_logger(),
|
| LogQualityMetric(AutofillMetrics::FIELD_SUBMITTED,
|
| std::string())).Times(0);
|
| - EXPECT_NO_FATAL_FAILURE(autofill_manager_->OnFormSubmitted(form,
|
| - TimeTicks::Now()));
|
| + EXPECT_NO_FATAL_FAILURE(autofill_manager_->FormSubmitted(form,
|
| + TimeTicks::Now()));
|
| }
|
|
|
| // Test that we recored the experiment id appropriately.
|
| @@ -862,8 +911,8 @@ TEST_F(AutofillMetricsTest, QualityMetricsWithExperimentId) {
|
| ADDRESS_HOME_COUNTRY, experiment_id));
|
|
|
| // Simulate form submission.
|
| - EXPECT_NO_FATAL_FAILURE(autofill_manager_->OnFormSubmitted(form,
|
| - TimeTicks::Now()));
|
| + EXPECT_NO_FATAL_FAILURE(autofill_manager_->FormSubmitted(form,
|
| + TimeTicks::Now()));
|
| }
|
|
|
| // Test that the profile count is logged correctly.
|
| @@ -1106,7 +1155,7 @@ TEST_F(AutofillMetricsTest, UserHappinessFormLoadAndSubmission) {
|
| *autofill_manager_->metric_logger(),
|
| LogUserHappinessMetric(
|
| AutofillMetrics::SUBMITTED_NON_FILLABLE_FORM)).Times(0);
|
| - autofill_manager_->OnFormSubmitted(form, TimeTicks::Now());
|
| + autofill_manager_->FormSubmitted(form, TimeTicks::Now());
|
| }
|
|
|
| // Add more fields to the form.
|
| @@ -1128,7 +1177,7 @@ TEST_F(AutofillMetricsTest, UserHappinessFormLoadAndSubmission) {
|
| EXPECT_CALL(*autofill_manager_->metric_logger(),
|
| LogUserHappinessMetric(
|
| AutofillMetrics::SUBMITTED_NON_FILLABLE_FORM));
|
| - autofill_manager_->OnFormSubmitted(form, TimeTicks::Now());
|
| + autofill_manager_->FormSubmitted(form, TimeTicks::Now());
|
| }
|
|
|
| // Fill in two of the fields.
|
| @@ -1141,7 +1190,7 @@ TEST_F(AutofillMetricsTest, UserHappinessFormLoadAndSubmission) {
|
| EXPECT_CALL(*autofill_manager_->metric_logger(),
|
| LogUserHappinessMetric(
|
| AutofillMetrics::SUBMITTED_NON_FILLABLE_FORM));
|
| - autofill_manager_->OnFormSubmitted(form, TimeTicks::Now());
|
| + autofill_manager_->FormSubmitted(form, TimeTicks::Now());
|
| }
|
|
|
| // Fill in the third field.
|
| @@ -1153,7 +1202,7 @@ TEST_F(AutofillMetricsTest, UserHappinessFormLoadAndSubmission) {
|
| EXPECT_CALL(*autofill_manager_->metric_logger(),
|
| LogUserHappinessMetric(
|
| AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_NONE));
|
| - autofill_manager_->OnFormSubmitted(form, TimeTicks::Now());
|
| + autofill_manager_->FormSubmitted(form, TimeTicks::Now());
|
| }
|
|
|
|
|
| @@ -1166,7 +1215,7 @@ TEST_F(AutofillMetricsTest, UserHappinessFormLoadAndSubmission) {
|
| EXPECT_CALL(*autofill_manager_->metric_logger(),
|
| LogUserHappinessMetric(
|
| AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_SOME));
|
| - autofill_manager_->OnFormSubmitted(form, TimeTicks::Now());
|
| + autofill_manager_->FormSubmitted(form, TimeTicks::Now());
|
| }
|
|
|
| // Mark all of the fillable fields as autofilled.
|
| @@ -1179,7 +1228,7 @@ TEST_F(AutofillMetricsTest, UserHappinessFormLoadAndSubmission) {
|
| EXPECT_CALL(*autofill_manager_->metric_logger(),
|
| LogUserHappinessMetric(
|
| AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_ALL));
|
| - autofill_manager_->OnFormSubmitted(form, TimeTicks::Now());
|
| + autofill_manager_->FormSubmitted(form, TimeTicks::Now());
|
| }
|
|
|
| // Clear out the third field's value.
|
| @@ -1191,7 +1240,7 @@ TEST_F(AutofillMetricsTest, UserHappinessFormLoadAndSubmission) {
|
| EXPECT_CALL(*autofill_manager_->metric_logger(),
|
| LogUserHappinessMetric(
|
| AutofillMetrics::SUBMITTED_NON_FILLABLE_FORM));
|
| - autofill_manager_->OnFormSubmitted(form, TimeTicks::Now());
|
| + autofill_manager_->FormSubmitted(form, TimeTicks::Now());
|
| }
|
| }
|
|
|
| @@ -1344,7 +1393,7 @@ TEST_F(AutofillMetricsTest, FormFillDuration) {
|
| EXPECT_CALL(*autofill_manager_->metric_logger(),
|
| LogFormFillDurationFromInteractionWithoutAutofill(_)).Times(0);
|
| autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1));
|
| - autofill_manager_->OnFormSubmitted(form, TimeTicks::FromInternalValue(17));
|
| + autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17));
|
| autofill_manager_->Reset();
|
| Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger());
|
| }
|
| @@ -1364,7 +1413,7 @@ TEST_F(AutofillMetricsTest, FormFillDuration) {
|
| autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1));
|
| autofill_manager_->OnTextFieldDidChange(form, form.fields.front(),
|
| TimeTicks::FromInternalValue(3));
|
| - autofill_manager_->OnFormSubmitted(form, TimeTicks::FromInternalValue(17));
|
| + autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17));
|
| autofill_manager_->Reset();
|
| Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger());
|
| }
|
| @@ -1385,7 +1434,7 @@ TEST_F(AutofillMetricsTest, FormFillDuration) {
|
| autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1));
|
| autofill_manager_->OnDidFillAutofillFormData(
|
| TimeTicks::FromInternalValue(5));
|
| - autofill_manager_->OnFormSubmitted(form, TimeTicks::FromInternalValue(17));
|
| + autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17));
|
| autofill_manager_->Reset();
|
| Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger());
|
| }
|
| @@ -1409,7 +1458,7 @@ TEST_F(AutofillMetricsTest, FormFillDuration) {
|
| TimeTicks::FromInternalValue(5));
|
| autofill_manager_->OnTextFieldDidChange(form, form.fields.front(),
|
| TimeTicks::FromInternalValue(3));
|
| - autofill_manager_->OnFormSubmitted(form, TimeTicks::FromInternalValue(17));
|
| + autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17));
|
| autofill_manager_->Reset();
|
| Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger());
|
| }
|
|
|