1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 54311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include <string> 64311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 74311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "base/basictypes.h" 84311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "base/command_line.h" 94311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "base/file_util.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/ref_counted.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 124311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "base/rand_util.h" 134311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "base/strings/string16.h" 144311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "base/strings/string_number_conversions.h" 154311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "base/strings/string_split.h" 164311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "base/strings/utf_string_conversions.h" 174311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "base/time/time.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/autofill/personal_data_manager_factory.h" 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/infobars/confirm_infobar_delegate.h" 214311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "chrome/browser/infobars/infobar_service.h" 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/profiles/profile.h" 234311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "chrome/browser/translate/translate_infobar_delegate.h" 244311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "chrome/browser/translate/translate_manager.h" 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 264311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "chrome/browser/ui/browser_window.h" 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 284311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "chrome/common/render_messages.h" 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 304311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "chrome/test/base/test_switches.h" 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/content/browser/autofill_driver_impl.h" 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_common_test.h" 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_external_delegate.h" 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_manager.h" 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_manager_test_delegate.h" 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_profile.h" 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager.h" 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager_observer.h" 404311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "components/autofill/core/browser/validation.h" 414311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "content/public/browser/navigation_controller.h" 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_observer.h" 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_registrar.h" 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_service.h" 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/render_view_host.h" 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/web_contents.h" 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/browser_test_utils.h" 484311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "content/public/test/test_renderer_host.h" 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/test_utils.h" 504311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "net/url_request/test_url_fetcher_factory.h" 514311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "testing/gmock/include/gmock/gmock.h" 524311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/base/keycodes/keyboard_codes.h" 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill { 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 584311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdochstatic const char* kDataURIPrefix = "data:text/html;charset=utf-8,"; 594311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdochstatic const char* kTestFormString = 604311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<form action=\"http://www.example.com/\" method=\"POST\">" 614311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"firstname\">First name:</label>" 624311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"firstname\"" 634311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " onFocus=\"domAutomationController.send(true)\"><br>" 644311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"lastname\">Last name:</label>" 654311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"lastname\"><br>" 664311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"address1\">Address line 1:</label>" 674311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"address1\"><br>" 684311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"address2\">Address line 2:</label>" 694311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"address2\"><br>" 704311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"city\">City:</label>" 714311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"city\"><br>" 724311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"state\">State:</label>" 734311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <select id=\"state\">" 744311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"\" selected=\"yes\">--</option>" 754311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"CA\">California</option>" 764311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"TX\">Texas</option>" 774311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " </select><br>" 784311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"zip\">ZIP code:</label>" 794311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"zip\"><br>" 804311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"country\">Country:</label>" 814311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <select id=\"country\">" 824311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"\" selected=\"yes\">--</option>" 834311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"CA\">Canada</option>" 844311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"US\">United States</option>" 854311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " </select><br>" 864311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"phone\">Phone number:</label>" 874311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"phone\"><br>" 884311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "</form>"; 894311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 902385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 912385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// AutofillManagerTestDelegateImpl -------------------------------------------- 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AutofillManagerTestDelegateImpl 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : public autofill::AutofillManagerTestDelegate { 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillManagerTestDelegateImpl() {} 972385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch virtual ~AutofillManagerTestDelegateImpl() {} 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 99a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // autofill::AutofillManagerTestDelegate: 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DidPreviewFormData() OVERRIDE { 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_->Quit(); 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DidFillFormData() OVERRIDE { 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_->Quit(); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DidShowSuggestions() OVERRIDE { 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_->Quit(); 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void Reset() { 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_ = new content::MessageLoopRunner(); 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void Wait() { 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_->Run(); 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<content::MessageLoopRunner> loop_runner_; 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AutofillManagerTestDelegateImpl); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1262385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 1272385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// WindowedPersonalDataManagerObserver ---------------------------------------- 1282385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WindowedPersonalDataManagerObserver 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : public PersonalDataManagerObserver, 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public content::NotificationObserver { 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) explicit WindowedPersonalDataManagerObserver(Browser* browser) 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : alerted_(false), 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) has_run_message_loop_(false), 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser_(browser), 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) infobar_service_(NULL) { 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PersonalDataManagerFactory::GetForProfile(browser_->profile())-> 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddObserver(this); 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registrar_.Add(this, chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NotificationService::AllSources()); 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~WindowedPersonalDataManagerObserver() { 1452385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch if (infobar_service_) { 1462385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch while (infobar_service_->infobar_count() > 0) { 1472385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch infobar_service_->RemoveInfoBar(infobar_service_->infobar_at(0)); 1482385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } 1492385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // PersonalDataManagerObserver: 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnPersonalDataChanged() OVERRIDE { 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (has_run_message_loop_) { 15590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoopForUI::current()->Quit(); 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) has_run_message_loop_ = false; 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) alerted_ = true; 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnInsufficientFormData() OVERRIDE { 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnPersonalDataChanged(); 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // content::NotificationObserver: 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Observe(int type, 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const content::NotificationSource& source, 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const content::NotificationDetails& details) OVERRIDE { 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) infobar_service_ = InfoBarService::FromWebContents( 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser_->tab_strip_model()->GetActiveWebContents()); 1712385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch infobar_service_->infobar_at(0)->AsConfirmInfoBarDelegate()->Accept(); 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 174a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) void Wait() { 175a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (!alerted_) { 176a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) has_run_message_loop_ = true; 177a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) content::RunMessageLoop(); 178a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 179a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) PersonalDataManagerFactory::GetForProfile(browser_->profile())-> 180a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) RemoveObserver(this); 181a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 182a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool alerted_; 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool has_run_message_loop_; 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* browser_; 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NotificationRegistrar registrar_; 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InfoBarService* infobar_service_; 1892385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 1902385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch DISALLOW_COPY_AND_ASSIGN(WindowedPersonalDataManagerObserver); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1932385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 1942385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// TestAutofillExternalDelegate ----------------------------------------------- 1952385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class TestAutofillExternalDelegate : public AutofillExternalDelegate { 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TestAutofillExternalDelegate(content::WebContents* web_contents, 1997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch AutofillManager* autofill_manager, 2007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch AutofillDriver* autofill_driver) 2017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch : AutofillExternalDelegate(web_contents, autofill_manager, 2027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch autofill_driver), 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) keyboard_listener_(NULL) { 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2052385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~TestAutofillExternalDelegate() {} 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 208a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // AutofillExternalDelegate: 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnPopupShown(content::KeyboardListener* listener) OVERRIDE { 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillExternalDelegate::OnPopupShown(listener); 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) keyboard_listener_ = listener; 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnPopupHidden(content::KeyboardListener* listener) OVERRIDE { 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) keyboard_listener_ = NULL; 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillExternalDelegate::OnPopupHidden(listener); 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::KeyboardListener* keyboard_listener() { 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return keyboard_listener_; 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The popup that is currently registered as a keyboard listener, or NULL if 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // there is none. 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::KeyboardListener* keyboard_listener_; 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestAutofillExternalDelegate); 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2312385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 2322385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// AutofillInteractiveTest ---------------------------------------------------- 2332385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AutofillInteractiveTest : public InProcessBrowserTest { 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillInteractiveTest() {} 2372385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch virtual ~AutofillInteractiveTest() {} 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 239a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // InProcessBrowserTest: 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Don't want Keychain coming up on Mac. 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::DisableSystemServices(browser()->profile()); 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // When testing the native UI, hook up a test external delegate, which 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // allows us to forward keyboard events to the popup directly. 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::WebContents* web_contents = 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AutofillDriverImpl* autofill_driver = 2497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AutofillDriverImpl::FromWebContents(web_contents); 2507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AutofillManager* autofill_manager = autofill_driver->autofill_manager(); 251eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<AutofillExternalDelegate> external_delegate( 2527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new TestAutofillExternalDelegate(web_contents, autofill_manager, 2537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch autofill_driver)); 254eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch autofill_driver->SetAutofillExternalDelegate(external_delegate.Pass()); 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_manager->SetTestDelegate(&test_delegate_); 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void CleanUpOnMainThread() OVERRIDE { 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Make sure to close any showing popups prior to tearing down the UI. 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::WebContents* web_contents = 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillManager* autofill_manager = 2637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AutofillDriverImpl::FromWebContents(web_contents)->autofill_manager(); 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_manager->delegate()->HideAutofillPopup(); 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 267a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) PersonalDataManager* GetPersonalDataManager() { 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return PersonalDataManagerFactory::GetForProfile(browser()->profile()); 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 271a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) content::RenderViewHost* GetRenderViewHost() { 272a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return browser()->tab_strip_model()->GetActiveWebContents()-> 273a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetRenderViewHost(); 274a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 275a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 276a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) TestAutofillExternalDelegate* GetExternalDelegate() { 277a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) content::WebContents* web_contents = 278a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 279a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) AutofillDriverImpl* autofill_driver = 280a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) AutofillDriverImpl::FromWebContents(web_contents); 281a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return static_cast<TestAutofillExternalDelegate*>( 282a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) autofill_driver->autofill_external_delegate()); 283a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 284a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void CreateTestProfile() { 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillProfile profile; 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetProfileInfo( 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &profile, "Milton", "C.", "Waddams", 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "red.swingline@initech.com", "Initech", "4120 Freidrich Lane", 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "Basement", "Austin", "Texas", "78744", "US", "5125551234"); 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WindowedPersonalDataManagerObserver observer(browser()); 293a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetPersonalDataManager()->AddProfile(profile); 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AddProfile is asynchronous. Wait for it to finish before continuing the 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // tests. 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observer.Wait(); 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3004311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch void SetProfiles(std::vector<AutofillProfile>* profiles) { 3014311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch WindowedPersonalDataManagerObserver observer(browser()); 3024311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GetPersonalDataManager()->SetProfiles(profiles); 3034311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch observer.Wait(); 3044311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch } 3054311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 3064311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch void SetProfile(const AutofillProfile& profile) { 3074311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch std::vector<AutofillProfile> profiles; 3084311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profiles.push_back(profile); 3094311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SetProfiles(&profiles); 3104311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch } 3114311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 3124311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Populates a webpage form using autofill data and keypress events. 3134311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // This function focuses the specified input field in the form, and then 3144311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // sends keypress events to the tab to cause the form to be populated. 3154311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch void PopulateForm(const std::string& field_id) { 3164311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch std::string js("document.getElementById('" + field_id + "').focus();"); 3174311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(content::ExecuteScript(GetRenderViewHost(), js)); 3184311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 3194311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SendKeyToPageAndWait(ui::VKEY_DOWN); 3204311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 3214311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 3224311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch } 3234311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectFieldValue(const std::string& field_name, 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& expected_value) { 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string value; 327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractString( 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "window.domAutomationController.send(" 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " document.getElementById('" + field_name + "').value);", 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &value)); 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(expected_value, value); 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3354311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch void SimulateURLFetch(bool success) { 3364311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); 3374311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(fetcher); 3384311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch net::URLRequestStatus status; 3394311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch status.set_status(success ? net::URLRequestStatus::SUCCESS : 3404311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch net::URLRequestStatus::FAILED); 3414311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 3424311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch std::string script = " var google = {};" 3434311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "google.translate = (function() {" 3444311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " return {" 3454311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " TranslateService: function() {" 3464311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " return {" 3474311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " isAvailable : function() {" 3484311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " return true;" 3494311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " }," 3504311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " restore : function() {" 3514311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " return;" 3524311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " }," 3534311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " getDetectedLanguage : function() {" 3544311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " return \"ja\";" 3554311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " }," 3564311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " translatePage : function(originalLang, targetLang," 3574311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " onTranslateProgress) {" 3584311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " document.getElementsByTagName(\"body\")[0].innerHTML = '" + 3594311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch std::string(kTestFormString) + 3604311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " ';" 3614311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " onTranslateProgress(100, true, false);" 3624311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " }" 3634311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " };" 3644311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " }" 3654311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " };" 3664311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "})();"; 3674311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 3684311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch fetcher->set_url(fetcher->GetOriginalURL()); 3694311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch fetcher->set_status(status); 3704311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch fetcher->set_response_code(success ? 200 : 500); 3714311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch fetcher->SetResponseString(script); 3724311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch fetcher->delegate()->OnURLFetchComplete(fetcher); 3734311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch } 3744311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void FocusFirstNameField() { 376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool result = false; 377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 378a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetRenderViewHost(), 379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "if (document.readyState === 'complete')" 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " document.getElementById('firstname').focus();" 381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "else" 382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " domAutomationController.send(false);", 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &result)); 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result); 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectFilledTestForm() { 388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("firstname", "Milton"); 389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("lastname", "Waddams"); 390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("address1", "4120 Freidrich Lane"); 391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("address2", "Basement"); 392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("city", "Austin"); 393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("state", "TX"); 394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("zip", "78744"); 395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("country", "US"); 396c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("phone", "5125551234"); 397c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 399c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SendKeyToPageAndWait(ui::KeyboardCode key) { 400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_delegate_.Reset(); 401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::SimulateKeyPress( 402c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), 403c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) key, false, false, false, false); 404c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_delegate_.Wait(); 405c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 407c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SendKeyToPopupAndWait(ui::KeyboardCode key) { 408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // When testing the native UI, route popup-targeted key presses via the 409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // external delegate. 410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NativeWebKeyboardEvent event; 411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) event.windowsKeyCode = key; 412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_delegate_.Reset(); 413a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetExternalDelegate()->keyboard_listener()->HandleKeyPressEvent(event); 414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_delegate_.Wait(); 415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4174311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch void TryBasicFormFill() { 4184311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch FocusFirstNameField(); 4194311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4204311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Start filling the first name field with "M" and wait for the popup to be 4214311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // shown. 4224311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SendKeyToPageAndWait(ui::VKEY_M); 4234311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4244311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Press the down arrow to select the suggestion and preview the autofilled 4254311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // form. 4264311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 4274311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4284311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // The previewed values should not be accessible to JavaScript. 4294311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("firstname", "M"); 4304311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("lastname", std::string()); 4314311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("address1", std::string()); 4324311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("address2", std::string()); 4334311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("city", std::string()); 4344311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("state", std::string()); 4354311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("zip", std::string()); 4364311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("country", std::string()); 4374311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("phone", std::string()); 4384311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // TODO(isherman): It would be nice to test that the previewed values are 4394311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // displayed: http://crbug.com/57220 4404311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4414311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Press Enter to accept the autofill suggestions. 4424311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 4434311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4444311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // The form should be filled. 4454311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFilledTestForm(); 4464311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch } 4474311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4482385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch private: 449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillManagerTestDelegateImpl test_delegate_; 4502385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 4514311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch net::TestURLFetcherFactory url_fetcher_factory_; 4524311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4532385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch DISALLOW_COPY_AND_ASSIGN(AutofillInteractiveTest); 454c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 455c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4564311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Test that basic form fill is working. 4574311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, BasicFormFill) { 4584311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch CreateTestProfile(); 4594311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4604311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Load the test page. 4614311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 4624311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 4632385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 4644311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Invoke Autofill. 4654311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch TryBasicFormFill(); 4664311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 4672385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 4684311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Test that form filling can be initiated by pressing the down arrow. 4694311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillViaDownArrow) { 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateTestProfile(); 471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 472c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Load the test page. 473c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 474c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL(std::string(kDataURIPrefix) + kTestFormString))); 475c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 476c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Focus a fillable field. 477c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FocusFirstNameField(); 478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4794311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Press the down arrow to initiate Autofill and wait for the popup to be 4804311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // shown. 4814311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SendKeyToPageAndWait(ui::VKEY_DOWN); 4824311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4834311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Press the down arrow to select the suggestion and preview the autofilled 4844311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // form. 4854311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 4864311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4874311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Press Enter to accept the autofill suggestions. 4884311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 4894311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4904311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // The form should be filled. 4914311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFilledTestForm(); 4924311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 4934311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4944311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillSelectViaTab) { 4954311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch CreateTestProfile(); 4964311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 4974311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Load the test page. 4984311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 4994311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 5004311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 5014311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Focus a fillable field. 5024311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch FocusFirstNameField(); 503558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Press the down arrow to initiate Autofill and wait for the popup to be 505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // shown. 506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SendKeyToPageAndWait(ui::VKEY_DOWN); 507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Press the down arrow to select the suggestion and preview the autofilled 509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // form. 510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SendKeyToPopupAndWait(ui::VKEY_DOWN); 511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Press tab to accept the autofill suggestions. 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SendKeyToPopupAndWait(ui::VKEY_TAB); 514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 515c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The form should be filled. 516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFilledTestForm(); 517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 518c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5194311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Test that a JavaScript onchange event is fired after auto-filling a form. 5204311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnChangeAfterAutofill) { 5214311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch CreateTestProfile(); 5224311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 5234311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch const char* kOnChangeScript = 5244311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<script>" 5254311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "focused_fired = false;" 5264311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "unfocused_fired = false;" 5274311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "changed_select_fired = false;" 5284311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "unchanged_select_fired = false;" 5294311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "document.getElementById('firstname').onchange = function() {" 5304311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " focused_fired = true;" 5314311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "};" 5324311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "document.getElementById('lastname').onchange = function() {" 5334311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " unfocused_fired = true;" 5344311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "};" 5354311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "document.getElementById('state').onchange = function() {" 5364311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " changed_select_fired = true;" 5374311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "};" 5384311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "document.getElementById('country').onchange = function() {" 5394311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " unchanged_select_fired = true;" 5404311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "};" 5414311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "document.getElementById('country').value = 'US';" 5424311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "</script>"; 5434311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 5444311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Load the test page. 5454311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 5464311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString + kOnChangeScript))); 5474311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 5484311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Invoke Autofill. 5494311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch FocusFirstNameField(); 5504311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 5514311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Start filling the first name field with "M" and wait for the popup to be 5524311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // shown. 5534311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SendKeyToPageAndWait(ui::VKEY_M); 5544311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 5554311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Press the down arrow to select the suggestion and preview the autofilled 5564311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // form. 5574311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 5584311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 5594311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Press Enter to accept the autofill suggestions. 5604311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 5614311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 5624311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // The form should be filled. 5634311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFilledTestForm(); 5644311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 5654311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // The change event should have already fired for unfocused fields, both of 5664311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // <input> and of <select> type. However, it should not yet have fired for the 5674311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // focused field. 5684311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch bool focused_fired = false; 5694311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch bool unfocused_fired = false; 5704311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch bool changed_select_fired = false; 5714311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch bool unchanged_select_fired = false; 5724311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 5734311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GetRenderViewHost(), 5744311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "domAutomationController.send(focused_fired);", 5754311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch &focused_fired)); 5764311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 5774311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GetRenderViewHost(), 5784311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "domAutomationController.send(unfocused_fired);", 5794311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch &unfocused_fired)); 5804311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 5814311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GetRenderViewHost(), 5824311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "domAutomationController.send(changed_select_fired);", 5834311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch &changed_select_fired)); 5844311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 5854311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GetRenderViewHost(), 5864311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "domAutomationController.send(unchanged_select_fired);", 5874311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch &unchanged_select_fired)); 5884311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch EXPECT_FALSE(focused_fired); 5894311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch EXPECT_TRUE(unfocused_fired); 5904311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch EXPECT_TRUE(changed_select_fired); 5914311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch EXPECT_FALSE(unchanged_select_fired); 5924311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 5934311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Unfocus the first name field. Its change event should fire. 5944311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 5954311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GetRenderViewHost(), 5964311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "document.getElementById('firstname').blur();" 5974311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "domAutomationController.send(focused_fired);", &focused_fired)); 5984311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch EXPECT_TRUE(focused_fired); 5994311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 6004311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 6014311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Test that we can autofill forms distinguished only by their |id| attribute. 6024311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 6034311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch AutofillFormsDistinguishedById) { 6044311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch CreateTestProfile(); 6054311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 6064311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Load the test page. 6074311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch const std::string kURL = 6084311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch std::string(kDataURIPrefix) + kTestFormString + 6094311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<script>" 6104311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "var mainForm = document.forms[0];" 6114311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "mainForm.id = 'mainForm';" 6124311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "var newForm = document.createElement('form');" 6134311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "newForm.action = mainForm.action;" 6144311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "newForm.method = mainForm.method;" 6154311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "newForm.id = 'newForm';" 6164311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "mainForm.parentNode.insertBefore(newForm, mainForm);" 6174311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "</script>"; 6184311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), GURL(kURL))); 6194311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 6204311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Invoke Autofill. 6214311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch TryBasicFormFill(); 6224311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 6234311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 6244311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Test that we properly autofill forms with repeated fields. 6254311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// In the wild, the repeated fields are typically either email fields 6264311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// (duplicated for "confirmation"); or variants that are hot-swapped via 6274311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// JavaScript, with only one actually visible at any given time. 6284311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillFormWithRepeatedField) { 6294311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch CreateTestProfile(); 6304311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 6314311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Load the test page. 6324311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 6334311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GURL(std::string(kDataURIPrefix) + 6344311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<form action=\"http://www.example.com/\" method=\"POST\">" 6354311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"firstname\">First name:</label>" 6364311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"firstname\"" 6374311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " onFocus=\"domAutomationController.send(true)\"><br>" 6384311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"lastname\">Last name:</label>" 6394311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"lastname\"><br>" 6404311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"address1\">Address line 1:</label>" 6414311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"address1\"><br>" 6424311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"address2\">Address line 2:</label>" 6434311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"address2\"><br>" 6444311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"city\">City:</label>" 6454311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"city\"><br>" 6464311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"state\">State:</label>" 6474311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <select id=\"state\">" 6484311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"\" selected=\"yes\">--</option>" 6494311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"CA\">California</option>" 6504311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"TX\">Texas</option>" 6514311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " </select><br>" 6524311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"state_freeform\" style=\"display:none\">State:</label>" 6534311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"state_freeform\"" 6544311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " style=\"display:none\"><br>" 6554311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"zip\">ZIP code:</label>" 6564311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"zip\"><br>" 6574311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"country\">Country:</label>" 6584311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <select id=\"country\">" 6594311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"\" selected=\"yes\">--</option>" 6604311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"CA\">Canada</option>" 6614311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"US\">United States</option>" 6624311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " </select><br>" 6634311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"phone\">Phone number:</label>" 6644311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"phone\"><br>" 6654311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "</form>"))); 6664311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 6674311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Invoke Autofill. 6684311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch TryBasicFormFill(); 6694311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("state_freeform", std::string()); 6704311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 6714311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 6724311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Test that we properly autofill forms with non-autofillable fields. 6734311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 6744311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch AutofillFormWithNonAutofillableField) { 6754311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch CreateTestProfile(); 6764311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 6774311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Load the test page. 6784311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 6794311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GURL(std::string(kDataURIPrefix) + 6804311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<form action=\"http://www.example.com/\" method=\"POST\">" 6814311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"firstname\">First name:</label>" 6824311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"firstname\"" 6834311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " onFocus=\"domAutomationController.send(true)\"><br>" 6844311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"middlename\">Middle name:</label>" 6854311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"middlename\" autocomplete=\"off\" /><br>" 6864311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"lastname\">Last name:</label>" 6874311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"lastname\"><br>" 6884311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"address1\">Address line 1:</label>" 6894311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"address1\"><br>" 6904311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"address2\">Address line 2:</label>" 6914311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"address2\"><br>" 6924311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"city\">City:</label>" 6934311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"city\"><br>" 6944311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"state\">State:</label>" 6954311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <select id=\"state\">" 6964311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"\" selected=\"yes\">--</option>" 6974311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"CA\">California</option>" 6984311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"TX\">Texas</option>" 6994311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " </select><br>" 7004311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"zip\">ZIP code:</label>" 7014311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"zip\"><br>" 7024311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"country\">Country:</label>" 7034311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <select id=\"country\">" 7044311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"\" selected=\"yes\">--</option>" 7054311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"CA\">Canada</option>" 7064311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"US\">United States</option>" 7074311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " </select><br>" 7084311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"phone\">Phone number:</label>" 7094311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"phone\"><br>" 7104311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "</form>"))); 7114311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 7124311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Invoke Autofill. 7134311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch TryBasicFormFill(); 7144311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 7154311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 7164311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Test that we can Autofill dynamically generated forms. 7174311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, DynamicFormFill) { 7184311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch CreateTestProfile(); 7194311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 7204311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Load the test page. 7214311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 7224311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GURL(std::string(kDataURIPrefix) + 7234311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<form id=\"form\" action=\"http://www.example.com/\"" 7244311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " method=\"POST\"></form>" 7254311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<script>" 7264311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "function AddElement(name, label) {" 7274311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " var form = document.getElementById('form');" 7284311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "" 7294311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " var label_text = document.createTextNode(label);" 7304311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " var label_element = document.createElement('label');" 7314311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " label_element.setAttribute('for', name);" 7324311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " label_element.appendChild(label_text);" 7334311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " form.appendChild(label_element);" 7344311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "" 7354311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " if (name === 'state' || name === 'country') {" 7364311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " var select_element = document.createElement('select');" 7374311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " select_element.setAttribute('id', name);" 7384311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " select_element.setAttribute('name', name);" 7394311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "" 7404311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " /* Add an empty selected option. */" 7414311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " var default_option = new Option('--', '', true);" 7424311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " select_element.appendChild(default_option);" 7434311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "" 7444311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " /* Add the other options. */" 7454311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " if (name == 'state') {" 7464311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " var option1 = new Option('California', 'CA');" 7474311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " select_element.appendChild(option1);" 7484311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " var option2 = new Option('Texas', 'TX');" 7494311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " select_element.appendChild(option2);" 7504311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " } else {" 7514311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " var option1 = new Option('Canada', 'CA');" 7524311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " select_element.appendChild(option1);" 7534311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " var option2 = new Option('United States', 'US');" 7544311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " select_element.appendChild(option2);" 7554311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " }" 7564311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "" 7574311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " form.appendChild(select_element);" 7584311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " } else {" 7594311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " var input_element = document.createElement('input');" 7604311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " input_element.setAttribute('id', name);" 7614311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " input_element.setAttribute('name', name);" 7624311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "" 7634311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " /* Add the onFocus listener to the 'firstname' field. */" 7644311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " if (name === 'firstname') {" 7654311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " input_element.setAttribute(" 7664311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " 'onFocus', 'domAutomationController.send(true)');" 7674311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " }" 7684311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "" 7694311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " form.appendChild(input_element);" 7704311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " }" 7714311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "" 7724311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " form.appendChild(document.createElement('br'));" 7734311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "};" 7744311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "" 7754311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "function BuildForm() {" 7764311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " var elements = [" 7774311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " ['firstname', 'First name:']," 7784311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " ['lastname', 'Last name:']," 7794311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " ['address1', 'Address line 1:']," 7804311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " ['address2', 'Address line 2:']," 7814311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " ['city', 'City:']," 7824311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " ['state', 'State:']," 7834311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " ['zip', 'ZIP code:']," 7844311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " ['country', 'Country:']," 7854311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " ['phone', 'Phone number:']," 7864311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " ];" 7874311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "" 7884311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " for (var i = 0; i < elements.length; i++) {" 7894311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " var name = elements[i][0];" 7904311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " var label = elements[i][1];" 7914311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " AddElement(name, label);" 7924311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " }" 7934311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "};" 7944311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "</script>"))); 7954311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 7964311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Dynamically construct the form. 7974311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(content::ExecuteScript(GetRenderViewHost(), "BuildForm();")); 7984311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 7994311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Invoke Autofill. 8004311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch TryBasicFormFill(); 8014311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 8024311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 8034311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Test that form filling works after reloading the current page. 8044311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillAfterReload) { 8054311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch CreateTestProfile(); 8064311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 8074311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Load the test page. 8084311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 8094311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 8104311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 8114311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Reload the page. 8124311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch content::WebContents* web_contents = 8134311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch browser()->tab_strip_model()->GetActiveWebContents(); 8144311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch web_contents->GetController().Reload(false); 8154311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch content::WaitForLoadStop(web_contents); 8164311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 8174311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Invoke Autofill. 8184311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch TryBasicFormFill(); 8194311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 8204311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 8214311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// DISABLED: http://crbug.com/150084 8224311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 8234311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch DISABLED_AutofillAfterTranslate) { 8244311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch CreateTestProfile(); 8254311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 8264311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GURL url(std::string(kDataURIPrefix) + 8274311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<form action=\"http://www.example.com/\" method=\"POST\">" 8284311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"fn\">なまえ</label>" 8294311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"fn\"" 8304311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " onFocus=\"domAutomationController.send(true)\"" 8314311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "><br>" 8324311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"ln\">みょうじ</label>" 8334311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"ln\"><br>" 8344311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"a1\">Address line 1:</label>" 8354311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"a1\"><br>" 8364311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"a2\">Address line 2:</label>" 8374311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"a2\"><br>" 8384311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"ci\">City:</label>" 8394311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"ci\"><br>" 8404311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"st\">State:</label>" 8414311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <select id=\"st\">" 8424311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"\" selected=\"yes\">--</option>" 8434311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"CA\">California</option>" 8444311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"TX\">Texas</option>" 8454311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " </select><br>" 8464311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"z\">ZIP code:</label>" 8474311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"z\"><br>" 8484311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"co\">Country:</label>" 8494311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <select id=\"co\">" 8504311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"\" selected=\"yes\">--</option>" 8514311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"CA\">Canada</option>" 8524311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <option value=\"US\">United States</option>" 8534311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " </select><br>" 8544311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "<label for=\"ph\">Phone number:</label>" 8554311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch " <input type=\"text\" id=\"ph\"><br>" 8564311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "</form>"); 8574311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), url)); 8584311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 8594311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Get translation bar. 8604311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch LanguageDetectionDetails details; 8614311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch details.adopted_language = "ja"; 8624311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch content::RenderViewHostTester::TestOnMessageReceived( 8634311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GetRenderViewHost(), 8644311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ChromeViewHostMsg_TranslateLanguageDetermined(0, details, true)); 8654311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch TranslateInfoBarDelegate* delegate = InfoBarService::FromWebContents( 8664311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch browser()->tab_strip_model()->GetActiveWebContents())->infobar_at(0)-> 8674311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch AsTranslateInfoBarDelegate(); 8684311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(delegate); 8694311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, 8704311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch delegate->infobar_type()); 8714311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 8724311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Simulate translation button press. 8734311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch delegate->Translate(); 8744311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 8754311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Simulate the translate script being retrieved. 8764311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Pass fake google.translate lib as the translate script. 8774311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SimulateURLFetch(true); 8784311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 8794311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch content::WindowedNotificationObserver translation_observer( 8804311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch chrome::NOTIFICATION_PAGE_TRANSLATED, 8814311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch content::NotificationService::AllSources()); 8824311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 8834311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Simulate translation to kick onTranslateElementLoad. 8844311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // But right now, the call stucks here. 8854311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Once click the text field, it starts again. 8864311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(content::ExecuteScript( 8874311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GetRenderViewHost(), "cr.googleTranslate.onTranslateElementLoad();")); 8884311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 8894311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Simulate the render notifying the translation has been done. 8904311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch translation_observer.Wait(); 8914311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 8924311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch TryBasicFormFill(); 8934311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 8944311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 8954311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Test phone fields parse correctly from a given profile. 8964311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// The high level key presses execute the following: Select the first text 8974311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// field, invoke the autofill popup list, select the first profile within the 8984311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// list, and commit to the profile to populate the form. 8994311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, ComparePhoneNumbers) { 9004311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(test_server()->Start()); 9014311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 9024311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch AutofillProfile profile; 9034311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Bob")); 9044311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith")); 9054311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16("1234 H St.")); 9064311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(ADDRESS_HOME_CITY, ASCIIToUTF16("San Jose")); 9074311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA")); 9084311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(ADDRESS_HOME_ZIP, ASCIIToUTF16("95110")); 9094311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("1-408-555-4567")); 9104311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SetProfile(profile); 9114311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 9124311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GURL url = test_server()->GetURL("files/autofill/form_phones.html"); 9134311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 9144311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch PopulateForm("NAME_FIRST"); 9154311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 9164311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("NAME_FIRST", "Bob"); 9174311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("NAME_LAST", "Smith"); 9184311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("ADDRESS_HOME_LINE1", "1234 H St."); 9194311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("ADDRESS_HOME_CITY", "San Jose"); 9204311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("ADDRESS_HOME_STATE", "CA"); 9214311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("ADDRESS_HOME_ZIP", "95110"); 9224311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("PHONE_HOME_WHOLE_NUMBER", "14085554567"); 9234311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("PHONE_HOME_CITY_CODE-1", "408"); 9244311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("PHONE_HOME_CITY_CODE-2", "408"); 9254311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("PHONE_HOME_NUMBER", "5554567"); 9264311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("PHONE_HOME_NUMBER_3-1", "555"); 9274311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("PHONE_HOME_NUMBER_3-2", "555"); 9284311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("PHONE_HOME_NUMBER_4-1", "4567"); 9294311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("PHONE_HOME_NUMBER_4-2", "4567"); 9304311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("PHONE_HOME_EXT-1", std::string()); 9314311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("PHONE_HOME_EXT-2", std::string()); 9324311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("PHONE_HOME_COUNTRY_CODE-1", "1"); 9334311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 9344311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 9354311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Test that Autofill does not fill in read-only fields. 9364311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, NoAutofillForReadOnlyFields) { 9374311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(test_server()->Start()); 9384311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 9394311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch std::string addr_line1("1234 H St."); 9404311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 9414311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch AutofillProfile profile; 9424311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Bob")); 9434311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith")); 9444311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(EMAIL_ADDRESS, ASCIIToUTF16("bsmith@gmail.com")); 9454311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16(addr_line1)); 9464311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(ADDRESS_HOME_CITY, ASCIIToUTF16("San Jose")); 9474311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA")); 9484311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(ADDRESS_HOME_ZIP, ASCIIToUTF16("95110")); 9494311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(COMPANY_NAME, ASCIIToUTF16("Company X")); 9504311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("408-871-4567")); 9514311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SetProfile(profile); 9524311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 9534311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GURL url = test_server()->GetURL("files/autofill/read_only_field_test.html"); 9544311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 9554311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch PopulateForm("firstname"); 9564311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 9574311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("email", std::string()); 9584311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("address", addr_line1); 9594311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 9604311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 9614311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Test form is fillable from a profile after form was reset. 9624311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Steps: 9634311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// 1. Fill form using a saved profile. 9644311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// 2. Reset the form. 9654311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// 3. Fill form using a saved profile. 9664311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Flakily times out: http://crbug.com/270341 9674311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, DISABLED_FormFillableOnReset) { 9684311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(test_server()->Start()); 9694311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 9704311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch CreateTestProfile(); 9714311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 9724311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GURL url = test_server()->GetURL("files/autofill/autofill_test_form.html"); 9734311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 9744311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch PopulateForm("NAME_FIRST"); 9754311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 9764311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(content::ExecuteScript( 9774311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch browser()->tab_strip_model()->GetActiveWebContents(), 9784311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "document.getElementById('testform').reset()")); 9794311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 9804311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch PopulateForm("NAME_FIRST"); 9814311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 9824311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("NAME_FIRST", "Milton"); 9834311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("NAME_LAST", "Waddams"); 9844311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("EMAIL_ADDRESS", "red.swingline@initech.com"); 9854311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("ADDRESS_HOME_LINE1", "4120 Freidrich Lane"); 9864311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("ADDRESS_HOME_CITY", "Austin"); 9874311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("ADDRESS_HOME_STATE", "Texas"); 9884311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("ADDRESS_HOME_ZIP", "78744"); 9894311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("ADDRESS_HOME_COUNTRY", "United States"); 9904311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("PHONE_HOME_WHOLE_NUMBER", "5125551234"); 9914311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 9924311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 9934311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Test Autofill distinguishes a middle initial in a name. 9944311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Flakily times out: http://crbug.com/270341 9954311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 9964311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch DISABLED_DistinguishMiddleInitialWithinName) { 9974311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(test_server()->Start()); 9984311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 9994311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch CreateTestProfile(); 10004311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 10014311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GURL url = test_server()->GetURL( 10024311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "files/autofill/autofill_middleinit_form.html"); 10034311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 10044311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch PopulateForm("NAME_FIRST"); 10054311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 10064311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("NAME_MIDDLE", "C"); 10074311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 10084311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 10094311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Test forms with multiple email addresses are filled properly. 10104311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Entire form should be filled with one user gesture. 10114311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Flakily times out: http://crbug.com/270341 10124311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 10134311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch DISABLED_MultipleEmailFilledByOneUserGesture) { 10144311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(test_server()->Start()); 10154311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 10164311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch std::string email("bsmith@gmail.com"); 10174311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 10184311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch AutofillProfile profile; 10194311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Bob")); 10204311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith")); 10214311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(EMAIL_ADDRESS, ASCIIToUTF16(email)); 10224311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("4088714567")); 10234311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SetProfile(profile); 10244311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 10254311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GURL url = test_server()->GetURL( 10264311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "files/autofill/autofill_confirmemail_form.html"); 10274311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 10284311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch PopulateForm("NAME_FIRST"); 10294311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 10304311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ExpectFieldValue("EMAIL_CONFIRM", email); 10314311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // TODO(isherman): verify entire form. 10324311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 10334311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 10344311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// http://crbug.com/150084 10354311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#if defined(OS_MACOSX) 10364311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#define MAYBE_FormFillLatencyAfterSubmit FormFillLatencyAfterSubmit 10374311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#else 10384311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#define MAYBE_FormFillLatencyAfterSubmit DISABLED_FormFillLatencyAfterSubmit 10394311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#endif 10404311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Test latency time on form submit with lots of stored Autofill profiles. 10414311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// This test verifies when a profile is selected from the Autofill dictionary 10424311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// that consists of thousands of profiles, the form does not hang after being 10434311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// submitted. 10444311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 10454311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch MAYBE_FormFillLatencyAfterSubmit) { 10464311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(test_server()->Start()); 10474311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 10484311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch std::vector<std::string> cities; 10494311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch cities.push_back("San Jose"); 10504311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch cities.push_back("San Francisco"); 10514311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch cities.push_back("Sacramento"); 10524311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch cities.push_back("Los Angeles"); 10534311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 10544311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch std::vector<std::string> streets; 10554311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch streets.push_back("St"); 10564311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch streets.push_back("Ave"); 10574311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch streets.push_back("Ln"); 10584311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch streets.push_back("Ct"); 10594311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 10604311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch const int kNumProfiles = 1500; 10614311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch base::Time start_time = base::Time::Now(); 10624311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch std::vector<AutofillProfile> profiles; 10634311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch for (int i = 0; i < kNumProfiles; i++) { 10644311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch AutofillProfile profile; 10654311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch string16 name(base::IntToString16(i)); 10664311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch string16 email(name + ASCIIToUTF16("@example.com")); 10674311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch string16 street = ASCIIToUTF16( 10684311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch base::IntToString(base::RandInt(0, 10000)) + " " + 10694311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch streets[base::RandInt(0, streets.size() - 1)]); 10704311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch string16 city = ASCIIToUTF16(cities[base::RandInt(0, cities.size() - 1)]); 10714311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch string16 zip(base::IntToString16(base::RandInt(0, 10000))); 10724311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(NAME_FIRST, name); 10734311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(EMAIL_ADDRESS, email); 10744311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(ADDRESS_HOME_LINE1, street); 10754311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(ADDRESS_HOME_CITY, city); 10764311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(ADDRESS_HOME_STATE, WideToUTF16(L"CA")); 10774311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(ADDRESS_HOME_ZIP, zip); 10784311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile.SetRawInfo(ADDRESS_HOME_COUNTRY, WideToUTF16(L"US")); 10794311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profiles.push_back(profile); 10804311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch } 10814311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SetProfiles(&profiles); 10824311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // TODO(isherman): once we're sure this test doesn't timeout on any bots, this 10834311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // can be removd. 10844311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch LOG(INFO) << "Created " << kNumProfiles << " profiles in " << 10854311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch (base::Time::Now() - start_time).InSeconds() << " seconds."; 10864311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 10874311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GURL url = test_server()->GetURL( 10884311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "files/autofill/latency_after_submit_test.html"); 10894311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 10904311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch PopulateForm("NAME_FIRST"); 10914311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 10924311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch content::WindowedNotificationObserver load_stop_observer( 10934311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch content::NOTIFICATION_LOAD_STOP, 10944311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch content::Source<content::NavigationController>( 10954311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch &browser()->tab_strip_model()->GetActiveWebContents()-> 10964311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GetController())); 10974311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 10984311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(content::ExecuteScript( 10994311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GetRenderViewHost(), 11004311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "document.getElementById('testform').submit();")); 11014311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // This will ensure the test didn't hang. 11024311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch load_stop_observer.Wait(); 11034311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 11044311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 11054311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// Test that Chrome doesn't crash when autocomplete is disabled while the user 11064311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// is interacting with the form. This is a regression test for 11074311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// http://crbug.com/160476 11084311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 11094311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch DisableAutocompleteWhileFilling) { 11104311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch CreateTestProfile(); 11114311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 11124311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Load the test page. 11134311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 11144311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 11154311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 11164311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Invoke Autofill: Start filling the first name field with "M" and wait for 11174311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // the popup to be shown. 11184311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch FocusFirstNameField(); 11194311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SendKeyToPageAndWait(ui::VKEY_M); 11204311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 11214311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Now that the popup with suggestions is showing, disable autocomplete for 11224311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // the active field. 11234311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(content::ExecuteScript( 11244311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GetRenderViewHost(), 11254311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "document.querySelector('input').autocomplete = 'off';")); 11264311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 11274311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Press the down arrow to select the suggestion and attempt to preview the 11284311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // autofilled form. 11294311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch content::NativeWebKeyboardEvent event; 11304311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch event.windowsKeyCode = ui::VKEY_DOWN; 11314311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GetExternalDelegate()->keyboard_listener()->HandleKeyPressEvent(event); 11324311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 11334311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Wait for any IPCs to complete by performing an action that generates an 11344311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // IPC that's easy to wait for. Chrome shouldn't crash. 11354311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch bool result = false; 11364311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 11374311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch GetRenderViewHost(), 11384311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "var city = document.getElementById('city');" 11394311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "city.onfocus = function() { domAutomationController.send(true); };" 11404311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch "city.focus()", 11414311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch &result)); 11424311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ASSERT_TRUE(result); 11434311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SendKeyToPageAndWait(ui::VKEY_A); 11444311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 11454311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 1146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace autofill 1147