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

Unified Diff: components/autofill/core/browser/autofill_manager_unittest.cc

Issue 16611003: Ignore ajax on specified pages. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: yay for scoped pointers Created 7 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: components/autofill/core/browser/autofill_manager_unittest.cc
diff --git a/components/autofill/core/browser/autofill_manager_unittest.cc b/components/autofill/core/browser/autofill_manager_unittest.cc
index c35a902d90bbe5cff5bf9cce8c2ece1b896cc584..0f777d68c328d4b4130dfd81bcd7a615f1ef4f5a 100644
--- a/components/autofill/core/browser/autofill_manager_unittest.cc
+++ b/components/autofill/core/browser/autofill_manager_unittest.cc
@@ -628,6 +628,21 @@ class TestAutofillManager : public AutofillManager {
autocheckout_manager()->OnLoadedPageMetaData(start_of_flow.Pass());
}
+ // Set autocheckout manager's page meta data to first page on Autocheckout
+ // flow.
+ void MarkAsFirstPageInAutocheckoutFlowIgnoringAjax() {
+ scoped_ptr<AutocheckoutPageMetaData> start_of_flow(
+ new AutocheckoutPageMetaData());
+ start_of_flow->current_page_number = 0;
+ start_of_flow->total_pages = 3;
+ start_of_flow->ignore_ajax = true;
+ WebElementDescriptor* proceed_element =
+ &start_of_flow->proceed_element_descriptor;
+ proceed_element->descriptor = "#foo";
+ proceed_element->retrieval_method = WebElementDescriptor::ID;
+ autocheckout_manager()->OnLoadedPageMetaData(start_of_flow.Pass());
+ }
+
private:
// Weak reference.
TestPersonalDataManager* personal_data_;
@@ -3183,18 +3198,43 @@ TEST_F(AutofillManagerTest, DisabledAutofillDispatchesError) {
namespace {
-class MockAutofillManagerDelegate
- : public autofill::TestAutofillManagerDelegate {
+class MockAutofillManagerDelegate : public TestAutofillManagerDelegate {
public:
- MockAutofillManagerDelegate() {}
+ MockAutofillManagerDelegate()
+ : autocheckout_bubble_shown_(false) {}
+
virtual ~MockAutofillManagerDelegate() {}
- MOCK_METHOD3(ShowAutocheckoutBubble,
- void(const gfx::RectF& bounds,
- bool is_google_user,
- const base::Callback<void(bool)>& callback));
+ virtual void ShowAutocheckoutBubble(
+ const gfx::RectF& bounds,
+ bool is_google_user,
+ const base::Callback<void(bool)>& callback) OVERRIDE {
+ autocheckout_bubble_shown_ = true;
+ callback.Run(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 {
+ callback.Run(user_supplied_data_.get(), "google_transaction_id");
+ }
+
+ 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_;
+ }
+
private:
- DISALLOW_COPY_AND_ASSIGN(MockAutofillManagerDelegate);
+ bool autocheckout_bubble_shown_;
+ scoped_ptr<FormStructure> user_supplied_data_;
+
+ DISALLOW_COPY_AND_ASSIGN(MockAutofillManagerDelegate);
};
class MockAutofillExternalDelegate : public AutofillExternalDelegate {
@@ -3224,8 +3264,6 @@ TEST_F(AutofillManagerTest, TestBubbleShown) {
autofill_manager_->set_autofill_enabled(true);
autofill_manager_->MarkAsFirstPageInAutocheckoutFlow();
- EXPECT_CALL(delegate, ShowAutocheckoutBubble(_, _, _));
-
FormData form;
CreateTestAddressFormData(&form);
@@ -3243,6 +3281,8 @@ TEST_F(AutofillManagerTest, TestBubbleShown) {
autofill_manager_->AddSeenForm(form_structure);
autofill_manager_->OnMaybeShowAutocheckoutBubble(form, gfx::RectF());
+
+ EXPECT_TRUE(delegate.autocheckout_bubble_shown());
}
// Test that Autocheckout bubble is not offered when server doesn't have data
@@ -3271,6 +3311,8 @@ TEST_F(AutofillManagerTest, TestAutocheckoutBubbleNotShown) {
autofill_manager_->AddSeenForm(form_structure);
autofill_manager_->OnMaybeShowAutocheckoutBubble(form, gfx::RectF());
+
+ EXPECT_FALSE(delegate.autocheckout_bubble_shown());
}
// Test our external delegate is called at the right time.
@@ -3290,4 +3332,53 @@ TEST_F(AutofillManagerTest, TestExternalDelegate) {
autofill_manager_->SetExternalDelegate(NULL);
}
+// Test that in the case of Autocheckout, forms seen are in order supplied.
+TEST_F(AutofillManagerTest, DynamicFormsSeenAndIgnored) {
+ MockAutofillManagerDelegate delegate;
+ autofill_manager_.reset(new TestAutofillManager(
+ autofill_driver_.get(), &delegate, &personal_data_));
+ FormData shipping_options;
+ CreateTestShippingOptionsFormData(&shipping_options);
+ FormData user_supplied;
+ CreateTestFormWithAutocompleteAttribute(&user_supplied);
+ FormData address;
+ CreateTestAddressFormData(&address);
+
+ autofill_manager_->set_autocheckout_url_prefix("test-prefix");
+ // Push address only
+ std::vector<FormData> forms;
+ forms.push_back(address);
+
+ // Build and add form structure with server data.
+ scoped_ptr<TestFormStructure> form_structure(new TestFormStructure(address));
+ std::vector<AutofillFieldType> heuristic_types, server_types;
+ for (size_t i = 0; i < address.fields.size(); ++i) {
+ heuristic_types.push_back(UNKNOWN_TYPE);
+ server_types.push_back(form_structure->field(i)->type());
+ }
+ form_structure->SetFieldTypes(heuristic_types, server_types);
+ autofill_manager_->AddSeenForm(form_structure.release());
+
+ // Make sure normal form is handled correctly.
+ autofill_manager_->MarkAsFirstPageInAutocheckoutFlowIgnoringAjax();
+ std::vector<FormStructure*> form_structures;
+ form_structures = autofill_manager_->GetFormStructures();
+ ASSERT_EQ(1U, form_structures.size());
+ EXPECT_EQ("/form.html", form_structures[0]->source_url().path());
+
+ scoped_ptr<FormStructure> filled_form(new TestFormStructure(address));
+ delegate.SetUserSuppliedData(filled_form.Pass());
+ autofill_manager_->OnMaybeShowAutocheckoutBubble(address, gfx::RectF());
+
+ // Push other forms
+ forms.push_back(shipping_options);
+ forms.push_back(user_supplied);
+
+ // FormStructure should contain the same forms as before.
+ DynamicFormsSeen(forms);
+ form_structures = autofill_manager_->GetFormStructures();
+ ASSERT_EQ(1U, form_structures.size());
+ EXPECT_EQ("/form.html", form_structures[0]->source_url().path());
+}
+
} // namespace autofill
« no previous file with comments | « components/autofill/core/browser/autofill_manager.cc ('k') | components/autofill/core/browser/autofill_xml_parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698