| 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 | 
|  |