172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 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 "base/basictypes.h"
8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h"
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
10731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "base/string16.h"
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/utf_string_conversions.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/net/predictor_api.h"
1621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h"
1721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/translate/translate_infobar_delegate.h"
1821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/translate/translate_manager.h"
194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser.h"
204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser_window.h"
2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
2221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/common/net/test_url_fetcher_factory.h"
2321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/common/render_messages.h"
2421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/renderer/translate_helper.h"
25731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/test/in_process_browser_test.h"
26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/test/ui_test_utils.h"
27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/mock_render_process_host.h"
28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/render_view_host.h"
29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h"
30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "testing/gtest/include/gtest/gtest.h"
3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/keycodes/keyboard_codes.h"
32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenstatic const char* kDataURIPrefix = "data:text/html;charset=utf-8,";
3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenstatic const char* kTestFormString =
3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    "<form action=\"http://www.example.com/\" method=\"POST\">"
3621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    "<label for=\"firstname\">First name:</label>"
3721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " <input type=\"text\" id=\"firstname\""
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    "        onFocus=\"domAutomationController.send(true)\" /><br />"
3921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    "<label for=\"lastname\">Last name:</label>"
4021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " <input type=\"text\" id=\"lastname\" /><br />"
4121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    "<label for=\"address1\">Address line 1:</label>"
4221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " <input type=\"text\" id=\"address1\" /><br />"
4321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    "<label for=\"address2\">Address line 2:</label>"
4421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " <input type=\"text\" id=\"address2\" /><br />"
4521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    "<label for=\"city\">City:</label>"
4621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " <input type=\"text\" id=\"city\" /><br />"
4721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    "<label for=\"state\">State:</label>"
4821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " <select id=\"state\">"
4921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " <option value=\"\" selected=\"yes\">--</option>"
5021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " <option value=\"CA\">California</option>"
5121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " <option value=\"TX\">Texas</option>"
5221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " </select><br />"
5321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    "<label for=\"zip\">ZIP code:</label>"
5421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " <input type=\"text\" id=\"zip\" /><br />"
5521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    "<label for=\"country\">Country:</label>"
5621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " <select id=\"country\">"
5721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " <option value=\"\" selected=\"yes\">--</option>"
5821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " <option value=\"CA\">Canada</option>"
5921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " <option value=\"US\">United States</option>"
6021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " </select><br />"
6121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    "<label for=\"phone\">Phone number:</label>"
6221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    " <input type=\"text\" id=\"phone\" /><br />"
6321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    "</form>";
6421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass AutofillTest : public InProcessBrowserTest {
66731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick protected:
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  AutofillTest() {
68731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    set_show_window(true);
69731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EnableDOMAutomation();
70731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  }
71731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    URLFetcher::set_factory(&url_fetcher_factory_);
7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  }
7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void CreateTestProfile() {
77731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    autofill_test::DisableSystemServices(browser()->profile());
78731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    AutofillProfile profile;
80731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    autofill_test::SetProfileInfo(
81dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen        &profile, "Milton", "C.", "Waddams",
82731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        "red.swingline@initech.com", "Initech", "4120 Freidrich Lane",
83731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        "Basement", "Austin", "Texas", "78744", "United States", "5125551234",
84731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        "5125550000");
85731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
86731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    PersonalDataManager* personal_data_manager =
87731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        browser()->profile()->GetPersonalDataManager();
88731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    ASSERT_TRUE(personal_data_manager);
89731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    std::vector<AutofillProfile> profiles(1, profile);
91731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    personal_data_manager->SetProfiles(&profiles);
92731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  }
93731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
94731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void ExpectFieldValue(const std::wstring& field_name,
95731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                        const std::string& expected_value) {
96731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    std::string value;
97731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString(
98731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        browser()->GetSelectedTabContents()->render_view_host(), L"",
99731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        L"window.domAutomationController.send("
100731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        L"document.getElementById('" + field_name + L"').value);", &value));
101731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_EQ(expected_value, value);
102731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  }
10321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
10472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  RenderViewHost* render_view_host() {
10521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    return browser()->GetSelectedTabContents()->render_view_host();
10621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
10721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
10821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  void SimulateURLFetch(bool success) {
10921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
11021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ASSERT_TRUE(fetcher);
11172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    net::URLRequestStatus status;
11272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    status.set_status(success ? net::URLRequestStatus::SUCCESS :
11372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                                net::URLRequestStatus::FAILED);
11421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
11521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    std::string script = " var google = {};"
11621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "google.translate = (function() {"
11721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "  return {"
11821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "    TranslateService: function() {"
11921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "      return {"
12021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "        isAvailable : function() {"
12121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "          return true;"
12221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "        },"
12321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "        restore : function() {"
12421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "          return;"
12521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "        },"
12621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "        getDetectedLanguage : function() {"
12721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "          return \"ja\";"
12821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "        },"
12921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "        translatePage : function(originalLang, targetLang,"
13021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "                                 onTranslateProgress) {"
13121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "          document.getElementsByTagName(\"body\")[0].innerHTML = '" +
13221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        std::string(kTestFormString) +
13321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "              ';"
13421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "          onTranslateProgress(100, true, false);"
13521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "        }"
13621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "      };"
13721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "    }"
13821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "  };"
13921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "})();";
14021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
14121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    fetcher->delegate()->OnURLFetchComplete(fetcher, fetcher->original_url(),
14221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        status, success ? 200 : 500,
14321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        ResponseCookies(),
14421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        script);
14521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
14621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
14772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void FocusFirstNameField() {
14821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ASSERT_NO_FATAL_FAILURE(ui_test_utils::ClickOnView(browser(),
14921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                                                       VIEW_ID_TAB_CONTAINER));
15021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(),
15121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                                             VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
15221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
15321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    bool result = false;
15421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
15572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        render_view_host(), L"",
15672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        L"document.getElementById('firstname').focus();", &result));
15721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ASSERT_TRUE(result);
15872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  }
15972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
16072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void ExpectFilledTestForm() {
16172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ExpectFieldValue(L"firstname", "Milton");
16272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ExpectFieldValue(L"lastname", "Waddams");
16372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ExpectFieldValue(L"address1", "4120 Freidrich Lane");
16472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ExpectFieldValue(L"address2", "Basement");
16572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ExpectFieldValue(L"city", "Austin");
16672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ExpectFieldValue(L"state", "TX");
16772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ExpectFieldValue(L"zip", "78744");
16872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ExpectFieldValue(L"country", "US");
16972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ExpectFieldValue(L"phone", "5125551234");
17072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  }
17172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
17272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void TryBasicFormFill() {
17372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    FocusFirstNameField();
17472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
17521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // Start filling the first name field with "M" and wait for the popup to be
17621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // shown.
17721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
17872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        browser(), ui::VKEY_M, false, true, false, false,
17921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        NotificationType::AUTOFILL_DID_SHOW_SUGGESTIONS,
18072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        Source<RenderViewHost>(render_view_host())));
18121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
18221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // Press the down arrow to select the suggestion and preview the autofilled
18321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // form.
18421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
18572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        browser(), ui::VKEY_DOWN, false, false, false, false,
18621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        NotificationType::AUTOFILL_DID_FILL_FORM_DATA,
18772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        Source<RenderViewHost>(render_view_host())));
18821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
18921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // The previewed values should not be accessible to JavaScript.
19021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ExpectFieldValue(L"firstname", "M");
19121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ExpectFieldValue(L"lastname", "");
19221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ExpectFieldValue(L"address1", "");
19321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ExpectFieldValue(L"address2", "");
19421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ExpectFieldValue(L"city", "");
19521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ExpectFieldValue(L"state", "");
19621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ExpectFieldValue(L"zip", "");
19721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ExpectFieldValue(L"country", "");
19821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ExpectFieldValue(L"phone", "");
19921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // TODO(isherman): It would be nice to test that the previewed values are
20021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // displayed: http://crbug.com/57220
20121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
20221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // Press Enter to accept the autofill suggestions.
20321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
20472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        browser(), ui::VKEY_RETURN, false, false, false, false,
20521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        NotificationType::AUTOFILL_DID_FILL_FORM_DATA,
20672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        Source<RenderViewHost>(render_view_host())));
20721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
20821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // The form should be filled.
20972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ExpectFilledTestForm();
21021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
21121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
21221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen private:
21321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  TestURLFetcherFactory url_fetcher_factory_;
214731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick};
215731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
216731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Test that basic form fill is working.
217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(AutofillTest, BasicFormFill) {
21872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  CreateTestProfile();
219731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
22072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Load the test page.
221731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
22221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(),
22372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      GURL(std::string(kDataURIPrefix) + kTestFormString)));
22421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Invoke Autofill.
22672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  TryBasicFormFill();
22721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
22821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
22972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Test that form filling can be initiated by pressing the down arrow.
230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(AutofillTest, AutofillViaDownArrow) {
23172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  CreateTestProfile();
23272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
23372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Load the test page.
23472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
23572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(),
23672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      GURL(std::string(kDataURIPrefix) + kTestFormString)));
23772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
23872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Focus a fillable field.
23972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  FocusFirstNameField();
24072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Press the down arrow to initiate Autofill and wait for the popup to be
24272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // shown.
24372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
24472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      browser(), ui::VKEY_DOWN, false, false, false, false,
24572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      NotificationType::AUTOFILL_DID_SHOW_SUGGESTIONS,
24672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      Source<RenderViewHost>(render_view_host())));
24772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
24872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Press the down arrow to select the suggestion and preview the autofilled
24972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // form.
25072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
25172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      browser(), ui::VKEY_DOWN, false, false, false, false,
25272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      NotificationType::AUTOFILL_DID_FILL_FORM_DATA,
25372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      Source<RenderViewHost>(render_view_host())));
25472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
25572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Press Enter to accept the autofill suggestions.
25672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
25772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      browser(), ui::VKEY_RETURN, false, false, false, false,
25872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      NotificationType::AUTOFILL_DID_FILL_FORM_DATA,
25972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      Source<RenderViewHost>(render_view_host())));
26072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
26172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // The form should be filled.
26272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectFilledTestForm();
26372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
26472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Test that a JavaScript onchange event is fired after auto-filling a form.
266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(AutofillTest, OnChangeAfterAutofill) {
267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  CreateTestProfile();
268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const char* kOnChangeScript =
270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "<script>"
271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "focused_fired = false;"
272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "unfocused_fired = false;"
273ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "changed_select_fired = false;"
274ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "unchanged_select_fired = false;"
275ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "document.getElementById('firstname').onchange = function() {"
276ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "  focused_fired = true;"
277ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "};"
278ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "document.getElementById('lastname').onchange = function() {"
279ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "  unfocused_fired = true;"
280ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "};"
281ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "document.getElementById('state').onchange = function() {"
282ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "  changed_select_fired = true;"
283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "};"
284ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "document.getElementById('country').onchange = function() {"
285ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "  unchanged_select_fired = true;"
286ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "};"
287ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "document.getElementById('country').value = 'US';"
288ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "</script>";
289ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
290ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Load the test page.
291ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
292ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(),
293ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      GURL(std::string(kDataURIPrefix) + kTestFormString + kOnChangeScript)));
294ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
295ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Invoke Autofill.
296ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  FocusFirstNameField();
297ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
298ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Start filling the first name field with "M" and wait for the popup to be
299ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // shown.
300ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
301ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      browser(), ui::VKEY_M, false, true, false, false,
302ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NotificationType::AUTOFILL_DID_SHOW_SUGGESTIONS,
303ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      Source<RenderViewHost>(render_view_host())));
304ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
305ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Press the down arrow to select the suggestion and preview the autofilled
306ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // form.
307ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
308ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      browser(), ui::VKEY_DOWN, false, false, false, false,
309ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NotificationType::AUTOFILL_DID_FILL_FORM_DATA,
310ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      Source<RenderViewHost>(render_view_host())));
311ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
312ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Press Enter to accept the autofill suggestions.
313ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
314ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      browser(), ui::VKEY_RETURN, false, false, false, false,
315ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NotificationType::AUTOFILL_DID_FILL_FORM_DATA,
316ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      Source<RenderViewHost>(render_view_host())));
317ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
318ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // The form should be filled.
319ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ExpectFilledTestForm();
320ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
321ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // The change event should have already fired for unfocused fields, both of
322ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // <input> and of <select> type. However, it should not yet have fired for the
323ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // focused field.
324ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool focused_fired = false;
325ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool unfocused_fired = false;
326ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool changed_select_fired = false;
327ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool unchanged_select_fired = false;
328ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
329ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      render_view_host(), L"",
330ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      L"domAutomationController.send(focused_fired);", &focused_fired));
331ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
332ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      render_view_host(), L"",
333ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      L"domAutomationController.send(unfocused_fired);", &unfocused_fired));
334ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
335ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      render_view_host(), L"",
336ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      L"domAutomationController.send(changed_select_fired);",
337ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      &changed_select_fired));
338ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
339ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      render_view_host(), L"",
340ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      L"domAutomationController.send(unchanged_select_fired);",
341ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      &unchanged_select_fired));
342ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_FALSE(focused_fired);
343ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(unfocused_fired);
344ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(changed_select_fired);
345ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_FALSE(unchanged_select_fired);
346ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
347ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Unfocus the first name field. Its change event should fire.
348ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
349ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      render_view_host(), L"",
350ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      L"document.getElementById('firstname').blur();"
351ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      L"domAutomationController.send(focused_fired);", &focused_fired));
352ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(focused_fired);
353ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
354ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
355ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Test that we can autofill forms distinguished only by their |id| attribute.
356ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(AutofillTest, AutofillFormsDistinguishedById) {
357ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  CreateTestProfile();
358ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
359ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Load the test page.
360ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const std::string kURL =
361ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      std::string(kDataURIPrefix) + kTestFormString +
362ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "<script>"
363ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "var mainForm = document.forms[0];"
364ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "mainForm.id = 'mainForm';"
365ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "var newForm = document.createElement('form');"
366ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "newForm.action = mainForm.action;"
367ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "newForm.method = mainForm.method;"
368ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "newForm.id = 'newForm';"
369ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "mainForm.parentNode.insertBefore(newForm, mainForm);"
370ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      "</script>";
371ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
372ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), GURL(kURL)));
373ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
374ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Invoke Autofill.
375ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TryBasicFormFill();
376ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
377ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
37872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Test that form filling works after reloading the current page.
37972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// This test brought to you by http://crbug.com/69204
380ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(AutofillTest, AutofillAfterReload) {
38172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  CreateTestProfile();
38272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
38372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Load the test page.
38472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
38572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(),
38672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      GURL(std::string(kDataURIPrefix) + kTestFormString)));
38772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
38872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Reload the page.
389ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TabContents* tab =
390ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      browser()->GetSelectedTabContentsWrapper()->tab_contents();
391ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  tab->controller().Reload(false);
392ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ui_test_utils::WaitForLoadStop(tab);
39372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
394ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Invoke Autofill.
39572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  TryBasicFormFill();
39672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
39772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
39872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Test that autofill works after page translation.
399ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(AutofillTest, AutofillAfterTranslate) {
40072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  CreateTestProfile();
40172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
40272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  GURL url(std::string(kDataURIPrefix) +
40372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               "<form action=\"http://www.example.com/\" method=\"POST\">"
40472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               "<label for=\"fn\">なまえ</label>"
40572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " <input type=\"text\" id=\"fn\""
40672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               "        onFocus=\"domAutomationController.send(true)\""
40772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " /><br />"
40872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               "<label for=\"ln\">みょうじ</label>"
40972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " <input type=\"text\" id=\"ln\" /><br />"
41072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               "<label for=\"a1\">Address line 1:</label>"
41172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " <input type=\"text\" id=\"a1\" /><br />"
41272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               "<label for=\"a2\">Address line 2:</label>"
41372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " <input type=\"text\" id=\"a2\" /><br />"
41472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               "<label for=\"ci\">City:</label>"
41572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " <input type=\"text\" id=\"ci\" /><br />"
41672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               "<label for=\"st\">State:</label>"
41772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " <select id=\"st\">"
41872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " <option value=\"\" selected=\"yes\">--</option>"
41972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " <option value=\"CA\">California</option>"
42072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " <option value=\"TX\">Texas</option>"
42172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " </select><br />"
42272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               "<label for=\"z\">ZIP code:</label>"
42372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " <input type=\"text\" id=\"z\" /><br />"
42472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               "<label for=\"co\">Country:</label>"
42572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " <select id=\"co\">"
42672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " <option value=\"\" selected=\"yes\">--</option>"
42772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " <option value=\"CA\">Canada</option>"
42872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " <option value=\"US\">United States</option>"
42972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " </select><br />"
43072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               "<label for=\"ph\">Phone number:</label>"
43172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               " <input type=\"text\" id=\"ph\" /><br />"
43272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen               "</form>");
43321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
43472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), url));
43521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
43621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Get translation bar.
437ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  render_view_host()->OnMessageReceived(ViewHostMsg_TranslateLanguageDetermined(
438ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      0, "ja", true));
43921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  TranslateInfoBarDelegate* infobar = browser()->GetSelectedTabContents()->
44021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      GetInfoBarDelegateAt(0)->AsTranslateInfoBarDelegate();
44121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
44221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_TRUE(infobar != NULL);
44321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type());
44421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
44572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Simulate translation button press.
44621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  infobar->Translate();
44721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
44821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Simulate the translate script being retrieved.
44921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Pass fake google.translate lib as the translate script.
45021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  SimulateURLFetch(true);
45121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
45221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Simulate translation to kick onTranslateElementLoad.
45321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // But right now, the call stucks here.
45421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Once click the text field, it starts again.
45521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_TRUE(ui_test_utils::ExecuteJavaScript(
45672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      render_view_host(), L"",
45772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      L"cr.googleTranslate.onTranslateElementLoad();"));
45821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
45921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Simulate the render notifying the translation has been done.
46021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ui_test_utils::WaitForNotification(NotificationType::PAGE_TRANSLATED);
46121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
46272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  TryBasicFormFill();
463731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
464