OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/strings/string_util.h" | 5 #include "base/strings/string_util.h" |
6 #include "base/strings/utf_string_conversions.h" | 6 #include "base/strings/utf_string_conversions.h" |
7 #include "chrome/test/base/chrome_render_view_test.h" | 7 #include "chrome/test/base/chrome_render_view_test.h" |
8 #include "components/autofill/content/common/autofill_messages.h" | 8 #include "components/autofill/content/common/autofill_messages.h" |
9 #include "components/autofill/content/renderer/autofill_agent.h" | 9 #include "components/autofill/content/renderer/autofill_agent.h" |
10 #include "components/autofill/content/renderer/form_autofill_util.h" | 10 #include "components/autofill/content/renderer/form_autofill_util.h" |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 public: | 170 public: |
171 PasswordAutofillAgentTest() { | 171 PasswordAutofillAgentTest() { |
172 } | 172 } |
173 | 173 |
174 // Simulates the fill password form message being sent to the renderer. | 174 // Simulates the fill password form message being sent to the renderer. |
175 // We use that so we don't have to make RenderView::OnFillPasswordForm() | 175 // We use that so we don't have to make RenderView::OnFillPasswordForm() |
176 // protected. | 176 // protected. |
177 void SimulateOnFillPasswordForm( | 177 void SimulateOnFillPasswordForm( |
178 const PasswordFormFillData& fill_data) { | 178 const PasswordFormFillData& fill_data) { |
179 AutofillMsg_FillPasswordForm msg(0, fill_data); | 179 AutofillMsg_FillPasswordForm msg(0, fill_data); |
180 password_autofill_->OnMessageReceived(msg); | 180 static_cast<content::RenderViewObserver*>(password_autofill_agent_) |
| 181 ->OnMessageReceived(msg); |
181 } | 182 } |
182 | 183 |
183 void SendVisiblePasswordForms() { | 184 void SendVisiblePasswordForms() { |
184 password_autofill_->SendPasswordForms(GetMainFrame(), | 185 static_cast<content::RenderViewObserver*>(password_autofill_agent_) |
185 true /* only_visible */); | 186 ->DidFinishLoad(GetMainFrame()); |
186 } | 187 } |
187 | 188 |
188 virtual void SetUp() { | 189 virtual void SetUp() { |
189 ChromeRenderViewTest::SetUp(); | 190 ChromeRenderViewTest::SetUp(); |
190 | 191 |
191 // Add a preferred login and an additional login to the FillData. | 192 // Add a preferred login and an additional login to the FillData. |
192 username1_ = ASCIIToUTF16(kAliceUsername); | 193 username1_ = ASCIIToUTF16(kAliceUsername); |
193 password1_ = ASCIIToUTF16(kAlicePassword); | 194 password1_ = ASCIIToUTF16(kAlicePassword); |
194 username2_ = ASCIIToUTF16(kBobUsername); | 195 username2_ = ASCIIToUTF16(kBobUsername); |
195 password2_ = ASCIIToUTF16(kBobPassword); | 196 password2_ = ASCIIToUTF16(kBobPassword); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 } | 256 } |
256 | 257 |
257 void ClearUsernameAndPasswordFields() { | 258 void ClearUsernameAndPasswordFields() { |
258 username_element_.setValue(""); | 259 username_element_.setValue(""); |
259 username_element_.setAutofilled(false); | 260 username_element_.setAutofilled(false); |
260 password_element_.setValue(""); | 261 password_element_.setValue(""); |
261 password_element_.setAutofilled(false); | 262 password_element_.setAutofilled(false); |
262 } | 263 } |
263 | 264 |
264 void SimulateDidEndEditing(WebFrame* input_frame, WebInputElement& input) { | 265 void SimulateDidEndEditing(WebFrame* input_frame, WebInputElement& input) { |
265 autofill_agent_->textFieldDidEndEditing(input); | 266 static_cast<blink::WebAutofillClient*>(autofill_agent_) |
| 267 ->textFieldDidEndEditing(input); |
266 } | 268 } |
267 | 269 |
268 void SimulateInputChangeForElement(const std::string& new_value, | 270 void SimulateInputChangeForElement(const std::string& new_value, |
269 bool move_caret_to_end, | 271 bool move_caret_to_end, |
270 WebFrame* input_frame, | 272 WebFrame* input_frame, |
271 WebInputElement& input, | 273 WebInputElement& input, |
272 bool is_user_input) { | 274 bool is_user_input) { |
273 input.setValue(WebString::fromUTF8(new_value), is_user_input); | 275 input.setValue(WebString::fromUTF8(new_value), is_user_input); |
274 // The field must have focus or AutofillAgent will think the | 276 // The field must have focus or AutofillAgent will think the |
275 // change should be ignored. | 277 // change should be ignored. |
276 while (!input.focused()) | 278 while (!input.focused()) |
277 input_frame->document().frame()->view()->advanceFocus(false); | 279 input_frame->document().frame()->view()->advanceFocus(false); |
278 if (move_caret_to_end) | 280 if (move_caret_to_end) |
279 input.setSelectionRange(new_value.length(), new_value.length()); | 281 input.setSelectionRange(new_value.length(), new_value.length()); |
280 if (is_user_input) | 282 if (is_user_input) |
281 password_autofill_agent()->FirstUserGestureObserved(); | 283 password_autofill_agent_->FirstUserGestureObserved(); |
282 autofill_agent_->textFieldDidChange(input); | 284 static_cast<blink::WebAutofillClient*>(autofill_agent_) |
| 285 ->textFieldDidChange(input); |
283 // Processing is delayed because of a Blink bug: | 286 // Processing is delayed because of a Blink bug: |
284 // https://bugs.webkit.org/show_bug.cgi?id=16976 | 287 // https://bugs.webkit.org/show_bug.cgi?id=16976 |
285 // See PasswordAutofillAgent::TextDidChangeInTextField() for details. | 288 // See PasswordAutofillAgent::TextDidChangeInTextField() for details. |
286 | 289 |
287 // Autocomplete will trigger a style recalculation when we put up the next | 290 // Autocomplete will trigger a style recalculation when we put up the next |
288 // frame, but we don't want to wait that long. Instead, trigger a style | 291 // frame, but we don't want to wait that long. Instead, trigger a style |
289 // recalcuation manually after TextFieldDidChangeImpl runs. | 292 // recalcuation manually after TextFieldDidChangeImpl runs. |
290 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind( | 293 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind( |
291 &PasswordAutofillAgentTest::LayoutMainFrame, base::Unretained(this))); | 294 &PasswordAutofillAgentTest::LayoutMainFrame, base::Unretained(this))); |
292 | 295 |
293 base::MessageLoop::current()->RunUntilIdle(); | 296 base::MessageLoop::current()->RunUntilIdle(); |
294 } | 297 } |
295 | 298 |
296 void SimulateSuggestionChoice(WebInputElement& username_input) { | 299 void SimulateSuggestionChoice(WebInputElement& username_input) { |
297 blink::WebString blink_username = | 300 base::string16 username(base::ASCIIToUTF16(kAliceUsername)); |
298 blink::WebString::fromUTF8(kAliceUsername); | 301 base::string16 password(base::ASCIIToUTF16(kAlicePassword)); |
299 blink::WebString blink_password = | |
300 blink::WebString::fromUTF8(kAlicePassword); | |
301 | 302 |
302 // This call is necessary to setup the autofill agent appropriate for the | 303 // This call is necessary to setup the autofill agent appropriate for the |
303 // user selection; simulates the menu actually popping up. | 304 // user selection; simulates the menu actually popping up. |
304 render_thread_->sink().ClearMessages(); | 305 render_thread_->sink().ClearMessages(); |
305 autofill_agent_->FormControlElementClicked(username_input, false); | 306 static_cast<autofill::PageClickListener*>(autofill_agent_) |
| 307 ->FormControlElementClicked(username_input, false); |
306 | 308 |
307 autofill_agent_->OnFillPasswordSuggestion(blink_username, blink_password); | 309 AutofillMsg_FillPasswordSuggestion msg(0, username, password); |
| 310 static_cast<content::RenderViewObserver*>(autofill_agent_) |
| 311 ->OnMessageReceived(msg); |
308 } | 312 } |
309 | 313 |
310 void LayoutMainFrame() { | 314 void LayoutMainFrame() { |
311 GetMainFrame()->view()->layout(); | 315 GetMainFrame()->view()->layout(); |
312 } | 316 } |
313 | 317 |
314 void SimulateUsernameChange(const std::string& username, | 318 void SimulateUsernameChange(const std::string& username, |
315 bool move_caret_to_end, | 319 bool move_caret_to_end, |
316 bool is_user_input = false) { | 320 bool is_user_input = false) { |
317 SimulateInputChangeForElement(username, | 321 SimulateInputChangeForElement(username, |
(...skipping 20 matching lines...) Expand all Loading... |
338 // sent to the browser on acceptance, and the DCHECK isn't hit (and nothing | 342 // sent to the browser on acceptance, and the DCHECK isn't hit (and nothing |
339 // is filled). | 343 // is filled). |
340 // | 344 // |
341 // These tests only make sense in the context of not ignoring | 345 // These tests only make sense in the context of not ignoring |
342 // autocomplete='off', so only test them if the disable autocomplete='off' | 346 // autocomplete='off', so only test them if the disable autocomplete='off' |
343 // flag is not enabled. | 347 // flag is not enabled. |
344 // TODO(jww): Remove this function and callers once autocomplete='off' is | 348 // TODO(jww): Remove this function and callers once autocomplete='off' is |
345 // permanently ignored. | 349 // permanently ignored. |
346 if (!ShouldIgnoreAutocompleteOffForPasswordFields()) { | 350 if (!ShouldIgnoreAutocompleteOffForPasswordFields()) { |
347 EXPECT_TRUE( | 351 EXPECT_TRUE( |
348 password_autofill_agent()->ShowSuggestions(username_element_, false)); | 352 password_autofill_agent_->ShowSuggestions(username_element_, false)); |
349 | 353 |
350 EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching( | 354 EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching( |
351 AutofillHostMsg_ShowPasswordSuggestions::ID)); | 355 AutofillHostMsg_ShowPasswordSuggestions::ID)); |
352 } | 356 } |
353 } | 357 } |
354 | 358 |
355 void SimulateKeyDownEvent(const WebInputElement& element, | 359 void SimulateKeyDownEvent(const WebInputElement& element, |
356 ui::KeyboardCode key_code) { | 360 ui::KeyboardCode key_code) { |
357 blink::WebKeyboardEvent key_event; | 361 blink::WebKeyboardEvent key_event; |
358 key_event.windowsKeyCode = key_code; | 362 key_event.windowsKeyCode = key_code; |
359 autofill_agent_->textFieldDidReceiveKeyDown(element, key_event); | 363 static_cast<blink::WebAutofillClient*>(autofill_agent_) |
| 364 ->textFieldDidReceiveKeyDown(element, key_event); |
360 } | 365 } |
361 | 366 |
362 void CheckTextFieldsStateForElements(const WebInputElement& username_element, | 367 void CheckTextFieldsStateForElements(const WebInputElement& username_element, |
363 const std::string& username, | 368 const std::string& username, |
364 bool username_autofilled, | 369 bool username_autofilled, |
365 const WebInputElement& password_element, | 370 const WebInputElement& password_element, |
366 const std::string& password, | 371 const std::string& password, |
367 bool password_autofilled, | 372 bool password_autofilled, |
368 bool checkSuggestedValue) { | 373 bool checkSuggestedValue) { |
369 EXPECT_EQ(username, | 374 EXPECT_EQ(username, |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 EXPECT_TRUE(it != usernames.end()); | 455 EXPECT_TRUE(it != usernames.end()); |
451 if (it != usernames.end()) | 456 if (it != usernames.end()) |
452 usernames.erase(it); | 457 usernames.erase(it); |
453 } | 458 } |
454 | 459 |
455 EXPECT_TRUE(usernames.empty()); | 460 EXPECT_TRUE(usernames.empty()); |
456 | 461 |
457 render_thread_->sink().ClearMessages(); | 462 render_thread_->sink().ClearMessages(); |
458 } | 463 } |
459 | 464 |
460 PasswordAutofillAgent* password_autofill_agent() { | |
461 return autofill_agent_->password_autofill_agent_; | |
462 } | |
463 | |
464 void ExpectFormSubmittedWithPasswords(const std::string& password_value, | 465 void ExpectFormSubmittedWithPasswords(const std::string& password_value, |
465 const std::string& new_password_value) { | 466 const std::string& new_password_value) { |
466 const IPC::Message* message = | 467 const IPC::Message* message = |
467 render_thread_->sink().GetFirstMessageMatching( | 468 render_thread_->sink().GetFirstMessageMatching( |
468 AutofillHostMsg_PasswordFormSubmitted::ID); | 469 AutofillHostMsg_PasswordFormSubmitted::ID); |
469 ASSERT_TRUE(message); | 470 ASSERT_TRUE(message); |
470 Tuple1<autofill::PasswordForm> args; | 471 Tuple1<autofill::PasswordForm> args; |
471 AutofillHostMsg_PasswordFormSubmitted::Read(message, &args); | 472 AutofillHostMsg_PasswordFormSubmitted::Read(message, &args); |
472 EXPECT_EQ(ASCIIToUTF16(password_value), args.a.password_value); | 473 EXPECT_EQ(ASCIIToUTF16(password_value), args.a.password_value); |
473 EXPECT_EQ(ASCIIToUTF16(new_password_value), args.a.new_password_value); | 474 EXPECT_EQ(ASCIIToUTF16(new_password_value), args.a.new_password_value); |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
718 SimulateUsernameChange("a", true); | 719 SimulateUsernameChange("a", true); |
719 CheckTextFieldsState("a", false, std::string(), false); | 720 CheckTextFieldsState("a", false, std::string(), false); |
720 SimulateUsernameChange("al", true); | 721 SimulateUsernameChange("al", true); |
721 CheckTextFieldsState("al", false, std::string(), false); | 722 CheckTextFieldsState("al", false, std::string(), false); |
722 SimulateUsernameChange(kAliceUsername, true); | 723 SimulateUsernameChange(kAliceUsername, true); |
723 CheckTextFieldsState(kAliceUsername, false, std::string(), false); | 724 CheckTextFieldsState(kAliceUsername, false, std::string(), false); |
724 | 725 |
725 // Autocomplete should happen only when the username textfield is blurred with | 726 // Autocomplete should happen only when the username textfield is blurred with |
726 // a full match. | 727 // a full match. |
727 username_element_.setValue("a"); | 728 username_element_.setValue("a"); |
728 autofill_agent_->textFieldDidEndEditing(username_element_); | 729 static_cast<blink::WebAutofillClient*>(autofill_agent_) |
| 730 ->textFieldDidEndEditing(username_element_); |
729 CheckTextFieldsState("a", false, std::string(), false); | 731 CheckTextFieldsState("a", false, std::string(), false); |
730 username_element_.setValue("al"); | 732 username_element_.setValue("al"); |
731 autofill_agent_->textFieldDidEndEditing(username_element_); | 733 static_cast<blink::WebAutofillClient*>(autofill_agent_) |
| 734 ->textFieldDidEndEditing(username_element_); |
732 CheckTextFieldsState("al", false, std::string(), false); | 735 CheckTextFieldsState("al", false, std::string(), false); |
733 username_element_.setValue("alices"); | 736 username_element_.setValue("alices"); |
734 autofill_agent_->textFieldDidEndEditing(username_element_); | 737 static_cast<blink::WebAutofillClient*>(autofill_agent_) |
| 738 ->textFieldDidEndEditing(username_element_); |
735 CheckTextFieldsState("alices", false, std::string(), false); | 739 CheckTextFieldsState("alices", false, std::string(), false); |
736 username_element_.setValue(ASCIIToUTF16(kAliceUsername)); | 740 username_element_.setValue(ASCIIToUTF16(kAliceUsername)); |
737 autofill_agent_->textFieldDidEndEditing(username_element_); | 741 static_cast<blink::WebAutofillClient*>(autofill_agent_) |
| 742 ->textFieldDidEndEditing(username_element_); |
738 CheckTextFieldsState(kAliceUsername, true, kAlicePassword, true); | 743 CheckTextFieldsState(kAliceUsername, true, kAlicePassword, true); |
739 } | 744 } |
740 | 745 |
741 // Tests that inline autocompletion works properly. | 746 // Tests that inline autocompletion works properly. |
742 TEST_F(PasswordAutofillAgentTest, InlineAutocomplete) { | 747 TEST_F(PasswordAutofillAgentTest, InlineAutocomplete) { |
743 // Simulate the browser sending back the login info. | 748 // Simulate the browser sending back the login info. |
744 SimulateOnFillPasswordForm(fill_data_); | 749 SimulateOnFillPasswordForm(fill_data_); |
745 | 750 |
746 ClearUsernameAndPasswordFields(); | 751 ClearUsernameAndPasswordFields(); |
747 | 752 |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
998 | 1003 |
999 // Regression test for http://crbug.com/326679 | 1004 // Regression test for http://crbug.com/326679 |
1000 TEST_F(PasswordAutofillAgentTest, SelectUsernameWithPasswordAutofillOff) { | 1005 TEST_F(PasswordAutofillAgentTest, SelectUsernameWithPasswordAutofillOff) { |
1001 // Simulate the browser sending back the login info. | 1006 // Simulate the browser sending back the login info. |
1002 SimulateOnFillPasswordForm(fill_data_); | 1007 SimulateOnFillPasswordForm(fill_data_); |
1003 | 1008 |
1004 // Set the main password element to autocomplete='off' | 1009 // Set the main password element to autocomplete='off' |
1005 password_element_.setAttribute(WebString::fromUTF8("autocomplete"), | 1010 password_element_.setAttribute(WebString::fromUTF8("autocomplete"), |
1006 WebString::fromUTF8("off")); | 1011 WebString::fromUTF8("off")); |
1007 | 1012 |
1008 // Simulate the user changing the username to some known username. | 1013 // Simulate the user changing the username to some known username. |
1009 SimulateUsernameChange(kAliceUsername, true); | 1014 SimulateUsernameChange(kAliceUsername, true); |
1010 | 1015 |
1011 ExpectNoSuggestionsPopup(); | 1016 ExpectNoSuggestionsPopup(); |
1012 } | 1017 } |
1013 | 1018 |
1014 // Regression test for http://crbug.com/326679 | 1019 // Regression test for http://crbug.com/326679 |
1015 TEST_F(PasswordAutofillAgentTest, | 1020 TEST_F(PasswordAutofillAgentTest, |
1016 SelectUnknownUsernameWithPasswordAutofillOff) { | 1021 SelectUnknownUsernameWithPasswordAutofillOff) { |
1017 // Simulate the browser sending back the login info. | 1022 // Simulate the browser sending back the login info. |
1018 SimulateOnFillPasswordForm(fill_data_); | 1023 SimulateOnFillPasswordForm(fill_data_); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1125 // Simulate the browser sending the login info, but set |wait_for_username| | 1130 // Simulate the browser sending the login info, but set |wait_for_username| |
1126 // to prevent the form from being immediately filled. | 1131 // to prevent the form from being immediately filled. |
1127 fill_data_.wait_for_username = true; | 1132 fill_data_.wait_for_username = true; |
1128 SimulateOnFillPasswordForm(fill_data_); | 1133 SimulateOnFillPasswordForm(fill_data_); |
1129 | 1134 |
1130 // Neither field should have been autocompleted. | 1135 // Neither field should have been autocompleted. |
1131 CheckTextFieldsDOMState(std::string(), false, std::string(), false); | 1136 CheckTextFieldsDOMState(std::string(), false, std::string(), false); |
1132 | 1137 |
1133 // If the password field is not autocompletable, it should not be affected. | 1138 // If the password field is not autocompletable, it should not be affected. |
1134 SetElementReadOnly(password_element_, true); | 1139 SetElementReadOnly(password_element_, true); |
1135 EXPECT_FALSE(password_autofill_->FillSuggestion( | 1140 EXPECT_FALSE(password_autofill_agent_->FillSuggestion( |
1136 username_element_, kAliceUsername, kAlicePassword)); | 1141 username_element_, kAliceUsername, kAlicePassword)); |
1137 CheckTextFieldsDOMState(std::string(), false, std::string(), false); | 1142 CheckTextFieldsDOMState(std::string(), false, std::string(), false); |
1138 SetElementReadOnly(password_element_, false); | 1143 SetElementReadOnly(password_element_, false); |
1139 | 1144 |
1140 // After filling with the suggestion, both fields should be autocompleted. | 1145 // After filling with the suggestion, both fields should be autocompleted. |
1141 EXPECT_TRUE(password_autofill_->FillSuggestion( | 1146 EXPECT_TRUE(password_autofill_agent_->FillSuggestion( |
1142 username_element_, kAliceUsername, kAlicePassword)); | 1147 username_element_, kAliceUsername, kAlicePassword)); |
1143 CheckTextFieldsDOMState(kAliceUsername, true, kAlicePassword, true); | 1148 CheckTextFieldsDOMState(kAliceUsername, true, kAlicePassword, true); |
1144 int username_length = strlen(kAliceUsername); | 1149 int username_length = strlen(kAliceUsername); |
1145 CheckUsernameSelection(username_length, username_length); | 1150 CheckUsernameSelection(username_length, username_length); |
1146 | 1151 |
1147 // Try Filling with a suggestion with password different from the one that was | 1152 // Try Filling with a suggestion with password different from the one that was |
1148 // initially sent to the renderer. | 1153 // initially sent to the renderer. |
1149 EXPECT_TRUE(password_autofill_->FillSuggestion( | 1154 EXPECT_TRUE(password_autofill_agent_->FillSuggestion( |
1150 username_element_, kBobUsername, kCarolPassword)); | 1155 username_element_, kBobUsername, kCarolPassword)); |
1151 CheckTextFieldsDOMState(kBobUsername, true, kCarolPassword, true); | 1156 CheckTextFieldsDOMState(kBobUsername, true, kCarolPassword, true); |
1152 username_length = strlen(kBobUsername); | 1157 username_length = strlen(kBobUsername); |
1153 CheckUsernameSelection(username_length, username_length); | 1158 CheckUsernameSelection(username_length, username_length); |
1154 } | 1159 } |
1155 | 1160 |
1156 // Tests that |PreviewSuggestion| properly previews the username and password. | 1161 // Tests that |PreviewSuggestion| properly previews the username and password. |
1157 TEST_F(PasswordAutofillAgentTest, PreviewSuggestion) { | 1162 TEST_F(PasswordAutofillAgentTest, PreviewSuggestion) { |
1158 // Simulate the browser sending the login info, but set |wait_for_username| | 1163 // Simulate the browser sending the login info, but set |wait_for_username| |
1159 // to prevent the form from being immediately filled. | 1164 // to prevent the form from being immediately filled. |
1160 fill_data_.wait_for_username = true; | 1165 fill_data_.wait_for_username = true; |
1161 SimulateOnFillPasswordForm(fill_data_); | 1166 SimulateOnFillPasswordForm(fill_data_); |
1162 | 1167 |
1163 // Neither field should have been autocompleted. | 1168 // Neither field should have been autocompleted. |
1164 CheckTextFieldsDOMState(std::string(), false, std::string(), false); | 1169 CheckTextFieldsDOMState(std::string(), false, std::string(), false); |
1165 | 1170 |
1166 // If the password field is not autocompletable, it should not be affected. | 1171 // If the password field is not autocompletable, it should not be affected. |
1167 SetElementReadOnly(password_element_, true); | 1172 SetElementReadOnly(password_element_, true); |
1168 EXPECT_FALSE(password_autofill_->PreviewSuggestion( | 1173 EXPECT_FALSE(password_autofill_agent_->PreviewSuggestion( |
1169 username_element_, kAliceUsername, kAlicePassword)); | 1174 username_element_, kAliceUsername, kAlicePassword)); |
1170 EXPECT_EQ(std::string(), username_element_.suggestedValue().utf8()); | 1175 EXPECT_EQ(std::string(), username_element_.suggestedValue().utf8()); |
1171 EXPECT_FALSE(username_element_.isAutofilled()); | 1176 EXPECT_FALSE(username_element_.isAutofilled()); |
1172 EXPECT_EQ(std::string(), password_element_.suggestedValue().utf8()); | 1177 EXPECT_EQ(std::string(), password_element_.suggestedValue().utf8()); |
1173 EXPECT_FALSE(password_element_.isAutofilled()); | 1178 EXPECT_FALSE(password_element_.isAutofilled()); |
1174 SetElementReadOnly(password_element_, false); | 1179 SetElementReadOnly(password_element_, false); |
1175 | 1180 |
1176 // After selecting the suggestion, both fields should be previewed | 1181 // After selecting the suggestion, both fields should be previewed |
1177 // with suggested values. | 1182 // with suggested values. |
1178 EXPECT_TRUE(password_autofill_->PreviewSuggestion( | 1183 EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion( |
1179 username_element_, kAliceUsername, kAlicePassword)); | 1184 username_element_, kAliceUsername, kAlicePassword)); |
1180 EXPECT_EQ( | 1185 EXPECT_EQ( |
1181 kAliceUsername, | 1186 kAliceUsername, |
1182 static_cast<std::string>(username_element_.suggestedValue().utf8())); | 1187 static_cast<std::string>(username_element_.suggestedValue().utf8())); |
1183 EXPECT_TRUE(username_element_.isAutofilled()); | 1188 EXPECT_TRUE(username_element_.isAutofilled()); |
1184 EXPECT_EQ( | 1189 EXPECT_EQ( |
1185 kAlicePassword, | 1190 kAlicePassword, |
1186 static_cast<std::string>(password_element_.suggestedValue().utf8())); | 1191 static_cast<std::string>(password_element_.suggestedValue().utf8())); |
1187 EXPECT_TRUE(password_element_.isAutofilled()); | 1192 EXPECT_TRUE(password_element_.isAutofilled()); |
1188 int username_length = strlen(kAliceUsername); | 1193 int username_length = strlen(kAliceUsername); |
1189 CheckUsernameSelection(0, username_length); | 1194 CheckUsernameSelection(0, username_length); |
1190 | 1195 |
1191 // Try previewing with a password different from the one that was initially | 1196 // Try previewing with a password different from the one that was initially |
1192 // sent to the renderer. | 1197 // sent to the renderer. |
1193 EXPECT_TRUE(password_autofill_->PreviewSuggestion( | 1198 EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion( |
1194 username_element_, kBobUsername, kCarolPassword)); | 1199 username_element_, kBobUsername, kCarolPassword)); |
1195 EXPECT_EQ( | 1200 EXPECT_EQ( |
1196 kBobUsername, | 1201 kBobUsername, |
1197 static_cast<std::string>(username_element_.suggestedValue().utf8())); | 1202 static_cast<std::string>(username_element_.suggestedValue().utf8())); |
1198 EXPECT_TRUE(username_element_.isAutofilled()); | 1203 EXPECT_TRUE(username_element_.isAutofilled()); |
1199 EXPECT_EQ( | 1204 EXPECT_EQ( |
1200 kCarolPassword, | 1205 kCarolPassword, |
1201 static_cast<std::string>(password_element_.suggestedValue().utf8())); | 1206 static_cast<std::string>(password_element_.suggestedValue().utf8())); |
1202 EXPECT_TRUE(password_element_.isAutofilled()); | 1207 EXPECT_TRUE(password_element_.isAutofilled()); |
1203 username_length = strlen(kBobUsername); | 1208 username_length = strlen(kBobUsername); |
1204 CheckUsernameSelection(0, username_length); | 1209 CheckUsernameSelection(0, username_length); |
1205 } | 1210 } |
1206 | 1211 |
1207 // Tests that |PreviewSuggestion| properly sets the username selection range. | 1212 // Tests that |PreviewSuggestion| properly sets the username selection range. |
1208 TEST_F(PasswordAutofillAgentTest, PreviewSuggestionSelectionRange) { | 1213 TEST_F(PasswordAutofillAgentTest, PreviewSuggestionSelectionRange) { |
1209 username_element_.setValue(WebString::fromUTF8("ali")); | 1214 username_element_.setValue(WebString::fromUTF8("ali")); |
1210 username_element_.setSelectionRange(3, 3); | 1215 username_element_.setSelectionRange(3, 3); |
1211 username_element_.setAutofilled(true); | 1216 username_element_.setAutofilled(true); |
1212 | 1217 |
1213 CheckTextFieldsDOMState("ali", true, std::string(), false); | 1218 CheckTextFieldsDOMState("ali", true, std::string(), false); |
1214 | 1219 |
1215 // Simulate the browser sending the login info, but set |wait_for_username| | 1220 // Simulate the browser sending the login info, but set |wait_for_username| |
1216 // to prevent the form from being immediately filled. | 1221 // to prevent the form from being immediately filled. |
1217 fill_data_.wait_for_username = true; | 1222 fill_data_.wait_for_username = true; |
1218 SimulateOnFillPasswordForm(fill_data_); | 1223 SimulateOnFillPasswordForm(fill_data_); |
1219 | 1224 |
1220 EXPECT_TRUE(password_autofill_->PreviewSuggestion( | 1225 EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion( |
1221 username_element_, kAliceUsername, kAlicePassword)); | 1226 username_element_, kAliceUsername, kAlicePassword)); |
1222 EXPECT_EQ( | 1227 EXPECT_EQ( |
1223 kAliceUsername, | 1228 kAliceUsername, |
1224 static_cast<std::string>(username_element_.suggestedValue().utf8())); | 1229 static_cast<std::string>(username_element_.suggestedValue().utf8())); |
1225 EXPECT_TRUE(username_element_.isAutofilled()); | 1230 EXPECT_TRUE(username_element_.isAutofilled()); |
1226 EXPECT_EQ( | 1231 EXPECT_EQ( |
1227 kAlicePassword, | 1232 kAlicePassword, |
1228 static_cast<std::string>(password_element_.suggestedValue().utf8())); | 1233 static_cast<std::string>(password_element_.suggestedValue().utf8())); |
1229 EXPECT_TRUE(password_element_.isAutofilled()); | 1234 EXPECT_TRUE(password_element_.isAutofilled()); |
1230 int username_length = strlen(kAliceUsername); | 1235 int username_length = strlen(kAliceUsername); |
1231 CheckUsernameSelection(3, username_length); | 1236 CheckUsernameSelection(3, username_length); |
1232 } | 1237 } |
1233 | 1238 |
1234 // Tests that |ClearPreview| properly clears previewed username and password | 1239 // Tests that |ClearPreview| properly clears previewed username and password |
1235 // with password being previously autofilled. | 1240 // with password being previously autofilled. |
1236 TEST_F(PasswordAutofillAgentTest, ClearPreviewWithPasswordAutofilled) { | 1241 TEST_F(PasswordAutofillAgentTest, ClearPreviewWithPasswordAutofilled) { |
1237 password_element_.setValue(WebString::fromUTF8("sec")); | 1242 password_element_.setValue(WebString::fromUTF8("sec")); |
1238 password_element_.setAutofilled(true); | 1243 password_element_.setAutofilled(true); |
1239 | 1244 |
1240 // Simulate the browser sending the login info, but set |wait_for_username| | 1245 // Simulate the browser sending the login info, but set |wait_for_username| |
1241 // to prevent the form from being immediately filled. | 1246 // to prevent the form from being immediately filled. |
1242 fill_data_.wait_for_username = true; | 1247 fill_data_.wait_for_username = true; |
1243 SimulateOnFillPasswordForm(fill_data_); | 1248 SimulateOnFillPasswordForm(fill_data_); |
1244 | 1249 |
1245 CheckTextFieldsDOMState(std::string(), false, "sec", true); | 1250 CheckTextFieldsDOMState(std::string(), false, "sec", true); |
1246 | 1251 |
1247 EXPECT_TRUE(password_autofill_->PreviewSuggestion( | 1252 EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion( |
1248 username_element_, kAliceUsername, kAlicePassword)); | 1253 username_element_, kAliceUsername, kAlicePassword)); |
1249 | 1254 |
1250 EXPECT_TRUE(password_autofill_->DidClearAutofillSelection( | 1255 EXPECT_TRUE( |
1251 username_element_)); | 1256 password_autofill_agent_->DidClearAutofillSelection(username_element_)); |
1252 | 1257 |
1253 EXPECT_TRUE(username_element_.value().isEmpty()); | 1258 EXPECT_TRUE(username_element_.value().isEmpty()); |
1254 EXPECT_TRUE(username_element_.suggestedValue().isEmpty()); | 1259 EXPECT_TRUE(username_element_.suggestedValue().isEmpty()); |
1255 EXPECT_FALSE(username_element_.isAutofilled()); | 1260 EXPECT_FALSE(username_element_.isAutofilled()); |
1256 EXPECT_EQ(ASCIIToUTF16("sec"), password_element_.value()); | 1261 EXPECT_EQ(ASCIIToUTF16("sec"), password_element_.value()); |
1257 EXPECT_TRUE(password_element_.suggestedValue().isEmpty()); | 1262 EXPECT_TRUE(password_element_.suggestedValue().isEmpty()); |
1258 EXPECT_TRUE(password_element_.isAutofilled()); | 1263 EXPECT_TRUE(password_element_.isAutofilled()); |
1259 CheckUsernameSelection(0, 0); | 1264 CheckUsernameSelection(0, 0); |
1260 } | 1265 } |
1261 | 1266 |
1262 // Tests that |ClearPreview| properly clears previewed username and password | 1267 // Tests that |ClearPreview| properly clears previewed username and password |
1263 // with username being previously autofilled. | 1268 // with username being previously autofilled. |
1264 TEST_F(PasswordAutofillAgentTest, ClearPreviewWithUsernameAutofilled) { | 1269 TEST_F(PasswordAutofillAgentTest, ClearPreviewWithUsernameAutofilled) { |
1265 username_element_.setValue(WebString::fromUTF8("ali")); | 1270 username_element_.setValue(WebString::fromUTF8("ali")); |
1266 username_element_.setSelectionRange(3, 3); | 1271 username_element_.setSelectionRange(3, 3); |
1267 username_element_.setAutofilled(true); | 1272 username_element_.setAutofilled(true); |
1268 | 1273 |
1269 // Simulate the browser sending the login info, but set |wait_for_username| | 1274 // Simulate the browser sending the login info, but set |wait_for_username| |
1270 // to prevent the form from being immediately filled. | 1275 // to prevent the form from being immediately filled. |
1271 fill_data_.wait_for_username = true; | 1276 fill_data_.wait_for_username = true; |
1272 SimulateOnFillPasswordForm(fill_data_); | 1277 SimulateOnFillPasswordForm(fill_data_); |
1273 | 1278 |
1274 CheckTextFieldsDOMState("ali", true, std::string(), false); | 1279 CheckTextFieldsDOMState("ali", true, std::string(), false); |
1275 | 1280 |
1276 EXPECT_TRUE(password_autofill_->PreviewSuggestion( | 1281 EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion( |
1277 username_element_, kAliceUsername, kAlicePassword)); | 1282 username_element_, kAliceUsername, kAlicePassword)); |
1278 | 1283 |
1279 EXPECT_TRUE(password_autofill_->DidClearAutofillSelection( | 1284 EXPECT_TRUE( |
1280 username_element_)); | 1285 password_autofill_agent_->DidClearAutofillSelection(username_element_)); |
1281 | 1286 |
1282 EXPECT_EQ(ASCIIToUTF16("ali"), username_element_.value()); | 1287 EXPECT_EQ(ASCIIToUTF16("ali"), username_element_.value()); |
1283 EXPECT_TRUE(username_element_.suggestedValue().isEmpty()); | 1288 EXPECT_TRUE(username_element_.suggestedValue().isEmpty()); |
1284 EXPECT_TRUE(username_element_.isAutofilled()); | 1289 EXPECT_TRUE(username_element_.isAutofilled()); |
1285 EXPECT_TRUE(password_element_.value().isEmpty()); | 1290 EXPECT_TRUE(password_element_.value().isEmpty()); |
1286 EXPECT_TRUE(password_element_.suggestedValue().isEmpty()); | 1291 EXPECT_TRUE(password_element_.suggestedValue().isEmpty()); |
1287 EXPECT_FALSE(password_element_.isAutofilled()); | 1292 EXPECT_FALSE(password_element_.isAutofilled()); |
1288 CheckUsernameSelection(3, 3); | 1293 CheckUsernameSelection(3, 3); |
1289 } | 1294 } |
1290 | 1295 |
1291 // Tests that |ClearPreview| properly clears previewed username and password | 1296 // Tests that |ClearPreview| properly clears previewed username and password |
1292 // with username and password being previously autofilled. | 1297 // with username and password being previously autofilled. |
1293 TEST_F(PasswordAutofillAgentTest, | 1298 TEST_F(PasswordAutofillAgentTest, |
1294 ClearPreviewWithAutofilledUsernameAndPassword) { | 1299 ClearPreviewWithAutofilledUsernameAndPassword) { |
1295 username_element_.setValue(WebString::fromUTF8("ali")); | 1300 username_element_.setValue(WebString::fromUTF8("ali")); |
1296 username_element_.setSelectionRange(3, 3); | 1301 username_element_.setSelectionRange(3, 3); |
1297 username_element_.setAutofilled(true); | 1302 username_element_.setAutofilled(true); |
1298 password_element_.setValue(WebString::fromUTF8("sec")); | 1303 password_element_.setValue(WebString::fromUTF8("sec")); |
1299 password_element_.setAutofilled(true); | 1304 password_element_.setAutofilled(true); |
1300 | 1305 |
1301 // Simulate the browser sending the login info, but set |wait_for_username| | 1306 // Simulate the browser sending the login info, but set |wait_for_username| |
1302 // to prevent the form from being immediately filled. | 1307 // to prevent the form from being immediately filled. |
1303 fill_data_.wait_for_username = true; | 1308 fill_data_.wait_for_username = true; |
1304 SimulateOnFillPasswordForm(fill_data_); | 1309 SimulateOnFillPasswordForm(fill_data_); |
1305 | 1310 |
1306 CheckTextFieldsDOMState("ali", true, "sec", true); | 1311 CheckTextFieldsDOMState("ali", true, "sec", true); |
1307 | 1312 |
1308 EXPECT_TRUE(password_autofill_->PreviewSuggestion( | 1313 EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion( |
1309 username_element_, kAliceUsername, kAlicePassword)); | 1314 username_element_, kAliceUsername, kAlicePassword)); |
1310 | 1315 |
1311 EXPECT_TRUE(password_autofill_->DidClearAutofillSelection( | 1316 EXPECT_TRUE( |
1312 username_element_)); | 1317 password_autofill_agent_->DidClearAutofillSelection(username_element_)); |
1313 | 1318 |
1314 EXPECT_EQ(ASCIIToUTF16("ali"), username_element_.value()); | 1319 EXPECT_EQ(ASCIIToUTF16("ali"), username_element_.value()); |
1315 EXPECT_TRUE(username_element_.suggestedValue().isEmpty()); | 1320 EXPECT_TRUE(username_element_.suggestedValue().isEmpty()); |
1316 EXPECT_TRUE(username_element_.isAutofilled()); | 1321 EXPECT_TRUE(username_element_.isAutofilled()); |
1317 EXPECT_EQ(ASCIIToUTF16("sec"), password_element_.value()); | 1322 EXPECT_EQ(ASCIIToUTF16("sec"), password_element_.value()); |
1318 EXPECT_TRUE(password_element_.suggestedValue().isEmpty()); | 1323 EXPECT_TRUE(password_element_.suggestedValue().isEmpty()); |
1319 EXPECT_TRUE(password_element_.isAutofilled()); | 1324 EXPECT_TRUE(password_element_.isAutofilled()); |
1320 CheckUsernameSelection(3, 3); | 1325 CheckUsernameSelection(3, 3); |
1321 } | 1326 } |
1322 | 1327 |
1323 // Tests that |ClearPreview| properly clears previewed username and password | 1328 // Tests that |ClearPreview| properly clears previewed username and password |
1324 // with neither username nor password being previously autofilled. | 1329 // with neither username nor password being previously autofilled. |
1325 TEST_F(PasswordAutofillAgentTest, | 1330 TEST_F(PasswordAutofillAgentTest, |
1326 ClearPreviewWithNotAutofilledUsernameAndPassword) { | 1331 ClearPreviewWithNotAutofilledUsernameAndPassword) { |
1327 // Simulate the browser sending the login info, but set |wait_for_username| | 1332 // Simulate the browser sending the login info, but set |wait_for_username| |
1328 // to prevent the form from being immediately filled. | 1333 // to prevent the form from being immediately filled. |
1329 fill_data_.wait_for_username = true; | 1334 fill_data_.wait_for_username = true; |
1330 SimulateOnFillPasswordForm(fill_data_); | 1335 SimulateOnFillPasswordForm(fill_data_); |
1331 | 1336 |
1332 CheckTextFieldsDOMState(std::string(), false, std::string(), false); | 1337 CheckTextFieldsDOMState(std::string(), false, std::string(), false); |
1333 | 1338 |
1334 EXPECT_TRUE(password_autofill_->PreviewSuggestion( | 1339 EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion( |
1335 username_element_, kAliceUsername, kAlicePassword)); | 1340 username_element_, kAliceUsername, kAlicePassword)); |
1336 | 1341 |
1337 EXPECT_TRUE(password_autofill_->DidClearAutofillSelection( | 1342 EXPECT_TRUE( |
1338 username_element_)); | 1343 password_autofill_agent_->DidClearAutofillSelection(username_element_)); |
1339 | 1344 |
1340 EXPECT_TRUE(username_element_.value().isEmpty()); | 1345 EXPECT_TRUE(username_element_.value().isEmpty()); |
1341 EXPECT_TRUE(username_element_.suggestedValue().isEmpty()); | 1346 EXPECT_TRUE(username_element_.suggestedValue().isEmpty()); |
1342 EXPECT_FALSE(username_element_.isAutofilled()); | 1347 EXPECT_FALSE(username_element_.isAutofilled()); |
1343 EXPECT_TRUE(password_element_.value().isEmpty()); | 1348 EXPECT_TRUE(password_element_.value().isEmpty()); |
1344 EXPECT_TRUE(password_element_.suggestedValue().isEmpty()); | 1349 EXPECT_TRUE(password_element_.suggestedValue().isEmpty()); |
1345 EXPECT_FALSE(password_element_.isAutofilled()); | 1350 EXPECT_FALSE(password_element_.isAutofilled()); |
1346 CheckUsernameSelection(0, 0); | 1351 CheckUsernameSelection(0, 0); |
1347 } | 1352 } |
1348 | 1353 |
1349 // Tests that |ClearPreview| properly restores the original selection range of | 1354 // Tests that |ClearPreview| properly restores the original selection range of |
1350 // username field that has initially been filled by inline autocomplete. | 1355 // username field that has initially been filled by inline autocomplete. |
1351 TEST_F(PasswordAutofillAgentTest, ClearPreviewWithInlineAutocompletedUsername) { | 1356 TEST_F(PasswordAutofillAgentTest, ClearPreviewWithInlineAutocompletedUsername) { |
1352 // Simulate the browser sending back the login info. | 1357 // Simulate the browser sending back the login info. |
1353 SimulateOnFillPasswordForm(fill_data_); | 1358 SimulateOnFillPasswordForm(fill_data_); |
1354 | 1359 |
1355 // Clear the text fields to start fresh. | 1360 // Clear the text fields to start fresh. |
1356 ClearUsernameAndPasswordFields(); | 1361 ClearUsernameAndPasswordFields(); |
1357 | 1362 |
1358 // Simulate the user typing in the first letter of 'alice', a stored username. | 1363 // Simulate the user typing in the first letter of 'alice', a stored username. |
1359 SimulateUsernameChange("a", true); | 1364 SimulateUsernameChange("a", true); |
1360 // Both the username and password text fields should reflect selection of the | 1365 // Both the username and password text fields should reflect selection of the |
1361 // stored login. | 1366 // stored login. |
1362 CheckTextFieldsState(kAliceUsername, true, kAlicePassword, true); | 1367 CheckTextFieldsState(kAliceUsername, true, kAlicePassword, true); |
1363 // The selection should have been set to 'lice', the last 4 letters. | 1368 // The selection should have been set to 'lice', the last 4 letters. |
1364 CheckUsernameSelection(1, 5); | 1369 CheckUsernameSelection(1, 5); |
1365 | 1370 |
1366 EXPECT_TRUE(password_autofill_->PreviewSuggestion( | 1371 EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion( |
1367 username_element_, "alicia", "secret")); | 1372 username_element_, "alicia", "secret")); |
1368 EXPECT_EQ( | 1373 EXPECT_EQ( |
1369 "alicia", | 1374 "alicia", |
1370 static_cast<std::string>(username_element_.suggestedValue().utf8())); | 1375 static_cast<std::string>(username_element_.suggestedValue().utf8())); |
1371 EXPECT_TRUE(username_element_.isAutofilled()); | 1376 EXPECT_TRUE(username_element_.isAutofilled()); |
1372 EXPECT_EQ( | 1377 EXPECT_EQ( |
1373 "secret", | 1378 "secret", |
1374 static_cast<std::string>(password_element_.suggestedValue().utf8())); | 1379 static_cast<std::string>(password_element_.suggestedValue().utf8())); |
1375 EXPECT_TRUE(password_element_.isAutofilled()); | 1380 EXPECT_TRUE(password_element_.isAutofilled()); |
1376 CheckUsernameSelection(1, 6); | 1381 CheckUsernameSelection(1, 6); |
1377 | 1382 |
1378 EXPECT_TRUE(password_autofill_->DidClearAutofillSelection( | 1383 EXPECT_TRUE( |
1379 username_element_)); | 1384 password_autofill_agent_->DidClearAutofillSelection(username_element_)); |
1380 | 1385 |
1381 EXPECT_EQ(kAliceUsername, username_element_.value().utf8()); | 1386 EXPECT_EQ(kAliceUsername, username_element_.value().utf8()); |
1382 EXPECT_TRUE(username_element_.suggestedValue().isEmpty()); | 1387 EXPECT_TRUE(username_element_.suggestedValue().isEmpty()); |
1383 EXPECT_TRUE(username_element_.isAutofilled()); | 1388 EXPECT_TRUE(username_element_.isAutofilled()); |
1384 EXPECT_TRUE(password_element_.value().isEmpty()); | 1389 EXPECT_TRUE(password_element_.value().isEmpty()); |
1385 EXPECT_TRUE(password_element_.suggestedValue().isEmpty()); | 1390 EXPECT_TRUE(password_element_.suggestedValue().isEmpty()); |
1386 EXPECT_TRUE(password_element_.isAutofilled()); | 1391 EXPECT_TRUE(password_element_.isAutofilled()); |
1387 CheckUsernameSelection(1, 5); | 1392 CheckUsernameSelection(1, 5); |
1388 } | 1393 } |
1389 | 1394 |
1390 // Tests that logging is off by default. | 1395 // Tests that logging is off by default. |
1391 TEST_F(PasswordAutofillAgentTest, OnChangeLoggingState_NoMessage) { | 1396 TEST_F(PasswordAutofillAgentTest, OnChangeLoggingState_NoMessage) { |
1392 render_thread_->sink().ClearMessages(); | 1397 render_thread_->sink().ClearMessages(); |
1393 SendVisiblePasswordForms(); | 1398 SendVisiblePasswordForms(); |
1394 const IPC::Message* message = render_thread_->sink().GetFirstMessageMatching( | 1399 const IPC::Message* message = render_thread_->sink().GetFirstMessageMatching( |
1395 AutofillHostMsg_RecordSavePasswordProgress::ID); | 1400 AutofillHostMsg_RecordSavePasswordProgress::ID); |
1396 EXPECT_FALSE(message); | 1401 EXPECT_FALSE(message); |
1397 } | 1402 } |
1398 | 1403 |
1399 // Test that logging can be turned on by a message. | 1404 // Test that logging can be turned on by a message. |
1400 TEST_F(PasswordAutofillAgentTest, OnChangeLoggingState_Activated) { | 1405 TEST_F(PasswordAutofillAgentTest, OnChangeLoggingState_Activated) { |
1401 // Turn the logging on. | 1406 // Turn the logging on. |
1402 AutofillMsg_SetLoggingState msg_activate(0, true); | 1407 AutofillMsg_SetLoggingState msg_activate(0, true); |
1403 // Up-cast to access OnMessageReceived, which is private in the agent. | 1408 // Up-cast to access OnMessageReceived, which is private in the agent. |
1404 EXPECT_TRUE(static_cast<IPC::Listener*>(password_autofill_) | 1409 EXPECT_TRUE(static_cast<IPC::Listener*>(password_autofill_agent_) |
1405 ->OnMessageReceived(msg_activate)); | 1410 ->OnMessageReceived(msg_activate)); |
1406 | 1411 |
1407 render_thread_->sink().ClearMessages(); | 1412 render_thread_->sink().ClearMessages(); |
1408 SendVisiblePasswordForms(); | 1413 SendVisiblePasswordForms(); |
1409 const IPC::Message* message = render_thread_->sink().GetFirstMessageMatching( | 1414 const IPC::Message* message = render_thread_->sink().GetFirstMessageMatching( |
1410 AutofillHostMsg_RecordSavePasswordProgress::ID); | 1415 AutofillHostMsg_RecordSavePasswordProgress::ID); |
1411 EXPECT_TRUE(message); | 1416 EXPECT_TRUE(message); |
1412 } | 1417 } |
1413 | 1418 |
1414 // Test that logging can be turned off by a message. | 1419 // Test that logging can be turned off by a message. |
1415 TEST_F(PasswordAutofillAgentTest, OnChangeLoggingState_Deactivated) { | 1420 TEST_F(PasswordAutofillAgentTest, OnChangeLoggingState_Deactivated) { |
1416 // Turn the logging on and then off. | 1421 // Turn the logging on and then off. |
1417 AutofillMsg_SetLoggingState msg_activate(0, /*active=*/true); | 1422 AutofillMsg_SetLoggingState msg_activate(0, /*active=*/true); |
1418 // Up-cast to access OnMessageReceived, which is private in the agent. | 1423 // Up-cast to access OnMessageReceived, which is private in the agent. |
1419 EXPECT_TRUE(static_cast<IPC::Listener*>(password_autofill_) | 1424 EXPECT_TRUE(static_cast<IPC::Listener*>(password_autofill_agent_) |
1420 ->OnMessageReceived(msg_activate)); | 1425 ->OnMessageReceived(msg_activate)); |
1421 AutofillMsg_SetLoggingState msg_deactivate(0, /*active=*/false); | 1426 AutofillMsg_SetLoggingState msg_deactivate(0, /*active=*/false); |
1422 EXPECT_TRUE(static_cast<IPC::Listener*>(password_autofill_) | 1427 EXPECT_TRUE(static_cast<IPC::Listener*>(password_autofill_agent_) |
1423 ->OnMessageReceived(msg_deactivate)); | 1428 ->OnMessageReceived(msg_deactivate)); |
1424 | 1429 |
1425 render_thread_->sink().ClearMessages(); | 1430 render_thread_->sink().ClearMessages(); |
1426 SendVisiblePasswordForms(); | 1431 SendVisiblePasswordForms(); |
1427 const IPC::Message* message = render_thread_->sink().GetFirstMessageMatching( | 1432 const IPC::Message* message = render_thread_->sink().GetFirstMessageMatching( |
1428 AutofillHostMsg_RecordSavePasswordProgress::ID); | 1433 AutofillHostMsg_RecordSavePasswordProgress::ID); |
1429 EXPECT_FALSE(message); | 1434 EXPECT_FALSE(message); |
1430 } | 1435 } |
1431 | 1436 |
1432 // Test that the agent sends an IPC call to get the current activity state of | 1437 // Test that the agent sends an IPC call to get the current activity state of |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1467 // Clear the text fields to start fresh. | 1472 // Clear the text fields to start fresh. |
1468 ClearUsernameAndPasswordFields(); | 1473 ClearUsernameAndPasswordFields(); |
1469 | 1474 |
1470 // Call SimulateElementClick() to produce a user gesture on the page so | 1475 // Call SimulateElementClick() to produce a user gesture on the page so |
1471 // autofill will actually fill. | 1476 // autofill will actually fill. |
1472 SimulateElementClick(kUsernameName); | 1477 SimulateElementClick(kUsernameName); |
1473 | 1478 |
1474 // Simulate a user clicking on the username element. This should produce a | 1479 // Simulate a user clicking on the username element. This should produce a |
1475 // message with all the usernames. | 1480 // message with all the usernames. |
1476 render_thread_->sink().ClearMessages(); | 1481 render_thread_->sink().ClearMessages(); |
1477 autofill_agent_->FormControlElementClicked(username_element_, false); | 1482 static_cast<PageClickListener*>(autofill_agent_) |
| 1483 ->FormControlElementClicked(username_element_, false); |
1478 ExpectAllCredentials(); | 1484 ExpectAllCredentials(); |
1479 | 1485 |
1480 // Now simulate a user typing in an unrecognized username and then | 1486 // Now simulate a user typing in an unrecognized username and then |
1481 // clicking on the username element. This should also produce a message with | 1487 // clicking on the username element. This should also produce a message with |
1482 // all the usernames. | 1488 // all the usernames. |
1483 SimulateUsernameChange("baz", true); | 1489 SimulateUsernameChange("baz", true); |
1484 render_thread_->sink().ClearMessages(); | 1490 render_thread_->sink().ClearMessages(); |
1485 autofill_agent_->FormControlElementClicked(username_element_, true); | 1491 static_cast<PageClickListener*>(autofill_agent_) |
| 1492 ->FormControlElementClicked(username_element_, true); |
1486 ExpectAllCredentials(); | 1493 ExpectAllCredentials(); |
1487 | 1494 |
1488 // Now simulate a user typing in the first letter of the username and then | 1495 // Now simulate a user typing in the first letter of the username and then |
1489 // clicking on the username element. While the typing of the first letter will | 1496 // clicking on the username element. While the typing of the first letter will |
1490 // inline autocomplete, clicking on the element should still produce a full | 1497 // inline autocomplete, clicking on the element should still produce a full |
1491 // suggestion list. | 1498 // suggestion list. |
1492 SimulateUsernameChange("a", true); | 1499 SimulateUsernameChange("a", true); |
1493 render_thread_->sink().ClearMessages(); | 1500 render_thread_->sink().ClearMessages(); |
1494 autofill_agent_->FormControlElementClicked(username_element_, true); | 1501 static_cast<PageClickListener*>(autofill_agent_) |
| 1502 ->FormControlElementClicked(username_element_, true); |
1495 ExpectAllCredentials(); | 1503 ExpectAllCredentials(); |
1496 } | 1504 } |
1497 | 1505 |
1498 // The user types in a password, but then just before sending the form off, a | 1506 // The user types in a password, but then just before sending the form off, a |
1499 // script clears that password. This test checks that PasswordAutofillAgent can | 1507 // script clears that password. This test checks that PasswordAutofillAgent can |
1500 // still remember the password typed by the user. | 1508 // still remember the password typed by the user. |
1501 TEST_F(PasswordAutofillAgentTest, | 1509 TEST_F(PasswordAutofillAgentTest, |
1502 RememberLastNonEmptyPasswordOnSubmit_ScriptCleared) { | 1510 RememberLastNonEmptyPasswordOnSubmit_ScriptCleared) { |
1503 SimulateInputChangeForElement( | 1511 SimulateInputChangeForElement( |
1504 "temp", true, GetMainFrame(), username_element_, true); | 1512 "temp", true, GetMainFrame(), username_element_, true); |
1505 SimulateInputChangeForElement( | 1513 SimulateInputChangeForElement( |
1506 "random", true, GetMainFrame(), password_element_, true); | 1514 "random", true, GetMainFrame(), password_element_, true); |
1507 | 1515 |
1508 // Simulate that the password value was cleared by the site's JavaScript | 1516 // Simulate that the password value was cleared by the site's JavaScript |
1509 // before submit. | 1517 // before submit. |
1510 password_element_.setValue(WebString()); | 1518 password_element_.setValue(WebString()); |
1511 static_cast<content::RenderViewObserver*>(password_autofill_agent()) | 1519 static_cast<content::RenderViewObserver*>(password_autofill_agent_) |
1512 ->WillSubmitForm(GetMainFrame(), username_element_.form()); | 1520 ->WillSubmitForm(GetMainFrame(), username_element_.form()); |
1513 | 1521 |
1514 // Observe that the PasswordAutofillAgent still remembered the last non-empty | 1522 // Observe that the PasswordAutofillAgent still remembered the last non-empty |
1515 // password and sent that to the browser. | 1523 // password and sent that to the browser. |
1516 ExpectFormSubmittedWithPasswords("random", ""); | 1524 ExpectFormSubmittedWithPasswords("random", ""); |
1517 } | 1525 } |
1518 | 1526 |
1519 // Similar to RememberLastNonEmptyPasswordOnSubmit_ScriptCleared, but this time | 1527 // Similar to RememberLastNonEmptyPasswordOnSubmit_ScriptCleared, but this time |
1520 // it's the user who clears the password. This test checks that in that case, | 1528 // it's the user who clears the password. This test checks that in that case, |
1521 // the last non-empty password is not remembered. | 1529 // the last non-empty password is not remembered. |
1522 TEST_F(PasswordAutofillAgentTest, | 1530 TEST_F(PasswordAutofillAgentTest, |
1523 RememberLastNonEmptyPasswordOnSubmit_UserCleared) { | 1531 RememberLastNonEmptyPasswordOnSubmit_UserCleared) { |
1524 SimulateInputChangeForElement( | 1532 SimulateInputChangeForElement( |
1525 "temp", true, GetMainFrame(), username_element_, true); | 1533 "temp", true, GetMainFrame(), username_element_, true); |
1526 SimulateInputChangeForElement( | 1534 SimulateInputChangeForElement( |
1527 "random", true, GetMainFrame(), password_element_, true); | 1535 "random", true, GetMainFrame(), password_element_, true); |
1528 | 1536 |
1529 // Simulate that the user actually cleared the password again. | 1537 // Simulate that the user actually cleared the password again. |
1530 SimulateInputChangeForElement( | 1538 SimulateInputChangeForElement( |
1531 "", true, GetMainFrame(), password_element_, true); | 1539 "", true, GetMainFrame(), password_element_, true); |
1532 static_cast<content::RenderViewObserver*>(password_autofill_agent()) | 1540 static_cast<content::RenderViewObserver*>(password_autofill_agent_) |
1533 ->WillSubmitForm(GetMainFrame(), username_element_.form()); | 1541 ->WillSubmitForm(GetMainFrame(), username_element_.form()); |
1534 | 1542 |
1535 // Observe that the PasswordAutofillAgent respects the user having cleared the | 1543 // Observe that the PasswordAutofillAgent respects the user having cleared the |
1536 // password. | 1544 // password. |
1537 ExpectFormSubmittedWithPasswords("", ""); | 1545 ExpectFormSubmittedWithPasswords("", ""); |
1538 } | 1546 } |
1539 | 1547 |
1540 // Similar to RememberLastNonEmptyPasswordOnSubmit_ScriptCleared, but uses the | 1548 // Similar to RememberLastNonEmptyPasswordOnSubmit_ScriptCleared, but uses the |
1541 // new password instead of the current password. | 1549 // new password instead of the current password. |
1542 TEST_F(PasswordAutofillAgentTest, | 1550 TEST_F(PasswordAutofillAgentTest, |
1543 RememberLastNonEmptyPasswordOnSubmit_NewPassword) { | 1551 RememberLastNonEmptyPasswordOnSubmit_NewPassword) { |
1544 const char kNewPasswordFormHTML[] = | 1552 const char kNewPasswordFormHTML[] = |
1545 "<FORM name='LoginTestForm'>" | 1553 "<FORM name='LoginTestForm'>" |
1546 " <INPUT type='text' id='username' autocomplete='username'/>" | 1554 " <INPUT type='text' id='username' autocomplete='username'/>" |
1547 " <INPUT type='password' id='password' autocomplete='new-password'/>" | 1555 " <INPUT type='password' id='password' autocomplete='new-password'/>" |
1548 " <INPUT type='submit' value='Login'/>" | 1556 " <INPUT type='submit' value='Login'/>" |
1549 "</FORM>"; | 1557 "</FORM>"; |
1550 LoadHTML(kNewPasswordFormHTML); | 1558 LoadHTML(kNewPasswordFormHTML); |
1551 UpdateUsernameAndPasswordElements(); | 1559 UpdateUsernameAndPasswordElements(); |
1552 | 1560 |
1553 SimulateInputChangeForElement( | 1561 SimulateInputChangeForElement( |
1554 "temp", true, GetMainFrame(), username_element_, true); | 1562 "temp", true, GetMainFrame(), username_element_, true); |
1555 SimulateInputChangeForElement( | 1563 SimulateInputChangeForElement( |
1556 "random", true, GetMainFrame(), password_element_, true); | 1564 "random", true, GetMainFrame(), password_element_, true); |
1557 | 1565 |
1558 // Simulate that the password value was cleared by the site's JavaScript | 1566 // Simulate that the password value was cleared by the site's JavaScript |
1559 // before submit. | 1567 // before submit. |
1560 password_element_.setValue(WebString()); | 1568 password_element_.setValue(WebString()); |
1561 static_cast<content::RenderViewObserver*>(password_autofill_agent()) | 1569 static_cast<content::RenderViewObserver*>(password_autofill_agent_) |
1562 ->WillSubmitForm(GetMainFrame(), username_element_.form()); | 1570 ->WillSubmitForm(GetMainFrame(), username_element_.form()); |
1563 | 1571 |
1564 // Observe that the PasswordAutofillAgent still remembered the last non-empty | 1572 // Observe that the PasswordAutofillAgent still remembered the last non-empty |
1565 // password and sent that to the browser. | 1573 // password and sent that to the browser. |
1566 ExpectFormSubmittedWithPasswords("", "random"); | 1574 ExpectFormSubmittedWithPasswords("", "random"); |
1567 } | 1575 } |
1568 | 1576 |
1569 // The user first accepts a suggestion, but then overwrites the password. This | 1577 // The user first accepts a suggestion, but then overwrites the password. This |
1570 // test checks that the overwritten password is not reverted back if the user | 1578 // test checks that the overwritten password is not reverted back if the user |
1571 // triggers autofill through focusing (but not changing) the username again. | 1579 // triggers autofill through focusing (but not changing) the username again. |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1618 password_element_, | 1626 password_element_, |
1619 /*is_user_input=*/true); | 1627 /*is_user_input=*/true); |
1620 | 1628 |
1621 // Simulate the user typing a stored username. | 1629 // Simulate the user typing a stored username. |
1622 SimulateUsernameChange(kAliceUsername, true); | 1630 SimulateUsernameChange(kAliceUsername, true); |
1623 // The autofileld password should replace the typed one. | 1631 // The autofileld password should replace the typed one. |
1624 CheckTextFieldsDOMState(kAliceUsername, true, kAlicePassword, true); | 1632 CheckTextFieldsDOMState(kAliceUsername, true, kAlicePassword, true); |
1625 } | 1633 } |
1626 | 1634 |
1627 } // namespace autofill | 1635 } // namespace autofill |
OLD | NEW |