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