| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/strings/string16.h" | 9 #include "base/strings/string16.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| 11 #include "components/autofill/core/browser/autofill_manager.h" | 11 #include "components/autofill/core/browser/autofill_manager.h" |
| 12 #include "components/autofill/core/browser/popup_item_ids.h" | 12 #include "components/autofill/core/browser/popup_item_ids.h" |
| 13 #include "components/autofill/core/browser/test_autofill_client.h" |
| 13 #include "components/autofill/core/browser/test_autofill_driver.h" | 14 #include "components/autofill/core/browser/test_autofill_driver.h" |
| 14 #include "components/autofill/core/browser/test_autofill_external_delegate.h" | 15 #include "components/autofill/core/browser/test_autofill_external_delegate.h" |
| 15 #include "components/autofill/core/browser/test_autofill_manager_delegate.h" | |
| 16 #include "components/autofill/core/common/form_data.h" | 16 #include "components/autofill/core/common/form_data.h" |
| 17 #include "components/autofill/core/common/form_field_data.h" | 17 #include "components/autofill/core/common/form_field_data.h" |
| 18 #include "components/autofill/core/common/password_form_fill_data.h" | 18 #include "components/autofill/core/common/password_form_fill_data.h" |
| 19 #include "testing/gmock/include/gmock/gmock.h" | 19 #include "testing/gmock/include/gmock/gmock.h" |
| 20 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| 21 #include "ui/gfx/rect.h" | 21 #include "ui/gfx/rect.h" |
| 22 | 22 |
| 23 using base::ASCIIToUTF16; | 23 using base::ASCIIToUTF16; |
| 24 using testing::_; | 24 using testing::_; |
| 25 | 25 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 42 MOCK_METHOD0(RendererShouldClearFilledForm, void()); | 42 MOCK_METHOD0(RendererShouldClearFilledForm, void()); |
| 43 MOCK_METHOD0(RendererShouldClearPreviewedForm, void()); | 43 MOCK_METHOD0(RendererShouldClearPreviewedForm, void()); |
| 44 MOCK_METHOD1(RendererShouldFillFieldWithValue, void(const base::string16&)); | 44 MOCK_METHOD1(RendererShouldFillFieldWithValue, void(const base::string16&)); |
| 45 MOCK_METHOD1(RendererShouldPreviewFieldWithValue, | 45 MOCK_METHOD1(RendererShouldPreviewFieldWithValue, |
| 46 void(const base::string16&)); | 46 void(const base::string16&)); |
| 47 | 47 |
| 48 private: | 48 private: |
| 49 DISALLOW_COPY_AND_ASSIGN(MockAutofillDriver); | 49 DISALLOW_COPY_AND_ASSIGN(MockAutofillDriver); |
| 50 }; | 50 }; |
| 51 | 51 |
| 52 class MockAutofillManagerDelegate | 52 class MockAutofillClient : public autofill::TestAutofillClient { |
| 53 : public autofill::TestAutofillManagerDelegate { | |
| 54 public: | 53 public: |
| 55 MockAutofillManagerDelegate() {} | 54 MockAutofillClient() {} |
| 56 | 55 |
| 57 MOCK_METHOD7(ShowAutofillPopup, | 56 MOCK_METHOD7(ShowAutofillPopup, |
| 58 void(const gfx::RectF& element_bounds, | 57 void(const gfx::RectF& element_bounds, |
| 59 base::i18n::TextDirection text_direction, | 58 base::i18n::TextDirection text_direction, |
| 60 const std::vector<base::string16>& values, | 59 const std::vector<base::string16>& values, |
| 61 const std::vector<base::string16>& labels, | 60 const std::vector<base::string16>& labels, |
| 62 const std::vector<base::string16>& icons, | 61 const std::vector<base::string16>& icons, |
| 63 const std::vector<int>& identifiers, | 62 const std::vector<int>& identifiers, |
| 64 base::WeakPtr<AutofillPopupDelegate> delegate)); | 63 base::WeakPtr<AutofillPopupDelegate> delegate)); |
| 65 | 64 |
| 66 MOCK_METHOD2(UpdateAutofillPopupDataListValues, | 65 MOCK_METHOD2(UpdateAutofillPopupDataListValues, |
| 67 void(const std::vector<base::string16>& values, | 66 void(const std::vector<base::string16>& values, |
| 68 const std::vector<base::string16>& lables)); | 67 const std::vector<base::string16>& lables)); |
| 69 | 68 |
| 70 MOCK_METHOD0(HideAutofillPopup, void()); | 69 MOCK_METHOD0(HideAutofillPopup, void()); |
| 71 | 70 |
| 72 private: | 71 private: |
| 73 DISALLOW_COPY_AND_ASSIGN(MockAutofillManagerDelegate); | 72 DISALLOW_COPY_AND_ASSIGN(MockAutofillClient); |
| 74 }; | 73 }; |
| 75 | 74 |
| 76 class MockAutofillManager : public AutofillManager { | 75 class MockAutofillManager : public AutofillManager { |
| 77 public: | 76 public: |
| 78 MockAutofillManager(AutofillDriver* driver, | 77 MockAutofillManager(AutofillDriver* driver, MockAutofillClient* client) |
| 79 MockAutofillManagerDelegate* delegate) | |
| 80 // Force to use the constructor designated for unit test, but we don't | 78 // Force to use the constructor designated for unit test, but we don't |
| 81 // really need personal_data in this test so we pass a NULL pointer. | 79 // really need personal_data in this test so we pass a NULL pointer. |
| 82 : AutofillManager(driver, delegate, NULL) { | 80 : AutofillManager(driver, client, NULL) {} |
| 83 } | |
| 84 virtual ~MockAutofillManager() {} | 81 virtual ~MockAutofillManager() {} |
| 85 | 82 |
| 86 MOCK_METHOD5(FillOrPreviewForm, | 83 MOCK_METHOD5(FillOrPreviewForm, |
| 87 void(AutofillDriver::RendererFormDataAction action, | 84 void(AutofillDriver::RendererFormDataAction action, |
| 88 int query_id, | 85 int query_id, |
| 89 const FormData& form, | 86 const FormData& form, |
| 90 const FormFieldData& field, | 87 const FormFieldData& field, |
| 91 int unique_id)); | 88 int unique_id)); |
| 92 | 89 |
| 93 private: | 90 private: |
| 94 DISALLOW_COPY_AND_ASSIGN(MockAutofillManager); | 91 DISALLOW_COPY_AND_ASSIGN(MockAutofillManager); |
| 95 }; | 92 }; |
| 96 | 93 |
| 97 } // namespace | 94 } // namespace |
| 98 | 95 |
| 99 class AutofillExternalDelegateUnitTest : public testing::Test { | 96 class AutofillExternalDelegateUnitTest : public testing::Test { |
| 100 protected: | 97 protected: |
| 101 virtual void SetUp() OVERRIDE { | 98 virtual void SetUp() OVERRIDE { |
| 102 autofill_driver_.reset(new MockAutofillDriver()); | 99 autofill_driver_.reset(new MockAutofillDriver()); |
| 103 autofill_manager_.reset( | 100 autofill_manager_.reset( |
| 104 new MockAutofillManager(autofill_driver_.get(), | 101 new MockAutofillManager(autofill_driver_.get(), &autofill_client_)); |
| 105 &manager_delegate_)); | |
| 106 external_delegate_.reset( | 102 external_delegate_.reset( |
| 107 new AutofillExternalDelegate( | 103 new AutofillExternalDelegate( |
| 108 autofill_manager_.get(), autofill_driver_.get())); | 104 autofill_manager_.get(), autofill_driver_.get())); |
| 109 } | 105 } |
| 110 | 106 |
| 111 virtual void TearDown() OVERRIDE { | 107 virtual void TearDown() OVERRIDE { |
| 112 // Order of destruction is important as AutofillManager relies on | 108 // Order of destruction is important as AutofillManager relies on |
| 113 // PersonalDataManager to be around when it gets destroyed. | 109 // PersonalDataManager to be around when it gets destroyed. |
| 114 autofill_manager_.reset(); | 110 autofill_manager_.reset(); |
| 115 external_delegate_.reset(); | 111 external_delegate_.reset(); |
| 116 autofill_driver_.reset(); | 112 autofill_driver_.reset(); |
| 117 } | 113 } |
| 118 | 114 |
| 119 // Issue an OnQuery call with the given |query_id|. | 115 // Issue an OnQuery call with the given |query_id|. |
| 120 void IssueOnQuery(int query_id) { | 116 void IssueOnQuery(int query_id) { |
| 121 const FormData form; | 117 const FormData form; |
| 122 FormFieldData field; | 118 FormFieldData field; |
| 123 field.is_focusable = true; | 119 field.is_focusable = true; |
| 124 field.should_autocomplete = true; | 120 field.should_autocomplete = true; |
| 125 const gfx::RectF element_bounds; | 121 const gfx::RectF element_bounds; |
| 126 | 122 |
| 127 external_delegate_->OnQuery(query_id, form, field, element_bounds, true); | 123 external_delegate_->OnQuery(query_id, form, field, element_bounds, true); |
| 128 } | 124 } |
| 129 | 125 |
| 130 MockAutofillManagerDelegate manager_delegate_; | 126 MockAutofillClient autofill_client_; |
| 131 scoped_ptr<MockAutofillDriver> autofill_driver_; | 127 scoped_ptr<MockAutofillDriver> autofill_driver_; |
| 132 scoped_ptr<MockAutofillManager> autofill_manager_; | 128 scoped_ptr<MockAutofillManager> autofill_manager_; |
| 133 scoped_ptr<AutofillExternalDelegate> external_delegate_; | 129 scoped_ptr<AutofillExternalDelegate> external_delegate_; |
| 134 | 130 |
| 135 base::MessageLoop message_loop_; | 131 base::MessageLoop message_loop_; |
| 136 }; | 132 }; |
| 137 | 133 |
| 138 // Test that our external delegate called the virtual methods at the right time. | 134 // Test that our external delegate called the virtual methods at the right time. |
| 139 TEST_F(AutofillExternalDelegateUnitTest, TestExternalDelegateVirtualCalls) { | 135 TEST_F(AutofillExternalDelegateUnitTest, TestExternalDelegateVirtualCalls) { |
| 140 IssueOnQuery(kQueryId); | 136 IssueOnQuery(kQueryId); |
| 141 | 137 |
| 142 // The enums must be cast to ints to prevent compile errors on linux_rel. | 138 // The enums must be cast to ints to prevent compile errors on linux_rel. |
| 143 EXPECT_CALL( | 139 EXPECT_CALL( |
| 144 manager_delegate_, | 140 autofill_client_, |
| 145 ShowAutofillPopup(_, | 141 ShowAutofillPopup(_, |
| 146 _, | 142 _, |
| 147 _, | 143 _, |
| 148 _, | 144 _, |
| 149 _, | 145 _, |
| 150 testing::ElementsAre( | 146 testing::ElementsAre( |
| 151 kAutofillProfileId, | 147 kAutofillProfileId, |
| 152 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), | 148 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), |
| 153 static_cast<int>(POPUP_ITEM_ID_AUTOFILL_OPTIONS)), | 149 static_cast<int>(POPUP_ITEM_ID_AUTOFILL_OPTIONS)), |
| 154 _)); | 150 _)); |
| 155 | 151 |
| 156 // This should call ShowAutofillPopup. | 152 // This should call ShowAutofillPopup. |
| 157 std::vector<base::string16> autofill_item; | 153 std::vector<base::string16> autofill_item; |
| 158 autofill_item.push_back(base::string16()); | 154 autofill_item.push_back(base::string16()); |
| 159 std::vector<int> autofill_ids; | 155 std::vector<int> autofill_ids; |
| 160 autofill_ids.push_back(kAutofillProfileId); | 156 autofill_ids.push_back(kAutofillProfileId); |
| 161 external_delegate_->OnSuggestionsReturned(kQueryId, | 157 external_delegate_->OnSuggestionsReturned(kQueryId, |
| 162 autofill_item, | 158 autofill_item, |
| 163 autofill_item, | 159 autofill_item, |
| 164 autofill_item, | 160 autofill_item, |
| 165 autofill_ids); | 161 autofill_ids); |
| 166 | 162 |
| 167 EXPECT_CALL(*autofill_manager_, | 163 EXPECT_CALL(*autofill_manager_, |
| 168 FillOrPreviewForm( | 164 FillOrPreviewForm( |
| 169 AutofillDriver::FORM_DATA_ACTION_FILL, _, _, _, _)); | 165 AutofillDriver::FORM_DATA_ACTION_FILL, _, _, _, _)); |
| 170 EXPECT_CALL(manager_delegate_, HideAutofillPopup()); | 166 EXPECT_CALL(autofill_client_, HideAutofillPopup()); |
| 171 | 167 |
| 172 // This should trigger a call to hide the popup since we've selected an | 168 // This should trigger a call to hide the popup since we've selected an |
| 173 // option. | 169 // option. |
| 174 external_delegate_->DidAcceptSuggestion(autofill_item[0], autofill_ids[0]); | 170 external_delegate_->DidAcceptSuggestion(autofill_item[0], autofill_ids[0]); |
| 175 } | 171 } |
| 176 | 172 |
| 177 // Test that data list elements for a node will appear in the Autofill popup. | 173 // Test that data list elements for a node will appear in the Autofill popup. |
| 178 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateDataList) { | 174 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateDataList) { |
| 179 IssueOnQuery(kQueryId); | 175 IssueOnQuery(kQueryId); |
| 180 | 176 |
| 181 std::vector<base::string16> data_list_items; | 177 std::vector<base::string16> data_list_items; |
| 182 data_list_items.push_back(base::string16()); | 178 data_list_items.push_back(base::string16()); |
| 183 | 179 |
| 184 external_delegate_->SetCurrentDataListValues(data_list_items, | 180 external_delegate_->SetCurrentDataListValues(data_list_items, |
| 185 data_list_items); | 181 data_list_items); |
| 186 | 182 |
| 187 // The enums must be cast to ints to prevent compile errors on linux_rel. | 183 // The enums must be cast to ints to prevent compile errors on linux_rel. |
| 188 EXPECT_CALL( | 184 EXPECT_CALL( |
| 189 manager_delegate_, | 185 autofill_client_, |
| 190 ShowAutofillPopup(_, | 186 ShowAutofillPopup(_, |
| 191 _, | 187 _, |
| 192 _, | 188 _, |
| 193 _, | 189 _, |
| 194 _, | 190 _, |
| 195 testing::ElementsAre( | 191 testing::ElementsAre( |
| 196 static_cast<int>(POPUP_ITEM_ID_DATALIST_ENTRY), | 192 static_cast<int>(POPUP_ITEM_ID_DATALIST_ENTRY), |
| 197 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), | 193 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), |
| 198 kAutofillProfileId, | 194 kAutofillProfileId, |
| 199 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), | 195 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), |
| 200 static_cast<int>(POPUP_ITEM_ID_AUTOFILL_OPTIONS)), | 196 static_cast<int>(POPUP_ITEM_ID_AUTOFILL_OPTIONS)), |
| 201 _)); | 197 _)); |
| 202 | 198 |
| 203 // This should call ShowAutofillPopup. | 199 // This should call ShowAutofillPopup. |
| 204 std::vector<base::string16> autofill_item; | 200 std::vector<base::string16> autofill_item; |
| 205 autofill_item.push_back(base::string16()); | 201 autofill_item.push_back(base::string16()); |
| 206 std::vector<int> autofill_ids; | 202 std::vector<int> autofill_ids; |
| 207 autofill_ids.push_back(kAutofillProfileId); | 203 autofill_ids.push_back(kAutofillProfileId); |
| 208 external_delegate_->OnSuggestionsReturned(kQueryId, | 204 external_delegate_->OnSuggestionsReturned(kQueryId, |
| 209 autofill_item, | 205 autofill_item, |
| 210 autofill_item, | 206 autofill_item, |
| 211 autofill_item, | 207 autofill_item, |
| 212 autofill_ids); | 208 autofill_ids); |
| 213 | 209 |
| 214 // Try calling OnSuggestionsReturned with no Autofill values and ensure | 210 // Try calling OnSuggestionsReturned with no Autofill values and ensure |
| 215 // the datalist items are still shown. | 211 // the datalist items are still shown. |
| 216 // The enum must be cast to an int to prevent compile errors on linux_rel. | 212 // The enum must be cast to an int to prevent compile errors on linux_rel. |
| 217 EXPECT_CALL( | 213 EXPECT_CALL( |
| 218 manager_delegate_, | 214 autofill_client_, |
| 219 ShowAutofillPopup( | 215 ShowAutofillPopup( |
| 220 _, | 216 _, |
| 221 _, | 217 _, |
| 222 _, | 218 _, |
| 223 _, | 219 _, |
| 224 _, | 220 _, |
| 225 testing::ElementsAre(static_cast<int>(POPUP_ITEM_ID_DATALIST_ENTRY)), | 221 testing::ElementsAre(static_cast<int>(POPUP_ITEM_ID_DATALIST_ENTRY)), |
| 226 _)); | 222 _)); |
| 227 | 223 |
| 228 autofill_item = std::vector<base::string16>(); | 224 autofill_item = std::vector<base::string16>(); |
| 229 autofill_ids = std::vector<int>(); | 225 autofill_ids = std::vector<int>(); |
| 230 external_delegate_->OnSuggestionsReturned(kQueryId, | 226 external_delegate_->OnSuggestionsReturned(kQueryId, |
| 231 autofill_item, | 227 autofill_item, |
| 232 autofill_item, | 228 autofill_item, |
| 233 autofill_item, | 229 autofill_item, |
| 234 autofill_ids); | 230 autofill_ids); |
| 235 } | 231 } |
| 236 | 232 |
| 237 // Test that datalist values can get updated while a popup is showing. | 233 // Test that datalist values can get updated while a popup is showing. |
| 238 TEST_F(AutofillExternalDelegateUnitTest, UpdateDataListWhileShowingPopup) { | 234 TEST_F(AutofillExternalDelegateUnitTest, UpdateDataListWhileShowingPopup) { |
| 239 IssueOnQuery(kQueryId); | 235 IssueOnQuery(kQueryId); |
| 240 | 236 |
| 241 EXPECT_CALL(manager_delegate_, | 237 EXPECT_CALL(autofill_client_, ShowAutofillPopup(_, _, _, _, _, _, _)) |
| 242 ShowAutofillPopup(_, _, _, _, _, _, _)).Times(0); | 238 .Times(0); |
| 243 | 239 |
| 244 // Make sure just setting the data list values doesn't cause the popup to | 240 // Make sure just setting the data list values doesn't cause the popup to |
| 245 // appear. | 241 // appear. |
| 246 std::vector<base::string16> data_list_items; | 242 std::vector<base::string16> data_list_items; |
| 247 data_list_items.push_back(base::string16()); | 243 data_list_items.push_back(base::string16()); |
| 248 | 244 |
| 249 external_delegate_->SetCurrentDataListValues(data_list_items, | 245 external_delegate_->SetCurrentDataListValues(data_list_items, |
| 250 data_list_items); | 246 data_list_items); |
| 251 | 247 |
| 252 // The enums must be cast to ints to prevent compile errors on linux_rel. | 248 // The enums must be cast to ints to prevent compile errors on linux_rel. |
| 253 EXPECT_CALL( | 249 EXPECT_CALL( |
| 254 manager_delegate_, | 250 autofill_client_, |
| 255 ShowAutofillPopup(_, | 251 ShowAutofillPopup(_, |
| 256 _, | 252 _, |
| 257 _, | 253 _, |
| 258 _, | 254 _, |
| 259 _, | 255 _, |
| 260 testing::ElementsAre( | 256 testing::ElementsAre( |
| 261 static_cast<int>(POPUP_ITEM_ID_DATALIST_ENTRY), | 257 static_cast<int>(POPUP_ITEM_ID_DATALIST_ENTRY), |
| 262 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), | 258 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), |
| 263 kAutofillProfileId, | 259 kAutofillProfileId, |
| 264 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), | 260 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), |
| (...skipping 12 matching lines...) Expand all Loading... |
| 277 autofill_ids); | 273 autofill_ids); |
| 278 | 274 |
| 279 // This would normally get called from ShowAutofillPopup, but it is mocked so | 275 // This would normally get called from ShowAutofillPopup, but it is mocked so |
| 280 // we need to call OnPopupShown ourselves. | 276 // we need to call OnPopupShown ourselves. |
| 281 external_delegate_->OnPopupShown(); | 277 external_delegate_->OnPopupShown(); |
| 282 | 278 |
| 283 // Update the current data list and ensure the popup is updated. | 279 // Update the current data list and ensure the popup is updated. |
| 284 data_list_items.push_back(base::string16()); | 280 data_list_items.push_back(base::string16()); |
| 285 | 281 |
| 286 // The enums must be cast to ints to prevent compile errors on linux_rel. | 282 // The enums must be cast to ints to prevent compile errors on linux_rel. |
| 287 EXPECT_CALL(manager_delegate_, | 283 EXPECT_CALL( |
| 288 UpdateAutofillPopupDataListValues(data_list_items, | 284 autofill_client_, |
| 289 data_list_items)); | 285 UpdateAutofillPopupDataListValues(data_list_items, data_list_items)); |
| 290 | 286 |
| 291 external_delegate_->SetCurrentDataListValues(data_list_items, | 287 external_delegate_->SetCurrentDataListValues(data_list_items, |
| 292 data_list_items); | 288 data_list_items); |
| 293 } | 289 } |
| 294 | 290 |
| 295 // Test that the Autofill popup is able to display warnings explaining why | 291 // Test that the Autofill popup is able to display warnings explaining why |
| 296 // Autofill is disabled for a website. | 292 // Autofill is disabled for a website. |
| 297 // Regression test for http://crbug.com/247880 | 293 // Regression test for http://crbug.com/247880 |
| 298 TEST_F(AutofillExternalDelegateUnitTest, AutofillWarnings) { | 294 TEST_F(AutofillExternalDelegateUnitTest, AutofillWarnings) { |
| 299 IssueOnQuery(kQueryId); | 295 IssueOnQuery(kQueryId); |
| 300 | 296 |
| 301 // The enums must be cast to ints to prevent compile errors on linux_rel. | 297 // The enums must be cast to ints to prevent compile errors on linux_rel. |
| 302 EXPECT_CALL( | 298 EXPECT_CALL( |
| 303 manager_delegate_, | 299 autofill_client_, |
| 304 ShowAutofillPopup( | 300 ShowAutofillPopup( |
| 305 _, | 301 _, |
| 306 _, | 302 _, |
| 307 _, | 303 _, |
| 308 _, | 304 _, |
| 309 _, | 305 _, |
| 310 testing::ElementsAre(static_cast<int>(POPUP_ITEM_ID_WARNING_MESSAGE)), | 306 testing::ElementsAre(static_cast<int>(POPUP_ITEM_ID_WARNING_MESSAGE)), |
| 311 _)); | 307 _)); |
| 312 | 308 |
| 313 // This should call ShowAutofillPopup. | 309 // This should call ShowAutofillPopup. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 327 // Regression test for http://crbug.com/105636 | 323 // Regression test for http://crbug.com/105636 |
| 328 TEST_F(AutofillExternalDelegateUnitTest, NoAutofillWarningsWithoutSuggestions) { | 324 TEST_F(AutofillExternalDelegateUnitTest, NoAutofillWarningsWithoutSuggestions) { |
| 329 const FormData form; | 325 const FormData form; |
| 330 FormFieldData field; | 326 FormFieldData field; |
| 331 field.is_focusable = true; | 327 field.is_focusable = true; |
| 332 field.should_autocomplete = false; | 328 field.should_autocomplete = false; |
| 333 const gfx::RectF element_bounds; | 329 const gfx::RectF element_bounds; |
| 334 | 330 |
| 335 external_delegate_->OnQuery(kQueryId, form, field, element_bounds, true); | 331 external_delegate_->OnQuery(kQueryId, form, field, element_bounds, true); |
| 336 | 332 |
| 337 EXPECT_CALL(manager_delegate_, | 333 EXPECT_CALL(autofill_client_, ShowAutofillPopup(_, _, _, _, _, _, _)) |
| 338 ShowAutofillPopup(_, _, _, _, _, _, _)).Times(0); | 334 .Times(0); |
| 339 EXPECT_CALL(manager_delegate_, HideAutofillPopup()).Times(1); | 335 EXPECT_CALL(autofill_client_, HideAutofillPopup()).Times(1); |
| 340 | 336 |
| 341 // This should not call ShowAutofillPopup. | 337 // This should not call ShowAutofillPopup. |
| 342 std::vector<base::string16> autofill_item; | 338 std::vector<base::string16> autofill_item; |
| 343 autofill_item.push_back(base::string16()); | 339 autofill_item.push_back(base::string16()); |
| 344 std::vector<int> autofill_ids; | 340 std::vector<int> autofill_ids; |
| 345 autofill_ids.push_back(POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY); | 341 autofill_ids.push_back(POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY); |
| 346 external_delegate_->OnSuggestionsReturned(kQueryId, | 342 external_delegate_->OnSuggestionsReturned(kQueryId, |
| 347 autofill_item, | 343 autofill_item, |
| 348 autofill_item, | 344 autofill_item, |
| 349 autofill_item, | 345 autofill_item, |
| 350 autofill_ids); | 346 autofill_ids); |
| 351 } | 347 } |
| 352 | 348 |
| 353 // Test that the Autofill delegate doesn't try and fill a form with a | 349 // Test that the Autofill delegate doesn't try and fill a form with a |
| 354 // negative unique id. | 350 // negative unique id. |
| 355 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateInvalidUniqueId) { | 351 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateInvalidUniqueId) { |
| 356 // Ensure it doesn't try to preview the negative id. | 352 // Ensure it doesn't try to preview the negative id. |
| 357 EXPECT_CALL(*autofill_manager_, FillOrPreviewForm(_, _, _, _, _)).Times(0); | 353 EXPECT_CALL(*autofill_manager_, FillOrPreviewForm(_, _, _, _, _)).Times(0); |
| 358 EXPECT_CALL(*autofill_driver_, RendererShouldClearPreviewedForm()).Times(1); | 354 EXPECT_CALL(*autofill_driver_, RendererShouldClearPreviewedForm()).Times(1); |
| 359 external_delegate_->DidSelectSuggestion(base::string16(), -1); | 355 external_delegate_->DidSelectSuggestion(base::string16(), -1); |
| 360 | 356 |
| 361 // Ensure it doesn't try to fill the form in with the negative id. | 357 // Ensure it doesn't try to fill the form in with the negative id. |
| 362 EXPECT_CALL(manager_delegate_, HideAutofillPopup()); | 358 EXPECT_CALL(autofill_client_, HideAutofillPopup()); |
| 363 EXPECT_CALL(*autofill_manager_, FillOrPreviewForm(_, _, _, _, _)).Times(0); | 359 EXPECT_CALL(*autofill_manager_, FillOrPreviewForm(_, _, _, _, _)).Times(0); |
| 364 external_delegate_->DidAcceptSuggestion(base::string16(), -1); | 360 external_delegate_->DidAcceptSuggestion(base::string16(), -1); |
| 365 } | 361 } |
| 366 | 362 |
| 367 // Test that the ClearPreview call is only sent if the form was being previewed | 363 // Test that the ClearPreview call is only sent if the form was being previewed |
| 368 // (i.e. it isn't autofilling a password). | 364 // (i.e. it isn't autofilling a password). |
| 369 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateClearPreviewedForm) { | 365 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateClearPreviewedForm) { |
| 370 // Ensure selecting a new password entries or Autofill entries will | 366 // Ensure selecting a new password entries or Autofill entries will |
| 371 // cause any previews to get cleared. | 367 // cause any previews to get cleared. |
| 372 EXPECT_CALL(*autofill_driver_, RendererShouldClearPreviewedForm()).Times(1); | 368 EXPECT_CALL(*autofill_driver_, RendererShouldClearPreviewedForm()).Times(1); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 383 EXPECT_CALL(*autofill_driver_, RendererShouldClearPreviewedForm()).Times(1); | 379 EXPECT_CALL(*autofill_driver_, RendererShouldClearPreviewedForm()).Times(1); |
| 384 EXPECT_CALL(*autofill_driver_, RendererShouldPreviewFieldWithValue( | 380 EXPECT_CALL(*autofill_driver_, RendererShouldPreviewFieldWithValue( |
| 385 ASCIIToUTF16("baz foo"))); | 381 ASCIIToUTF16("baz foo"))); |
| 386 external_delegate_->DidSelectSuggestion(ASCIIToUTF16("baz foo"), | 382 external_delegate_->DidSelectSuggestion(ASCIIToUTF16("baz foo"), |
| 387 POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY); | 383 POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY); |
| 388 } | 384 } |
| 389 | 385 |
| 390 // Test that the popup is hidden once we are done editing the autofill field. | 386 // Test that the popup is hidden once we are done editing the autofill field. |
| 391 TEST_F(AutofillExternalDelegateUnitTest, | 387 TEST_F(AutofillExternalDelegateUnitTest, |
| 392 ExternalDelegateHidePopupAfterEditing) { | 388 ExternalDelegateHidePopupAfterEditing) { |
| 393 EXPECT_CALL(manager_delegate_, ShowAutofillPopup(_, _, _, _, _, _, _)); | 389 EXPECT_CALL(autofill_client_, ShowAutofillPopup(_, _, _, _, _, _, _)); |
| 394 autofill::GenerateTestAutofillPopup(external_delegate_.get()); | 390 autofill::GenerateTestAutofillPopup(external_delegate_.get()); |
| 395 | 391 |
| 396 EXPECT_CALL(manager_delegate_, HideAutofillPopup()); | 392 EXPECT_CALL(autofill_client_, HideAutofillPopup()); |
| 397 external_delegate_->DidEndTextFieldEditing(); | 393 external_delegate_->DidEndTextFieldEditing(); |
| 398 } | 394 } |
| 399 | 395 |
| 400 // Test that the driver is directed to accept the data list after being notified | 396 // Test that the driver is directed to accept the data list after being notified |
| 401 // that the user accepted the data list suggestion. | 397 // that the user accepted the data list suggestion. |
| 402 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateAcceptSuggestion) { | 398 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateAcceptSuggestion) { |
| 403 EXPECT_CALL(manager_delegate_, HideAutofillPopup()); | 399 EXPECT_CALL(autofill_client_, HideAutofillPopup()); |
| 404 base::string16 dummy_string(ASCIIToUTF16("baz qux")); | 400 base::string16 dummy_string(ASCIIToUTF16("baz qux")); |
| 405 EXPECT_CALL(*autofill_driver_, | 401 EXPECT_CALL(*autofill_driver_, |
| 406 RendererShouldAcceptDataListSuggestion(dummy_string)); | 402 RendererShouldAcceptDataListSuggestion(dummy_string)); |
| 407 external_delegate_->DidAcceptSuggestion(dummy_string, | 403 external_delegate_->DidAcceptSuggestion(dummy_string, |
| 408 POPUP_ITEM_ID_DATALIST_ENTRY); | 404 POPUP_ITEM_ID_DATALIST_ENTRY); |
| 409 } | 405 } |
| 410 | 406 |
| 411 // Test that the driver is directed to clear the form after being notified that | 407 // Test that the driver is directed to clear the form after being notified that |
| 412 // the user accepted the suggestion to clear the form. | 408 // the user accepted the suggestion to clear the form. |
| 413 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateClearForm) { | 409 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateClearForm) { |
| 414 EXPECT_CALL(manager_delegate_, HideAutofillPopup()); | 410 EXPECT_CALL(autofill_client_, HideAutofillPopup()); |
| 415 EXPECT_CALL(*autofill_driver_, RendererShouldClearFilledForm()); | 411 EXPECT_CALL(*autofill_driver_, RendererShouldClearFilledForm()); |
| 416 | 412 |
| 417 external_delegate_->DidAcceptSuggestion(base::string16(), | 413 external_delegate_->DidAcceptSuggestion(base::string16(), |
| 418 POPUP_ITEM_ID_CLEAR_FORM); | 414 POPUP_ITEM_ID_CLEAR_FORM); |
| 419 } | 415 } |
| 420 | 416 |
| 421 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateHideWarning) { | 417 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateHideWarning) { |
| 422 // Set up a field that shouldn't get autocompleted or display warnings. | 418 // Set up a field that shouldn't get autocompleted or display warnings. |
| 423 const FormData form; | 419 const FormData form; |
| 424 FormFieldData field; | 420 FormFieldData field; |
| 425 field.is_focusable = true; | 421 field.is_focusable = true; |
| 426 field.should_autocomplete = false; | 422 field.should_autocomplete = false; |
| 427 const gfx::RectF element_bounds; | 423 const gfx::RectF element_bounds; |
| 428 | 424 |
| 429 external_delegate_->OnQuery(kQueryId, form, field, element_bounds, false); | 425 external_delegate_->OnQuery(kQueryId, form, field, element_bounds, false); |
| 430 | 426 |
| 431 std::vector<base::string16> autofill_items; | 427 std::vector<base::string16> autofill_items; |
| 432 autofill_items.push_back(base::string16()); | 428 autofill_items.push_back(base::string16()); |
| 433 std::vector<int> autofill_ids; | 429 std::vector<int> autofill_ids; |
| 434 autofill_ids.push_back(POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY); | 430 autofill_ids.push_back(POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY); |
| 435 | 431 |
| 436 // Ensure the popup tries to hide itself, since it is not allowed to show | 432 // Ensure the popup tries to hide itself, since it is not allowed to show |
| 437 // anything. | 433 // anything. |
| 438 EXPECT_CALL(manager_delegate_, HideAutofillPopup()); | 434 EXPECT_CALL(autofill_client_, HideAutofillPopup()); |
| 439 | 435 |
| 440 external_delegate_->OnSuggestionsReturned(kQueryId, | 436 external_delegate_->OnSuggestionsReturned(kQueryId, |
| 441 autofill_items, | 437 autofill_items, |
| 442 autofill_items, | 438 autofill_items, |
| 443 autofill_items, | 439 autofill_items, |
| 444 autofill_ids); | 440 autofill_ids); |
| 445 } | 441 } |
| 446 | 442 |
| 447 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateFillFieldWithValue) { | 443 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateFillFieldWithValue) { |
| 448 EXPECT_CALL(manager_delegate_, HideAutofillPopup()); | 444 EXPECT_CALL(autofill_client_, HideAutofillPopup()); |
| 449 base::string16 dummy_string(ASCIIToUTF16("baz foo")); | 445 base::string16 dummy_string(ASCIIToUTF16("baz foo")); |
| 450 EXPECT_CALL(*autofill_driver_, | 446 EXPECT_CALL(*autofill_driver_, |
| 451 RendererShouldFillFieldWithValue(dummy_string)); | 447 RendererShouldFillFieldWithValue(dummy_string)); |
| 452 external_delegate_->DidAcceptSuggestion(dummy_string, | 448 external_delegate_->DidAcceptSuggestion(dummy_string, |
| 453 POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY); | 449 POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY); |
| 454 } | 450 } |
| 455 | 451 |
| 456 } // namespace autofill | 452 } // namespace autofill |
| OLD | NEW |