autofill_interactive_uitest.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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) 5ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include <string> 6ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 7ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/basictypes.h" 8ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/command_line.h" 9ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/file_util.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/ref_counted.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 12ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/rand_util.h" 13ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/strings/string16.h" 14ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/strings/string_number_conversions.h" 15ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/strings/string_split.h" 16ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/strings/utf_string_conversions.h" 17ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben 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" 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/infobars/infobar.h" 22ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/infobars/infobar_service.h" 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/profiles/profile.h" 24ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/translate/translate_infobar_delegate.h" 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/translate/translate_service.h" 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/translate/translate_tab_helper.h" 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 28ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/ui/browser_window.h" 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 30ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/common/render_messages.h" 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 32ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/test/base/test_switches.h" 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/autofill/content/browser/content_autofill_driver.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" 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/autofill/core/browser/autofill_test_utils.h" 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager.h" 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager_observer.h" 41ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "components/autofill/core/browser/validation.h" 42ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "content/public/browser/navigation_controller.h" 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_observer.h" 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_registrar.h" 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_service.h" 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/render_view_host.h" 470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "content/public/browser/render_widget_host.h" 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/web_contents.h" 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/browser_test_utils.h" 50ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "content/public/test/test_renderer_host.h" 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/test_utils.h" 52ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "net/url_request/test_url_fetcher_factory.h" 53ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "testing/gmock/include/gmock/gmock.h" 54ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h" 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill { 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 61ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochstatic const char* kDataURIPrefix = "data:text/html;charset=utf-8,"; 62ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochstatic const char* kTestFormString = 63ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<form action=\"http://www.example.com/\" method=\"POST\">" 64ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"firstname\">First name:</label>" 65ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"firstname\"" 66ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " onFocus=\"domAutomationController.send(true)\"><br>" 67ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"lastname\">Last name:</label>" 68ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"lastname\"><br>" 69ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address1\">Address line 1:</label>" 70ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address1\"><br>" 71ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address2\">Address line 2:</label>" 72ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address2\"><br>" 73ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"city\">City:</label>" 74ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"city\"><br>" 75ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"state\">State:</label>" 76ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"state\">" 77ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 78ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">California</option>" 79ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"TX\">Texas</option>" 80ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 81ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"zip\">ZIP code:</label>" 82ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"zip\"><br>" 83ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"country\">Country:</label>" 84ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"country\">" 85ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 86ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">Canada</option>" 87ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"US\">United States</option>" 88ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 89ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"phone\">Phone number:</label>" 90ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"phone\"><br>" 91ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</form>"; 92ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 932385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 942385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// AutofillManagerTestDelegateImpl -------------------------------------------- 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AutofillManagerTestDelegateImpl 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : public autofill::AutofillManagerTestDelegate { 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillManagerTestDelegateImpl() {} 1002385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch virtual ~AutofillManagerTestDelegateImpl() {} 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 102a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // autofill::AutofillManagerTestDelegate: 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DidPreviewFormData() OVERRIDE { 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_->Quit(); 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DidFillFormData() OVERRIDE { 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_->Quit(); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DidShowSuggestions() OVERRIDE { 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_->Quit(); 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void Reset() { 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_ = new content::MessageLoopRunner(); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void Wait() { 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_->Run(); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<content::MessageLoopRunner> loop_runner_; 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AutofillManagerTestDelegateImpl); 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1292385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 1302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// WindowedPersonalDataManagerObserver ---------------------------------------- 1312385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WindowedPersonalDataManagerObserver 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : public PersonalDataManagerObserver, 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public content::NotificationObserver { 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) explicit WindowedPersonalDataManagerObserver(Browser* browser) 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : alerted_(false), 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) has_run_message_loop_(false), 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser_(browser), 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) infobar_service_(NULL) { 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PersonalDataManagerFactory::GetForProfile(browser_->profile())-> 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddObserver(this); 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registrar_.Add(this, chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NotificationService::AllSources()); 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~WindowedPersonalDataManagerObserver() { 1482385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch if (infobar_service_) { 1492385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch while (infobar_service_->infobar_count() > 0) { 1502385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch infobar_service_->RemoveInfoBar(infobar_service_->infobar_at(0)); 1512385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } 1522385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // PersonalDataManagerObserver: 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnPersonalDataChanged() OVERRIDE { 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (has_run_message_loop_) { 15890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoopForUI::current()->Quit(); 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) has_run_message_loop_ = false; 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) alerted_ = true; 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnInsufficientFormData() OVERRIDE { 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnPersonalDataChanged(); 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // content::NotificationObserver: 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Observe(int type, 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const content::NotificationSource& source, 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const content::NotificationDetails& details) OVERRIDE { 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) infobar_service_ = InfoBarService::FromWebContents( 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser_->tab_strip_model()->GetActiveWebContents()); 174a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) infobar_service_->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate()-> 175a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Accept(); 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 178a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) void Wait() { 179a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (!alerted_) { 180a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) has_run_message_loop_ = true; 181a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) content::RunMessageLoop(); 182a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 183a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) PersonalDataManagerFactory::GetForProfile(browser_->profile())-> 184a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) RemoveObserver(this); 185a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 186a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool alerted_; 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool has_run_message_loop_; 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* browser_; 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NotificationRegistrar registrar_; 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InfoBarService* infobar_service_; 1932385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 1942385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch DISALLOW_COPY_AND_ASSIGN(WindowedPersonalDataManagerObserver); 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1972385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// AutofillInteractiveTest ---------------------------------------------------- 1982385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AutofillInteractiveTest : public InProcessBrowserTest { 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 2010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) AutofillInteractiveTest() : 2020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) key_press_event_sink_( 2030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) base::Bind(&AutofillInteractiveTest::HandleKeyPressEvent, 2040f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) base::Unretained(this))) {} 2052385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch virtual ~AutofillInteractiveTest() {} 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 207a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // InProcessBrowserTest: 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TranslateService::SetUseInfobar(true); 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Don't want Keychain coming up on Mac. 212a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) test::DisableSystemServices(browser()->profile()->GetPrefs()); 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Inject the test delegate into the AutofillManager. 2150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::WebContents* web_contents = GetWebContents(); 216a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContentAutofillDriver* autofill_driver = 217a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContentAutofillDriver::FromWebContents(web_contents); 2187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AutofillManager* autofill_manager = autofill_driver->autofill_manager(); 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_manager->SetTestDelegate(&test_delegate_); 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void CleanUpOnMainThread() OVERRIDE { 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Make sure to close any showing popups prior to tearing down the UI. 2240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::WebContents* web_contents = GetWebContents(); 225a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutofillManager* autofill_manager = ContentAutofillDriver::FromWebContents( 226a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) web_contents)->autofill_manager(); 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_manager->delegate()->HideAutofillPopup(); 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 230a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) PersonalDataManager* GetPersonalDataManager() { 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return PersonalDataManagerFactory::GetForProfile(browser()->profile()); 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::WebContents* GetWebContents() { 2350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return browser()->tab_strip_model()->GetActiveWebContents(); 236a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 237a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::RenderViewHost* GetRenderViewHost() { 2390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return GetWebContents()->GetRenderViewHost(); 240a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 241a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void CreateTestProfile() { 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillProfile profile; 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetProfileInfo( 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &profile, "Milton", "C.", "Waddams", 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "red.swingline@initech.com", "Initech", "4120 Freidrich Lane", 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "Basement", "Austin", "Texas", "78744", "US", "5125551234"); 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WindowedPersonalDataManagerObserver observer(browser()); 250a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetPersonalDataManager()->AddProfile(profile); 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AddProfile is asynchronous. Wait for it to finish before continuing the 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // tests. 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observer.Wait(); 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 257ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void SetProfiles(std::vector<AutofillProfile>* profiles) { 258ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WindowedPersonalDataManagerObserver observer(browser()); 259ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetPersonalDataManager()->SetProfiles(profiles); 260ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch observer.Wait(); 261ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 262ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 263ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void SetProfile(const AutofillProfile& profile) { 264ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::vector<AutofillProfile> profiles; 265ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profiles.push_back(profile); 266ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetProfiles(&profiles); 267ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 268ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 269ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Populates a webpage form using autofill data and keypress events. 270ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // This function focuses the specified input field in the form, and then 271ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // sends keypress events to the tab to cause the form to be populated. 272ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void PopulateForm(const std::string& field_id) { 273ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string js("document.getElementById('" + field_id + "').focus();"); 274ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScript(GetRenderViewHost(), js)); 275ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 276ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPageAndWait(ui::VKEY_DOWN); 277ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 278ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 279ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 280ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectFieldValue(const std::string& field_name, 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& expected_value) { 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string value; 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractString( 2850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetWebContents(), 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "window.domAutomationController.send(" 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " document.getElementById('" + field_name + "').value);", 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &value)); 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(expected_value, value); 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 292ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void SimulateURLFetch(bool success) { 293ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); 294ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(fetcher); 295ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch net::URLRequestStatus status; 296ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch status.set_status(success ? net::URLRequestStatus::SUCCESS : 297ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch net::URLRequestStatus::FAILED); 298ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 299ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string script = " var google = {};" 300ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "google.translate = (function() {" 301ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " return {" 302ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " TranslateService: function() {" 303ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " return {" 304ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " isAvailable : function() {" 305ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " return true;" 306ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }," 307ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " restore : function() {" 308ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " return;" 309ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }," 310ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " getDetectedLanguage : function() {" 311ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " return \"ja\";" 312ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }," 313ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " translatePage : function(originalLang, targetLang," 314ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " onTranslateProgress) {" 315ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " document.getElementsByTagName(\"body\")[0].innerHTML = '" + 316ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string(kTestFormString) + 317ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ';" 318ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " onTranslateProgress(100, true, false);" 319ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 320ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " };" 321ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 322ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " };" 3233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "})();" 3243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "cr.googleTranslate.onTranslateElementLoad();"; 325ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 326ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch fetcher->set_url(fetcher->GetOriginalURL()); 327ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch fetcher->set_status(status); 328ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch fetcher->set_response_code(success ? 200 : 500); 329ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch fetcher->SetResponseString(script); 330ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch fetcher->delegate()->OnURLFetchComplete(fetcher); 331ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 332ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void FocusFirstNameField() { 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool result = false; 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 336a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetRenderViewHost(), 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "if (document.readyState === 'complete')" 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " document.getElementById('firstname').focus();" 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "else" 340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " domAutomationController.send(false);", 341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &result)); 342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result); 343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectFilledTestForm() { 346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("firstname", "Milton"); 347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("lastname", "Waddams"); 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("address1", "4120 Freidrich Lane"); 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("address2", "Basement"); 350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("city", "Austin"); 351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("state", "TX"); 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("zip", "78744"); 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("country", "US"); 354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("phone", "5125551234"); 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SendKeyToPageAndWait(ui::KeyboardCode key) { 358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_delegate_.Reset(); 359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::SimulateKeyPress( 3600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetWebContents(), key, false, false, false, false); 361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_delegate_.Wait(); 362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bool HandleKeyPressEvent(const content::NativeWebKeyboardEvent& event) { 3650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return true; 3660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 3670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SendKeyToPopupAndWait(ui::KeyboardCode key) { 3690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Route popup-targeted key presses via the render view host. 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NativeWebKeyboardEvent event; 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) event.windowsKeyCode = key; 372f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) event.type = blink::WebKeyboardEvent::RawKeyDown; 373c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_delegate_.Reset(); 3740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Install the key press event sink to ensure that any events that are not 3750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // handled by the installed callbacks do not end up crashing the test. 3760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetRenderViewHost()->AddKeyPressEventCallback(key_press_event_sink_); 3770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetRenderViewHost()->ForwardKeyboardEvent(event); 378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_delegate_.Wait(); 3790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetRenderViewHost()->RemoveKeyPressEventCallback(key_press_event_sink_); 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 382ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void TryBasicFormFill() { 383ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch FocusFirstNameField(); 384ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 385ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Start filling the first name field with "M" and wait for the popup to be 386ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // shown. 387ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 388ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 389ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press the down arrow to select the suggestion and preview the autofilled 390ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // form. 391ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 392ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 393ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // The previewed values should not be accessible to JavaScript. 394ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("firstname", "M"); 395ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("lastname", std::string()); 396ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("address1", std::string()); 397ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("address2", std::string()); 398ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("city", std::string()); 399ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("state", std::string()); 400ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("zip", std::string()); 401ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("country", std::string()); 402ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("phone", std::string()); 403ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // TODO(isherman): It would be nice to test that the previewed values are 404ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // displayed: http://crbug.com/57220 405ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 406ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press Enter to accept the autofill suggestions. 407ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 408ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 409ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // The form should be filled. 410ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFilledTestForm(); 411ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 412ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 4132385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch private: 414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillManagerTestDelegateImpl test_delegate_; 4152385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 416ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch net::TestURLFetcherFactory url_fetcher_factory_; 417ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 4180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // KeyPressEventCallback that serves as a sink to ensure that every key press 4190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // event the tests create and have the WebContents forward is handled by some 4200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // key press event callback. It is necessary to have this sinkbecause if no 4210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // key press event callback handles the event (at least on Mac), a DCHECK 4220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // ends up going off that the |event| doesn't have an |os_event| associated 4230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // with it. 4240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::RenderWidgetHost::KeyPressEventCallback key_press_event_sink_; 4250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 4262385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch DISALLOW_COPY_AND_ASSIGN(AutofillInteractiveTest); 427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 428c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 429ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that basic form fill is working. 430ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, BasicFormFill) { 431ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 432ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 433ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 434ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 435ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 4362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 437ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 438ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 439ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 4402385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 441ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that form filling can be initiated by pressing the down arrow. 442ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillViaDownArrow) { 443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateTestProfile(); 444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Load the test page. 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL(std::string(kDataURIPrefix) + kTestFormString))); 448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Focus a fillable field. 450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FocusFirstNameField(); 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 452ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press the down arrow to initiate Autofill and wait for the popup to be 453ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // shown. 454ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPageAndWait(ui::VKEY_DOWN); 455ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 456ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press the down arrow to select the suggestion and preview the autofilled 457ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // form. 458ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 459ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 460ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press Enter to accept the autofill suggestions. 461ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 462ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 463ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // The form should be filled. 464ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFilledTestForm(); 465ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 466ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 467ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillSelectViaTab) { 468ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 469ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 470ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 471ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 472ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 473ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 474ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Focus a fillable field. 475ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch FocusFirstNameField(); 476558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 477c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Press the down arrow to initiate Autofill and wait for the popup to be 478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // shown. 479c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SendKeyToPageAndWait(ui::VKEY_DOWN); 480c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 481c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Press the down arrow to select the suggestion and preview the autofilled 482c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // form. 483c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SendKeyToPopupAndWait(ui::VKEY_DOWN); 484c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 485c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Press tab to accept the autofill suggestions. 486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SendKeyToPopupAndWait(ui::VKEY_TAB); 487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 488c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The form should be filled. 489c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFilledTestForm(); 490c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 491c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 492ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that a JavaScript onchange event is fired after auto-filling a form. 493ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnChangeAfterAutofill) { 494ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 495ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 496ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const char* kOnChangeScript = 497ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<script>" 498ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "focused_fired = false;" 499ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "unfocused_fired = false;" 500ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "changed_select_fired = false;" 501ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "unchanged_select_fired = false;" 502ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('firstname').onchange = function() {" 503ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " focused_fired = true;" 504ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 505ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('lastname').onchange = function() {" 506ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " unfocused_fired = true;" 507ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 508ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('state').onchange = function() {" 509ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " changed_select_fired = true;" 510ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 511ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('country').onchange = function() {" 512ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " unchanged_select_fired = true;" 513ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 514ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('country').value = 'US';" 515ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</script>"; 516ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 517ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 518ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 519ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString + kOnChangeScript))); 520ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 521ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 522ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch FocusFirstNameField(); 523ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 524ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Start filling the first name field with "M" and wait for the popup to be 525ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // shown. 526ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 527ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 528ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press the down arrow to select the suggestion and preview the autofilled 529ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // form. 530ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 531ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 532ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press Enter to accept the autofill suggestions. 533ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 534ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 535ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // The form should be filled. 536ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFilledTestForm(); 537ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 538ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // The change event should have already fired for unfocused fields, both of 539ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // <input> and of <select> type. However, it should not yet have fired for the 540ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // focused field. 541ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool focused_fired = false; 542ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool unfocused_fired = false; 543ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool changed_select_fired = false; 544ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool unchanged_select_fired = false; 545ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 546ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 547ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "domAutomationController.send(focused_fired);", 548ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &focused_fired)); 549ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 550ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 551ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "domAutomationController.send(unfocused_fired);", 552ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &unfocused_fired)); 553ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 554ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 555ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "domAutomationController.send(changed_select_fired);", 556ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &changed_select_fired)); 557ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 558ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 559ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "domAutomationController.send(unchanged_select_fired);", 560ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &unchanged_select_fired)); 561ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_FALSE(focused_fired); 562ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_TRUE(unfocused_fired); 563ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_TRUE(changed_select_fired); 564ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_FALSE(unchanged_select_fired); 565ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 566ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Unfocus the first name field. Its change event should fire. 567ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 568ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 569ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('firstname').blur();" 570ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "domAutomationController.send(focused_fired);", &focused_fired)); 571ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_TRUE(focused_fired); 572ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 573ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 574ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that we can autofill forms distinguished only by their |id| attribute. 575ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 576ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillFormsDistinguishedById) { 577ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 578ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 579ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 580ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string kURL = 581ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string(kDataURIPrefix) + kTestFormString + 582ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<script>" 583ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "var mainForm = document.forms[0];" 584ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "mainForm.id = 'mainForm';" 585ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "var newForm = document.createElement('form');" 586ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "newForm.action = mainForm.action;" 587ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "newForm.method = mainForm.method;" 588ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "newForm.id = 'newForm';" 589ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "mainForm.parentNode.insertBefore(newForm, mainForm);" 590ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</script>"; 591ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), GURL(kURL))); 592ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 593ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 594ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 595ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 596ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 597ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that we properly autofill forms with repeated fields. 598ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// In the wild, the repeated fields are typically either email fields 599ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// (duplicated for "confirmation"); or variants that are hot-swapped via 600ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// JavaScript, with only one actually visible at any given time. 601ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillFormWithRepeatedField) { 602ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 603ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 604ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 605ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 606ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + 607ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<form action=\"http://www.example.com/\" method=\"POST\">" 608ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"firstname\">First name:</label>" 609ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"firstname\"" 610ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " onFocus=\"domAutomationController.send(true)\"><br>" 611ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"lastname\">Last name:</label>" 612ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"lastname\"><br>" 613ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address1\">Address line 1:</label>" 614ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address1\"><br>" 615ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address2\">Address line 2:</label>" 616ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address2\"><br>" 617ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"city\">City:</label>" 618ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"city\"><br>" 619ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"state\">State:</label>" 620ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"state\">" 621ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 622ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">California</option>" 623ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"TX\">Texas</option>" 624ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 625ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"state_freeform\" style=\"display:none\">State:</label>" 626ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"state_freeform\"" 627ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " style=\"display:none\"><br>" 628ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"zip\">ZIP code:</label>" 629ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"zip\"><br>" 630ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"country\">Country:</label>" 631ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"country\">" 632ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 633ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">Canada</option>" 634ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"US\">United States</option>" 635ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 636ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"phone\">Phone number:</label>" 637ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"phone\"><br>" 638ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</form>"))); 639ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 640ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 641ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 642ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("state_freeform", std::string()); 643ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 644ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 645ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that we properly autofill forms with non-autofillable fields. 646ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 647ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillFormWithNonAutofillableField) { 648ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 649ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 650ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 651ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 652ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + 653ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<form action=\"http://www.example.com/\" method=\"POST\">" 654ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"firstname\">First name:</label>" 655ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"firstname\"" 656ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " onFocus=\"domAutomationController.send(true)\"><br>" 657ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"middlename\">Middle name:</label>" 658ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"middlename\" autocomplete=\"off\" /><br>" 659ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"lastname\">Last name:</label>" 660ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"lastname\"><br>" 661ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address1\">Address line 1:</label>" 662ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address1\"><br>" 663ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address2\">Address line 2:</label>" 664ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address2\"><br>" 665ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"city\">City:</label>" 666ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"city\"><br>" 667ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"state\">State:</label>" 668ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"state\">" 669ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 670ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">California</option>" 671ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"TX\">Texas</option>" 672ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 673ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"zip\">ZIP code:</label>" 674ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"zip\"><br>" 675ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"country\">Country:</label>" 676ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"country\">" 677ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 678ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">Canada</option>" 679ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"US\">United States</option>" 680ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 681ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"phone\">Phone number:</label>" 682ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"phone\"><br>" 683ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</form>"))); 684ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 685ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 686ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 687ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 688ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 689ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that we can Autofill dynamically generated forms. 690ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, DynamicFormFill) { 691ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 692ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 693ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 694ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 695ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + 696ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<form id=\"form\" action=\"http://www.example.com/\"" 697ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " method=\"POST\"></form>" 698ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<script>" 699ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "function AddElement(name, label) {" 700ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var form = document.getElementById('form');" 701ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 702ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var label_text = document.createTextNode(label);" 703ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var label_element = document.createElement('label');" 704ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " label_element.setAttribute('for', name);" 705ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " label_element.appendChild(label_text);" 706ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " form.appendChild(label_element);" 707ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 708ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " if (name === 'state' || name === 'country') {" 709ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var select_element = document.createElement('select');" 710ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.setAttribute('id', name);" 711ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.setAttribute('name', name);" 712ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 713ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " /* Add an empty selected option. */" 714ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var default_option = new Option('--', '', true);" 715ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.appendChild(default_option);" 716ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 717ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " /* Add the other options. */" 718ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " if (name == 'state') {" 719ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var option1 = new Option('California', 'CA');" 720ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.appendChild(option1);" 721ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var option2 = new Option('Texas', 'TX');" 722ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.appendChild(option2);" 723ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " } else {" 724ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var option1 = new Option('Canada', 'CA');" 725ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.appendChild(option1);" 726ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var option2 = new Option('United States', 'US');" 727ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.appendChild(option2);" 728ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 729ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 730ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " form.appendChild(select_element);" 731ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " } else {" 732ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var input_element = document.createElement('input');" 733ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " input_element.setAttribute('id', name);" 734ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " input_element.setAttribute('name', name);" 735ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 736ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " /* Add the onFocus listener to the 'firstname' field. */" 737ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " if (name === 'firstname') {" 738ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " input_element.setAttribute(" 739ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " 'onFocus', 'domAutomationController.send(true)');" 740ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 741ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 742ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " form.appendChild(input_element);" 743ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 744ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 745ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " form.appendChild(document.createElement('br'));" 746ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 747ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 748ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "function BuildForm() {" 749ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var elements = [" 750ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['firstname', 'First name:']," 751ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['lastname', 'Last name:']," 752ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['address1', 'Address line 1:']," 753ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['address2', 'Address line 2:']," 754ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['city', 'City:']," 755ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['state', 'State:']," 756ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['zip', 'ZIP code:']," 757ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['country', 'Country:']," 758ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['phone', 'Phone number:']," 759ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ];" 760ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 761ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " for (var i = 0; i < elements.length; i++) {" 762ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var name = elements[i][0];" 763ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var label = elements[i][1];" 764ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " AddElement(name, label);" 765ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 766ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 767ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</script>"))); 768ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 769ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Dynamically construct the form. 770ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScript(GetRenderViewHost(), "BuildForm();")); 771ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 772ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 773ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 774ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 775ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 776ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that form filling works after reloading the current page. 777ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillAfterReload) { 778ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 779ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 780ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 781ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 782ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 783ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 784ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Reload the page. 7850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::WebContents* web_contents = GetWebContents(); 786ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch web_contents->GetController().Reload(false); 787ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::WaitForLoadStop(web_contents); 788ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 789ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 790ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 791ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 792ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 7933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillAfterTranslate) { 794ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 795ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 796ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url(std::string(kDataURIPrefix) + 797ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<form action=\"http://www.example.com/\" method=\"POST\">" 798ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"fn\">なまえ</label>" 799ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"fn\"" 800ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " onFocus=\"domAutomationController.send(true)\"" 801ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "><br>" 802ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"ln\">みょうじ</label>" 803ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"ln\"><br>" 804ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"a1\">Address line 1:</label>" 805ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"a1\"><br>" 806ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"a2\">Address line 2:</label>" 807ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"a2\"><br>" 808ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"ci\">City:</label>" 809ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"ci\"><br>" 810ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"st\">State:</label>" 811ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"st\">" 812ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 813ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">California</option>" 814ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"TX\">Texas</option>" 815ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 816ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"z\">ZIP code:</label>" 817ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"z\"><br>" 818ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"co\">Country:</label>" 819ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"co\">" 820ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 821ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">Canada</option>" 822ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"US\">United States</option>" 823ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 824ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"ph\">Phone number:</label>" 825ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"ph\"><br>" 8263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "</form>" 8273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Add additional Japanese characters to ensure the translate bar 8283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // will appear. 8293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "我々は重要な、興味深いものになるが、時折状況が発生するため苦労や痛みは" 8303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "彼にいくつかの素晴らしいを調達することができます。それから、いくつかの利"); 8313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 832424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) content::WindowedNotificationObserver infobar_observer( 8333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, 8343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::NotificationService::AllSources()); 8353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 8363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url)); 837ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 8383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Wait for the translation bar to appear and get it. 839424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) infobar_observer.Wait(); 840a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) TranslateInfoBarDelegate* delegate = 841a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) InfoBarService::FromWebContents(GetWebContents())->infobar_at(0)-> 842a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) delegate()->AsTranslateInfoBarDelegate(); 843ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(delegate); 8445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(TranslateTabHelper::BEFORE_TRANSLATE, delegate->translate_step()); 845ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 846ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Simulate translation button press. 847ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch delegate->Translate(); 848ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 849ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::WindowedNotificationObserver translation_observer( 850ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch chrome::NOTIFICATION_PAGE_TRANSLATED, 851ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::NotificationService::AllSources()); 852ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 853424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Simulate the translate script being retrieved. 854424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Pass fake google.translate lib as the translate script. 855424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) SimulateURLFetch(true); 856424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 857ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Simulate the render notifying the translation has been done. 858ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch translation_observer.Wait(); 859ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 860ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 861ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 862ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 863ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test phone fields parse correctly from a given profile. 864ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// The high level key presses execute the following: Select the first text 865ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// field, invoke the autofill popup list, select the first profile within the 866ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// list, and commit to the profile to populate the form. 867ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, ComparePhoneNumbers) { 868ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 869ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 870ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillProfile profile; 871ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Bob")); 872ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith")); 873ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16("1234 H St.")); 874ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_CITY, ASCIIToUTF16("San Jose")); 875ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA")); 876ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_ZIP, ASCIIToUTF16("95110")); 877ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("1-408-555-4567")); 878ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetProfile(profile); 879ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 880ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL("files/autofill/form_phones.html"); 881ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 882ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 883ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 884ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("NAME_FIRST", "Bob"); 885ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("NAME_LAST", "Smith"); 886ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_LINE1", "1234 H St."); 887ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_CITY", "San Jose"); 888ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_STATE", "CA"); 889ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_ZIP", "95110"); 890ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_WHOLE_NUMBER", "14085554567"); 891ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_CITY_CODE-1", "408"); 892ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_CITY_CODE-2", "408"); 893ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_NUMBER", "5554567"); 894ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_NUMBER_3-1", "555"); 895ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_NUMBER_3-2", "555"); 896ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_NUMBER_4-1", "4567"); 897ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_NUMBER_4-2", "4567"); 898ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_EXT-1", std::string()); 899ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_EXT-2", std::string()); 900ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_COUNTRY_CODE-1", "1"); 901ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 902ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 903ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that Autofill does not fill in read-only fields. 904ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, NoAutofillForReadOnlyFields) { 905ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 906ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 907ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string addr_line1("1234 H St."); 908ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 909ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillProfile profile; 910ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Bob")); 911ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith")); 912ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(EMAIL_ADDRESS, ASCIIToUTF16("bsmith@gmail.com")); 913ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16(addr_line1)); 914ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_CITY, ASCIIToUTF16("San Jose")); 915ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA")); 916ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_ZIP, ASCIIToUTF16("95110")); 917ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(COMPANY_NAME, ASCIIToUTF16("Company X")); 918ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("408-871-4567")); 919ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetProfile(profile); 920ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 921ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL("files/autofill/read_only_field_test.html"); 922ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 923ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("firstname"); 924ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 925ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("email", std::string()); 926ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("address", addr_line1); 927ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 928ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 929ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test form is fillable from a profile after form was reset. 930ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Steps: 931ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// 1. Fill form using a saved profile. 932ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// 2. Reset the form. 933ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// 3. Fill form using a saved profile. 934ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Flakily times out: http://crbug.com/270341 935ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, DISABLED_FormFillableOnReset) { 936ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 937ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 938ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 939ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 940ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL("files/autofill/autofill_test_form.html"); 941ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 942ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 943ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 944ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScript( 9450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetWebContents(), "document.getElementById('testform').reset()")); 946ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 947ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 948ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 949ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("NAME_FIRST", "Milton"); 950ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("NAME_LAST", "Waddams"); 951ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("EMAIL_ADDRESS", "red.swingline@initech.com"); 952ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_LINE1", "4120 Freidrich Lane"); 953ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_CITY", "Austin"); 954ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_STATE", "Texas"); 955ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_ZIP", "78744"); 956ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_COUNTRY", "United States"); 957ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_WHOLE_NUMBER", "5125551234"); 958ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 959ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 960ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test Autofill distinguishes a middle initial in a name. 961ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Flakily times out: http://crbug.com/270341 962ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 963ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DISABLED_DistinguishMiddleInitialWithinName) { 964ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 965ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 966ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 967ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 968ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL( 969ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "files/autofill/autofill_middleinit_form.html"); 970ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 971ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 972ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 973ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("NAME_MIDDLE", "C"); 974ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 975ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 976ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test forms with multiple email addresses are filled properly. 977ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Entire form should be filled with one user gesture. 978ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Flakily times out: http://crbug.com/270341 979ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 980ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DISABLED_MultipleEmailFilledByOneUserGesture) { 981ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 982ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 983ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string email("bsmith@gmail.com"); 984ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 985ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillProfile profile; 986ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Bob")); 987ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith")); 988ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(EMAIL_ADDRESS, ASCIIToUTF16(email)); 989ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("4088714567")); 990ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetProfile(profile); 991ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 992ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL( 993ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "files/autofill/autofill_confirmemail_form.html"); 994ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 995ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 996ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 997ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("EMAIL_CONFIRM", email); 998ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // TODO(isherman): verify entire form. 999ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1000ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1001424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// http://crbug.com/281527 1002ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#if defined(OS_MACOSX) 1003ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#define MAYBE_FormFillLatencyAfterSubmit FormFillLatencyAfterSubmit 1004ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#else 1005ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#define MAYBE_FormFillLatencyAfterSubmit DISABLED_FormFillLatencyAfterSubmit 1006ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#endif 1007ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test latency time on form submit with lots of stored Autofill profiles. 1008ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// This test verifies when a profile is selected from the Autofill dictionary 1009ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// that consists of thousands of profiles, the form does not hang after being 1010ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// submitted. 1011ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 1012ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch MAYBE_FormFillLatencyAfterSubmit) { 1013ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 1014ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1015ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::vector<std::string> cities; 1016ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch cities.push_back("San Jose"); 1017ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch cities.push_back("San Francisco"); 1018ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch cities.push_back("Sacramento"); 1019ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch cities.push_back("Los Angeles"); 1020ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1021ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::vector<std::string> streets; 1022ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch streets.push_back("St"); 1023ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch streets.push_back("Ave"); 1024ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch streets.push_back("Ln"); 1025ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch streets.push_back("Ct"); 1026ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1027ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const int kNumProfiles = 1500; 1028ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Time start_time = base::Time::Now(); 1029ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::vector<AutofillProfile> profiles; 1030ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch for (int i = 0; i < kNumProfiles; i++) { 1031ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillProfile profile; 1032a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 name(base::IntToString16(i)); 1033a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 email(name + ASCIIToUTF16("@example.com")); 1034a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 street = ASCIIToUTF16( 1035ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::IntToString(base::RandInt(0, 10000)) + " " + 1036ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch streets[base::RandInt(0, streets.size() - 1)]); 10375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 city = 10385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASCIIToUTF16(cities[base::RandInt(0, cities.size() - 1)]); 1039a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 zip(base::IntToString16(base::RandInt(0, 10000))); 1040ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_FIRST, name); 1041ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(EMAIL_ADDRESS, email); 1042ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_LINE1, street); 1043ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_CITY, city); 10445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA")); 1045ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_ZIP, zip); 10465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); 1047ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profiles.push_back(profile); 1048ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 1049ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetProfiles(&profiles); 1050ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // TODO(isherman): once we're sure this test doesn't timeout on any bots, this 1051ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // can be removd. 1052ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch LOG(INFO) << "Created " << kNumProfiles << " profiles in " << 1053ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch (base::Time::Now() - start_time).InSeconds() << " seconds."; 1054ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1055ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL( 1056ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "files/autofill/latency_after_submit_test.html"); 1057ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1058ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 1059ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1060ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::WindowedNotificationObserver load_stop_observer( 1061ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::NOTIFICATION_LOAD_STOP, 1062ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::Source<content::NavigationController>( 10630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &GetWebContents()->GetController())); 1064ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1065ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScript( 1066ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 1067ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('testform').submit();")); 1068ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // This will ensure the test didn't hang. 1069ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch load_stop_observer.Wait(); 1070ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1071ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1072ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that Chrome doesn't crash when autocomplete is disabled while the user 1073ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// is interacting with the form. This is a regression test for 1074ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// http://crbug.com/160476 1075ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 1076ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DisableAutocompleteWhileFilling) { 1077ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 1078ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1079ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 1080ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 1081ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 1082ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1083ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill: Start filling the first name field with "M" and wait for 1084ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // the popup to be shown. 1085ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch FocusFirstNameField(); 1086ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 1087ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1088ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Now that the popup with suggestions is showing, disable autocomplete for 1089ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // the active field. 1090ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScript( 1091ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 1092ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.querySelector('input').autocomplete = 'off';")); 1093ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1094ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press the down arrow to select the suggestion and attempt to preview the 1095ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // autofilled form. 10960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) SendKeyToPopupAndWait(ui::VKEY_DOWN); 1097ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1098ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1099c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace autofill 1100