Index: components/autofill/content/browser/autocheckout_manager_unittest.cc |
diff --git a/components/autofill/content/browser/autocheckout_manager_unittest.cc b/components/autofill/content/browser/autocheckout_manager_unittest.cc |
deleted file mode 100644 |
index c8e425566ee9f03c869648871ab030b5cdf0be6a..0000000000000000000000000000000000000000 |
--- a/components/autofill/content/browser/autocheckout_manager_unittest.cc |
+++ /dev/null |
@@ -1,949 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include <map> |
- |
-#include "base/strings/utf_string_conversions.h" |
-#include "base/tuple.h" |
-#include "chrome/test/base/chrome_render_view_host_test_harness.h" |
-#include "components/autofill/content/browser/autocheckout_manager.h" |
-#include "components/autofill/core/browser/autofill_common_test.h" |
-#include "components/autofill/core/browser/autofill_manager.h" |
-#include "components/autofill/core/browser/autofill_metrics.h" |
-#include "components/autofill/core/browser/form_structure.h" |
-#include "components/autofill/core/browser/test_autofill_driver.h" |
-#include "components/autofill/core/browser/test_autofill_manager_delegate.h" |
-#include "components/autofill/core/common/autofill_messages.h" |
-#include "components/autofill/core/common/form_data.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "content/public/test/mock_render_process_host.h" |
-#include "content/public/test/test_browser_thread.h" |
-#include "content/public/test/test_utils.h" |
-#include "ipc/ipc_test_sink.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-using content::BrowserThread; |
- |
-namespace autofill { |
- |
-namespace { |
- |
-typedef Tuple4<std::vector<FormData>, |
- std::vector<WebElementDescriptor>, |
- std::vector<WebElementDescriptor>, |
- WebElementDescriptor> AutofillParam; |
- |
-enum ProceedElementPresence { |
- NO_PROCEED_ELEMENT, |
- HAS_PROCEED_ELEMENT, |
-}; |
- |
-FormFieldData BuildFieldWithValue( |
- const std::string& autocomplete_attribute, |
- const std::string& value) { |
- FormFieldData field; |
- field.name = ASCIIToUTF16(autocomplete_attribute); |
- field.value = ASCIIToUTF16(value); |
- field.autocomplete_attribute = autocomplete_attribute; |
- field.form_control_type = "text"; |
- return field; |
-} |
- |
-FormFieldData BuildField(const std::string& autocomplete_attribute) { |
- return BuildFieldWithValue(autocomplete_attribute, autocomplete_attribute); |
-} |
- |
-scoped_ptr<FormStructure> CreateTestFormStructure( |
- const std::vector<ServerFieldType>& autofill_types) { |
- FormData form; |
- form.name = ASCIIToUTF16("MyForm"); |
- form.method = ASCIIToUTF16("POST"); |
- form.origin = GURL("https://myform.com/form.html"); |
- form.action = GURL("https://myform.com/submit.html"); |
- form.user_submitted = true; |
- |
- // Add some fields, autocomplete_attribute is not important and we |
- // fake that server sends authoritative field mappings. |
- for (size_t i = 0; i < autofill_types.size(); ++i) |
- form.fields.push_back(BuildField("SomeField")); |
- |
- scoped_ptr<FormStructure> form_structure( |
- new FormStructure(form, std::string())); |
- |
- // Set mocked Autofill server field types. |
- for (size_t i = 0; i < autofill_types.size(); ++i) { |
- form_structure->field(i)->set_server_type(autofill_types[i]); |
- // Set heuristic type to make sure that server_types are used and not |
- // heuritic type. |
- form_structure->field(i)->set_heuristic_type(CREDIT_CARD_NUMBER); |
- } |
- |
- return form_structure.Pass(); |
-} |
- |
-scoped_ptr<FormStructure> CreateTestAddressFormStructure() { |
- std::vector<ServerFieldType> autofill_types; |
- autofill_types.push_back(NAME_FULL); |
- autofill_types.push_back(PHONE_HOME_WHOLE_NUMBER); |
- autofill_types.push_back(EMAIL_ADDRESS); |
- autofill_types.push_back(ADDRESS_HOME_LINE1); |
- autofill_types.push_back(ADDRESS_HOME_CITY); |
- autofill_types.push_back(ADDRESS_HOME_STATE); |
- autofill_types.push_back(ADDRESS_HOME_COUNTRY); |
- autofill_types.push_back(ADDRESS_HOME_ZIP); |
- autofill_types.push_back(NO_SERVER_DATA); |
- return CreateTestFormStructure(autofill_types); |
-} |
- |
-scoped_ptr<FormStructure> CreateTestCreditCardFormStructure() { |
- std::vector<ServerFieldType> autofill_types; |
- autofill_types.push_back(CREDIT_CARD_NAME); |
- autofill_types.push_back(CREDIT_CARD_NUMBER); |
- autofill_types.push_back(CREDIT_CARD_EXP_MONTH); |
- autofill_types.push_back(CREDIT_CARD_EXP_4_DIGIT_YEAR); |
- autofill_types.push_back(CREDIT_CARD_VERIFICATION_CODE); |
- autofill_types.push_back(ADDRESS_BILLING_LINE1); |
- autofill_types.push_back(ADDRESS_BILLING_CITY); |
- autofill_types.push_back(ADDRESS_BILLING_STATE); |
- autofill_types.push_back(ADDRESS_BILLING_COUNTRY); |
- autofill_types.push_back(ADDRESS_BILLING_ZIP); |
- return CreateTestFormStructure(autofill_types); |
-} |
- |
-scoped_ptr<FormStructure> CreateTestFormStructureWithDefaultValues() { |
- FormData form; |
- form.name = ASCIIToUTF16("MyForm"); |
- form.method = ASCIIToUTF16("POST"); |
- form.origin = GURL("https://myform.com/form.html"); |
- form.action = GURL("https://myform.com/submit.html"); |
- form.user_submitted = true; |
- |
- // Add two radio button fields. |
- FormFieldData male = BuildFieldWithValue("sex", "male"); |
- male.is_checkable = true; |
- form.fields.push_back(male); |
- FormFieldData female = BuildFieldWithValue("sex", "female"); |
- female.is_checkable = true; |
- form.fields.push_back(female); |
- FormFieldData select = BuildField("SelectField"); |
- select.form_control_type = "select-one"; |
- form.fields.push_back(select); |
- |
- scoped_ptr<FormStructure> form_structure( |
- new FormStructure(form, std::string())); |
- |
- // Fake server response. Set all fields as fields with default value. |
- form_structure->field(0)->set_server_type(FIELD_WITH_DEFAULT_VALUE); |
- form_structure->field(0)->set_default_value("female"); |
- form_structure->field(1)->set_server_type(FIELD_WITH_DEFAULT_VALUE); |
- form_structure->field(1)->set_default_value("female"); |
- form_structure->field(2)->set_server_type(FIELD_WITH_DEFAULT_VALUE); |
- form_structure->field(2)->set_default_value("Default Value"); |
- |
- return form_structure.Pass(); |
-} |
- |
-void PopulateClickElement(WebElementDescriptor* proceed_element, |
- const std::string& descriptor) { |
- proceed_element->descriptor = descriptor; |
- proceed_element->retrieval_method = WebElementDescriptor::ID; |
-} |
- |
-scoped_ptr<AutocheckoutPageMetaData> CreateStartOfFlowMetaData() { |
- scoped_ptr<AutocheckoutPageMetaData> start_of_flow( |
- new AutocheckoutPageMetaData()); |
- start_of_flow->current_page_number = 0; |
- start_of_flow->total_pages = 3; |
- start_of_flow->page_types[0].push_back(AUTOCHECKOUT_STEP_SHIPPING); |
- start_of_flow->page_types[1].push_back(AUTOCHECKOUT_STEP_DELIVERY); |
- start_of_flow->page_types[2].push_back(AUTOCHECKOUT_STEP_BILLING); |
- PopulateClickElement(&start_of_flow->proceed_element_descriptor, "#foo"); |
- return start_of_flow.Pass(); |
-} |
- |
-scoped_ptr<AutocheckoutPageMetaData> CreateInFlowMetaData() { |
- scoped_ptr<AutocheckoutPageMetaData> in_flow(new AutocheckoutPageMetaData()); |
- in_flow->current_page_number = 1; |
- in_flow->total_pages = 3; |
- PopulateClickElement(&in_flow->proceed_element_descriptor, "#foo"); |
- return in_flow.Pass(); |
-} |
- |
-scoped_ptr<AutocheckoutPageMetaData> CreateNotInFlowMetaData() { |
- scoped_ptr<AutocheckoutPageMetaData> not_in_flow( |
- new AutocheckoutPageMetaData()); |
- PopulateClickElement(¬_in_flow->proceed_element_descriptor, "#foo"); |
- return not_in_flow.Pass(); |
-} |
- |
-scoped_ptr<AutocheckoutPageMetaData> CreateEndOfFlowMetaData( |
- ProceedElementPresence proceed_element_presence) { |
- scoped_ptr<AutocheckoutPageMetaData> end_of_flow( |
- new AutocheckoutPageMetaData()); |
- end_of_flow->current_page_number = 2; |
- end_of_flow->total_pages = 3; |
- if (proceed_element_presence == HAS_PROCEED_ELEMENT) |
- PopulateClickElement(&end_of_flow->proceed_element_descriptor, "#foo"); |
- return end_of_flow.Pass(); |
-} |
- |
-scoped_ptr<AutocheckoutPageMetaData> CreateOnePageFlowMetaData( |
- ProceedElementPresence proceed_element_presence) { |
- scoped_ptr<AutocheckoutPageMetaData> one_page_flow( |
- new AutocheckoutPageMetaData()); |
- one_page_flow->current_page_number = 0; |
- one_page_flow->total_pages = 1; |
- one_page_flow->page_types[0].push_back(AUTOCHECKOUT_STEP_SHIPPING); |
- one_page_flow->page_types[0].push_back(AUTOCHECKOUT_STEP_DELIVERY); |
- one_page_flow->page_types[0].push_back(AUTOCHECKOUT_STEP_BILLING); |
- if (proceed_element_presence == HAS_PROCEED_ELEMENT) |
- PopulateClickElement(&one_page_flow->proceed_element_descriptor, "#foo"); |
- return one_page_flow.Pass(); |
-} |
- |
-scoped_ptr<AutocheckoutPageMetaData> CreateMissingProceedMetaData() { |
- scoped_ptr<AutocheckoutPageMetaData> missing_proceed( |
- new AutocheckoutPageMetaData()); |
- missing_proceed->current_page_number = 1; |
- missing_proceed->total_pages = 3; |
- return missing_proceed.Pass(); |
-} |
- |
-scoped_ptr<AutocheckoutPageMetaData> CreateMultiClickMetaData() { |
- scoped_ptr<AutocheckoutPageMetaData> metadata(new AutocheckoutPageMetaData()); |
- metadata->current_page_number = 1; |
- metadata->total_pages = 3; |
- PopulateClickElement(&metadata->proceed_element_descriptor, "#foo"); |
- WebElementDescriptor element; |
- PopulateClickElement(&element, "#before_form_fill_1"); |
- metadata->click_elements_before_form_fill.push_back(element); |
- PopulateClickElement(&element, "#before_form_fill_2"); |
- metadata->click_elements_before_form_fill.push_back(element); |
- PopulateClickElement(&element, "#after_form_fill"); |
- metadata->click_elements_after_form_fill.push_back(element); |
- return metadata.Pass(); |
-} |
- |
-struct TestField { |
- const char* const field_type; |
- const char* const field_value; |
- ServerFieldType autofill_type; |
-}; |
- |
-const TestField kTestFields[] = { |
- {"name", "Test User", NAME_FULL}, |
- {"tel", "650-123-9909", PHONE_HOME_WHOLE_NUMBER}, |
- {"email", "blah@blah.com", EMAIL_ADDRESS}, |
- {"cc-name", "Test User", CREDIT_CARD_NAME}, |
- {"cc-number", "4444444444444448", CREDIT_CARD_NUMBER}, |
- {"cc-exp-month", "10", CREDIT_CARD_EXP_MONTH}, |
- {"cc-exp-year", "2020", CREDIT_CARD_EXP_4_DIGIT_YEAR}, |
- {"cc-csc", "123", CREDIT_CARD_VERIFICATION_CODE}, |
- {"street-address", "Fake Street", ADDRESS_HOME_LINE1}, |
- {"locality", "Mocked City", ADDRESS_HOME_CITY}, |
- {"region", "California", ADDRESS_HOME_STATE}, |
- {"country", "USA", ADDRESS_HOME_COUNTRY}, |
- {"postal-code", "49012", ADDRESS_HOME_ZIP}, |
- {"billing-street-address", "Billing Street", ADDRESS_BILLING_LINE1}, |
- {"billing-locality", "Billing City", ADDRESS_BILLING_CITY}, |
- {"billing-region", "BillingState", ADDRESS_BILLING_STATE}, |
- {"billing-country", "Canada", ADDRESS_BILLING_COUNTRY}, |
- {"billing-postal-code", "11111", ADDRESS_BILLING_ZIP} |
-}; |
- |
-// Build Autocheckout specific form data to be consumed by |
-// AutofillDialogController to show the Autocheckout specific UI. |
-scoped_ptr<FormStructure> FakeUserSubmittedFormStructure() { |
- FormData formdata; |
- for (size_t i = 0; i < arraysize(kTestFields); i++) { |
- formdata.fields.push_back( |
- BuildFieldWithValue(kTestFields[i].field_type, |
- kTestFields[i].field_value)); |
- } |
- scoped_ptr<FormStructure> form_structure; |
- form_structure.reset(new FormStructure(formdata, std::string())); |
- for (size_t i = 0; i < arraysize(kTestFields); ++i) |
- form_structure->field(i)->set_server_type(kTestFields[i].autofill_type); |
- |
- return form_structure.Pass(); |
-} |
- |
-class MockAutofillManagerDelegate : public TestAutofillManagerDelegate { |
- public: |
- MockAutofillManagerDelegate() |
- : request_autocomplete_dialog_open_(false), |
- autocheckout_bubble_shown_(false), |
- should_autoclick_bubble_(true) {} |
- |
- virtual ~MockAutofillManagerDelegate() {} |
- |
- virtual void HideRequestAutocompleteDialog() OVERRIDE { |
- request_autocomplete_dialog_open_ = false; |
- } |
- |
- MOCK_METHOD0(OnAutocheckoutError, void()); |
- MOCK_METHOD0(OnAutocheckoutSuccess, void()); |
- |
- virtual bool ShowAutocheckoutBubble( |
- const gfx::RectF& bounds, |
- bool is_google_user, |
- const base::Callback<void(AutocheckoutBubbleState)>& callback) OVERRIDE { |
- autocheckout_bubble_shown_ = true; |
- if (should_autoclick_bubble_) |
- callback.Run(AUTOCHECKOUT_BUBBLE_ACCEPTED); |
- return true; |
- } |
- |
- virtual void ShowRequestAutocompleteDialog( |
- const FormData& form, |
- const GURL& source_url, |
- DialogType dialog_type, |
- const base::Callback<void(const FormStructure*, |
- const std::string&)>& callback) OVERRIDE { |
- request_autocomplete_dialog_open_ = true; |
- callback.Run(user_supplied_data_.get(), "google_transaction_id"); |
- } |
- |
- virtual void AddAutocheckoutStep(AutocheckoutStepType step_type) OVERRIDE { |
- if (autocheckout_steps_.count(step_type) == 0) |
- autocheckout_steps_[step_type] = AUTOCHECKOUT_STEP_UNSTARTED; |
- } |
- |
- virtual void UpdateAutocheckoutStep( |
- AutocheckoutStepType step_type, |
- AutocheckoutStepStatus step_status) OVERRIDE { |
- autocheckout_steps_[step_type] = step_status; |
- } |
- |
- void SetUserSuppliedData(scoped_ptr<FormStructure> user_supplied_data) { |
- user_supplied_data_.reset(user_supplied_data.release()); |
- } |
- |
- bool autocheckout_bubble_shown() const { |
- return autocheckout_bubble_shown_; |
- } |
- |
- void set_autocheckout_bubble_shown(bool autocheckout_bubble_shown) { |
- autocheckout_bubble_shown_ = autocheckout_bubble_shown; |
- } |
- |
- bool request_autocomplete_dialog_open() const { |
- return request_autocomplete_dialog_open_; |
- } |
- |
- void set_should_autoclick_bubble(bool should_autoclick_bubble) { |
- should_autoclick_bubble_ = should_autoclick_bubble; |
- } |
- |
- bool AutocheckoutStepExistsWithStatus( |
- AutocheckoutStepType step_type, |
- AutocheckoutStepStatus step_status) const { |
- std::map<AutocheckoutStepType, AutocheckoutStepStatus>::const_iterator it = |
- autocheckout_steps_.find(step_type); |
- return it != autocheckout_steps_.end() && it->second == step_status; |
- } |
- |
- private: |
- // Whether or not ShowRequestAutocompleteDialog method has been called. |
- bool request_autocomplete_dialog_open_; |
- |
- // Whether or not Autocheckout bubble is displayed to user. |
- bool autocheckout_bubble_shown_; |
- |
- // Whether or not to accept the Autocheckout bubble when offered. |
- bool should_autoclick_bubble_; |
- |
- // User specified data that would be returned to AutocheckoutManager when |
- // dialog is accepted. |
- scoped_ptr<FormStructure> user_supplied_data_; |
- |
- // Step status of various Autocheckout steps in this checkout flow. |
- std::map<AutocheckoutStepType, AutocheckoutStepStatus> autocheckout_steps_; |
-}; |
- |
-class TestAutofillManager : public AutofillManager { |
- public: |
- explicit TestAutofillManager(AutofillDriver* driver, |
- AutofillManagerDelegate* delegate) |
- : AutofillManager(driver, delegate, NULL) { |
- } |
- virtual ~TestAutofillManager() {} |
- |
- void SetFormStructure(scoped_ptr<FormStructure> form_structure) { |
- form_structures()->clear(); |
- form_structures()->push_back(form_structure.release()); |
- } |
-}; |
- |
-class MockAutofillMetrics : public AutofillMetrics { |
- public: |
- MockAutofillMetrics() {} |
- MOCK_CONST_METHOD1(LogAutocheckoutBubbleMetric, void(BubbleMetric)); |
- MOCK_CONST_METHOD1(LogAutocheckoutBuyFlowMetric, |
- void(AutocheckoutBuyFlowMetric)); |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(MockAutofillMetrics); |
-}; |
- |
-class TestAutocheckoutManager: public AutocheckoutManager { |
- public: |
- explicit TestAutocheckoutManager(AutofillManager* autofill_manager) |
- : AutocheckoutManager(autofill_manager) { |
- set_metric_logger(scoped_ptr<AutofillMetrics>(new MockAutofillMetrics)); |
- } |
- |
- const MockAutofillMetrics& metric_logger() const { |
- return static_cast<const MockAutofillMetrics&>( |
- AutocheckoutManager::metric_logger()); |
- } |
- |
- virtual void MaybeShowAutocheckoutBubble( |
- const GURL& frame_url, |
- const gfx::RectF& bounding_box) OVERRIDE { |
- AutocheckoutManager::MaybeShowAutocheckoutBubble(frame_url, |
- bounding_box); |
- // Needed for AutocheckoutManager to post task on IO thread. |
- content::RunAllPendingInMessageLoop(BrowserThread::IO); |
- } |
- |
- using AutocheckoutManager::in_autocheckout_flow; |
- using AutocheckoutManager::should_show_bubble; |
- using AutocheckoutManager::MaybeShowAutocheckoutDialog; |
- using AutocheckoutManager::ReturnAutocheckoutData; |
-}; |
- |
-} // namespace |
- |
-class AutocheckoutManagerTest : public ChromeRenderViewHostTestHarness { |
- protected: |
- virtual void SetUp() OVERRIDE { |
- SetThreadBundleOptions(content::TestBrowserThreadBundle::REAL_IO_THREAD); |
- ChromeRenderViewHostTestHarness::SetUp(); |
- autofill_manager_delegate_.reset(new MockAutofillManagerDelegate()); |
- autofill_driver_.reset(new TestAutofillDriver(web_contents())); |
- autofill_manager_.reset(new TestAutofillManager( |
- autofill_driver_.get(), |
- autofill_manager_delegate_.get())); |
- autocheckout_manager_.reset( |
- new TestAutocheckoutManager(autofill_manager_.get())); |
- } |
- |
- virtual void TearDown() OVERRIDE { |
- autocheckout_manager_.reset(); |
- autofill_manager_delegate_.reset(); |
- autofill_manager_.reset(); |
- autofill_driver_.reset(); |
- ChromeRenderViewHostTestHarness::TearDown(); |
- } |
- |
- std::vector<FormData> ReadFilledForms() { |
- uint32 kMsgID = AutofillMsg_FillFormsAndClick::ID; |
- const IPC::Message* message = |
- process()->sink().GetFirstMessageMatching(kMsgID); |
- AutofillParam autofill_param; |
- AutofillMsg_FillFormsAndClick::Read(message, &autofill_param); |
- return autofill_param.a; |
- } |
- |
- void CheckFillFormsAndClickIpc( |
- ProceedElementPresence proceed_element_presence) { |
- EXPECT_EQ(1U, process()->sink().message_count()); |
- uint32 kMsgID = AutofillMsg_FillFormsAndClick::ID; |
- const IPC::Message* message = |
- process()->sink().GetFirstMessageMatching(kMsgID); |
- EXPECT_TRUE(message); |
- AutofillParam autofill_param; |
- AutofillMsg_FillFormsAndClick::Read(message, &autofill_param); |
- if (proceed_element_presence == HAS_PROCEED_ELEMENT) { |
- EXPECT_EQ(WebElementDescriptor::ID, autofill_param.d.retrieval_method); |
- EXPECT_EQ("#foo", autofill_param.d.descriptor); |
- } else { |
- EXPECT_EQ(WebElementDescriptor::NONE, autofill_param.d.retrieval_method); |
- } |
- ClearIpcSink(); |
- } |
- |
- void ClearIpcSink() { |
- process()->sink().ClearMessages(); |
- } |
- |
- void OpenRequestAutocompleteDialog() { |
- EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow()); |
- EXPECT_FALSE( |
- autofill_manager_delegate_->request_autocomplete_dialog_open()); |
- EXPECT_CALL(autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBubbleMetric( |
- AutofillMetrics::BUBBLE_COULD_BE_DISPLAYED)).Times(1); |
- autocheckout_manager_->OnLoadedPageMetaData(CreateStartOfFlowMetaData()); |
- // Simulate the user submitting some data via the requestAutocomplete UI. |
- autofill_manager_delegate_->SetUserSuppliedData( |
- FakeUserSubmittedFormStructure()); |
- GURL frame_url; |
- EXPECT_CALL(autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBuyFlowMetric( |
- AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_STARTED)).Times(1); |
- autocheckout_manager_->MaybeShowAutocheckoutDialog( |
- frame_url, |
- AUTOCHECKOUT_BUBBLE_ACCEPTED); |
- CheckFillFormsAndClickIpc(HAS_PROCEED_ELEMENT); |
- EXPECT_TRUE(autocheckout_manager_->in_autocheckout_flow()); |
- EXPECT_TRUE(autocheckout_manager_->should_preserve_dialog()); |
- EXPECT_TRUE(autofill_manager_delegate_->request_autocomplete_dialog_open()); |
- EXPECT_TRUE(autofill_manager_delegate_ |
- ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_SHIPPING, |
- AUTOCHECKOUT_STEP_STARTED)); |
- EXPECT_TRUE(autofill_manager_delegate_ |
- ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_DELIVERY, |
- AUTOCHECKOUT_STEP_UNSTARTED)); |
- EXPECT_TRUE(autofill_manager_delegate_ |
- ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_BILLING, |
- AUTOCHECKOUT_STEP_UNSTARTED)); |
- } |
- |
- void HideRequestAutocompleteDialog() { |
- EXPECT_TRUE( |
- autofill_manager_delegate_->request_autocomplete_dialog_open()); |
- autofill_manager_delegate_->HideRequestAutocompleteDialog(); |
- EXPECT_FALSE( |
- autofill_manager_delegate_->request_autocomplete_dialog_open()); |
- } |
- |
- // Test a multi-page Autocheckout flow end to end. |
- // |proceed_element_presence_on_last_page| indicates whether the last page |
- // of the flow should have a proceed element. |
- void TestFullAutocheckoutFlow( |
- ProceedElementPresence proceed_element_presence_on_last_page) { |
- // Test for progression through last page. |
- OpenRequestAutocompleteDialog(); |
- EXPECT_TRUE(autofill_manager_delegate_ |
- ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_SHIPPING, |
- AUTOCHECKOUT_STEP_STARTED)); |
- // Complete the first page. |
- autocheckout_manager_->OnAutocheckoutPageCompleted(SUCCESS); |
- EXPECT_TRUE(autocheckout_manager_->should_preserve_dialog()); |
- EXPECT_TRUE(autofill_manager_delegate_ |
- ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_SHIPPING, |
- AUTOCHECKOUT_STEP_COMPLETED)); |
- |
- // Go to the second page. |
- EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutSuccess()).Times(1); |
- autocheckout_manager_->OnLoadedPageMetaData(CreateInFlowMetaData()); |
- EXPECT_TRUE(autocheckout_manager_->in_autocheckout_flow()); |
- EXPECT_TRUE(autocheckout_manager_->should_preserve_dialog()); |
- CheckFillFormsAndClickIpc(HAS_PROCEED_ELEMENT); |
- EXPECT_TRUE(autofill_manager_delegate_ |
- ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_DELIVERY, |
- AUTOCHECKOUT_STEP_STARTED)); |
- autocheckout_manager_->OnAutocheckoutPageCompleted(SUCCESS); |
- EXPECT_TRUE(autofill_manager_delegate_ |
- ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_DELIVERY, |
- AUTOCHECKOUT_STEP_COMPLETED)); |
- |
- // Go to the third page. |
- EXPECT_CALL(autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBuyFlowMetric( |
- AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_SUCCESS)).Times(1); |
- autocheckout_manager_->OnLoadedPageMetaData( |
- CreateEndOfFlowMetaData(proceed_element_presence_on_last_page)); |
- CheckFillFormsAndClickIpc(proceed_element_presence_on_last_page); |
- EXPECT_TRUE(autocheckout_manager_->in_autocheckout_flow()); |
- EXPECT_TRUE(autocheckout_manager_->should_preserve_dialog()); |
- EXPECT_TRUE(autofill_manager_delegate_ |
- ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_BILLING, |
- AUTOCHECKOUT_STEP_STARTED)); |
- autocheckout_manager_->OnAutocheckoutPageCompleted(SUCCESS); |
- EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow()); |
- EXPECT_TRUE(autocheckout_manager_->should_preserve_dialog()); |
- EXPECT_TRUE(autofill_manager_delegate_ |
- ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_BILLING, |
- AUTOCHECKOUT_STEP_COMPLETED)); |
- |
- EXPECT_TRUE(autofill_manager_delegate_->request_autocomplete_dialog_open()); |
- |
- // Go to the page after the flow. |
- autocheckout_manager_->OnLoadedPageMetaData( |
- scoped_ptr<AutocheckoutPageMetaData>()); |
- EXPECT_EQ(proceed_element_presence_on_last_page == HAS_PROCEED_ELEMENT, |
- autocheckout_manager_->should_preserve_dialog()); |
- // Go to another page and we should not preserve the dialog now. |
- autocheckout_manager_->OnLoadedPageMetaData( |
- scoped_ptr<AutocheckoutPageMetaData>()); |
- EXPECT_FALSE(autocheckout_manager_->should_preserve_dialog()); |
- } |
- |
- // Test a signle-page Autocheckout flow. |proceed_element_presence| indicates |
- // whether the page should have a proceed element. |
- void TestSinglePageFlow(ProceedElementPresence proceed_element_presence) { |
- // Test one page flow. |
- EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow()); |
- EXPECT_FALSE( |
- autofill_manager_delegate_->request_autocomplete_dialog_open()); |
- EXPECT_CALL(autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBubbleMetric( |
- AutofillMetrics::BUBBLE_COULD_BE_DISPLAYED)).Times(1); |
- EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutSuccess()).Times(1); |
- autocheckout_manager_->OnLoadedPageMetaData( |
- CreateOnePageFlowMetaData(proceed_element_presence)); |
- // Simulate the user submitting some data via the requestAutocomplete UI. |
- autofill_manager_delegate_->SetUserSuppliedData( |
- FakeUserSubmittedFormStructure()); |
- GURL frame_url; |
- EXPECT_CALL(autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBuyFlowMetric( |
- AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_STARTED)).Times(1); |
- EXPECT_CALL(autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBuyFlowMetric( |
- AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_SUCCESS)).Times(1); |
- autocheckout_manager_->MaybeShowAutocheckoutDialog( |
- frame_url, |
- AUTOCHECKOUT_BUBBLE_ACCEPTED); |
- autocheckout_manager_->OnAutocheckoutPageCompleted(SUCCESS); |
- CheckFillFormsAndClickIpc(proceed_element_presence); |
- EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow()); |
- EXPECT_TRUE(autocheckout_manager_->should_preserve_dialog()); |
- EXPECT_TRUE(autofill_manager_delegate_->request_autocomplete_dialog_open()); |
- EXPECT_TRUE(autofill_manager_delegate_ |
- ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_SHIPPING, |
- AUTOCHECKOUT_STEP_COMPLETED)); |
- EXPECT_TRUE(autofill_manager_delegate_ |
- ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_DELIVERY, |
- AUTOCHECKOUT_STEP_COMPLETED)); |
- EXPECT_TRUE(autofill_manager_delegate_ |
- ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_BILLING, |
- AUTOCHECKOUT_STEP_COMPLETED)); |
- // Go to the page after the flow. |
- autocheckout_manager_->OnLoadedPageMetaData( |
- scoped_ptr<AutocheckoutPageMetaData>()); |
- EXPECT_EQ(proceed_element_presence == HAS_PROCEED_ELEMENT, |
- autocheckout_manager_->should_preserve_dialog()); |
- // Go to another page, and we should not preserve the dialog now. |
- autocheckout_manager_->OnLoadedPageMetaData( |
- scoped_ptr<AutocheckoutPageMetaData>()); |
- EXPECT_FALSE(autocheckout_manager_->should_preserve_dialog()); |
- } |
- |
- protected: |
- scoped_ptr<TestAutofillDriver> autofill_driver_; |
- scoped_ptr<TestAutofillManager> autofill_manager_; |
- scoped_ptr<TestAutocheckoutManager> autocheckout_manager_; |
- scoped_ptr<MockAutofillManagerDelegate> autofill_manager_delegate_; |
-}; |
- |
-TEST_F(AutocheckoutManagerTest, TestFillForms) { |
- OpenRequestAutocompleteDialog(); |
- |
- // Test if autocheckout manager can fill the first page. |
- autofill_manager_->SetFormStructure(CreateTestAddressFormStructure()); |
- |
- autocheckout_manager_->FillForms(); |
- |
- std::vector<FormData> filled_forms = ReadFilledForms(); |
- ASSERT_EQ(1U, filled_forms.size()); |
- ASSERT_EQ(9U, filled_forms[0].fields.size()); |
- EXPECT_EQ(ASCIIToUTF16("Test User"), filled_forms[0].fields[0].value); |
- EXPECT_EQ(ASCIIToUTF16("650-123-9909"), filled_forms[0].fields[1].value); |
- EXPECT_EQ(ASCIIToUTF16("blah@blah.com"), filled_forms[0].fields[2].value); |
- EXPECT_EQ(ASCIIToUTF16("Fake Street"), filled_forms[0].fields[3].value); |
- EXPECT_EQ(ASCIIToUTF16("Mocked City"), filled_forms[0].fields[4].value); |
- EXPECT_EQ(ASCIIToUTF16("California"), filled_forms[0].fields[5].value); |
- EXPECT_EQ(ASCIIToUTF16("United States"), filled_forms[0].fields[6].value); |
- EXPECT_EQ(ASCIIToUTF16("49012"), filled_forms[0].fields[7].value); |
- // Last field should not be filled, because there is no server mapping |
- // available for it. |
- EXPECT_EQ(ASCIIToUTF16("SomeField"), filled_forms[0].fields[8].value); |
- |
- filled_forms.clear(); |
- ClearIpcSink(); |
- |
- // Test if autocheckout manager can fill form on second page. |
- autofill_manager_->SetFormStructure(CreateTestCreditCardFormStructure()); |
- |
- autocheckout_manager_->FillForms(); |
- |
- filled_forms = ReadFilledForms(); |
- ASSERT_EQ(1U, filled_forms.size()); |
- ASSERT_EQ(10U, filled_forms[0].fields.size()); |
- EXPECT_EQ(ASCIIToUTF16("Test User"), filled_forms[0].fields[0].value); |
- EXPECT_EQ(ASCIIToUTF16("4444444444444448"), filled_forms[0].fields[1].value); |
- EXPECT_EQ(ASCIIToUTF16("10"), filled_forms[0].fields[2].value); |
- EXPECT_EQ(ASCIIToUTF16("2020"), filled_forms[0].fields[3].value); |
- EXPECT_EQ(ASCIIToUTF16("123"), filled_forms[0].fields[4].value); |
- EXPECT_EQ(ASCIIToUTF16("Billing Street"), filled_forms[0].fields[5].value); |
- EXPECT_EQ(ASCIIToUTF16("Billing City"), filled_forms[0].fields[6].value); |
- EXPECT_EQ(ASCIIToUTF16("BillingState"), filled_forms[0].fields[7].value); |
- EXPECT_EQ(ASCIIToUTF16("Canada"), filled_forms[0].fields[8].value); |
- EXPECT_EQ(ASCIIToUTF16("11111"), filled_forms[0].fields[9].value); |
- |
- filled_forms.clear(); |
- ClearIpcSink(); |
- |
- // Test form with default values. |
- autofill_manager_->SetFormStructure( |
- CreateTestFormStructureWithDefaultValues()); |
- |
- autocheckout_manager_->FillForms(); |
- |
- filled_forms = ReadFilledForms(); |
- ASSERT_EQ(1U, filled_forms.size()); |
- ASSERT_EQ(3U, filled_forms[0].fields.size()); |
- EXPECT_FALSE(filled_forms[0].fields[0].is_checked); |
- EXPECT_EQ(ASCIIToUTF16("male"), filled_forms[0].fields[0].value); |
- EXPECT_TRUE(filled_forms[0].fields[1].is_checked); |
- EXPECT_EQ(ASCIIToUTF16("female"), filled_forms[0].fields[1].value); |
- EXPECT_EQ(ASCIIToUTF16("Default Value"), filled_forms[0].fields[2].value); |
-} |
- |
-TEST_F(AutocheckoutManagerTest, OnFormsSeenTest) { |
- GURL frame_url; |
- gfx::RectF bounding_box; |
- EXPECT_CALL(autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBubbleMetric( |
- AutofillMetrics::BUBBLE_COULD_BE_DISPLAYED)).Times(1); |
- autocheckout_manager_->OnLoadedPageMetaData(CreateStartOfFlowMetaData()); |
- autocheckout_manager_->MaybeShowAutocheckoutBubble(frame_url, bounding_box); |
- |
- EXPECT_FALSE(autocheckout_manager_->should_show_bubble()); |
- // OnFormsSeen resets whether or not the bubble was shown. |
- autocheckout_manager_->OnFormsSeen(); |
- EXPECT_TRUE(autocheckout_manager_->should_show_bubble()); |
-} |
- |
-TEST_F(AutocheckoutManagerTest, OnClickFailedTestMissingAdvance) { |
- OpenRequestAutocompleteDialog(); |
- |
- EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutError()).Times(1); |
- EXPECT_CALL( |
- autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBuyFlowMetric( |
- AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_MISSING_ADVANCE_ELEMENT)) |
- .Times(1); |
- autocheckout_manager_->OnAutocheckoutPageCompleted(MISSING_ADVANCE); |
- EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow()); |
- EXPECT_TRUE( |
- autofill_manager_delegate_->request_autocomplete_dialog_open()); |
- EXPECT_TRUE(autofill_manager_delegate_ |
- ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_SHIPPING, |
- AUTOCHECKOUT_STEP_FAILED)); |
-} |
- |
-TEST_F(AutocheckoutManagerTest, OnClickFailedTestMissingClickBeforeFilling) { |
- OpenRequestAutocompleteDialog(); |
- |
- EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutError()).Times(1); |
- EXPECT_CALL( |
- autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBuyFlowMetric(AutofillMetrics:: |
- AUTOCHECKOUT_BUY_FLOW_MISSING_CLICK_ELEMENT_BEFORE_FORM_FILLING)) |
- .Times(1); |
- autocheckout_manager_->OnAutocheckoutPageCompleted( |
- MISSING_CLICK_ELEMENT_BEFORE_FORM_FILLING); |
- EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow()); |
- EXPECT_TRUE( |
- autofill_manager_delegate_->request_autocomplete_dialog_open()); |
-} |
- |
-TEST_F(AutocheckoutManagerTest, OnClickFailedTestMissingClickAfterFilling) { |
- OpenRequestAutocompleteDialog(); |
- |
- EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutError()).Times(1); |
- EXPECT_CALL( |
- autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBuyFlowMetric(AutofillMetrics:: |
- AUTOCHECKOUT_BUY_FLOW_MISSING_CLICK_ELEMENT_AFTER_FORM_FILLING)) |
- .Times(1); |
- autocheckout_manager_->OnAutocheckoutPageCompleted( |
- MISSING_CLICK_ELEMENT_AFTER_FORM_FILLING); |
- EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow()); |
- EXPECT_TRUE( |
- autofill_manager_delegate_->request_autocomplete_dialog_open()); |
-} |
- |
-TEST_F(AutocheckoutManagerTest, MaybeShowAutocheckoutBubbleTest) { |
- GURL frame_url; |
- gfx::RectF bounding_box; |
- EXPECT_CALL(autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBubbleMetric( |
- AutofillMetrics::BUBBLE_COULD_BE_DISPLAYED)).Times(1); |
- autocheckout_manager_->OnLoadedPageMetaData(CreateStartOfFlowMetaData()); |
- // MaybeShowAutocheckoutBubble shows bubble if it has not been shown. |
- autocheckout_manager_->MaybeShowAutocheckoutBubble(frame_url, bounding_box); |
- EXPECT_FALSE(autocheckout_manager_->should_show_bubble()); |
- EXPECT_TRUE(autofill_manager_delegate_->autocheckout_bubble_shown()); |
- |
- // Reset |autofill_manager_delegate_|. |
- HideRequestAutocompleteDialog(); |
- autofill_manager_delegate_->set_autocheckout_bubble_shown(false); |
- |
- // MaybeShowAutocheckoutBubble does nothing if the bubble was already shown |
- // for the current page. |
- autocheckout_manager_->MaybeShowAutocheckoutBubble(frame_url, bounding_box); |
- EXPECT_FALSE(autocheckout_manager_->should_show_bubble()); |
- EXPECT_FALSE(autofill_manager_delegate_->autocheckout_bubble_shown()); |
- EXPECT_FALSE(autofill_manager_delegate_->request_autocomplete_dialog_open()); |
-} |
- |
-TEST_F(AutocheckoutManagerTest, OnLoadedPageMetaDataMissingMetaData) { |
- // Gettting no meta data after any autocheckout page is an error. |
- OpenRequestAutocompleteDialog(); |
- EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutError()).Times(1); |
- EXPECT_CALL( |
- autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBuyFlowMetric( |
- AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_MISSING_FIELDMAPPING)) |
- .Times(1); |
- autocheckout_manager_->OnLoadedPageMetaData( |
- scoped_ptr<AutocheckoutPageMetaData>()); |
- EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow()); |
- EXPECT_EQ(0U, process()->sink().message_count()); |
- EXPECT_TRUE( |
- autofill_manager_delegate_->request_autocomplete_dialog_open()); |
-} |
- |
-TEST_F(AutocheckoutManagerTest, OnLoadedPageMetaDataRepeatedStartPage) { |
- // Getting start page twice in a row is an error. |
- OpenRequestAutocompleteDialog(); |
- EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutError()).Times(1); |
- EXPECT_CALL( |
- autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBuyFlowMetric( |
- AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_CANNOT_PROCEED)).Times(1); |
- autocheckout_manager_->OnLoadedPageMetaData(CreateStartOfFlowMetaData()); |
- EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow()); |
- EXPECT_EQ(0U, process()->sink().message_count()); |
- EXPECT_TRUE( |
- autofill_manager_delegate_->request_autocomplete_dialog_open()); |
- |
- EXPECT_TRUE(autofill_manager_delegate_ |
- ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_SHIPPING, |
- AUTOCHECKOUT_STEP_FAILED)); |
-} |
- |
-TEST_F(AutocheckoutManagerTest, OnLoadedPageMetaDataRepeatedPage) { |
- // Repeating a page is an error. |
- OpenRequestAutocompleteDialog(); |
- // Go to second page. |
- autocheckout_manager_->OnLoadedPageMetaData(CreateInFlowMetaData()); |
- EXPECT_TRUE(autocheckout_manager_->in_autocheckout_flow()); |
- CheckFillFormsAndClickIpc(HAS_PROCEED_ELEMENT); |
- EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutError()).Times(1); |
- EXPECT_CALL( |
- autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBuyFlowMetric( |
- AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_CANNOT_PROCEED)).Times(1); |
- autocheckout_manager_->OnLoadedPageMetaData(CreateInFlowMetaData()); |
- EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow()); |
- EXPECT_EQ(0U, process()->sink().message_count()); |
- EXPECT_TRUE( |
- autofill_manager_delegate_->request_autocomplete_dialog_open()); |
- EXPECT_TRUE(autofill_manager_delegate_ |
- ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_DELIVERY, |
- AUTOCHECKOUT_STEP_FAILED)); |
-} |
- |
-TEST_F(AutocheckoutManagerTest, OnLoadedPageMetaDataNotInFlow) { |
- // Repeating a page is an error. |
- OpenRequestAutocompleteDialog(); |
- // Go to second page. |
- autocheckout_manager_->OnLoadedPageMetaData(CreateInFlowMetaData()); |
- EXPECT_TRUE(autocheckout_manager_->in_autocheckout_flow()); |
- CheckFillFormsAndClickIpc(HAS_PROCEED_ELEMENT); |
- EXPECT_CALL(*autofill_manager_delegate_, OnAutocheckoutError()).Times(1); |
- EXPECT_CALL( |
- autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBuyFlowMetric( |
- AutofillMetrics::AUTOCHECKOUT_BUY_FLOW_MISSING_FIELDMAPPING)) |
- .Times(1); |
- autocheckout_manager_->OnLoadedPageMetaData(CreateNotInFlowMetaData()); |
- EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow()); |
- EXPECT_EQ(0U, process()->sink().message_count()); |
- EXPECT_TRUE( |
- autofill_manager_delegate_->request_autocomplete_dialog_open()); |
- EXPECT_TRUE(autofill_manager_delegate_ |
- ->AutocheckoutStepExistsWithStatus(AUTOCHECKOUT_STEP_DELIVERY, |
- AUTOCHECKOUT_STEP_FAILED)); |
-} |
- |
-TEST_F(AutocheckoutManagerTest, |
- OnLoadedPageMetaDataShouldNotFillFormsIfNotInFlow) { |
- // If not in flow, OnLoadedPageMetaData does not fill forms. |
- EXPECT_CALL(autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBubbleMetric( |
- AutofillMetrics::BUBBLE_COULD_BE_DISPLAYED)).Times(1); |
- autocheckout_manager_->OnLoadedPageMetaData(CreateStartOfFlowMetaData()); |
- // Go to second page. |
- autocheckout_manager_->OnLoadedPageMetaData(CreateInFlowMetaData()); |
- EXPECT_EQ(0U, process()->sink().message_count()); |
-} |
- |
-TEST_F(AutocheckoutManagerTest, FullAutocheckoutFlow) { |
- TestFullAutocheckoutFlow(HAS_PROCEED_ELEMENT); |
-} |
- |
-TEST_F(AutocheckoutManagerTest, FullAutocheckoutFlowNoClickOnLastPage) { |
- TestFullAutocheckoutFlow(NO_PROCEED_ELEMENT); |
-} |
- |
-TEST_F(AutocheckoutManagerTest, CancelledAutocheckoutFlow) { |
- // Test for progression through last page. |
- OpenRequestAutocompleteDialog(); |
- // Go to second page. |
- autocheckout_manager_->OnLoadedPageMetaData(CreateInFlowMetaData()); |
- EXPECT_TRUE(autocheckout_manager_->in_autocheckout_flow()); |
- CheckFillFormsAndClickIpc(HAS_PROCEED_ELEMENT); |
- |
- // Cancel the flow. |
- autocheckout_manager_->ReturnAutocheckoutData(NULL, std::string()); |
- EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow()); |
- |
- // Go to third page. |
- EXPECT_CALL(autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBuyFlowMetric(testing::_)).Times(0); |
- autocheckout_manager_->OnLoadedPageMetaData( |
- CreateEndOfFlowMetaData(HAS_PROCEED_ELEMENT)); |
- EXPECT_EQ(0U, process()->sink().message_count()); |
-} |
- |
-TEST_F(AutocheckoutManagerTest, SinglePageFlow) { |
- TestSinglePageFlow(HAS_PROCEED_ELEMENT); |
-} |
- |
-TEST_F(AutocheckoutManagerTest, SinglePageFlowNoClickElement) { |
- TestSinglePageFlow(NO_PROCEED_ELEMENT); |
-} |
- |
-TEST_F(AutocheckoutManagerTest, CancelAutocheckoutBubble) { |
- GURL frame_url; |
- gfx::RectF bounding_box; |
- autofill_manager_delegate_->set_should_autoclick_bubble(false); |
- EXPECT_FALSE(autocheckout_manager_->in_autocheckout_flow()); |
- EXPECT_FALSE(autofill_manager_delegate_->request_autocomplete_dialog_open()); |
- EXPECT_FALSE(autocheckout_manager_->is_autocheckout_bubble_showing()); |
- EXPECT_CALL(autocheckout_manager_->metric_logger(), |
- LogAutocheckoutBubbleMetric( |
- AutofillMetrics::BUBBLE_COULD_BE_DISPLAYED)).Times(1); |
- autocheckout_manager_->OnLoadedPageMetaData(CreateStartOfFlowMetaData()); |
- |
- autocheckout_manager_->MaybeShowAutocheckoutBubble(frame_url, bounding_box); |
- EXPECT_TRUE(autocheckout_manager_->is_autocheckout_bubble_showing()); |
- autocheckout_manager_->MaybeShowAutocheckoutDialog( |
- frame_url, |
- AUTOCHECKOUT_BUBBLE_IGNORED); |
- EXPECT_FALSE(autocheckout_manager_->is_autocheckout_bubble_showing()); |
- EXPECT_TRUE(autocheckout_manager_->should_show_bubble()); |
- |
- autocheckout_manager_->MaybeShowAutocheckoutBubble(frame_url, bounding_box); |
- EXPECT_TRUE(autocheckout_manager_->is_autocheckout_bubble_showing()); |
- autocheckout_manager_->MaybeShowAutocheckoutDialog( |
- frame_url, |
- AUTOCHECKOUT_BUBBLE_CANCELED); |
- EXPECT_FALSE(autocheckout_manager_->is_autocheckout_bubble_showing()); |
- EXPECT_FALSE(autocheckout_manager_->should_show_bubble()); |
- |
- autocheckout_manager_->MaybeShowAutocheckoutBubble(frame_url, bounding_box); |
- EXPECT_FALSE(autocheckout_manager_->is_autocheckout_bubble_showing()); |
-} |
- |
-} // namespace autofill |