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

Side by Side Diff: components/autofill/content/browser/autocheckout_manager_unittest.cc

Issue 23033016: Remove autocheckout code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Even more deletes, and Ilya review. Created 7 years, 3 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include <map>
6
7 #include "base/strings/utf_string_conversions.h"
8 #include "base/tuple.h"
9 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
10 #include "components/autofill/content/browser/autocheckout_manager.h"
11 #include "components/autofill/core/browser/autofill_common_test.h"
12 #include "components/autofill/core/browser/autofill_manager.h"
13 #include "components/autofill/core/browser/autofill_metrics.h"
14 #include "components/autofill/core/browser/form_structure.h"
15 #include "components/autofill/core/browser/test_autofill_driver.h"
16 #include "components/autofill/core/browser/test_autofill_manager_delegate.h"
17 #include "components/autofill/core/common/autofill_messages.h"
18 #include "components/autofill/core/common/form_data.h"
19 #include "content/public/browser/browser_thread.h"
20 #include "content/public/test/mock_render_process_host.h"
21 #include "content/public/test/test_browser_thread.h"
22 #include "content/public/test/test_utils.h"
23 #include "ipc/ipc_test_sink.h"
24 #include "testing/gmock/include/gmock/gmock.h"
25 #include "testing/gtest/include/gtest/gtest.h"
26
27 using content::BrowserThread;
28
29 namespace autofill {
30
31 namespace {
32
33 typedef Tuple4<std::vector<FormData>,
34 std::vector<WebElementDescriptor>,
35 std::vector<WebElementDescriptor>,
36 WebElementDescriptor> AutofillParam;
37
38 enum ProceedElementPresence {
39 NO_PROCEED_ELEMENT,
40 HAS_PROCEED_ELEMENT,
41 };
42
43 FormFieldData BuildFieldWithValue(
44 const std::string& autocomplete_attribute,
45 const std::string& value) {
46 FormFieldData field;
47 field.name = ASCIIToUTF16(autocomplete_attribute);
48 field.value = ASCIIToUTF16(value);
49 field.autocomplete_attribute = autocomplete_attribute;
50 field.form_control_type = "text";
51 return field;
52 }
53
54 FormFieldData BuildField(const std::string& autocomplete_attribute) {
55 return BuildFieldWithValue(autocomplete_attribute, autocomplete_attribute);
56 }
57
58 scoped_ptr<FormStructure> CreateTestFormStructure(
59 const std::vector<ServerFieldType>& autofill_types) {
60 FormData form;
61 form.name = ASCIIToUTF16("MyForm");
62 form.method = ASCIIToUTF16("POST");
63 form.origin = GURL("https://myform.com/form.html");
64 form.action = GURL("https://myform.com/submit.html");
65 form.user_submitted = true;
66
67 // Add some fields, autocomplete_attribute is not important and we
68 // fake that server sends authoritative field mappings.
69 for (size_t i = 0; i < autofill_types.size(); ++i)
70 form.fields.push_back(BuildField("SomeField"));
71
72 scoped_ptr<FormStructure> form_structure(
73 new FormStructure(form, std::string()));
74
75 // Set mocked Autofill server field types.
76 for (size_t i = 0; i < autofill_types.size(); ++i) {
77 form_structure->field(i)->set_server_type(autofill_types[i]);
78 // Set heuristic type to make sure that server_types are used and not
79 // heuritic type.
80 form_structure->field(i)->set_heuristic_type(CREDIT_CARD_NUMBER);
81 }
82
83 return form_structure.Pass();
84 }
85
86 scoped_ptr<FormStructure> CreateTestAddressFormStructure() {
87 std::vector<ServerFieldType> autofill_types;
88 autofill_types.push_back(NAME_FULL);
89 autofill_types.push_back(PHONE_HOME_WHOLE_NUMBER);
90 autofill_types.push_back(EMAIL_ADDRESS);
91 autofill_types.push_back(ADDRESS_HOME_LINE1);
92 autofill_types.push_back(ADDRESS_HOME_CITY);
93 autofill_types.push_back(ADDRESS_HOME_STATE);
94 autofill_types.push_back(ADDRESS_HOME_COUNTRY);
95 autofill_types.push_back(ADDRESS_HOME_ZIP);
96 autofill_types.push_back(NO_SERVER_DATA);
97 return CreateTestFormStructure(autofill_types);
98 }
99
100 scoped_ptr<FormStructure> CreateTestCreditCardFormStructure() {
101 std::vector<ServerFieldType> autofill_types;
102 autofill_types.push_back(CREDIT_CARD_NAME);
103 autofill_types.push_back(CREDIT_CARD_NUMBER);
104 autofill_types.push_back(CREDIT_CARD_EXP_MONTH);
105 autofill_types.push_back(CREDIT_CARD_EXP_4_DIGIT_YEAR);
106 autofill_types.push_back(CREDIT_CARD_VERIFICATION_CODE);
107 autofill_types.push_back(ADDRESS_BILLING_LINE1);
108 autofill_types.push_back(ADDRESS_BILLING_CITY);
109 autofill_types.push_back(ADDRESS_BILLING_STATE);
110 autofill_types.push_back(ADDRESS_BILLING_COUNTRY);
111 autofill_types.push_back(ADDRESS_BILLING_ZIP);
112 return CreateTestFormStructure(autofill_types);
113 }
114
115 scoped_ptr<FormStructure> CreateTestFormStructureWithDefaultValues() {
116 FormData form;
117 form.name = ASCIIToUTF16("MyForm");
118 form.method = ASCIIToUTF16("POST");
119 form.origin = GURL("https://myform.com/form.html");
120 form.action = GURL("https://myform.com/submit.html");
121 form.user_submitted = true;
122
123 // Add two radio button fields.
124 FormFieldData male = BuildFieldWithValue("sex", "male");
125 male.is_checkable = true;
126 form.fields.push_back(male);
127 FormFieldData female = BuildFieldWithValue("sex", "female");
128 female.is_checkable = true;
129 form.fields.push_back(female);
130 FormFieldData select = BuildField("SelectField");
131 select.form_control_type = "select-one";
132 form.fields.push_back(select);
133
134 scoped_ptr<FormStructure> form_structure(
135 new FormStructure(form, std::string()));
136
137 // Fake server response. Set all fields as fields with default value.
138 form_structure->field(0)->set_server_type(FIELD_WITH_DEFAULT_VALUE);
139 form_structure->field(0)->set_default_value("female");
140 form_structure->field(1)->set_server_type(FIELD_WITH_DEFAULT_VALUE);
141 form_structure->field(1)->set_default_value("female");
142 form_structure->field(2)->set_server_type(FIELD_WITH_DEFAULT_VALUE);
143 form_structure->field(2)->set_default_value("Default Value");
144
145 return form_structure.Pass();
146 }
147
148 void PopulateClickElement(WebElementDescriptor* proceed_element,
149 const std::string& descriptor) {
150 proceed_element->descriptor = descriptor;
151 proceed_element->retrieval_method = WebElementDescriptor::ID;
152 }
153
154 scoped_ptr<AutocheckoutPageMetaData> CreateStartOfFlowMetaData() {
155 scoped_ptr<AutocheckoutPageMetaData> start_of_flow(
156 new AutocheckoutPageMetaData());
157 start_of_flow->current_page_number = 0;
158 start_of_flow->total_pages = 3;
159 start_of_flow->page_types[0].push_back(AUTOCHECKOUT_STEP_SHIPPING);
160 start_of_flow->page_types[1].push_back(AUTOCHECKOUT_STEP_DELIVERY);
161 start_of_flow->page_types[2].push_back(AUTOCHECKOUT_STEP_BILLING);
162 PopulateClickElement(&start_of_flow->proceed_element_descriptor, "#foo");
163 return start_of_flow.Pass();
164 }
165
166 scoped_ptr<AutocheckoutPageMetaData> CreateInFlowMetaData() {
167 scoped_ptr<AutocheckoutPageMetaData> in_flow(new AutocheckoutPageMetaData());
168 in_flow->current_page_number = 1;
169 in_flow->total_pages = 3;
170 PopulateClickElement(&in_flow->proceed_element_descriptor, "#foo");
171 return in_flow.Pass();
172 }
173
174 scoped_ptr<AutocheckoutPageMetaData> CreateNotInFlowMetaData() {
175 scoped_ptr<AutocheckoutPageMetaData> not_in_flow(
176 new AutocheckoutPageMetaData());
177 PopulateClickElement(&not_in_flow->proceed_element_descriptor, "#foo");
178 return not_in_flow.Pass();
179 }
180
181 scoped_ptr<AutocheckoutPageMetaData> CreateEndOfFlowMetaData(
182 ProceedElementPresence proceed_element_presence) {
183 scoped_ptr<AutocheckoutPageMetaData> end_of_flow(
184 new AutocheckoutPageMetaData());
185 end_of_flow->current_page_number = 2;
186 end_of_flow->total_pages = 3;
187 if (proceed_element_presence == HAS_PROCEED_ELEMENT)
188 PopulateClickElement(&end_of_flow->proceed_element_descriptor, "#foo");
189 return end_of_flow.Pass();
190 }
191
192 scoped_ptr<AutocheckoutPageMetaData> CreateOnePageFlowMetaData(
193 ProceedElementPresence proceed_element_presence) {
194 scoped_ptr<AutocheckoutPageMetaData> one_page_flow(
195 new AutocheckoutPageMetaData());
196 one_page_flow->current_page_number = 0;
197 one_page_flow->total_pages = 1;
198 one_page_flow->page_types[0].push_back(AUTOCHECKOUT_STEP_SHIPPING);
199 one_page_flow->page_types[0].push_back(AUTOCHECKOUT_STEP_DELIVERY);
200 one_page_flow->page_types[0].push_back(AUTOCHECKOUT_STEP_BILLING);
201 if (proceed_element_presence == HAS_PROCEED_ELEMENT)
202 PopulateClickElement(&one_page_flow->proceed_element_descriptor, "#foo");
203 return one_page_flow.Pass();
204 }
205
206 scoped_ptr<AutocheckoutPageMetaData> CreateMissingProceedMetaData() {
207 scoped_ptr<AutocheckoutPageMetaData> missing_proceed(
208 new AutocheckoutPageMetaData());
209 missing_proceed->current_page_number = 1;
210 missing_proceed->total_pages = 3;
211 return missing_proceed.Pass();
212 }
213
214 scoped_ptr<AutocheckoutPageMetaData> CreateMultiClickMetaData() {
215 scoped_ptr<AutocheckoutPageMetaData> metadata(new AutocheckoutPageMetaData());
216 metadata->current_page_number = 1;
217 metadata->total_pages = 3;
218 PopulateClickElement(&metadata->proceed_element_descriptor, "#foo");
219 WebElementDescriptor element;
220 PopulateClickElement(&element, "#before_form_fill_1");
221 metadata->click_elements_before_form_fill.push_back(element);
222 PopulateClickElement(&element, "#before_form_fill_2");
223 metadata->click_elements_before_form_fill.push_back(element);
224 PopulateClickElement(&element, "#after_form_fill");
225 metadata->click_elements_after_form_fill.push_back(element);
226 return metadata.Pass();
227 }
228
229 struct TestField {
230 const char* const field_type;
231 const char* const field_value;
232 ServerFieldType autofill_type;
233 };
234
235 const TestField kTestFields[] = {
236 {"name", "Test User", NAME_FULL},
237 {"tel", "650-123-9909", PHONE_HOME_WHOLE_NUMBER},
238 {"email", "blah@blah.com", EMAIL_ADDRESS},
239 {"cc-name", "Test User", CREDIT_CARD_NAME},
240 {"cc-number", "4444444444444448", CREDIT_CARD_NUMBER},
241 {"cc-exp-month", "10", CREDIT_CARD_EXP_MONTH},
242 {"cc-exp-year", "2020", CREDIT_CARD_EXP_4_DIGIT_YEAR},
243 {"cc-csc", "123", CREDIT_CARD_VERIFICATION_CODE},
244 {"street-address", "Fake Street", ADDRESS_HOME_LINE1},
245 {"locality", "Mocked City", ADDRESS_HOME_CITY},
246 {"region", "California", ADDRESS_HOME_STATE},
247 {"country", "USA", ADDRESS_HOME_COUNTRY},
248 {"postal-code", "49012", ADDRESS_HOME_ZIP},
249 {"billing-street-address", "Billing Street", ADDRESS_BILLING_LINE1},
250 {"billing-locality", "Billing City", ADDRESS_BILLING_CITY},
251 {"billing-region", "BillingState", ADDRESS_BILLING_STATE},
252 {"billing-country", "Canada", ADDRESS_BILLING_COUNTRY},
253 {"billing-postal-code", "11111", ADDRESS_BILLING_ZIP}
254 };
255
256 // Build Autocheckout specific form data to be consumed by
257 // AutofillDialogController to show the Autocheckout specific UI.
258 scoped_ptr<FormStructure> FakeUserSubmittedFormStructure() {
259 FormData formdata;
260 for (size_t i = 0; i < arraysize(kTestFields); i++) {
261 formdata.fields.push_back(
262 BuildFieldWithValue(kTestFields[i].field_type,
263 kTestFields[i].field_value));
264 }
265 scoped_ptr<FormStructure> form_structure;
266 form_structure.reset(new FormStructure(formdata, std::string()));
267 for (size_t i = 0; i < arraysize(kTestFields); ++i)
268 form_structure->field(i)->set_server_type(kTestFields[i].autofill_type);
269
270 return form_structure.Pass();
271 }
272
273 class MockAutofillManagerDelegate : public TestAutofillManagerDelegate {
274 public:
275 MockAutofillManagerDelegate()
276 : request_autocomplete_dialog_open_(false),
277 autocheckout_bubble_shown_(false),
278 should_autoclick_bubble_(true) {}
279
280 virtual ~MockAutofillManagerDelegate() {}
281
282 virtual void HideRequestAutocompleteDialog() OVERRIDE {
283 request_autocomplete_dialog_open_ = false;
284 }
285
286 MOCK_METHOD0(OnAutocheckoutError, void());
287 MOCK_METHOD0(OnAutocheckoutSuccess, void());
288
289 virtual bool ShowAutocheckoutBubble(
290 const gfx::RectF& bounds,
291 bool is_google_user,
292 const base::Callback<void(AutocheckoutBubbleState)>& callback) OVERRIDE {
293 autocheckout_bubble_shown_ = true;
294 if (should_autoclick_bubble_)
295 callback.Run(AUTOCHECKOUT_BUBBLE_ACCEPTED);
296 return true;
297 }
298
299 virtual void ShowRequestAutocompleteDialog(
300 const FormData& form,
301 const GURL& source_url,
302 DialogType dialog_type,
303 const base::Callback<void(const FormStructure*,
304 const std::string&)>& callback) OVERRIDE {
305 request_autocomplete_dialog_open_ = true;
306 callback.Run(user_supplied_data_.get(), "google_transaction_id");
307 }
308
309 virtual void AddAutocheckoutStep(AutocheckoutStepType step_type) OVERRIDE {
310 if (autocheckout_steps_.count(step_type) == 0)
311 autocheckout_steps_[step_type] = AUTOCHECKOUT_STEP_UNSTARTED;
312 }
313
314 virtual void UpdateAutocheckoutStep(
315 AutocheckoutStepType step_type,
316 AutocheckoutStepStatus step_status) OVERRIDE {
317 autocheckout_steps_[step_type] = step_status;
318 }
319
320 void SetUserSuppliedData(scoped_ptr<FormStructure> user_supplied_data) {
321 user_supplied_data_.reset(user_supplied_data.release());
322 }
323
324 bool autocheckout_bubble_shown() const {
325 return autocheckout_bubble_shown_;
326 }
327
328 void set_autocheckout_bubble_shown(bool autocheckout_bubble_shown) {
329 autocheckout_bubble_shown_ = autocheckout_bubble_shown;
330 }
331
332 bool request_autocomplete_dialog_open() const {
333 return request_autocomplete_dialog_open_;
334 }
335
336 void set_should_autoclick_bubble(bool should_autoclick_bubble) {
337 should_autoclick_bubble_ = should_autoclick_bubble;
338 }
339
340 bool AutocheckoutStepExistsWithStatus(
341 AutocheckoutStepType step_type,
342 AutocheckoutStepStatus step_status) const {
343 std::map<AutocheckoutStepType, AutocheckoutStepStatus>::const_iterator it =
344 autocheckout_steps_.find(step_type);
345 return it != autocheckout_steps_.end() && it->second == step_status;
346 }
347
348 private:
349 // Whether or not ShowRequestAutocompleteDialog method has been called.
350 bool request_autocomplete_dialog_open_;
351
352 // Whether or not Autocheckout bubble is displayed to user.
353 bool autocheckout_bubble_shown_;
354
355 // Whether or not to accept the Autocheckout bubble when offered.
356 bool should_autoclick_bubble_;
357
358 // User specified data that would be returned to AutocheckoutManager when
359 // dialog is accepted.
360 scoped_ptr<FormStructure> user_supplied_data_;
361
362 // Step status of various Autocheckout steps in this checkout flow.
363 std::map<AutocheckoutStepType, AutocheckoutStepStatus> autocheckout_steps_;
364 };
365
366 class TestAutofillManager : public AutofillManager {
367 public:
368 explicit TestAutofillManager(AutofillDriver* driver,
369 AutofillManagerDelegate* delegate)
370 : AutofillManager(driver, delegate, NULL) {
371 }
372 virtual ~TestAutofillManager() {}
373
374 void SetFormStructure(scoped_ptr<FormStructure> form_structure) {
375 form_structures()->clear();
376 form_structures()->push_back(form_structure.release());
377 }
378 };
379
380 class MockAutofillMetrics : public AutofillMetrics {
381 public:
382 MockAutofillMetrics() {}
383 MOCK_CONST_METHOD1(LogAutocheckoutBubbleMetric, void(BubbleMetric));
384 MOCK_CONST_METHOD1(LogAutocheckoutBuyFlowMetric,
385 void(AutocheckoutBuyFlowMetric));
386
387 private:
388 DISALLOW_COPY_AND_ASSIGN(MockAutofillMetrics);
389 };
390
391 class TestAutocheckoutManager: public AutocheckoutManager {
392 public:
393 explicit TestAutocheckoutManager(AutofillManager* autofill_manager)
394 : AutocheckoutManager(autofill_manager) {
395 set_metric_logger(scoped_ptr<AutofillMetrics>(new MockAutofillMetrics));
396 }
397
398 const MockAutofillMetrics& metric_logger() const {
399 return static_cast<const MockAutofillMetrics&>(
400 AutocheckoutManager::metric_logger());
401 }
402
403 virtual void MaybeShowAutocheckoutBubble(
404 const GURL& frame_url,
405 const gfx::RectF& bounding_box) OVERRIDE {
406 AutocheckoutManager::MaybeShowAutocheckoutBubble(frame_url,
407 bounding_box);
408 // Needed for AutocheckoutManager to post task on IO thread.
409 content::RunAllPendingInMessageLoop(BrowserThread::IO);
410 }
411
412 using AutocheckoutManager::in_autocheckout_flow;
413 using AutocheckoutManager::should_show_bubble;
414 using AutocheckoutManager::MaybeShowAutocheckoutDialog;
415 using AutocheckoutManager::ReturnAutocheckoutData;
416 };
417
418 } // namespace
419
420 class AutocheckoutManagerTest : public ChromeRenderViewHostTestHarness {
421 protected:
422 virtual void SetUp() OVERRIDE {
423 SetThreadBundleOptions(content::TestBrowserThreadBundle::REAL_IO_THREAD);
424 ChromeRenderViewHostTestHarness::SetUp();
425 autofill_manager_delegate_.reset(new MockAutofillManagerDelegate());
426 autofill_driver_.reset(new TestAutofillDriver(web_contents()));
427 autofill_manager_.reset(new TestAutofillManager(
428 autofill_driver_.get(),
429 autofill_manager_delegate_.get()));
430 autocheckout_manager_.reset(
431 new TestAutocheckoutManager(autofill_manager_.get()));
432 }
433
434 virtual void TearDown() OVERRIDE {
435 autocheckout_manager_.reset();
436 autofill_manager_delegate_.reset();
437 autofill_manager_.reset();
438 autofill_driver_.reset();
439 ChromeRenderViewHostTestHarness::TearDown();
440 }
441
442 std::vector<FormData> ReadFilledForms() {
443 uint32 kMsgID = AutofillMsg_FillFormsAndClick::ID;
444 const IPC::Message* message =
445 process()->sink().GetFirstMessageMatching(kMsgID);
446 AutofillParam autofill_param;
447 AutofillMsg_FillFormsAndClick::Read(message, &autofill_param);
448 return autofill_param.a;
449 }
450
451 void CheckFillFormsAndClickIpc(
452 ProceedElementPresence proceed_element_presence) {
453 EXPECT_EQ(1U, process()->sink().message_count());
454 uint32 kMsgID = AutofillMsg_FillFormsAndClick::ID;
455 const IPC::Message* message =
456 process()->sink().GetFirstMessageMatching(kMsgID);
457 EXPECT_TRUE(message);
458 AutofillParam autofill_param;
459 AutofillMsg_FillFormsAndClick::Read(message, &autofill_param);
460 if (proceed_element_presence == HAS_PROCEED_ELEMENT) {
461 EXPECT_EQ(WebElementDescriptor::ID, autofill_param.d.retrieval_method);
462 EXPECT_EQ("#foo", autofill_param.d.descriptor);
463 } else {
464 EXPECT_EQ(WebElementDescriptor::NONE, autofill_param.d.retrieval_method);
465 }
466 ClearIpcSink();
467 }
468
469 void ClearIpcSink() {
470 process()->sink().ClearMessages();
471 }
472
473 void OpenRequestAutocompleteDialog() {
474 EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow());
475 EXPECT_FALSE(
476 autofill_manager_delegate_->request_autocomplete_dialog_open());
477 EXPECT_CALL(autocheckout_manager_->metric_logger(),
478 LogAutocheckoutBubbleMetric(
479 AutofillMetrics::BUBBLE_COULD_BE_DISPLAYED)).Times(1);
480 autocheckout_manager_->OnLoadedPageMetaData(CreateStartOfFlowMetaData());
481 // Simulate the user submitting some data via the requestAutocomplete UI.
482 autofill_manager_delegate_->SetUserSuppliedData(
483 FakeUserSubmittedFormStructure());
484 GURL frame_url;
485 EXPECT_CALL(autocheckout_manager_->metric_logger(),
486 LogAutocheckoutBuyFlowMetric(
487 AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_STARTED)).Times(1);
488 autocheckout_manager_->MaybeShowAutocheckoutDialog(
489 frame_url,
490 AUTOCHECKOUT_BUBBLE_ACCEPTED);
491 CheckFillFormsAndClickIpc(HAS_PROCEED_ELEMENT);
492 EXPECT_TRUE(autocheckout_manager_->in_autocheckout_flow());
493 EXPECT_TRUE(autocheckout_manager_->should_preserve_dialog());
494 EXPECT_TRUE(autofill_manager_delegate_->request_autocomplete_dialog_open());
495 EXPECT_TRUE(autofill_manager_delegate_
496 ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_SHIPPING,
497 AUTOCHECKOUT_STEP_STARTED));
498 EXPECT_TRUE(autofill_manager_delegate_
499 ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_DELIVERY,
500 AUTOCHECKOUT_STEP_UNSTARTED));
501 EXPECT_TRUE(autofill_manager_delegate_
502 ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_BILLING,
503 AUTOCHECKOUT_STEP_UNSTARTED));
504 }
505
506 void HideRequestAutocompleteDialog() {
507 EXPECT_TRUE(
508 autofill_manager_delegate_->request_autocomplete_dialog_open());
509 autofill_manager_delegate_->HideRequestAutocompleteDialog();
510 EXPECT_FALSE(
511 autofill_manager_delegate_->request_autocomplete_dialog_open());
512 }
513
514 // Test a multi-page Autocheckout flow end to end.
515 // |proceed_element_presence_on_last_page| indicates whether the last page
516 // of the flow should have a proceed element.
517 void TestFullAutocheckoutFlow(
518 ProceedElementPresence proceed_element_presence_on_last_page) {
519 // Test for progression through last page.
520 OpenRequestAutocompleteDialog();
521 EXPECT_TRUE(autofill_manager_delegate_
522 ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_SHIPPING,
523 AUTOCHECKOUT_STEP_STARTED));
524 // Complete the first page.
525 autocheckout_manager_->OnAutocheckoutPageCompleted(SUCCESS);
526 EXPECT_TRUE(autocheckout_manager_->should_preserve_dialog());
527 EXPECT_TRUE(autofill_manager_delegate_
528 ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_SHIPPING,
529 AUTOCHECKOUT_STEP_COMPLETED));
530
531 // Go to the second page.
532 EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutSuccess()).Times(1);
533 autocheckout_manager_->OnLoadedPageMetaData(CreateInFlowMetaData());
534 EXPECT_TRUE(autocheckout_manager_->in_autocheckout_flow());
535 EXPECT_TRUE(autocheckout_manager_->should_preserve_dialog());
536 CheckFillFormsAndClickIpc(HAS_PROCEED_ELEMENT);
537 EXPECT_TRUE(autofill_manager_delegate_
538 ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_DELIVERY,
539 AUTOCHECKOUT_STEP_STARTED));
540 autocheckout_manager_->OnAutocheckoutPageCompleted(SUCCESS);
541 EXPECT_TRUE(autofill_manager_delegate_
542 ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_DELIVERY,
543 AUTOCHECKOUT_STEP_COMPLETED));
544
545 // Go to the third page.
546 EXPECT_CALL(autocheckout_manager_->metric_logger(),
547 LogAutocheckoutBuyFlowMetric(
548 AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_SUCCESS)).Times(1);
549 autocheckout_manager_->OnLoadedPageMetaData(
550 CreateEndOfFlowMetaData(proceed_element_presence_on_last_page));
551 CheckFillFormsAndClickIpc(proceed_element_presence_on_last_page);
552 EXPECT_TRUE(autocheckout_manager_->in_autocheckout_flow());
553 EXPECT_TRUE(autocheckout_manager_->should_preserve_dialog());
554 EXPECT_TRUE(autofill_manager_delegate_
555 ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_BILLING,
556 AUTOCHECKOUT_STEP_STARTED));
557 autocheckout_manager_->OnAutocheckoutPageCompleted(SUCCESS);
558 EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow());
559 EXPECT_TRUE(autocheckout_manager_->should_preserve_dialog());
560 EXPECT_TRUE(autofill_manager_delegate_
561 ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_BILLING,
562 AUTOCHECKOUT_STEP_COMPLETED));
563
564 EXPECT_TRUE(autofill_manager_delegate_->request_autocomplete_dialog_open());
565
566 // Go to the page after the flow.
567 autocheckout_manager_->OnLoadedPageMetaData(
568 scoped_ptr<AutocheckoutPageMetaData>());
569 EXPECT_EQ(proceed_element_presence_on_last_page == HAS_PROCEED_ELEMENT,
570 autocheckout_manager_->should_preserve_dialog());
571 // Go to another page and we should not preserve the dialog now.
572 autocheckout_manager_->OnLoadedPageMetaData(
573 scoped_ptr<AutocheckoutPageMetaData>());
574 EXPECT_FALSE(autocheckout_manager_->should_preserve_dialog());
575 }
576
577 // Test a signle-page Autocheckout flow. |proceed_element_presence| indicates
578 // whether the page should have a proceed element.
579 void TestSinglePageFlow(ProceedElementPresence proceed_element_presence) {
580 // Test one page flow.
581 EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow());
582 EXPECT_FALSE(
583 autofill_manager_delegate_->request_autocomplete_dialog_open());
584 EXPECT_CALL(autocheckout_manager_->metric_logger(),
585 LogAutocheckoutBubbleMetric(
586 AutofillMetrics::BUBBLE_COULD_BE_DISPLAYED)).Times(1);
587 EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutSuccess()).Times(1);
588 autocheckout_manager_->OnLoadedPageMetaData(
589 CreateOnePageFlowMetaData(proceed_element_presence));
590 // Simulate the user submitting some data via the requestAutocomplete UI.
591 autofill_manager_delegate_->SetUserSuppliedData(
592 FakeUserSubmittedFormStructure());
593 GURL frame_url;
594 EXPECT_CALL(autocheckout_manager_->metric_logger(),
595 LogAutocheckoutBuyFlowMetric(
596 AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_STARTED)).Times(1);
597 EXPECT_CALL(autocheckout_manager_->metric_logger(),
598 LogAutocheckoutBuyFlowMetric(
599 AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_SUCCESS)).Times(1);
600 autocheckout_manager_->MaybeShowAutocheckoutDialog(
601 frame_url,
602 AUTOCHECKOUT_BUBBLE_ACCEPTED);
603 autocheckout_manager_->OnAutocheckoutPageCompleted(SUCCESS);
604 CheckFillFormsAndClickIpc(proceed_element_presence);
605 EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow());
606 EXPECT_TRUE(autocheckout_manager_->should_preserve_dialog());
607 EXPECT_TRUE(autofill_manager_delegate_->request_autocomplete_dialog_open());
608 EXPECT_TRUE(autofill_manager_delegate_
609 ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_SHIPPING,
610 AUTOCHECKOUT_STEP_COMPLETED));
611 EXPECT_TRUE(autofill_manager_delegate_
612 ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_DELIVERY,
613 AUTOCHECKOUT_STEP_COMPLETED));
614 EXPECT_TRUE(autofill_manager_delegate_
615 ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_BILLING,
616 AUTOCHECKOUT_STEP_COMPLETED));
617 // Go to the page after the flow.
618 autocheckout_manager_->OnLoadedPageMetaData(
619 scoped_ptr<AutocheckoutPageMetaData>());
620 EXPECT_EQ(proceed_element_presence == HAS_PROCEED_ELEMENT,
621 autocheckout_manager_->should_preserve_dialog());
622 // Go to another page, and we should not preserve the dialog now.
623 autocheckout_manager_->OnLoadedPageMetaData(
624 scoped_ptr<AutocheckoutPageMetaData>());
625 EXPECT_FALSE(autocheckout_manager_->should_preserve_dialog());
626 }
627
628 protected:
629 scoped_ptr<TestAutofillDriver> autofill_driver_;
630 scoped_ptr<TestAutofillManager> autofill_manager_;
631 scoped_ptr<TestAutocheckoutManager> autocheckout_manager_;
632 scoped_ptr<MockAutofillManagerDelegate> autofill_manager_delegate_;
633 };
634
635 TEST_F(AutocheckoutManagerTest, TestFillForms) {
636 OpenRequestAutocompleteDialog();
637
638 // Test if autocheckout manager can fill the first page.
639 autofill_manager_->SetFormStructure(CreateTestAddressFormStructure());
640
641 autocheckout_manager_->FillForms();
642
643 std::vector<FormData> filled_forms = ReadFilledForms();
644 ASSERT_EQ(1U, filled_forms.size());
645 ASSERT_EQ(9U, filled_forms[0].fields.size());
646 EXPECT_EQ(ASCIIToUTF16("Test User"), filled_forms[0].fields[0].value);
647 EXPECT_EQ(ASCIIToUTF16("650-123-9909"), filled_forms[0].fields[1].value);
648 EXPECT_EQ(ASCIIToUTF16("blah@blah.com"), filled_forms[0].fields[2].value);
649 EXPECT_EQ(ASCIIToUTF16("Fake Street"), filled_forms[0].fields[3].value);
650 EXPECT_EQ(ASCIIToUTF16("Mocked City"), filled_forms[0].fields[4].value);
651 EXPECT_EQ(ASCIIToUTF16("California"), filled_forms[0].fields[5].value);
652 EXPECT_EQ(ASCIIToUTF16("United States"), filled_forms[0].fields[6].value);
653 EXPECT_EQ(ASCIIToUTF16("49012"), filled_forms[0].fields[7].value);
654 // Last field should not be filled, because there is no server mapping
655 // available for it.
656 EXPECT_EQ(ASCIIToUTF16("SomeField"), filled_forms[0].fields[8].value);
657
658 filled_forms.clear();
659 ClearIpcSink();
660
661 // Test if autocheckout manager can fill form on second page.
662 autofill_manager_->SetFormStructure(CreateTestCreditCardFormStructure());
663
664 autocheckout_manager_->FillForms();
665
666 filled_forms = ReadFilledForms();
667 ASSERT_EQ(1U, filled_forms.size());
668 ASSERT_EQ(10U, filled_forms[0].fields.size());
669 EXPECT_EQ(ASCIIToUTF16("Test User"), filled_forms[0].fields[0].value);
670 EXPECT_EQ(ASCIIToUTF16("4444444444444448"), filled_forms[0].fields[1].value);
671 EXPECT_EQ(ASCIIToUTF16("10"), filled_forms[0].fields[2].value);
672 EXPECT_EQ(ASCIIToUTF16("2020"), filled_forms[0].fields[3].value);
673 EXPECT_EQ(ASCIIToUTF16("123"), filled_forms[0].fields[4].value);
674 EXPECT_EQ(ASCIIToUTF16("Billing Street"), filled_forms[0].fields[5].value);
675 EXPECT_EQ(ASCIIToUTF16("Billing City"), filled_forms[0].fields[6].value);
676 EXPECT_EQ(ASCIIToUTF16("BillingState"), filled_forms[0].fields[7].value);
677 EXPECT_EQ(ASCIIToUTF16("Canada"), filled_forms[0].fields[8].value);
678 EXPECT_EQ(ASCIIToUTF16("11111"), filled_forms[0].fields[9].value);
679
680 filled_forms.clear();
681 ClearIpcSink();
682
683 // Test form with default values.
684 autofill_manager_->SetFormStructure(
685 CreateTestFormStructureWithDefaultValues());
686
687 autocheckout_manager_->FillForms();
688
689 filled_forms = ReadFilledForms();
690 ASSERT_EQ(1U, filled_forms.size());
691 ASSERT_EQ(3U, filled_forms[0].fields.size());
692 EXPECT_FALSE(filled_forms[0].fields[0].is_checked);
693 EXPECT_EQ(ASCIIToUTF16("male"), filled_forms[0].fields[0].value);
694 EXPECT_TRUE(filled_forms[0].fields[1].is_checked);
695 EXPECT_EQ(ASCIIToUTF16("female"), filled_forms[0].fields[1].value);
696 EXPECT_EQ(ASCIIToUTF16("Default Value"), filled_forms[0].fields[2].value);
697 }
698
699 TEST_F(AutocheckoutManagerTest, OnFormsSeenTest) {
700 GURL frame_url;
701 gfx::RectF bounding_box;
702 EXPECT_CALL(autocheckout_manager_->metric_logger(),
703 LogAutocheckoutBubbleMetric(
704 AutofillMetrics::BUBBLE_COULD_BE_DISPLAYED)).Times(1);
705 autocheckout_manager_->OnLoadedPageMetaData(CreateStartOfFlowMetaData());
706 autocheckout_manager_->MaybeShowAutocheckoutBubble(frame_url, bounding_box);
707
708 EXPECT_FALSE(autocheckout_manager_->should_show_bubble());
709 // OnFormsSeen resets whether or not the bubble was shown.
710 autocheckout_manager_->OnFormsSeen();
711 EXPECT_TRUE(autocheckout_manager_->should_show_bubble());
712 }
713
714 TEST_F(AutocheckoutManagerTest, OnClickFailedTestMissingAdvance) {
715 OpenRequestAutocompleteDialog();
716
717 EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutError()).Times(1);
718 EXPECT_CALL(
719 autocheckout_manager_->metric_logger(),
720 LogAutocheckoutBuyFlowMetric(
721 AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_MISSING_ADVANCE_ELEMENT))
722 .Times(1);
723 autocheckout_manager_->OnAutocheckoutPageCompleted(MISSING_ADVANCE);
724 EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow());
725 EXPECT_TRUE(
726 autofill_manager_delegate_->request_autocomplete_dialog_open());
727 EXPECT_TRUE(autofill_manager_delegate_
728 ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_SHIPPING,
729 AUTOCHECKOUT_STEP_FAILED));
730 }
731
732 TEST_F(AutocheckoutManagerTest, OnClickFailedTestMissingClickBeforeFilling) {
733 OpenRequestAutocompleteDialog();
734
735 EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutError()).Times(1);
736 EXPECT_CALL(
737 autocheckout_manager_->metric_logger(),
738 LogAutocheckoutBuyFlowMetric(AutofillMetrics::
739 AUTOCHECKOUT_BUY_FLOW_MISSING_CLICK_ELEMENT_BEFORE_FORM_FILLING))
740 .Times(1);
741 autocheckout_manager_->OnAutocheckoutPageCompleted(
742 MISSING_CLICK_ELEMENT_BEFORE_FORM_FILLING);
743 EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow());
744 EXPECT_TRUE(
745 autofill_manager_delegate_->request_autocomplete_dialog_open());
746 }
747
748 TEST_F(AutocheckoutManagerTest, OnClickFailedTestMissingClickAfterFilling) {
749 OpenRequestAutocompleteDialog();
750
751 EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutError()).Times(1);
752 EXPECT_CALL(
753 autocheckout_manager_->metric_logger(),
754 LogAutocheckoutBuyFlowMetric(AutofillMetrics::
755 AUTOCHECKOUT_BUY_FLOW_MISSING_CLICK_ELEMENT_AFTER_FORM_FILLING))
756 .Times(1);
757 autocheckout_manager_->OnAutocheckoutPageCompleted(
758 MISSING_CLICK_ELEMENT_AFTER_FORM_FILLING);
759 EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow());
760 EXPECT_TRUE(
761 autofill_manager_delegate_->request_autocomplete_dialog_open());
762 }
763
764 TEST_F(AutocheckoutManagerTest, MaybeShowAutocheckoutBubbleTest) {
765 GURL frame_url;
766 gfx::RectF bounding_box;
767 EXPECT_CALL(autocheckout_manager_->metric_logger(),
768 LogAutocheckoutBubbleMetric(
769 AutofillMetrics::BUBBLE_COULD_BE_DISPLAYED)).Times(1);
770 autocheckout_manager_->OnLoadedPageMetaData(CreateStartOfFlowMetaData());
771 // MaybeShowAutocheckoutBubble shows bubble if it has not been shown.
772 autocheckout_manager_->MaybeShowAutocheckoutBubble(frame_url, bounding_box);
773 EXPECT_FALSE(autocheckout_manager_->should_show_bubble());
774 EXPECT_TRUE(autofill_manager_delegate_->autocheckout_bubble_shown());
775
776 // Reset |autofill_manager_delegate_|.
777 HideRequestAutocompleteDialog();
778 autofill_manager_delegate_->set_autocheckout_bubble_shown(false);
779
780 // MaybeShowAutocheckoutBubble does nothing if the bubble was already shown
781 // for the current page.
782 autocheckout_manager_->MaybeShowAutocheckoutBubble(frame_url, bounding_box);
783 EXPECT_FALSE(autocheckout_manager_->should_show_bubble());
784 EXPECT_FALSE(autofill_manager_delegate_->autocheckout_bubble_shown());
785 EXPECT_FALSE(autofill_manager_delegate_->request_autocomplete_dialog_open());
786 }
787
788 TEST_F(AutocheckoutManagerTest, OnLoadedPageMetaDataMissingMetaData) {
789 // Gettting no meta data after any autocheckout page is an error.
790 OpenRequestAutocompleteDialog();
791 EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutError()).Times(1);
792 EXPECT_CALL(
793 autocheckout_manager_->metric_logger(),
794 LogAutocheckoutBuyFlowMetric(
795 AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_MISSING_FIELDMAPPING))
796 .Times(1);
797 autocheckout_manager_->OnLoadedPageMetaData(
798 scoped_ptr<AutocheckoutPageMetaData>());
799 EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow());
800 EXPECT_EQ(0U, process()->sink().message_count());
801 EXPECT_TRUE(
802 autofill_manager_delegate_->request_autocomplete_dialog_open());
803 }
804
805 TEST_F(AutocheckoutManagerTest, OnLoadedPageMetaDataRepeatedStartPage) {
806 // Getting start page twice in a row is an error.
807 OpenRequestAutocompleteDialog();
808 EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutError()).Times(1);
809 EXPECT_CALL(
810 autocheckout_manager_->metric_logger(),
811 LogAutocheckoutBuyFlowMetric(
812 AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_CANNOT_PROCEED)).Times(1);
813 autocheckout_manager_->OnLoadedPageMetaData(CreateStartOfFlowMetaData());
814 EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow());
815 EXPECT_EQ(0U, process()->sink().message_count());
816 EXPECT_TRUE(
817 autofill_manager_delegate_->request_autocomplete_dialog_open());
818
819 EXPECT_TRUE(autofill_manager_delegate_
820 ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_SHIPPING,
821 AUTOCHECKOUT_STEP_FAILED));
822 }
823
824 TEST_F(AutocheckoutManagerTest, OnLoadedPageMetaDataRepeatedPage) {
825 // Repeating a page is an error.
826 OpenRequestAutocompleteDialog();
827 // Go to second page.
828 autocheckout_manager_->OnLoadedPageMetaData(CreateInFlowMetaData());
829 EXPECT_TRUE(autocheckout_manager_->in_autocheckout_flow());
830 CheckFillFormsAndClickIpc(HAS_PROCEED_ELEMENT);
831 EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutError()).Times(1);
832 EXPECT_CALL(
833 autocheckout_manager_->metric_logger(),
834 LogAutocheckoutBuyFlowMetric(
835 AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_CANNOT_PROCEED)).Times(1);
836 autocheckout_manager_->OnLoadedPageMetaData(CreateInFlowMetaData());
837 EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow());
838 EXPECT_EQ(0U, process()->sink().message_count());
839 EXPECT_TRUE(
840 autofill_manager_delegate_->request_autocomplete_dialog_open());
841 EXPECT_TRUE(autofill_manager_delegate_
842 ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_DELIVERY,
843 AUTOCHECKOUT_STEP_FAILED));
844 }
845
846 TEST_F(AutocheckoutManagerTest, OnLoadedPageMetaDataNotInFlow) {
847 // Repeating a page is an error.
848 OpenRequestAutocompleteDialog();
849 // Go to second page.
850 autocheckout_manager_->OnLoadedPageMetaData(CreateInFlowMetaData());
851 EXPECT_TRUE(autocheckout_manager_->in_autocheckout_flow());
852 CheckFillFormsAndClickIpc(HAS_PROCEED_ELEMENT);
853 EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutError()).Times(1);
854 EXPECT_CALL(
855 autocheckout_manager_->metric_logger(),
856 LogAutocheckoutBuyFlowMetric(
857 AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_MISSING_FIELDMAPPING))
858 .Times(1);
859 autocheckout_manager_->OnLoadedPageMetaData(CreateNotInFlowMetaData());
860 EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow());
861 EXPECT_EQ(0U, process()->sink().message_count());
862 EXPECT_TRUE(
863 autofill_manager_delegate_->request_autocomplete_dialog_open());
864 EXPECT_TRUE(autofill_manager_delegate_
865 ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_DELIVERY,
866 AUTOCHECKOUT_STEP_FAILED));
867 }
868
869 TEST_F(AutocheckoutManagerTest,
870 OnLoadedPageMetaDataShouldNotFillFormsIfNotInFlow) {
871 // If not in flow, OnLoadedPageMetaData does not fill forms.
872 EXPECT_CALL(autocheckout_manager_->metric_logger(),
873 LogAutocheckoutBubbleMetric(
874 AutofillMetrics::BUBBLE_COULD_BE_DISPLAYED)).Times(1);
875 autocheckout_manager_->OnLoadedPageMetaData(CreateStartOfFlowMetaData());
876 // Go to second page.
877 autocheckout_manager_->OnLoadedPageMetaData(CreateInFlowMetaData());
878 EXPECT_EQ(0U, process()->sink().message_count());
879 }
880
881 TEST_F(AutocheckoutManagerTest, FullAutocheckoutFlow) {
882 TestFullAutocheckoutFlow(HAS_PROCEED_ELEMENT);
883 }
884
885 TEST_F(AutocheckoutManagerTest, FullAutocheckoutFlowNoClickOnLastPage) {
886 TestFullAutocheckoutFlow(NO_PROCEED_ELEMENT);
887 }
888
889 TEST_F(AutocheckoutManagerTest, CancelledAutocheckoutFlow) {
890 // Test for progression through last page.
891 OpenRequestAutocompleteDialog();
892 // Go to second page.
893 autocheckout_manager_->OnLoadedPageMetaData(CreateInFlowMetaData());
894 EXPECT_TRUE(autocheckout_manager_->in_autocheckout_flow());
895 CheckFillFormsAndClickIpc(HAS_PROCEED_ELEMENT);
896
897 // Cancel the flow.
898 autocheckout_manager_->ReturnAutocheckoutData(NULL, std::string());
899 EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow());
900
901 // Go to third page.
902 EXPECT_CALL(autocheckout_manager_->metric_logger(),
903 LogAutocheckoutBuyFlowMetric(testing::_)).Times(0);
904 autocheckout_manager_->OnLoadedPageMetaData(
905 CreateEndOfFlowMetaData(HAS_PROCEED_ELEMENT));
906 EXPECT_EQ(0U, process()->sink().message_count());
907 }
908
909 TEST_F(AutocheckoutManagerTest, SinglePageFlow) {
910 TestSinglePageFlow(HAS_PROCEED_ELEMENT);
911 }
912
913 TEST_F(AutocheckoutManagerTest, SinglePageFlowNoClickElement) {
914 TestSinglePageFlow(NO_PROCEED_ELEMENT);
915 }
916
917 TEST_F(AutocheckoutManagerTest, CancelAutocheckoutBubble) {
918 GURL frame_url;
919 gfx::RectF bounding_box;
920 autofill_manager_delegate_->set_should_autoclick_bubble(false);
921 EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow());
922 EXPECT_FALSE(autofill_manager_delegate_->request_autocomplete_dialog_open());
923 EXPECT_FALSE(autocheckout_manager_->is_autocheckout_bubble_showing());
924 EXPECT_CALL(autocheckout_manager_->metric_logger(),
925 LogAutocheckoutBubbleMetric(
926 AutofillMetrics::BUBBLE_COULD_BE_DISPLAYED)).Times(1);
927 autocheckout_manager_->OnLoadedPageMetaData(CreateStartOfFlowMetaData());
928
929 autocheckout_manager_->MaybeShowAutocheckoutBubble(frame_url, bounding_box);
930 EXPECT_TRUE(autocheckout_manager_->is_autocheckout_bubble_showing());
931 autocheckout_manager_->MaybeShowAutocheckoutDialog(
932 frame_url,
933 AUTOCHECKOUT_BUBBLE_IGNORED);
934 EXPECT_FALSE(autocheckout_manager_->is_autocheckout_bubble_showing());
935 EXPECT_TRUE(autocheckout_manager_->should_show_bubble());
936
937 autocheckout_manager_->MaybeShowAutocheckoutBubble(frame_url, bounding_box);
938 EXPECT_TRUE(autocheckout_manager_->is_autocheckout_bubble_showing());
939 autocheckout_manager_->MaybeShowAutocheckoutDialog(
940 frame_url,
941 AUTOCHECKOUT_BUBBLE_CANCELED);
942 EXPECT_FALSE(autocheckout_manager_->is_autocheckout_bubble_showing());
943 EXPECT_FALSE(autocheckout_manager_->should_show_bubble());
944
945 autocheckout_manager_->MaybeShowAutocheckoutBubble(frame_url, bounding_box);
946 EXPECT_FALSE(autocheckout_manager_->is_autocheckout_bubble_showing());
947 }
948
949 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698