| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/memory/ref_counted.h" | 10 #include "base/memory/ref_counted.h" |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 const std::string& expected_value) { | 287 const std::string& expected_value) { |
| 288 std::string value; | 288 std::string value; |
| 289 ASSERT_TRUE(content::ExecuteScriptAndExtractString( | 289 ASSERT_TRUE(content::ExecuteScriptAndExtractString( |
| 290 GetWebContents(), | 290 GetWebContents(), |
| 291 "window.domAutomationController.send(" | 291 "window.domAutomationController.send(" |
| 292 " document.getElementById('" + field_name + "').value);", | 292 " document.getElementById('" + field_name + "').value);", |
| 293 &value)); | 293 &value)); |
| 294 EXPECT_EQ(expected_value, value); | 294 EXPECT_EQ(expected_value, value); |
| 295 } | 295 } |
| 296 | 296 |
| 297 void GetFieldBackgroundColor(const std::string& field_name, |
| 298 std::string* color) { |
| 299 ASSERT_TRUE(content::ExecuteScriptAndExtractString( |
| 300 GetWebContents(), |
| 301 "window.domAutomationController.send(" |
| 302 " document.defaultView.getComputedStyle(document.getElementById('" + |
| 303 field_name + "')).backgroundColor);", |
| 304 color)); |
| 305 } |
| 306 |
| 297 void SimulateURLFetch(bool success) { | 307 void SimulateURLFetch(bool success) { |
| 298 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | 308 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); |
| 299 ASSERT_TRUE(fetcher); | 309 ASSERT_TRUE(fetcher); |
| 300 net::URLRequestStatus status; | 310 net::URLRequestStatus status; |
| 301 status.set_status(success ? net::URLRequestStatus::SUCCESS : | 311 status.set_status(success ? net::URLRequestStatus::SUCCESS : |
| 302 net::URLRequestStatus::FAILED); | 312 net::URLRequestStatus::FAILED); |
| 303 | 313 |
| 304 std::string script = " var google = {};" | 314 std::string script = " var google = {};" |
| 305 "google.translate = (function() {" | 315 "google.translate = (function() {" |
| 306 " return {" | 316 " return {" |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 event.type = blink::WebKeyboardEvent::RawKeyDown; | 426 event.type = blink::WebKeyboardEvent::RawKeyDown; |
| 417 test_delegate_.Reset(); | 427 test_delegate_.Reset(); |
| 418 // Install the key press event sink to ensure that any events that are not | 428 // Install the key press event sink to ensure that any events that are not |
| 419 // handled by the installed callbacks do not end up crashing the test. | 429 // handled by the installed callbacks do not end up crashing the test. |
| 420 GetRenderViewHost()->AddKeyPressEventCallback(key_press_event_sink_); | 430 GetRenderViewHost()->AddKeyPressEventCallback(key_press_event_sink_); |
| 421 GetRenderViewHost()->ForwardKeyboardEvent(event); | 431 GetRenderViewHost()->ForwardKeyboardEvent(event); |
| 422 test_delegate_.Wait(); | 432 test_delegate_.Wait(); |
| 423 GetRenderViewHost()->RemoveKeyPressEventCallback(key_press_event_sink_); | 433 GetRenderViewHost()->RemoveKeyPressEventCallback(key_press_event_sink_); |
| 424 } | 434 } |
| 425 | 435 |
| 436 // Datalist does not support autofill preview. There is no need to start |
| 437 // message loop for Datalist. |
| 438 void SendKeyToDataListPopup(ui::KeyboardCode key) { |
| 439 // Route popup-targeted key presses via the render view host. |
| 440 content::NativeWebKeyboardEvent event; |
| 441 event.windowsKeyCode = key; |
| 442 event.type = blink::WebKeyboardEvent::RawKeyDown; |
| 443 // Install the key press event sink to ensure that any events that are not |
| 444 // handled by the installed callbacks do not end up crashing the test. |
| 445 GetRenderViewHost()->AddKeyPressEventCallback(key_press_event_sink_); |
| 446 GetRenderViewHost()->ForwardKeyboardEvent(event); |
| 447 GetRenderViewHost()->RemoveKeyPressEventCallback(key_press_event_sink_); |
| 448 } |
| 449 |
| 426 void TryBasicFormFill() { | 450 void TryBasicFormFill() { |
| 427 FocusFirstNameField(); | 451 FocusFirstNameField(); |
| 428 | 452 |
| 429 // Start filling the first name field with "M" and wait for the popup to be | 453 // Start filling the first name field with "M" and wait for the popup to be |
| 430 // shown. | 454 // shown. |
| 431 SendKeyToPageAndWait(ui::VKEY_M); | 455 SendKeyToPageAndWait(ui::VKEY_M); |
| 432 | 456 |
| 433 // Press the down arrow to select the suggestion and preview the autofilled | 457 // Press the down arrow to select the suggestion and preview the autofilled |
| 434 // form. | 458 // form. |
| 435 SendKeyToPopupAndWait(ui::VKEY_DOWN); | 459 SendKeyToPopupAndWait(ui::VKEY_DOWN); |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 627 "document.getElementById('firstname').value = '';")); | 651 "document.getElementById('firstname').value = '';")); |
| 628 ExpectFieldValue("firstname", ""); | 652 ExpectFieldValue("firstname", ""); |
| 629 | 653 |
| 630 // Invoke and accept the Autofill popup and verify the field was filled. | 654 // Invoke and accept the Autofill popup and verify the field was filled. |
| 631 SendKeyToPageAndWait(ui::VKEY_M); | 655 SendKeyToPageAndWait(ui::VKEY_M); |
| 632 SendKeyToPopupAndWait(ui::VKEY_DOWN); | 656 SendKeyToPopupAndWait(ui::VKEY_DOWN); |
| 633 SendKeyToPopupAndWait(ui::VKEY_RETURN); | 657 SendKeyToPopupAndWait(ui::VKEY_RETURN); |
| 634 ExpectFieldValue("firstname", "Milton"); | 658 ExpectFieldValue("firstname", "Milton"); |
| 635 } | 659 } |
| 636 | 660 |
| 661 // Test that an input field is not rendered with the yellow autofilled |
| 662 // background color when choosing an option from the datalist suggestion list. |
| 663 IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnSelectOptionFromDatalist) { |
| 664 // Load the test page. |
| 665 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 666 browser(), |
| 667 GURL(std::string(kDataURIPrefix) + |
| 668 "<form action=\"http://www.example.com/\" method=\"POST\">" |
| 669 " <input list=\"dl\" type=\"search\" id=\"firstname\"" |
| 670 " onfocus=\"domAutomationController.send(true)\"><br>" |
| 671 " <datalist id=\"dl\">" |
| 672 " <option value=\"Adam\"></option>" |
| 673 " <option value=\"Bob\"></option>" |
| 674 " <option value=\"Carl\"></option>" |
| 675 " </datalist>" |
| 676 "</form>"))); |
| 677 std::string orginalcolor; |
| 678 GetFieldBackgroundColor("firstname", &orginalcolor); |
| 679 |
| 680 FocusFirstNameField(); |
| 681 SendKeyToPageAndWait(ui::VKEY_DOWN); |
| 682 SendKeyToDataListPopup(ui::VKEY_DOWN); |
| 683 SendKeyToDataListPopup(ui::VKEY_RETURN); |
| 684 ExpectFieldValue("firstname", "Adam"); |
| 685 std::string color; |
| 686 GetFieldBackgroundColor("firstname", &color); |
| 687 EXPECT_EQ(color, orginalcolor); |
| 688 } |
| 689 |
| 637 // Test that a JavaScript oninput event is fired after auto-filling a form. | 690 // Test that a JavaScript oninput event is fired after auto-filling a form. |
| 638 IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnInputAfterAutofill) { | 691 IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnInputAfterAutofill) { |
| 639 CreateTestProfile(); | 692 CreateTestProfile(); |
| 640 | 693 |
| 641 const char kOnInputScript[] = | 694 const char kOnInputScript[] = |
| 642 "<script>" | 695 "<script>" |
| 643 "focused_fired = false;" | 696 "focused_fired = false;" |
| 644 "unfocused_fired = false;" | 697 "unfocused_fired = false;" |
| 645 "changed_select_fired = false;" | 698 "changed_select_fired = false;" |
| 646 "unchanged_select_fired = false;" | 699 "unchanged_select_fired = false;" |
| (...skipping 741 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1388 ASSERT_TRUE(content::ExecuteScript( | 1441 ASSERT_TRUE(content::ExecuteScript( |
| 1389 GetRenderViewHost(), | 1442 GetRenderViewHost(), |
| 1390 "document.querySelector('input').autocomplete = 'off';")); | 1443 "document.querySelector('input').autocomplete = 'off';")); |
| 1391 | 1444 |
| 1392 // Press the down arrow to select the suggestion and attempt to preview the | 1445 // Press the down arrow to select the suggestion and attempt to preview the |
| 1393 // autofilled form. | 1446 // autofilled form. |
| 1394 SendKeyToPopupAndWait(ui::VKEY_DOWN); | 1447 SendKeyToPopupAndWait(ui::VKEY_DOWN); |
| 1395 } | 1448 } |
| 1396 | 1449 |
| 1397 } // namespace autofill | 1450 } // namespace autofill |
| OLD | NEW |