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