autofill_browsertest.cc revision 731df977c0511bca2206b5f333555b1205ff1f43
1731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Use of this source code is governed by a BSD-style license that can be 3731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// found in the LICENSE file. 4731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 5731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include <string> 6731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 7731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "app/keyboard_code_conversion.h" 8731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "base/basictypes.h" 9731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "base/ref_counted.h" 10731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "base/scoped_ptr.h" 11731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "base/string16.h" 12731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/autofill/autofill_common_test.h" 13731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/autofill/autofill_profile.h" 14731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/autofill/personal_data_manager.h" 15731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/browser.h" 16731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/browser_window.h" 17731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/net/predictor_api.h" 18731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/profile.h" 19731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/tab_contents/tab_contents.h" 20731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/common/pref_names.h" 21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/test/in_process_browser_test.h" 22731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/test/ui_test_utils.h" 23731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "testing/gtest/include/gtest/gtest.h" 24731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 25731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass AutoFillTest : public InProcessBrowserTest { 26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick protected: 27731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AutoFillTest() { 28731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick set_show_window(true); 29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EnableDOMAutomation(); 30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 31731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void SetUpProfile() { 33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::DisableSystemServices(browser()->profile()); 34731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 35731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AutoFillProfile profile(string16(), 0); 36731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::SetProfileInfo( 37731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &profile, "Office Space", "Milton", "C.", "Waddams", 38731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick "red.swingline@initech.com", "Initech", "4120 Freidrich Lane", 39731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick "Basement", "Austin", "Texas", "78744", "United States", "5125551234", 40731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick "5125550000"); 41731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick PersonalDataManager* personal_data_manager = 43731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick browser()->profile()->GetPersonalDataManager(); 44731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_TRUE(personal_data_manager); 45731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 46731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::vector<AutoFillProfile> profiles(1, profile); 47731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick personal_data_manager->SetProfiles(&profiles); 48731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 49731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 50731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void ExpectFieldValue(const std::wstring& field_name, 51731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& expected_value) { 52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string value; 53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( 54731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick browser()->GetSelectedTabContents()->render_view_host(), L"", 55731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick L"window.domAutomationController.send(" 56731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick L"document.getElementById('" + field_name + L"').value);", &value)); 57731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_EQ(expected_value, value); 58731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 59731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}; 60731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 61731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Test that basic form fill is working. 62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// FAILS on windows: http://crbug.com/57962 63731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#if defined(OS_WIN) 64731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#define MAYBE_BasicFormFill DISABLED_BasicFormFill 65731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#else 66731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#define MAYBE_BasicFormFill BasicFormFill 67731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#endif 68731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickIN_PROC_BROWSER_TEST_F(AutoFillTest, MAYBE_BasicFormFill) { 69731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick SetUpProfile(); 70731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 71731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 72731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 73731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick browser(), GURL("data:text/html;charset=utf-8," 74731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick "<form action=\"http://www.google.com/\" method=\"POST\">" 75731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick "<label for=\"firstname\">First name:</label>" 76731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " <input type=\"text\" id=\"firstname\" /><br />" 77731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick "<label for=\"lastname\">Last name:</label>" 78731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " <input type=\"text\" id=\"lastname\" /><br />" 79731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick "<label for=\"address1\">Address line 1:</label>" 80731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " <input type=\"text\" id=\"address1\" /><br />" 81731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick "<label for=\"address2\">Address line 2:</label>" 82731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " <input type=\"text\" id=\"address2\" /><br />" 83731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick "<label for=\"city\">City:</label>" 84731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " <input type=\"text\" id=\"city\" /><br />" 85731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick "<label for=\"state\">State:</label>" 86731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " <select id=\"state\">" 87731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " <option value=\"\" selected=\"yes\">--</option>" 88731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " <option value=\"CA\">California</option>" 89731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " <option value=\"TX\">Texas</option>" 90731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " </select><br />" 91731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick "<label for=\"zip\">ZIP code:</label>" 92731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " <input type=\"text\" id=\"zip\" /><br />" 93731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick "<label for=\"country\">Country:</label>" 94731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " <select id=\"country\">" 95731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " <option value=\"\" selected=\"yes\">--</option>" 96731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " <option value=\"CA\">Canada</option>" 97731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " <option value=\"US\">United States</option>" 98731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " </select><br />" 99731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick "<label for=\"phone\">Phone number:</label>" 100731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick " <input type=\"text\" id=\"phone\" /><br />" 101731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick "</form>"))); 102731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 103731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_NO_FATAL_FAILURE(ui_test_utils::ClickOnView(browser(), 104731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VIEW_ID_TAB_CONTAINER)); 105731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), 106731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); 107731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 108731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick RenderViewHost* render_view_host = 109731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick browser()->GetSelectedTabContents()->render_view_host(); 110731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_TRUE(ui_test_utils::ExecuteJavaScript( 111731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick render_view_host, L"", L"document.getElementById('firstname').focus();")); 112731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 113731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Start filling the first name field with "M" and wait for the popup to be 114731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // shown. 115731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( 116731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick browser(), app::VKEY_M, false, true, false, false, 117731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NotificationType::AUTOFILL_DID_SHOW_SUGGESTIONS, 118731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Source<RenderViewHost>(render_view_host))); 119731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 120731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Press the down arrow to select the suggestion and preview the autofilled 121731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // form. 122731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( 123731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick browser(), app::VKEY_DOWN, false, false, false, false, 124731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NotificationType::AUTOFILL_DID_FILL_FORM_DATA, 125731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Source<RenderViewHost>(render_view_host))); 126731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 127731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // The previewed values should not be accessible to JavaScript. 128731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"firstname", "M"); 129731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"lastname", ""); 130731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"address1", ""); 131731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"address2", ""); 132731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"city", ""); 133731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"state", ""); 134731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"zip", ""); 135731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"country", ""); 136731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"phone", ""); 137731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // TODO(isherman): It would be nice to test that the previewed values are 138731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // displayed: http://crbug.com/57220 139731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 140731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Press Enter to accept the autofill suggestions. 141731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( 142731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick browser(), app::VKEY_RETURN, false, false, false, false, 143731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NotificationType::AUTOFILL_DID_FILL_FORM_DATA, 144731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Source<RenderViewHost>(render_view_host))); 145731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 146731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // The form should be filled. 147731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"firstname", "Milton"); 148731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"lastname", "Waddams"); 149731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"address1", "4120 Freidrich Lane"); 150731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"address2", "Basement"); 151731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"city", "Austin"); 152731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"state", "TX"); 153731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"zip", "78744"); 154731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"country", "US"); 155731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectFieldValue(L"phone", "5125551234"); 156731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 157