Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(127)

Side by Side Diff: chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc

Issue 14136005: [Autofill] Fix MessageLoop in test. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review nit. Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/memory/ref_counted.h"
6 #include "base/message_loop.h" 7 #include "base/message_loop.h"
7 #include "base/time.h" 8 #include "base/time.h"
8 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
9 #include "chrome/browser/ui/autofill/autofill_dialog_controller_impl.h" 10 #include "chrome/browser/ui/autofill/autofill_dialog_controller_impl.h"
10 #include "chrome/browser/ui/autofill/autofill_dialog_view.h" 11 #include "chrome/browser/ui/autofill/autofill_dialog_view.h"
11 #include "chrome/browser/ui/browser.h" 12 #include "chrome/browser/ui/browser.h"
12 #include "chrome/browser/ui/tabs/tab_strip_model.h" 13 #include "chrome/browser/ui/tabs/tab_strip_model.h"
13 #include "chrome/test/base/in_process_browser_test.h" 14 #include "chrome/test/base/in_process_browser_test.h"
14 #include "components/autofill/browser/autofill_metrics.h" 15 #include "components/autofill/browser/autofill_metrics.h"
15 #include "components/autofill/common/form_data.h" 16 #include "components/autofill/common/form_data.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 AutofillMetrics::AutocheckoutCompletionStatus autocheckout_status_; 68 AutofillMetrics::AutocheckoutCompletionStatus autocheckout_status_;
68 69
69 DISALLOW_COPY_AND_ASSIGN(MockAutofillMetrics); 70 DISALLOW_COPY_AND_ASSIGN(MockAutofillMetrics);
70 }; 71 };
71 72
72 class TestAutofillDialogController : public AutofillDialogControllerImpl { 73 class TestAutofillDialogController : public AutofillDialogControllerImpl {
73 public: 74 public:
74 TestAutofillDialogController(content::WebContents* contents, 75 TestAutofillDialogController(content::WebContents* contents,
75 const FormData& form_data, 76 const FormData& form_data,
76 const AutofillMetrics& metric_logger, 77 const AutofillMetrics& metric_logger,
78 scoped_refptr<content::MessageLoopRunner> runner,
77 const DialogType dialog_type) 79 const DialogType dialog_type)
78 : AutofillDialogControllerImpl(contents, 80 : AutofillDialogControllerImpl(contents,
79 form_data, 81 form_data,
80 GURL(), 82 GURL(),
81 dialog_type, 83 dialog_type,
82 base::Bind(&MockCallback)), 84 base::Bind(&MockCallback)),
83 metric_logger_(metric_logger) { 85 metric_logger_(metric_logger),
86 message_loop_runner_(runner) {
84 DisableWallet(); 87 DisableWallet();
85 } 88 }
86 89
87 virtual ~TestAutofillDialogController() {} 90 virtual ~TestAutofillDialogController() {}
88 91
89 virtual void ViewClosed() OVERRIDE { 92 virtual void ViewClosed() OVERRIDE {
93 message_loop_runner_->Quit();
90 AutofillDialogControllerImpl::ViewClosed(); 94 AutofillDialogControllerImpl::ViewClosed();
91 MessageLoop::current()->Quit();
92 } 95 }
93 96
94 virtual bool InputIsValid(AutofillFieldType type, 97 virtual bool InputIsValid(AutofillFieldType type,
95 const string16& value) OVERRIDE { 98 const string16& value) OVERRIDE {
96 return true; 99 return true;
97 } 100 }
98 101
99 virtual std::vector<AutofillFieldType> InputsAreValid( 102 virtual std::vector<AutofillFieldType> InputsAreValid(
100 const DetailOutputMap& inputs, ValidationType validation_type) OVERRIDE { 103 const DetailOutputMap& inputs, ValidationType validation_type) OVERRIDE {
101 return std::vector<AutofillFieldType>(); 104 return std::vector<AutofillFieldType>();
102 } 105 }
103 106
104 // Increase visibility for testing. 107 // Increase visibility for testing.
105 AutofillDialogView* view() { return AutofillDialogControllerImpl::view(); } 108 AutofillDialogView* view() { return AutofillDialogControllerImpl::view(); }
106 109
107 private: 110 private:
108 // To specify our own metric logger. 111 // To specify our own metric logger.
109 virtual const AutofillMetrics& GetMetricLogger() const OVERRIDE { 112 virtual const AutofillMetrics& GetMetricLogger() const OVERRIDE {
110 return metric_logger_; 113 return metric_logger_;
111 } 114 }
112 115
113 const AutofillMetrics& metric_logger_; 116 const AutofillMetrics& metric_logger_;
117 scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
114 118
115 DISALLOW_COPY_AND_ASSIGN(TestAutofillDialogController); 119 DISALLOW_COPY_AND_ASSIGN(TestAutofillDialogController);
116 }; 120 };
117 121
118 } // namespace 122 } // namespace
119 123
120 class AutofillDialogControllerTest : public InProcessBrowserTest { 124 class AutofillDialogControllerTest : public InProcessBrowserTest {
121 public: 125 public:
122 AutofillDialogControllerTest() {} 126 AutofillDialogControllerTest() {}
123 virtual ~AutofillDialogControllerTest() {} 127 virtual ~AutofillDialogControllerTest() {}
124 128
125 content::WebContents* GetActiveWebContents() { 129 content::WebContents* GetActiveWebContents() {
126 return browser()->tab_strip_model()->GetActiveWebContents(); 130 return browser()->tab_strip_model()->GetActiveWebContents();
127 } 131 }
128 132
133 TestAutofillDialogController* CreateController(
134 const FormData& form,
135 const AutofillMetrics& metric_logger,
136 const DialogType dialog_type) {
137 message_loop_runner_ = new content::MessageLoopRunner;
138 return new TestAutofillDialogController(
139 GetActiveWebContents(), form, metric_logger, message_loop_runner_,
140 dialog_type);
141 }
142
143 void RunMessageLoop() {
144 message_loop_runner_->Run();
145 }
146
129 private: 147 private:
148 scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
130 DISALLOW_COPY_AND_ASSIGN(AutofillDialogControllerTest); 149 DISALLOW_COPY_AND_ASSIGN(AutofillDialogControllerTest);
131 }; 150 };
132 151
133 // TODO(isherman): Enable this test on other platforms once the UI is 152 // TODO(isherman): Enable this test on other platforms once the UI is
134 // implemented on those platforms. 153 // implemented on those platforms.
135 #if defined(TOOLKIT_VIEWS) 154 #if defined(TOOLKIT_VIEWS)
136 #define MAYBE_RequestAutocompleteUiDurationMetrics \ 155 #define MAYBE_RequestAutocompleteUiDurationMetrics \
137 RequestAutocompleteUiDurationMetrics 156 RequestAutocompleteUiDurationMetrics
138 #else 157 #else
139 #define MAYBE_RequestAutocompleteUiDurationMetrics \ 158 #define MAYBE_RequestAutocompleteUiDurationMetrics \
140 DISABLED_RequestAutocompleteUiDurationMetrics 159 DISABLED_RequestAutocompleteUiDurationMetrics
141 #endif // defined(TOOLKIT_VIEWS) 160 #endif // defined(TOOLKIT_VIEWS)
142 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, 161 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest,
143 MAYBE_RequestAutocompleteUiDurationMetrics) { 162 MAYBE_RequestAutocompleteUiDurationMetrics) {
144 FormData form; 163 FormData form;
145 form.name = ASCIIToUTF16("TestForm"); 164 form.name = ASCIIToUTF16("TestForm");
146 form.method = ASCIIToUTF16("POST"); 165 form.method = ASCIIToUTF16("POST");
147 form.origin = GURL("http://example.com/form.html"); 166 form.origin = GURL("http://example.com/form.html");
148 form.action = GURL("http://example.com/submit.html"); 167 form.action = GURL("http://example.com/submit.html");
149 form.user_submitted = true; 168 form.user_submitted = true;
150 169
151 FormFieldData field; 170 FormFieldData field;
152 field.autocomplete_attribute = "email"; 171 field.autocomplete_attribute = "email";
153 form.fields.push_back(field); 172 form.fields.push_back(field);
154 173
155 // Submit the form data. 174 // Submit the form data.
156 { 175 {
157 MockAutofillMetrics metric_logger; 176 MockAutofillMetrics metric_logger;
158 TestAutofillDialogController* dialog_controller = 177 TestAutofillDialogController* dialog_controller = CreateController(
159 new TestAutofillDialogController( 178 form, metric_logger, DIALOG_TYPE_REQUEST_AUTOCOMPLETE);
160 GetActiveWebContents(), form, metric_logger,
161 DIALOG_TYPE_REQUEST_AUTOCOMPLETE);
162 dialog_controller->Show(); 179 dialog_controller->Show();
163 dialog_controller->view()->SubmitForTesting(); 180 dialog_controller->view()->SubmitForTesting();
164 181
165 content::RunMessageLoop(); 182 RunMessageLoop();
166 183
167 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, 184 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED,
168 metric_logger.dialog_dismissal_action()); 185 metric_logger.dialog_dismissal_action());
169 EXPECT_EQ(DIALOG_TYPE_REQUEST_AUTOCOMPLETE, metric_logger.dialog_type()); 186 EXPECT_EQ(DIALOG_TYPE_REQUEST_AUTOCOMPLETE, metric_logger.dialog_type());
170 } 187 }
171 188
172 // Cancel out of the dialog. 189 // Cancel out of the dialog.
173 { 190 {
174 MockAutofillMetrics metric_logger; 191 MockAutofillMetrics metric_logger;
175 TestAutofillDialogController* dialog_controller = 192 TestAutofillDialogController* dialog_controller = CreateController(
176 new TestAutofillDialogController( 193 form, metric_logger, DIALOG_TYPE_AUTOCHECKOUT);
177 GetActiveWebContents(), form, metric_logger,
178 DIALOG_TYPE_AUTOCHECKOUT);
179 dialog_controller->Show(); 194 dialog_controller->Show();
180 dialog_controller->view()->CancelForTesting(); 195 dialog_controller->view()->CancelForTesting();
181 196
182 content::RunMessageLoop(); 197 RunMessageLoop();
183 198
184 EXPECT_EQ(AutofillMetrics::DIALOG_CANCELED, 199 EXPECT_EQ(AutofillMetrics::DIALOG_CANCELED,
185 metric_logger.dialog_dismissal_action()); 200 metric_logger.dialog_dismissal_action());
186 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger.dialog_type()); 201 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger.dialog_type());
187 } 202 }
188 203
189 // Take some other action that dismisses the dialog. 204 // Take some other action that dismisses the dialog.
190 { 205 {
191 MockAutofillMetrics metric_logger; 206 MockAutofillMetrics metric_logger;
192 TestAutofillDialogController* dialog_controller = 207 TestAutofillDialogController* dialog_controller = CreateController(
193 new TestAutofillDialogController( 208 form, metric_logger, DIALOG_TYPE_AUTOCHECKOUT);
194 GetActiveWebContents(), form, metric_logger,
195 DIALOG_TYPE_AUTOCHECKOUT);
196 dialog_controller->Show(); 209 dialog_controller->Show();
197 dialog_controller->Hide(); 210 dialog_controller->Hide();
198 211
199 content::RunMessageLoop(); 212 RunMessageLoop();
200 213
201 EXPECT_EQ(AutofillMetrics::DIALOG_CANCELED, 214 EXPECT_EQ(AutofillMetrics::DIALOG_CANCELED,
202 metric_logger.dialog_dismissal_action()); 215 metric_logger.dialog_dismissal_action());
203 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger.dialog_type()); 216 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger.dialog_type());
204 } 217 }
205 218
206 // Test Autocheckout success metrics. 219 // Test Autocheckout success metrics.
207 { 220 {
208 MockAutofillMetrics metric_logger; 221 MockAutofillMetrics metric_logger;
209 TestAutofillDialogController* dialog_controller = 222 TestAutofillDialogController* dialog_controller = CreateController(
210 new TestAutofillDialogController( 223 form, metric_logger, DIALOG_TYPE_AUTOCHECKOUT);
211 GetActiveWebContents(), form, metric_logger,
212 DIALOG_TYPE_AUTOCHECKOUT);
213 dialog_controller->Show(); 224 dialog_controller->Show();
214 dialog_controller->view()->SubmitForTesting(); 225 dialog_controller->view()->SubmitForTesting();
215 226
216 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, 227 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED,
217 metric_logger.dialog_dismissal_action()); 228 metric_logger.dialog_dismissal_action());
218 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger.dialog_type()); 229 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger.dialog_type());
219 230
220 dialog_controller->Hide(); 231 dialog_controller->Hide();
221 232
222 content::RunMessageLoop(); 233 RunMessageLoop();
223 234
224 EXPECT_EQ(AutofillMetrics::AUTOCHECKOUT_SUCCEEDED, 235 EXPECT_EQ(AutofillMetrics::AUTOCHECKOUT_SUCCEEDED,
225 metric_logger.autocheckout_status()); 236 metric_logger.autocheckout_status());
226 } 237 }
227 238
228 // Test Autocheckout failure metric. 239 // Test Autocheckout failure metric.
229 { 240 {
230 MockAutofillMetrics metric_logger; 241 MockAutofillMetrics metric_logger;
231 TestAutofillDialogController* dialog_controller = 242 TestAutofillDialogController* dialog_controller = CreateController(
232 new TestAutofillDialogController( 243 form, metric_logger, DIALOG_TYPE_AUTOCHECKOUT);
233 GetActiveWebContents(), form, metric_logger,
234 DIALOG_TYPE_AUTOCHECKOUT);
235 dialog_controller->Show(); 244 dialog_controller->Show();
236 dialog_controller->view()->SubmitForTesting(); 245 dialog_controller->view()->SubmitForTesting();
237 246
238 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, 247 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED,
239 metric_logger.dialog_dismissal_action()); 248 metric_logger.dialog_dismissal_action());
240 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger.dialog_type()); 249 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger.dialog_type());
241 250
242 dialog_controller->OnAutocheckoutError(); 251 dialog_controller->OnAutocheckoutError();
243 dialog_controller->view()->CancelForTesting(); 252 dialog_controller->view()->CancelForTesting();
244 253
245 content::RunMessageLoop(); 254 RunMessageLoop();
246 255
247 EXPECT_EQ(AutofillMetrics::AUTOCHECKOUT_FAILED, 256 EXPECT_EQ(AutofillMetrics::AUTOCHECKOUT_FAILED,
248 metric_logger.autocheckout_status()); 257 metric_logger.autocheckout_status());
249 } 258 }
250 } 259 }
251 260
252 } // namespace autofill 261 } // namespace autofill
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698