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/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/strings/string16.h" | 10 #include "base/strings/string16.h" |
(...skipping 17 matching lines...) Expand all Loading... |
28 namespace autofill { | 28 namespace autofill { |
29 | 29 |
30 namespace { | 30 namespace { |
31 | 31 |
32 // A constant value to use as the Autofill query ID. | 32 // A constant value to use as the Autofill query ID. |
33 const int kQueryId = 5; | 33 const int kQueryId = 5; |
34 | 34 |
35 // A constant value to use as an Autofill profile ID. | 35 // A constant value to use as an Autofill profile ID. |
36 const int kAutofillProfileId = 1; | 36 const int kAutofillProfileId = 1; |
37 | 37 |
| 38 // Gmock matcher that allows checking the frontend IDs of a sequence of |
| 39 // suggestions. This wraps a GMock container matcher, converts the suggestion |
| 40 // frontend IDs to a vector of ints, and then runs the container matcher |
| 41 // against the result to test an argument. See SuggestionVectorIdsAre() below. |
| 42 class SuggestionVectorIdsAreMatcher |
| 43 : public testing::MatcherInterface<const std::vector<Suggestion>&> { |
| 44 public: |
| 45 typedef std::vector<int> Container; |
| 46 typedef testing::Matcher<Container> ContainerMatcher; |
| 47 |
| 48 explicit SuggestionVectorIdsAreMatcher(const ContainerMatcher& seq_matcher) |
| 49 : container_matcher_(seq_matcher) { |
| 50 } |
| 51 |
| 52 virtual bool MatchAndExplain(const std::vector<Suggestion>& suggestions, |
| 53 testing::MatchResultListener* listener) const { |
| 54 Container frontend_ids; |
| 55 for (const auto& suggestion : suggestions) |
| 56 frontend_ids.push_back(suggestion.frontend_id); |
| 57 return container_matcher_.MatchAndExplain(frontend_ids, listener); |
| 58 } |
| 59 |
| 60 virtual void DescribeTo(::std::ostream* os) const { |
| 61 container_matcher_.DescribeTo(os); |
| 62 } |
| 63 |
| 64 virtual void DescribeNegationTo(::std::ostream* os) const { |
| 65 container_matcher_.DescribeNegationTo(os); |
| 66 } |
| 67 |
| 68 private: |
| 69 ContainerMatcher container_matcher_; |
| 70 }; |
| 71 |
| 72 // Use this matcher to compare a sequence vector's IDs to a list. In an |
| 73 // EXPECT_CALL statement, use the following for an vector<Suggestion> argument |
| 74 // to compare the IDs against a constant list: |
| 75 // SuggestionVectorIdsAre(testing::ElementsAre(1, 2, 3, 4)) |
| 76 template<class EltsAreMatcher> |
| 77 inline testing::Matcher<const std::vector<Suggestion>&> |
| 78 SuggestionVectorIdsAre(const EltsAreMatcher& elts_are_matcher) { |
| 79 return MakeMatcher( |
| 80 new SuggestionVectorIdsAreMatcher(elts_are_matcher)); |
| 81 } |
| 82 |
38 class MockAutofillDriver : public TestAutofillDriver { | 83 class MockAutofillDriver : public TestAutofillDriver { |
39 public: | 84 public: |
40 MockAutofillDriver() {} | 85 MockAutofillDriver() {} |
41 // Mock methods to enable testability. | 86 // Mock methods to enable testability. |
42 MOCK_METHOD1(RendererShouldAcceptDataListSuggestion, | 87 MOCK_METHOD1(RendererShouldAcceptDataListSuggestion, |
43 void(const base::string16&)); | 88 void(const base::string16&)); |
44 MOCK_METHOD0(RendererShouldClearFilledForm, void()); | 89 MOCK_METHOD0(RendererShouldClearFilledForm, void()); |
45 MOCK_METHOD0(RendererShouldClearPreviewedForm, void()); | 90 MOCK_METHOD0(RendererShouldClearPreviewedForm, void()); |
46 MOCK_METHOD1(RendererShouldFillFieldWithValue, void(const base::string16&)); | 91 MOCK_METHOD1(RendererShouldFillFieldWithValue, void(const base::string16&)); |
47 MOCK_METHOD1(RendererShouldPreviewFieldWithValue, | 92 MOCK_METHOD1(RendererShouldPreviewFieldWithValue, |
48 void(const base::string16&)); | 93 void(const base::string16&)); |
49 | 94 |
50 private: | 95 private: |
51 DISALLOW_COPY_AND_ASSIGN(MockAutofillDriver); | 96 DISALLOW_COPY_AND_ASSIGN(MockAutofillDriver); |
52 }; | 97 }; |
53 | 98 |
54 class MockAutofillClient : public autofill::TestAutofillClient { | 99 class MockAutofillClient : public autofill::TestAutofillClient { |
55 public: | 100 public: |
56 MockAutofillClient() {} | 101 MockAutofillClient() {} |
57 | 102 |
58 MOCK_METHOD1(ScanCreditCard, | 103 MOCK_METHOD1(ScanCreditCard, |
59 void(const CreditCardScanCallback& callbacK)); | 104 void(const CreditCardScanCallback& callbacK)); |
60 | 105 |
61 MOCK_METHOD7(ShowAutofillPopup, | 106 MOCK_METHOD4(ShowAutofillPopup, |
62 void(const gfx::RectF& element_bounds, | 107 void(const gfx::RectF& element_bounds, |
63 base::i18n::TextDirection text_direction, | 108 base::i18n::TextDirection text_direction, |
64 const std::vector<base::string16>& values, | 109 const std::vector<Suggestion>& suggestions, |
65 const std::vector<base::string16>& labels, | |
66 const std::vector<base::string16>& icons, | |
67 const std::vector<int>& identifiers, | |
68 base::WeakPtr<AutofillPopupDelegate> delegate)); | 110 base::WeakPtr<AutofillPopupDelegate> delegate)); |
69 | 111 |
70 MOCK_METHOD2(UpdateAutofillPopupDataListValues, | 112 MOCK_METHOD2(UpdateAutofillPopupDataListValues, |
71 void(const std::vector<base::string16>& values, | 113 void(const std::vector<base::string16>& values, |
72 const std::vector<base::string16>& lables)); | 114 const std::vector<base::string16>& lables)); |
73 | 115 |
74 MOCK_METHOD0(HideAutofillPopup, void()); | 116 MOCK_METHOD0(HideAutofillPopup, void()); |
75 | 117 |
76 private: | 118 private: |
77 DISALLOW_COPY_AND_ASSIGN(MockAutofillClient); | 119 DISALLOW_COPY_AND_ASSIGN(MockAutofillClient); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 | 186 |
145 // Test that our external delegate called the virtual methods at the right time. | 187 // Test that our external delegate called the virtual methods at the right time. |
146 TEST_F(AutofillExternalDelegateUnitTest, TestExternalDelegateVirtualCalls) { | 188 TEST_F(AutofillExternalDelegateUnitTest, TestExternalDelegateVirtualCalls) { |
147 IssueOnQuery(kQueryId); | 189 IssueOnQuery(kQueryId); |
148 | 190 |
149 // The enums must be cast to ints to prevent compile errors on linux_rel. | 191 // The enums must be cast to ints to prevent compile errors on linux_rel. |
150 EXPECT_CALL( | 192 EXPECT_CALL( |
151 autofill_client_, | 193 autofill_client_, |
152 ShowAutofillPopup(_, | 194 ShowAutofillPopup(_, |
153 _, | 195 _, |
154 _, | 196 SuggestionVectorIdsAre(testing::ElementsAre( |
155 _, | |
156 _, | |
157 testing::ElementsAre( | |
158 kAutofillProfileId, | 197 kAutofillProfileId, |
159 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), | 198 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), |
160 static_cast<int>(POPUP_ITEM_ID_AUTOFILL_OPTIONS)), | 199 static_cast<int>(POPUP_ITEM_ID_AUTOFILL_OPTIONS))), |
161 _)); | 200 _)); |
162 | 201 |
163 // This should call ShowAutofillPopup. | 202 // This should call ShowAutofillPopup. |
164 std::vector<base::string16> autofill_item; | 203 std::vector<Suggestion> autofill_item; |
165 autofill_item.push_back(base::string16()); | 204 autofill_item.push_back(Suggestion()); |
166 std::vector<int> autofill_ids; | 205 autofill_item[0].frontend_id = kAutofillProfileId; |
167 autofill_ids.push_back(kAutofillProfileId); | 206 external_delegate_->OnSuggestionsReturned(kQueryId, autofill_item); |
168 external_delegate_->OnSuggestionsReturned(kQueryId, | |
169 autofill_item, | |
170 autofill_item, | |
171 autofill_item, | |
172 autofill_ids); | |
173 | 207 |
174 EXPECT_CALL(*autofill_manager_, | 208 EXPECT_CALL(*autofill_manager_, |
175 FillOrPreviewForm( | 209 FillOrPreviewForm( |
176 AutofillDriver::FORM_DATA_ACTION_FILL, _, _, _, _)); | 210 AutofillDriver::FORM_DATA_ACTION_FILL, _, _, _, _)); |
177 EXPECT_CALL(autofill_client_, HideAutofillPopup()); | 211 EXPECT_CALL(autofill_client_, HideAutofillPopup()); |
178 | 212 |
179 // This should trigger a call to hide the popup since we've selected an | 213 // This should trigger a call to hide the popup since we've selected an |
180 // option. | 214 // option. |
181 external_delegate_->DidAcceptSuggestion(autofill_item[0], autofill_ids[0]); | 215 external_delegate_->DidAcceptSuggestion(autofill_item[0].value, |
| 216 autofill_item[0].frontend_id); |
182 } | 217 } |
183 | 218 |
184 // Test that data list elements for a node will appear in the Autofill popup. | 219 // Test that data list elements for a node will appear in the Autofill popup. |
185 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateDataList) { | 220 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateDataList) { |
186 IssueOnQuery(kQueryId); | 221 IssueOnQuery(kQueryId); |
187 | 222 |
188 std::vector<base::string16> data_list_items; | 223 std::vector<base::string16> data_list_items; |
189 data_list_items.push_back(base::string16()); | 224 data_list_items.push_back(base::string16()); |
190 | 225 |
191 EXPECT_CALL( | 226 EXPECT_CALL( |
192 autofill_client_, | 227 autofill_client_, |
193 UpdateAutofillPopupDataListValues(data_list_items, data_list_items)); | 228 UpdateAutofillPopupDataListValues(data_list_items, data_list_items)); |
194 | 229 |
195 external_delegate_->SetCurrentDataListValues(data_list_items, | 230 external_delegate_->SetCurrentDataListValues(data_list_items, |
196 data_list_items); | 231 data_list_items); |
197 | 232 |
198 // The enums must be cast to ints to prevent compile errors on linux_rel. | 233 // The enums must be cast to ints to prevent compile errors on linux_rel. |
199 EXPECT_CALL( | 234 EXPECT_CALL( |
200 autofill_client_, | 235 autofill_client_, |
201 ShowAutofillPopup(_, | 236 ShowAutofillPopup(_, |
202 _, | 237 _, |
203 _, | 238 SuggestionVectorIdsAre(testing::ElementsAre( |
204 _, | |
205 _, | |
206 testing::ElementsAre( | |
207 static_cast<int>(POPUP_ITEM_ID_DATALIST_ENTRY), | 239 static_cast<int>(POPUP_ITEM_ID_DATALIST_ENTRY), |
208 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), | 240 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), |
209 kAutofillProfileId, | 241 kAutofillProfileId, |
210 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), | 242 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), |
211 static_cast<int>(POPUP_ITEM_ID_AUTOFILL_OPTIONS)), | 243 static_cast<int>(POPUP_ITEM_ID_AUTOFILL_OPTIONS))), |
212 _)); | 244 _)); |
213 | 245 |
214 // This should call ShowAutofillPopup. | 246 // This should call ShowAutofillPopup. |
215 std::vector<base::string16> autofill_item; | 247 std::vector<Suggestion> autofill_item; |
216 autofill_item.push_back(base::string16()); | 248 autofill_item.push_back(Suggestion()); |
217 std::vector<int> autofill_ids; | 249 autofill_item[0].frontend_id = kAutofillProfileId; |
218 autofill_ids.push_back(kAutofillProfileId); | 250 external_delegate_->OnSuggestionsReturned(kQueryId, autofill_item); |
219 external_delegate_->OnSuggestionsReturned(kQueryId, | |
220 autofill_item, | |
221 autofill_item, | |
222 autofill_item, | |
223 autofill_ids); | |
224 | 251 |
225 // Try calling OnSuggestionsReturned with no Autofill values and ensure | 252 // Try calling OnSuggestionsReturned with no Autofill values and ensure |
226 // the datalist items are still shown. | 253 // the datalist items are still shown. |
227 // The enum must be cast to an int to prevent compile errors on linux_rel. | 254 // The enum must be cast to an int to prevent compile errors on linux_rel. |
228 EXPECT_CALL( | 255 EXPECT_CALL( |
229 autofill_client_, | 256 autofill_client_, |
230 ShowAutofillPopup( | 257 ShowAutofillPopup( |
231 _, | 258 _, |
232 _, | 259 _, |
233 _, | 260 SuggestionVectorIdsAre(testing::ElementsAre( |
234 _, | 261 static_cast<int>(POPUP_ITEM_ID_DATALIST_ENTRY))), |
235 _, | |
236 testing::ElementsAre(static_cast<int>(POPUP_ITEM_ID_DATALIST_ENTRY)), | |
237 _)); | 262 _)); |
238 | 263 |
239 autofill_item = std::vector<base::string16>(); | 264 autofill_item.clear(); |
240 autofill_ids = std::vector<int>(); | 265 external_delegate_->OnSuggestionsReturned(kQueryId, autofill_item); |
241 external_delegate_->OnSuggestionsReturned(kQueryId, | |
242 autofill_item, | |
243 autofill_item, | |
244 autofill_item, | |
245 autofill_ids); | |
246 } | 266 } |
247 | 267 |
248 // Test that datalist values can get updated while a popup is showing. | 268 // Test that datalist values can get updated while a popup is showing. |
249 TEST_F(AutofillExternalDelegateUnitTest, UpdateDataListWhileShowingPopup) { | 269 TEST_F(AutofillExternalDelegateUnitTest, UpdateDataListWhileShowingPopup) { |
250 IssueOnQuery(kQueryId); | 270 IssueOnQuery(kQueryId); |
251 | 271 |
252 EXPECT_CALL(autofill_client_, ShowAutofillPopup(_, _, _, _, _, _, _)) | 272 EXPECT_CALL(autofill_client_, ShowAutofillPopup(_, _, _, _)) |
253 .Times(0); | 273 .Times(0); |
254 | 274 |
255 // Make sure just setting the data list values doesn't cause the popup to | 275 // Make sure just setting the data list values doesn't cause the popup to |
256 // appear. | 276 // appear. |
257 std::vector<base::string16> data_list_items; | 277 std::vector<base::string16> data_list_items; |
258 data_list_items.push_back(base::string16()); | 278 data_list_items.push_back(base::string16()); |
259 | 279 |
260 EXPECT_CALL( | 280 EXPECT_CALL( |
261 autofill_client_, | 281 autofill_client_, |
262 UpdateAutofillPopupDataListValues(data_list_items, data_list_items)); | 282 UpdateAutofillPopupDataListValues(data_list_items, data_list_items)); |
263 | 283 |
264 external_delegate_->SetCurrentDataListValues(data_list_items, | 284 external_delegate_->SetCurrentDataListValues(data_list_items, |
265 data_list_items); | 285 data_list_items); |
266 | 286 |
267 // The enums must be cast to ints to prevent compile errors on linux_rel. | 287 // The enums must be cast to ints to prevent compile errors on linux_rel. |
268 EXPECT_CALL( | 288 EXPECT_CALL( |
269 autofill_client_, | 289 autofill_client_, |
270 ShowAutofillPopup(_, | 290 ShowAutofillPopup(_, |
271 _, | 291 _, |
272 _, | 292 SuggestionVectorIdsAre(testing::ElementsAre( |
273 _, | |
274 _, | |
275 testing::ElementsAre( | |
276 static_cast<int>(POPUP_ITEM_ID_DATALIST_ENTRY), | 293 static_cast<int>(POPUP_ITEM_ID_DATALIST_ENTRY), |
277 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), | 294 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), |
278 kAutofillProfileId, | 295 kAutofillProfileId, |
279 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), | 296 static_cast<int>(POPUP_ITEM_ID_SEPARATOR), |
280 static_cast<int>(POPUP_ITEM_ID_AUTOFILL_OPTIONS)), | 297 static_cast<int>(POPUP_ITEM_ID_AUTOFILL_OPTIONS))), |
281 _)); | 298 _)); |
282 | 299 |
283 // Ensure the popup is displayed. | 300 // Ensure the popup is displayed. |
284 std::vector<base::string16> autofill_item; | 301 std::vector<Suggestion> autofill_item; |
285 autofill_item.push_back(base::string16()); | 302 autofill_item.push_back(Suggestion()); |
286 std::vector<int> autofill_ids; | 303 autofill_item[0].frontend_id = kAutofillProfileId; |
287 autofill_ids.push_back(kAutofillProfileId); | 304 external_delegate_->OnSuggestionsReturned(kQueryId, autofill_item); |
288 external_delegate_->OnSuggestionsReturned(kQueryId, | |
289 autofill_item, | |
290 autofill_item, | |
291 autofill_item, | |
292 autofill_ids); | |
293 | 305 |
294 // This would normally get called from ShowAutofillPopup, but it is mocked so | 306 // This would normally get called from ShowAutofillPopup, but it is mocked so |
295 // we need to call OnPopupShown ourselves. | 307 // we need to call OnPopupShown ourselves. |
296 external_delegate_->OnPopupShown(); | 308 external_delegate_->OnPopupShown(); |
297 | 309 |
298 // Update the current data list and ensure the popup is updated. | 310 // Update the current data list and ensure the popup is updated. |
299 data_list_items.push_back(base::string16()); | 311 data_list_items.push_back(base::string16()); |
300 | 312 |
301 // The enums must be cast to ints to prevent compile errors on linux_rel. | 313 // The enums must be cast to ints to prevent compile errors on linux_rel. |
302 EXPECT_CALL( | 314 EXPECT_CALL( |
303 autofill_client_, | 315 autofill_client_, |
304 UpdateAutofillPopupDataListValues(data_list_items, data_list_items)); | 316 UpdateAutofillPopupDataListValues(data_list_items, data_list_items)); |
305 | 317 |
306 external_delegate_->SetCurrentDataListValues(data_list_items, | 318 external_delegate_->SetCurrentDataListValues(data_list_items, |
307 data_list_items); | 319 data_list_items); |
308 } | 320 } |
309 | 321 |
310 // Test that the Autofill popup is able to display warnings explaining why | 322 // Test that the Autofill popup is able to display warnings explaining why |
311 // Autofill is disabled for a website. | 323 // Autofill is disabled for a website. |
312 // Regression test for http://crbug.com/247880 | 324 // Regression test for http://crbug.com/247880 |
313 TEST_F(AutofillExternalDelegateUnitTest, AutofillWarnings) { | 325 TEST_F(AutofillExternalDelegateUnitTest, AutofillWarnings) { |
314 IssueOnQuery(kQueryId); | 326 IssueOnQuery(kQueryId); |
315 | 327 |
316 // The enums must be cast to ints to prevent compile errors on linux_rel. | 328 // The enums must be cast to ints to prevent compile errors on linux_rel. |
317 EXPECT_CALL( | 329 EXPECT_CALL( |
318 autofill_client_, | 330 autofill_client_, |
319 ShowAutofillPopup( | 331 ShowAutofillPopup( |
320 _, | 332 _, |
321 _, | 333 _, |
322 _, | 334 SuggestionVectorIdsAre(testing::ElementsAre( |
323 _, | 335 static_cast<int>(POPUP_ITEM_ID_WARNING_MESSAGE))), |
324 _, | |
325 testing::ElementsAre(static_cast<int>(POPUP_ITEM_ID_WARNING_MESSAGE)), | |
326 _)); | 336 _)); |
327 | 337 |
328 // This should call ShowAutofillPopup. | 338 // This should call ShowAutofillPopup. |
329 std::vector<base::string16> autofill_item; | 339 std::vector<Suggestion> autofill_item; |
330 autofill_item.push_back(base::string16()); | 340 autofill_item.push_back(Suggestion()); |
331 std::vector<int> autofill_ids; | 341 autofill_item[0].frontend_id = POPUP_ITEM_ID_WARNING_MESSAGE; |
332 autofill_ids.push_back(POPUP_ITEM_ID_WARNING_MESSAGE); | 342 external_delegate_->OnSuggestionsReturned(kQueryId, autofill_item); |
333 external_delegate_->OnSuggestionsReturned(kQueryId, | |
334 autofill_item, | |
335 autofill_item, | |
336 autofill_item, | |
337 autofill_ids); | |
338 } | 343 } |
339 | 344 |
340 // Test that the Autofill popup doesn't display a warning explaining why | 345 // Test that the Autofill popup doesn't display a warning explaining why |
341 // Autofill is disabled for a website when there are no Autofill suggestions. | 346 // Autofill is disabled for a website when there are no Autofill suggestions. |
342 // Regression test for http://crbug.com/105636 | 347 // Regression test for http://crbug.com/105636 |
343 TEST_F(AutofillExternalDelegateUnitTest, NoAutofillWarningsWithoutSuggestions) { | 348 TEST_F(AutofillExternalDelegateUnitTest, NoAutofillWarningsWithoutSuggestions) { |
344 // This test only makes sense if we're respecting autocomplete="off". | 349 // This test only makes sense if we're respecting autocomplete="off". |
345 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( | 350 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
346 switches::kRespectAutocompleteOffForAutofill)) | 351 switches::kRespectAutocompleteOffForAutofill)) |
347 return; | 352 return; |
348 | 353 |
349 const FormData form; | 354 const FormData form; |
350 FormFieldData field; | 355 FormFieldData field; |
351 field.is_focusable = true; | 356 field.is_focusable = true; |
352 field.should_autocomplete = false; | 357 field.should_autocomplete = false; |
353 const gfx::RectF element_bounds; | 358 const gfx::RectF element_bounds; |
354 | 359 |
355 external_delegate_->OnQuery(kQueryId, form, field, element_bounds, true); | 360 external_delegate_->OnQuery(kQueryId, form, field, element_bounds, true); |
356 | 361 |
357 EXPECT_CALL(autofill_client_, ShowAutofillPopup(_, _, _, _, _, _, _)) | 362 EXPECT_CALL(autofill_client_, ShowAutofillPopup(_, _, _, _)) |
358 .Times(0); | 363 .Times(0); |
359 EXPECT_CALL(autofill_client_, HideAutofillPopup()).Times(1); | 364 EXPECT_CALL(autofill_client_, HideAutofillPopup()).Times(1); |
360 | 365 |
361 // This should not call ShowAutofillPopup. | 366 // This should not call ShowAutofillPopup. |
362 std::vector<base::string16> autofill_item; | 367 std::vector<Suggestion> autofill_item; |
363 autofill_item.push_back(base::string16()); | 368 autofill_item.push_back(Suggestion()); |
364 std::vector<int> autofill_ids; | 369 autofill_item[0].frontend_id = POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY; |
365 autofill_ids.push_back(POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY); | 370 external_delegate_->OnSuggestionsReturned(kQueryId, autofill_item); |
366 external_delegate_->OnSuggestionsReturned(kQueryId, | |
367 autofill_item, | |
368 autofill_item, | |
369 autofill_item, | |
370 autofill_ids); | |
371 } | 371 } |
372 | 372 |
373 // Test that the Autofill delegate doesn't try and fill a form with a | 373 // Test that the Autofill delegate doesn't try and fill a form with a |
374 // negative unique id. | 374 // negative unique id. |
375 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateInvalidUniqueId) { | 375 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateInvalidUniqueId) { |
376 // Ensure it doesn't try to preview the negative id. | 376 // Ensure it doesn't try to preview the negative id. |
377 EXPECT_CALL(*autofill_manager_, FillOrPreviewForm(_, _, _, _, _)).Times(0); | 377 EXPECT_CALL(*autofill_manager_, FillOrPreviewForm(_, _, _, _, _)).Times(0); |
378 EXPECT_CALL(*autofill_driver_, RendererShouldClearPreviewedForm()).Times(1); | 378 EXPECT_CALL(*autofill_driver_, RendererShouldClearPreviewedForm()).Times(1); |
379 external_delegate_->DidSelectSuggestion(base::string16(), -1); | 379 external_delegate_->DidSelectSuggestion(base::string16(), -1); |
380 | 380 |
(...skipping 22 matching lines...) Expand all Loading... |
403 EXPECT_CALL(*autofill_driver_, RendererShouldClearPreviewedForm()).Times(1); | 403 EXPECT_CALL(*autofill_driver_, RendererShouldClearPreviewedForm()).Times(1); |
404 EXPECT_CALL(*autofill_driver_, RendererShouldPreviewFieldWithValue( | 404 EXPECT_CALL(*autofill_driver_, RendererShouldPreviewFieldWithValue( |
405 ASCIIToUTF16("baz foo"))); | 405 ASCIIToUTF16("baz foo"))); |
406 external_delegate_->DidSelectSuggestion(ASCIIToUTF16("baz foo"), | 406 external_delegate_->DidSelectSuggestion(ASCIIToUTF16("baz foo"), |
407 POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY); | 407 POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY); |
408 } | 408 } |
409 | 409 |
410 // Test that the popup is hidden once we are done editing the autofill field. | 410 // Test that the popup is hidden once we are done editing the autofill field. |
411 TEST_F(AutofillExternalDelegateUnitTest, | 411 TEST_F(AutofillExternalDelegateUnitTest, |
412 ExternalDelegateHidePopupAfterEditing) { | 412 ExternalDelegateHidePopupAfterEditing) { |
413 EXPECT_CALL(autofill_client_, ShowAutofillPopup(_, _, _, _, _, _, _)); | 413 EXPECT_CALL(autofill_client_, ShowAutofillPopup(_, _, _, _)); |
414 autofill::GenerateTestAutofillPopup(external_delegate_.get()); | 414 autofill::GenerateTestAutofillPopup(external_delegate_.get()); |
415 | 415 |
416 EXPECT_CALL(autofill_client_, HideAutofillPopup()); | 416 EXPECT_CALL(autofill_client_, HideAutofillPopup()); |
417 external_delegate_->DidEndTextFieldEditing(); | 417 external_delegate_->DidEndTextFieldEditing(); |
418 } | 418 } |
419 | 419 |
420 // Test that the driver is directed to accept the data list after being notified | 420 // Test that the driver is directed to accept the data list after being notified |
421 // that the user accepted the data list suggestion. | 421 // that the user accepted the data list suggestion. |
422 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateAcceptSuggestion) { | 422 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateAcceptSuggestion) { |
423 EXPECT_CALL(autofill_client_, HideAutofillPopup()); | 423 EXPECT_CALL(autofill_client_, HideAutofillPopup()); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
467 | 467 |
468 // Set up a field that shouldn't get autocompleted or display warnings. | 468 // Set up a field that shouldn't get autocompleted or display warnings. |
469 const FormData form; | 469 const FormData form; |
470 FormFieldData field; | 470 FormFieldData field; |
471 field.is_focusable = true; | 471 field.is_focusable = true; |
472 field.should_autocomplete = false; | 472 field.should_autocomplete = false; |
473 const gfx::RectF element_bounds; | 473 const gfx::RectF element_bounds; |
474 | 474 |
475 external_delegate_->OnQuery(kQueryId, form, field, element_bounds, false); | 475 external_delegate_->OnQuery(kQueryId, form, field, element_bounds, false); |
476 | 476 |
477 std::vector<base::string16> autofill_items; | 477 std::vector<Suggestion> autofill_items; |
478 autofill_items.push_back(base::string16()); | 478 autofill_items.push_back(Suggestion()); |
479 std::vector<int> autofill_ids; | 479 autofill_items[0].frontend_id = POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY; |
480 autofill_ids.push_back(POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY); | |
481 | 480 |
482 // Ensure the popup tries to hide itself, since it is not allowed to show | 481 // Ensure the popup tries to hide itself, since it is not allowed to show |
483 // anything. | 482 // anything. |
484 EXPECT_CALL(autofill_client_, HideAutofillPopup()); | 483 EXPECT_CALL(autofill_client_, HideAutofillPopup()); |
485 | 484 |
486 external_delegate_->OnSuggestionsReturned(kQueryId, | 485 external_delegate_->OnSuggestionsReturned(kQueryId, autofill_items); |
487 autofill_items, | |
488 autofill_items, | |
489 autofill_items, | |
490 autofill_ids); | |
491 } | 486 } |
492 | 487 |
493 TEST_F(AutofillExternalDelegateUnitTest, IgnoreAutocompleteOffForAutofill) { | 488 TEST_F(AutofillExternalDelegateUnitTest, IgnoreAutocompleteOffForAutofill) { |
494 const FormData form; | 489 const FormData form; |
495 FormFieldData field; | 490 FormFieldData field; |
496 field.is_focusable = true; | 491 field.is_focusable = true; |
497 field.should_autocomplete = false; | 492 field.should_autocomplete = false; |
498 const gfx::RectF element_bounds; | 493 const gfx::RectF element_bounds; |
499 | 494 |
500 external_delegate_->OnQuery(kQueryId, form, field, element_bounds, false); | 495 external_delegate_->OnQuery(kQueryId, form, field, element_bounds, false); |
501 | 496 |
502 std::vector<base::string16> autofill_items; | 497 std::vector<Suggestion> autofill_items; |
503 autofill_items.push_back(base::string16()); | 498 autofill_items.push_back(Suggestion()); |
504 std::vector<int> autofill_ids; | 499 autofill_items[0].frontend_id = POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY; |
505 autofill_ids.push_back(POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY); | |
506 | 500 |
507 // Ensure the popup tries to show itself, despite autocomplete="off". | 501 // Ensure the popup tries to show itself, despite autocomplete="off". |
508 EXPECT_CALL(autofill_client_, ShowAutofillPopup(_, _, _, _, _, _, _)); | 502 EXPECT_CALL(autofill_client_, ShowAutofillPopup(_, _, _, _)); |
509 EXPECT_CALL(autofill_client_, HideAutofillPopup()).Times(0); | 503 EXPECT_CALL(autofill_client_, HideAutofillPopup()).Times(0); |
510 | 504 |
511 external_delegate_->OnSuggestionsReturned(kQueryId, | 505 external_delegate_->OnSuggestionsReturned(kQueryId, autofill_items); |
512 autofill_items, | |
513 autofill_items, | |
514 autofill_items, | |
515 autofill_ids); | |
516 } | 506 } |
517 | 507 |
518 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateFillFieldWithValue) { | 508 TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateFillFieldWithValue) { |
519 EXPECT_CALL(autofill_client_, HideAutofillPopup()); | 509 EXPECT_CALL(autofill_client_, HideAutofillPopup()); |
520 base::string16 dummy_string(ASCIIToUTF16("baz foo")); | 510 base::string16 dummy_string(ASCIIToUTF16("baz foo")); |
521 EXPECT_CALL(*autofill_driver_, | 511 EXPECT_CALL(*autofill_driver_, |
522 RendererShouldFillFieldWithValue(dummy_string)); | 512 RendererShouldFillFieldWithValue(dummy_string)); |
523 external_delegate_->DidAcceptSuggestion(dummy_string, | 513 external_delegate_->DidAcceptSuggestion(dummy_string, |
524 POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY); | 514 POPUP_ITEM_ID_AUTOCOMPLETE_ENTRY); |
525 } | 515 } |
526 | 516 |
527 } // namespace autofill | 517 } // namespace autofill |
OLD | NEW |