| 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 <string.h> | 5 #include <string.h> |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "base/test/histogram_tester.h" | 9 #include "base/test/histogram_tester.h" |
| 10 #include "chrome/test/base/chrome_render_view_test.h" | 10 #include "chrome/test/base/chrome_render_view_test.h" |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 "</FORM>"; | 103 "</FORM>"; |
| 104 | 104 |
| 105 const char kInvalidActionAccountCreationFormHTML[] = | 105 const char kInvalidActionAccountCreationFormHTML[] = |
| 106 "<FORM name = 'blah' action = 'invalid'> " | 106 "<FORM name = 'blah' action = 'invalid'> " |
| 107 " <INPUT type = 'text' id = 'username'/> " | 107 " <INPUT type = 'text' id = 'username'/> " |
| 108 " <INPUT type = 'password' id = 'first_password'/> " | 108 " <INPUT type = 'password' id = 'first_password'/> " |
| 109 " <INPUT type = 'password' id = 'second_password'/> " | 109 " <INPUT type = 'password' id = 'second_password'/> " |
| 110 " <INPUT type = 'submit' value = 'LOGIN' />" | 110 " <INPUT type = 'submit' value = 'LOGIN' />" |
| 111 "</FORM>"; | 111 "</FORM>"; |
| 112 | 112 |
| 113 const char ChangeDetectionScript[] = |
| 114 "<script>" |
| 115 " firstOnChangeCalled = false;" |
| 116 " secondOnChangeCalled = false;" |
| 117 " document.getElementById('first_password').onchange = function() {" |
| 118 " firstOnChangeCalled = true;" |
| 119 " };" |
| 120 " document.getElementById('second_password').onchange = function() {" |
| 121 " secondOnChangeCalled = true;" |
| 122 " };" |
| 123 "</script>"; |
| 124 |
| 113 TEST_F(PasswordGenerationAgentTest, DetectionTest) { | 125 TEST_F(PasswordGenerationAgentTest, DetectionTest) { |
| 114 // Don't shown the icon for non account creation forms. | 126 // Don't shown the icon for non account creation forms. |
| 115 LoadHTML(kSigninFormHTML); | 127 LoadHTML(kSigninFormHTML); |
| 116 ExpectPasswordGenerationAvailable("password", false); | 128 ExpectPasswordGenerationAvailable("password", false); |
| 117 | 129 |
| 118 // We don't show the decoration yet because the feature isn't enabled. | 130 // We don't show the decoration yet because the feature isn't enabled. |
| 119 LoadHTML(kAccountCreationFormHTML); | 131 LoadHTML(kAccountCreationFormHTML); |
| 120 ExpectPasswordGenerationAvailable("first_password", false); | 132 ExpectPasswordGenerationAvailable("first_password", false); |
| 121 | 133 |
| 122 // Pretend like We have received message indicating site is not blacklisted, | 134 // Pretend like We have received message indicating site is not blacklisted, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 136 | 148 |
| 137 // This doesn't trigger because the form action is invalid. | 149 // This doesn't trigger because the form action is invalid. |
| 138 LoadHTML(kInvalidActionAccountCreationFormHTML); | 150 LoadHTML(kInvalidActionAccountCreationFormHTML); |
| 139 SetNotBlacklistedMessage(kInvalidActionAccountCreationFormHTML); | 151 SetNotBlacklistedMessage(kInvalidActionAccountCreationFormHTML); |
| 140 SetAccountCreationFormsDetectedMessage(kInvalidActionAccountCreationFormHTML); | 152 SetAccountCreationFormsDetectedMessage(kInvalidActionAccountCreationFormHTML); |
| 141 ExpectPasswordGenerationAvailable("first_password", false); | 153 ExpectPasswordGenerationAvailable("first_password", false); |
| 142 } | 154 } |
| 143 | 155 |
| 144 TEST_F(PasswordGenerationAgentTest, FillTest) { | 156 TEST_F(PasswordGenerationAgentTest, FillTest) { |
| 145 // Make sure that we are enabled before loading HTML. | 157 // Make sure that we are enabled before loading HTML. |
| 146 LoadHTML(kAccountCreationFormHTML); | 158 std::string html = std::string(kAccountCreationFormHTML) + |
| 159 ChangeDetectionScript; |
| 160 LoadHTML(html.c_str()); |
| 147 | 161 |
| 148 WebDocument document = GetMainFrame()->document(); | 162 WebDocument document = GetMainFrame()->document(); |
| 149 WebElement element = | 163 WebElement element = |
| 150 document.getElementById(WebString::fromUTF8("first_password")); | 164 document.getElementById(WebString::fromUTF8("first_password")); |
| 151 ASSERT_FALSE(element.isNull()); | 165 ASSERT_FALSE(element.isNull()); |
| 152 WebInputElement first_password_element = element.to<WebInputElement>(); | 166 WebInputElement first_password_element = element.to<WebInputElement>(); |
| 153 element = document.getElementById(WebString::fromUTF8("second_password")); | 167 element = document.getElementById(WebString::fromUTF8("second_password")); |
| 154 ASSERT_FALSE(element.isNull()); | 168 ASSERT_FALSE(element.isNull()); |
| 155 WebInputElement second_password_element = element.to<WebInputElement>(); | 169 WebInputElement second_password_element = element.to<WebInputElement>(); |
| 156 | 170 |
| 157 // Both password fields should be empty. | 171 // Both password fields should be empty. |
| 158 EXPECT_TRUE(first_password_element.value().isNull()); | 172 EXPECT_TRUE(first_password_element.value().isNull()); |
| 159 EXPECT_TRUE(second_password_element.value().isNull()); | 173 EXPECT_TRUE(second_password_element.value().isNull()); |
| 160 | 174 |
| 161 base::string16 password = base::ASCIIToUTF16("random_password"); | 175 base::string16 password = base::ASCIIToUTF16("random_password"); |
| 162 AutofillMsg_GeneratedPasswordAccepted msg(0, password); | 176 AutofillMsg_GeneratedPasswordAccepted msg(0, password); |
| 163 password_generation_->OnMessageReceived(msg); | 177 password_generation_->OnMessageReceived(msg); |
| 164 | 178 |
| 165 // Password fields are filled out and set as being autofilled. | 179 // Password fields are filled out and set as being autofilled. |
| 166 EXPECT_EQ(password, first_password_element.value()); | 180 EXPECT_EQ(password, first_password_element.value()); |
| 167 EXPECT_EQ(password, second_password_element.value()); | 181 EXPECT_EQ(password, second_password_element.value()); |
| 168 EXPECT_TRUE(first_password_element.isAutofilled()); | 182 EXPECT_TRUE(first_password_element.isAutofilled()); |
| 169 EXPECT_TRUE(second_password_element.isAutofilled()); | 183 EXPECT_TRUE(second_password_element.isAutofilled()); |
| 170 | 184 |
| 185 // Make sure onchange events are called. |
| 186 int first_onchange_called = -1; |
| 187 int second_onchange_called = -1; |
| 188 ASSERT_TRUE( |
| 189 ExecuteJavaScriptAndReturnIntValue( |
| 190 base::ASCIIToUTF16("firstOnChangeCalled ? 1 : 0"), |
| 191 &first_onchange_called)); |
| 192 EXPECT_EQ(1, first_onchange_called); |
| 193 ASSERT_TRUE( |
| 194 ExecuteJavaScriptAndReturnIntValue( |
| 195 base::ASCIIToUTF16("secondOnChangeCalled ? 1 : 0"), |
| 196 &second_onchange_called)); |
| 197 EXPECT_EQ(1, second_onchange_called); |
| 198 |
| 171 // Focus moved to the next input field. | 199 // Focus moved to the next input field. |
| 172 // TODO(zysxqn): Change this back to the address element once Bug 90224 | 200 // TODO(zysxqn): Change this back to the address element once Bug 90224 |
| 173 // https://bugs.webkit.org/show_bug.cgi?id=90224 has been fixed. | 201 // https://bugs.webkit.org/show_bug.cgi?id=90224 has been fixed. |
| 174 element = document.getElementById(WebString::fromUTF8("first_password")); | 202 element = document.getElementById(WebString::fromUTF8("first_password")); |
| 175 ASSERT_FALSE(element.isNull()); | 203 ASSERT_FALSE(element.isNull()); |
| 176 EXPECT_EQ(element, document.focusedElement()); | 204 EXPECT_EQ(element, document.focusedElement()); |
| 177 } | 205 } |
| 178 | 206 |
| 179 TEST_F(PasswordGenerationAgentTest, EditingTest) { | 207 TEST_F(PasswordGenerationAgentTest, EditingTest) { |
| 180 LoadHTML(kAccountCreationFormHTML); | 208 LoadHTML(kAccountCreationFormHTML); |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 379 "document.body.appendChild(form);"); | 407 "document.body.appendChild(form);"); |
| 380 ProcessPendingMessages(); | 408 ProcessPendingMessages(); |
| 381 // TODO(gcasto): I'm slighty worried about flakes in this test where | 409 // TODO(gcasto): I'm slighty worried about flakes in this test where |
| 382 // didAssociateFormControls() isn't called. If this turns out to be a problem | 410 // didAssociateFormControls() isn't called. If this turns out to be a problem |
| 383 // adding a call to OnDynamicFormsSeen(GetMainFrame()) will fix it, though | 411 // adding a call to OnDynamicFormsSeen(GetMainFrame()) will fix it, though |
| 384 // it will weaken the test. | 412 // it will weaken the test. |
| 385 ExpectPasswordGenerationAvailable("first_password", true); | 413 ExpectPasswordGenerationAvailable("first_password", true); |
| 386 } | 414 } |
| 387 | 415 |
| 388 } // namespace autofill | 416 } // namespace autofill |
| OLD | NEW |