autofill_interactive_uitest.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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" 20ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/infobars/infobar_service.h" 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/profiles/profile.h" 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/translate/chrome_translate_client.h" 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/translate/translate_service.h" 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 25ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/ui/browser_window.h" 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 27ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/common/render_messages.h" 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 29ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/test/base/test_switches.h" 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/autofill/content/browser/content_autofill_driver.h" 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_manager.h" 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_manager_test_delegate.h" 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_profile.h" 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/autofill/core/browser/autofill_test_utils.h" 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager.h" 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager_observer.h" 38ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "components/autofill/core/browser/validation.h" 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/infobars/core/confirm_infobar_delegate.h" 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/infobars/core/infobar.h" 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "components/infobars/core/infobar_manager.h" 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/translate/core/browser/translate_infobar_delegate.h" 43ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "content/public/browser/navigation_controller.h" 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_observer.h" 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_registrar.h" 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_service.h" 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/render_view_host.h" 480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "content/public/browser/render_widget_host.h" 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/web_contents.h" 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/browser_test_utils.h" 51ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "content/public/test/test_renderer_host.h" 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/test_utils.h" 53ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "net/url_request/test_url_fetcher_factory.h" 54ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "testing/gmock/include/gmock/gmock.h" 55ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h" 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill { 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 624ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdochstatic const char kDataURIPrefix[] = "data:text/html;charset=utf-8,"; 634ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdochstatic const char kTestFormString[] = 64ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<form action=\"http://www.example.com/\" method=\"POST\">" 65ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"firstname\">First name:</label>" 66ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"firstname\"" 674ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " onfocus=\"domAutomationController.send(true)\"><br>" 68ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"lastname\">Last name:</label>" 69ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"lastname\"><br>" 70ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address1\">Address line 1:</label>" 71ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address1\"><br>" 72ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address2\">Address line 2:</label>" 73ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address2\"><br>" 74ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"city\">City:</label>" 75ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"city\"><br>" 76ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"state\">State:</label>" 77ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"state\">" 78ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 79ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">California</option>" 80ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"TX\">Texas</option>" 81ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 82ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"zip\">ZIP code:</label>" 83ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"zip\"><br>" 84ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"country\">Country:</label>" 85ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"country\">" 86ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 87ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">Canada</option>" 88ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"US\">United States</option>" 89ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 90ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"phone\">Phone number:</label>" 91ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"phone\"><br>" 92ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</form>"; 93ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 942385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 952385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// AutofillManagerTestDelegateImpl -------------------------------------------- 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AutofillManagerTestDelegateImpl 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : public autofill::AutofillManagerTestDelegate { 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillManagerTestDelegateImpl() {} 1012385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch virtual ~AutofillManagerTestDelegateImpl() {} 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 103a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // autofill::AutofillManagerTestDelegate: 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DidPreviewFormData() OVERRIDE { 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_->Quit(); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DidFillFormData() OVERRIDE { 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_->Quit(); 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DidShowSuggestions() OVERRIDE { 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_->Quit(); 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void Reset() { 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_ = new content::MessageLoopRunner(); 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void Wait() { 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_->Run(); 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<content::MessageLoopRunner> loop_runner_; 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AutofillManagerTestDelegateImpl); 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 1312385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// WindowedPersonalDataManagerObserver ---------------------------------------- 1322385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WindowedPersonalDataManagerObserver 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : public PersonalDataManagerObserver, 135010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public infobars::InfoBarManager::Observer { 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) explicit WindowedPersonalDataManagerObserver(Browser* browser) 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : alerted_(false), 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) has_run_message_loop_(false), 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser_(browser), 141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) infobar_service_(InfoBarService::FromWebContents( 142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) browser_->tab_strip_model()->GetActiveWebContents())) { 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PersonalDataManagerFactory::GetForProfile(browser_->profile())-> 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddObserver(this); 145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) infobar_service_->AddObserver(this); 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~WindowedPersonalDataManagerObserver() { 149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) while (infobar_service_->infobar_count() > 0) { 150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) infobar_service_->RemoveInfoBar(infobar_service_->infobar_at(0)); 1512385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } 152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) infobar_service_->RemoveObserver(this); 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) 169a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) void Wait() { 170a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (!alerted_) { 171a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) has_run_message_loop_ = true; 172a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) content::RunMessageLoop(); 173a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 174a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) PersonalDataManagerFactory::GetForProfile(browser_->profile())-> 175a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) RemoveObserver(this); 176a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 177a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 179010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // infobars::InfoBarManager::Observer: 180010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void OnInfoBarAdded(infobars::InfoBar* infobar) OVERRIDE { 181010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) infobar_service_->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate()-> 182010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) Accept(); 183010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 184010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool alerted_; 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool has_run_message_loop_; 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* browser_; 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InfoBarService* infobar_service_; 1892385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 1902385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch DISALLOW_COPY_AND_ASSIGN(WindowedPersonalDataManagerObserver); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1932385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// AutofillInteractiveTest ---------------------------------------------------- 1942385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AutofillInteractiveTest : public InProcessBrowserTest { 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 1970f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) AutofillInteractiveTest() : 1980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) key_press_event_sink_( 1990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) base::Bind(&AutofillInteractiveTest::HandleKeyPressEvent, 2000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) base::Unretained(this))) {} 2012385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch virtual ~AutofillInteractiveTest() {} 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 203a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // InProcessBrowserTest: 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Don't want Keychain coming up on Mac. 206a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) test::DisableSystemServices(browser()->profile()->GetPrefs()); 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2080f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Inject the test delegate into the AutofillManager. 2090f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::WebContents* web_contents = GetWebContents(); 210a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContentAutofillDriver* autofill_driver = 211a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContentAutofillDriver::FromWebContents(web_contents); 2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AutofillManager* autofill_manager = autofill_driver->autofill_manager(); 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_manager->SetTestDelegate(&test_delegate_); 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void CleanUpOnMainThread() OVERRIDE { 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Make sure to close any showing popups prior to tearing down the UI. 2180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::WebContents* web_contents = GetWebContents(); 219a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutofillManager* autofill_manager = ContentAutofillDriver::FromWebContents( 220a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) web_contents)->autofill_manager(); 221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) autofill_manager->client()->HideAutofillPopup(); 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 224a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) PersonalDataManager* GetPersonalDataManager() { 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return PersonalDataManagerFactory::GetForProfile(browser()->profile()); 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::WebContents* GetWebContents() { 2290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return browser()->tab_strip_model()->GetActiveWebContents(); 230a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 231a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::RenderViewHost* GetRenderViewHost() { 2330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return GetWebContents()->GetRenderViewHost(); 234a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 235a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void CreateTestProfile() { 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillProfile profile; 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetProfileInfo( 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &profile, "Milton", "C.", "Waddams", 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "red.swingline@initech.com", "Initech", "4120 Freidrich Lane", 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "Basement", "Austin", "Texas", "78744", "US", "5125551234"); 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WindowedPersonalDataManagerObserver observer(browser()); 244a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetPersonalDataManager()->AddProfile(profile); 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AddProfile is asynchronous. Wait for it to finish before continuing the 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // tests. 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observer.Wait(); 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 251ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void SetProfiles(std::vector<AutofillProfile>* profiles) { 252ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WindowedPersonalDataManagerObserver observer(browser()); 253ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetPersonalDataManager()->SetProfiles(profiles); 254ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch observer.Wait(); 255ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 256ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 257ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void SetProfile(const AutofillProfile& profile) { 258ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::vector<AutofillProfile> profiles; 259ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profiles.push_back(profile); 260ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetProfiles(&profiles); 261ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 262ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 263ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Populates a webpage form using autofill data and keypress events. 264ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // This function focuses the specified input field in the form, and then 265ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // sends keypress events to the tab to cause the form to be populated. 266ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void PopulateForm(const std::string& field_id) { 267ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string js("document.getElementById('" + field_id + "').focus();"); 268ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScript(GetRenderViewHost(), js)); 269ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 270ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPageAndWait(ui::VKEY_DOWN); 271ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 272ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 273ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 274ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectFieldValue(const std::string& field_name, 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& expected_value) { 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string value; 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractString( 2790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetWebContents(), 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "window.domAutomationController.send(" 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " document.getElementById('" + field_name + "').value);", 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &value)); 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(expected_value, value); 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 286ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void SimulateURLFetch(bool success) { 287ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); 288ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(fetcher); 289ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch net::URLRequestStatus status; 290ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch status.set_status(success ? net::URLRequestStatus::SUCCESS : 291ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch net::URLRequestStatus::FAILED); 292ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 293ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string script = " var google = {};" 294ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "google.translate = (function() {" 295ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " return {" 296ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " TranslateService: function() {" 297ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " return {" 298ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " isAvailable : function() {" 299ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " return true;" 300ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }," 301ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " restore : function() {" 302ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " return;" 303ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }," 304ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " getDetectedLanguage : function() {" 305ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " return \"ja\";" 306ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }," 307ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " translatePage : function(originalLang, targetLang," 308ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " onTranslateProgress) {" 309ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " document.getElementsByTagName(\"body\")[0].innerHTML = '" + 310ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string(kTestFormString) + 311ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ';" 312ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " onTranslateProgress(100, true, false);" 313ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 314ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " };" 315ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 316ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " };" 3173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "})();" 3183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "cr.googleTranslate.onTranslateElementLoad();"; 319ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 320ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch fetcher->set_url(fetcher->GetOriginalURL()); 321ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch fetcher->set_status(status); 322ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch fetcher->set_response_code(success ? 200 : 500); 323ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch fetcher->SetResponseString(script); 324ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch fetcher->delegate()->OnURLFetchComplete(fetcher); 325ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 326ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void FocusFirstNameField() { 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool result = false; 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 330a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetRenderViewHost(), 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "if (document.readyState === 'complete')" 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " document.getElementById('firstname').focus();" 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "else" 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " domAutomationController.send(false);", 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &result)); 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result); 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectFilledTestForm() { 340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("firstname", "Milton"); 341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("lastname", "Waddams"); 342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("address1", "4120 Freidrich Lane"); 343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("address2", "Basement"); 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("city", "Austin"); 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("state", "TX"); 346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("zip", "78744"); 347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("country", "US"); 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("phone", "5125551234"); 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SendKeyToPageAndWait(ui::KeyboardCode key) { 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_delegate_.Reset(); 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::SimulateKeyPress( 3540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetWebContents(), key, false, false, false, false); 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_delegate_.Wait(); 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bool HandleKeyPressEvent(const content::NativeWebKeyboardEvent& event) { 3590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return true; 3600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 3610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SendKeyToPopupAndWait(ui::KeyboardCode key) { 3630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Route popup-targeted key presses via the render view host. 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NativeWebKeyboardEvent event; 365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) event.windowsKeyCode = key; 366f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) event.type = blink::WebKeyboardEvent::RawKeyDown; 367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_delegate_.Reset(); 3680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Install the key press event sink to ensure that any events that are not 3690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // handled by the installed callbacks do not end up crashing the test. 3700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetRenderViewHost()->AddKeyPressEventCallback(key_press_event_sink_); 3710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetRenderViewHost()->ForwardKeyboardEvent(event); 372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_delegate_.Wait(); 3730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetRenderViewHost()->RemoveKeyPressEventCallback(key_press_event_sink_); 374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 376ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void TryBasicFormFill() { 377ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch FocusFirstNameField(); 378ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 379ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Start filling the first name field with "M" and wait for the popup to be 380ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // shown. 381ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 382ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 383ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press the down arrow to select the suggestion and preview the autofilled 384ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // form. 385ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 386ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 387ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // The previewed values should not be accessible to JavaScript. 388ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("firstname", "M"); 389ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("lastname", std::string()); 390ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("address1", std::string()); 391ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("address2", std::string()); 392ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("city", std::string()); 393ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("state", std::string()); 394ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("zip", std::string()); 395ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("country", std::string()); 396ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("phone", std::string()); 397ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // TODO(isherman): It would be nice to test that the previewed values are 398ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // displayed: http://crbug.com/57220 399ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 400ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press Enter to accept the autofill suggestions. 401ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 402ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 403ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // The form should be filled. 404ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFilledTestForm(); 405ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 406ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 4072385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch private: 408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillManagerTestDelegateImpl test_delegate_; 4092385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 410ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch net::TestURLFetcherFactory url_fetcher_factory_; 411ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 4120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // KeyPressEventCallback that serves as a sink to ensure that every key press 4130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // event the tests create and have the WebContents forward is handled by some 4140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // key press event callback. It is necessary to have this sinkbecause if no 4150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // key press event callback handles the event (at least on Mac), a DCHECK 4160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // ends up going off that the |event| doesn't have an |os_event| associated 4170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // with it. 4180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::RenderWidgetHost::KeyPressEventCallback key_press_event_sink_; 4190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 4202385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch DISALLOW_COPY_AND_ASSIGN(AutofillInteractiveTest); 421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 423ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that basic form fill is working. 424ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, BasicFormFill) { 425ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 426ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 427ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 428ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 429ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 4302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 431ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 432ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 433ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 4342385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 435ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that form filling can be initiated by pressing the down arrow. 436ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillViaDownArrow) { 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateTestProfile(); 438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Load the test page. 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL(std::string(kDataURIPrefix) + kTestFormString))); 442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Focus a fillable field. 444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FocusFirstNameField(); 445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 446ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press the down arrow to initiate Autofill and wait for the popup to be 447ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // shown. 448ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPageAndWait(ui::VKEY_DOWN); 449ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 450ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press the down arrow to select the suggestion and preview the autofilled 451ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // form. 452ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 453ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 454ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press Enter to accept the autofill suggestions. 455ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 456ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 457ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // The form should be filled. 458ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFilledTestForm(); 459ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 460ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 461ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillSelectViaTab) { 462ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 463ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 464ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 465ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 466ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 467ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 468ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Focus a fillable field. 469ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch FocusFirstNameField(); 470558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Press the down arrow to initiate Autofill and wait for the popup to be 472c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // shown. 473c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SendKeyToPageAndWait(ui::VKEY_DOWN); 474c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 475c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Press the down arrow to select the suggestion and preview the autofilled 476c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // form. 477c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SendKeyToPopupAndWait(ui::VKEY_DOWN); 478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 479c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Press tab to accept the autofill suggestions. 480c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SendKeyToPopupAndWait(ui::VKEY_TAB); 481c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 482c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The form should be filled. 483c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFilledTestForm(); 484c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 485c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Test that a field is still autofillable after the previously autofilled 487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// value is deleted. 488116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnDeleteValueAfterAutofill) { 489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CreateTestProfile(); 490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Load the test page. 492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Invoke and accept the Autofill popup and verify the form was filled. 496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FocusFirstNameField(); 497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExpectFilledTestForm(); 501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Delete the value of a filled field. 503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(content::ExecuteScript( 504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetRenderViewHost(), 505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "document.getElementById('firstname').value = '';")); 506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExpectFieldValue("firstname", ""); 507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Invoke and accept the Autofill popup and verify the field was filled. 509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExpectFieldValue("firstname", "Milton"); 513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5154ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch// Test that a JavaScript oninput event is fired after auto-filling a form. 5164ad1aa43a48567659193a298fad74f55e00b3dd9Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnInputAfterAutofill) { 5174ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch CreateTestProfile(); 5184ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 5194ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch const char kOnInputScript[] = 5204ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "<script>" 5214ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "focused_fired = false;" 5224ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "unfocused_fired = false;" 5234ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "changed_select_fired = false;" 5244ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "unchanged_select_fired = false;" 5254ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('firstname').oninput = function() {" 5264ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " focused_fired = true;" 5274ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "};" 5284ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('lastname').oninput = function() {" 5294ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " unfocused_fired = true;" 5304ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "};" 5314ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('state').oninput = function() {" 5324ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " changed_select_fired = true;" 5334ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "};" 5344ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('country').oninput = function() {" 5354ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " unchanged_select_fired = true;" 5364ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "};" 5374ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('country').value = 'US';" 5384ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "</script>"; 5394ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 5404ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Load the test page. 5414ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 5424ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString + kOnInputScript))); 5434ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 5444ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Invoke Autofill. 5454ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch FocusFirstNameField(); 5464ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 5474ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Start filling the first name field with "M" and wait for the popup to be 5484ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // shown. 5494ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 5504ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 5514ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Press the down arrow to select the suggestion and preview the autofilled 5524ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // form. 5534ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 5544ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 5554ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Press Enter to accept the autofill suggestions. 5564ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 5574ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 5584ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // The form should be filled. 5594ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ExpectFilledTestForm(); 5604ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 5614ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch bool focused_fired = false; 5624ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch bool unfocused_fired = false; 5634ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch bool changed_select_fired = false; 5644ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch bool unchanged_select_fired = false; 5654ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 5664ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 5674ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(focused_fired);", 5684ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &focused_fired)); 5694ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 5704ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 5714ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(unfocused_fired);", 5724ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &unfocused_fired)); 5734ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 5744ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 5754ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(changed_select_fired);", 5764ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &changed_select_fired)); 5774ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 5784ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 5794ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(unchanged_select_fired);", 5804ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &unchanged_select_fired)); 5814ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_TRUE(focused_fired); 5824ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_TRUE(unfocused_fired); 5834ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_TRUE(changed_select_fired); 5844ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_FALSE(unchanged_select_fired); 5854ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch} 5864ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 587ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that a JavaScript onchange event is fired after auto-filling a form. 5884ad1aa43a48567659193a298fad74f55e00b3dd9Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnChangeAfterAutofill) { 589ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 590ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 5914ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch const char kOnChangeScript[] = 592ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<script>" 593ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "focused_fired = false;" 594ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "unfocused_fired = false;" 595ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "changed_select_fired = false;" 596ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "unchanged_select_fired = false;" 597ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('firstname').onchange = function() {" 598ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " focused_fired = true;" 599ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 600ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('lastname').onchange = function() {" 601ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " unfocused_fired = true;" 602ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 603ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('state').onchange = function() {" 604ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " changed_select_fired = true;" 605ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 606ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('country').onchange = function() {" 607ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " unchanged_select_fired = true;" 608ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 609ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('country').value = 'US';" 610ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</script>"; 611ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 612ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 613ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 614ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString + kOnChangeScript))); 615ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 616ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 617ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch FocusFirstNameField(); 618ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 619ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Start filling the first name field with "M" and wait for the popup to be 620ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // shown. 621ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 622ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 623ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press the down arrow to select the suggestion and preview the autofilled 624ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // form. 625ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 626ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 627ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press Enter to accept the autofill suggestions. 628ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 629ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 630ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // The form should be filled. 631ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFilledTestForm(); 632ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 633ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool focused_fired = false; 634ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool unfocused_fired = false; 635ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool changed_select_fired = false; 636ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool unchanged_select_fired = false; 637ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 638ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 639ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "domAutomationController.send(focused_fired);", 640ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &focused_fired)); 641ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 642ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 643ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "domAutomationController.send(unfocused_fired);", 644ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &unfocused_fired)); 645ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 646ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 647ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "domAutomationController.send(changed_select_fired);", 648ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &changed_select_fired)); 649ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 650ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 651ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "domAutomationController.send(unchanged_select_fired);", 652ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &unchanged_select_fired)); 6534ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_TRUE(focused_fired); 654ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_TRUE(unfocused_fired); 655ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_TRUE(changed_select_fired); 656ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_FALSE(unchanged_select_fired); 6574ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch} 658ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 6594ad1aa43a48567659193a298fad74f55e00b3dd9Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, InputFiresBeforeChange) { 6604ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch CreateTestProfile(); 6614ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 6624ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch const char kInputFiresBeforeChangeScript[] = 6634ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "<script>" 6644ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "inputElementEvents = [];" 6654ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "function recordInputElementEvent(e) {" 6664ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " if (e.target.tagName != 'INPUT') throw 'only <input> tags allowed';" 6674ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " inputElementEvents.push(e.type);" 6684ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "}" 6694ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "selectElementEvents = [];" 6704ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "function recordSelectElementEvent(e) {" 6714ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " if (e.target.tagName != 'SELECT') throw 'only <select> tags allowed';" 6724ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " selectElementEvents.push(e.type);" 6734ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "}" 6744ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('lastname').oninput = recordInputElementEvent;" 6754ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('lastname').onchange = recordInputElementEvent;" 6764ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('country').oninput = recordSelectElementEvent;" 6774ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('country').onchange = recordSelectElementEvent;" 6784ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "</script>"; 6794ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 6804ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Load the test page. 6814ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 6824ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString + 6834ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch kInputFiresBeforeChangeScript))); 6844ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 6854ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Invoke and accept the Autofill popup and verify the form was filled. 6864ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch FocusFirstNameField(); 6874ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 6884ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 6894ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 6904ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ExpectFilledTestForm(); 6914ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 6924ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch int num_input_element_events = -1; 6934ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractInt( 694ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 6954ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(inputElementEvents.length);", 6964ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &num_input_element_events)); 6974ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_EQ(2, num_input_element_events); 6984ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 6994ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch std::vector<std::string> input_element_events; 7004ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch input_element_events.resize(2); 7014ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 7024ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractString( 7034ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 7044ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(inputElementEvents[0]);", 7054ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &input_element_events[0])); 7064ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractString( 7074ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 7084ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(inputElementEvents[1]);", 7094ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &input_element_events[1])); 7104ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 7114ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_EQ("input", input_element_events[0]); 7124ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_EQ("change", input_element_events[1]); 7134ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 7144ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch int num_select_element_events = -1; 7154ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractInt( 7164ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 7174ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(selectElementEvents.length);", 7184ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &num_select_element_events)); 7194ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_EQ(2, num_select_element_events); 7204ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 7214ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch std::vector<std::string> select_element_events; 7224ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch select_element_events.resize(2); 7234ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 7244ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractString( 7254ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 7264ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(selectElementEvents[0]);", 7274ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &select_element_events[0])); 7284ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractString( 7294ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 7304ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(selectElementEvents[1]);", 7314ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &select_element_events[1])); 7324ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 7334ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_EQ("input", select_element_events[0]); 7344ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_EQ("change", select_element_events[1]); 735ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 736ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 737ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that we can autofill forms distinguished only by their |id| attribute. 738ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 739ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillFormsDistinguishedById) { 740ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 741ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 742ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 743ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string kURL = 744ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string(kDataURIPrefix) + kTestFormString + 745ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<script>" 746ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "var mainForm = document.forms[0];" 747ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "mainForm.id = 'mainForm';" 748ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "var newForm = document.createElement('form');" 749ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "newForm.action = mainForm.action;" 750ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "newForm.method = mainForm.method;" 751ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "newForm.id = 'newForm';" 752ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "mainForm.parentNode.insertBefore(newForm, mainForm);" 753ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</script>"; 754ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), GURL(kURL))); 755ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 756ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 757ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 758ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 759ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 760ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that we properly autofill forms with repeated fields. 761ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// In the wild, the repeated fields are typically either email fields 762ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// (duplicated for "confirmation"); or variants that are hot-swapped via 763ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// JavaScript, with only one actually visible at any given time. 764ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillFormWithRepeatedField) { 765ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 766ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 767ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 768ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 769ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + 770ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<form action=\"http://www.example.com/\" method=\"POST\">" 771ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"firstname\">First name:</label>" 772ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"firstname\"" 7734ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " onfocus=\"domAutomationController.send(true)\"><br>" 774ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"lastname\">Last name:</label>" 775ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"lastname\"><br>" 776ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address1\">Address line 1:</label>" 777ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address1\"><br>" 778ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address2\">Address line 2:</label>" 779ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address2\"><br>" 780ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"city\">City:</label>" 781ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"city\"><br>" 782ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"state\">State:</label>" 783ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"state\">" 784ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 785ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">California</option>" 786ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"TX\">Texas</option>" 787ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 788ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"state_freeform\" style=\"display:none\">State:</label>" 789ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"state_freeform\"" 790ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " style=\"display:none\"><br>" 791ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"zip\">ZIP code:</label>" 792ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"zip\"><br>" 793ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"country\">Country:</label>" 794ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"country\">" 795ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 796ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">Canada</option>" 797ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"US\">United States</option>" 798ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 799ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"phone\">Phone number:</label>" 800ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"phone\"><br>" 801ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</form>"))); 802ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 803ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 804ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 805ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("state_freeform", std::string()); 806ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 807ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 808ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that we properly autofill forms with non-autofillable fields. 809ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 810ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillFormWithNonAutofillableField) { 811ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 812ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 813ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 814ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 815ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + 816ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<form action=\"http://www.example.com/\" method=\"POST\">" 817ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"firstname\">First name:</label>" 818ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"firstname\"" 8194ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " onfocus=\"domAutomationController.send(true)\"><br>" 820ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"middlename\">Middle name:</label>" 821ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"middlename\" autocomplete=\"off\" /><br>" 822ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"lastname\">Last name:</label>" 823ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"lastname\"><br>" 824ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address1\">Address line 1:</label>" 825ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address1\"><br>" 826ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address2\">Address line 2:</label>" 827ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address2\"><br>" 828ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"city\">City:</label>" 829ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"city\"><br>" 830ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"state\">State:</label>" 831ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"state\">" 832ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 833ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">California</option>" 834ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"TX\">Texas</option>" 835ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 836ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"zip\">ZIP code:</label>" 837ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"zip\"><br>" 838ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"country\">Country:</label>" 839ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"country\">" 840ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 841ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">Canada</option>" 842ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"US\">United States</option>" 843ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 844ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"phone\">Phone number:</label>" 845ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"phone\"><br>" 846ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</form>"))); 847ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 848ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 849ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 850ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 851ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 852ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that we can Autofill dynamically generated forms. 853ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, DynamicFormFill) { 854ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 855ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 856ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 857ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 858ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + 859ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<form id=\"form\" action=\"http://www.example.com/\"" 860ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " method=\"POST\"></form>" 861ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<script>" 862ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "function AddElement(name, label) {" 863ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var form = document.getElementById('form');" 864ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 865ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var label_text = document.createTextNode(label);" 866ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var label_element = document.createElement('label');" 867ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " label_element.setAttribute('for', name);" 868ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " label_element.appendChild(label_text);" 869ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " form.appendChild(label_element);" 870ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 871ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " if (name === 'state' || name === 'country') {" 872ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var select_element = document.createElement('select');" 873ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.setAttribute('id', name);" 874ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.setAttribute('name', name);" 875ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 876ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " /* Add an empty selected option. */" 877ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var default_option = new Option('--', '', true);" 878ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.appendChild(default_option);" 879ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 880ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " /* Add the other options. */" 881ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " if (name == 'state') {" 882ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var option1 = new Option('California', 'CA');" 883ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.appendChild(option1);" 884ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var option2 = new Option('Texas', 'TX');" 885ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.appendChild(option2);" 886ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " } else {" 887ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var option1 = new Option('Canada', 'CA');" 888ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.appendChild(option1);" 889ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var option2 = new Option('United States', 'US');" 890ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.appendChild(option2);" 891ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 892ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 893ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " form.appendChild(select_element);" 894ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " } else {" 895ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var input_element = document.createElement('input');" 896ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " input_element.setAttribute('id', name);" 897ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " input_element.setAttribute('name', name);" 898ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 8994ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " /* Add the onfocus listener to the 'firstname' field. */" 900ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " if (name === 'firstname') {" 9014ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " input_element.onfocus = function() {" 9024ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " domAutomationController.send(true);" 9034ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " };" 904ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 905ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 906ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " form.appendChild(input_element);" 907ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 908ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 909ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " form.appendChild(document.createElement('br'));" 910ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 911ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 912ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "function BuildForm() {" 913ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var elements = [" 914ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['firstname', 'First name:']," 915ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['lastname', 'Last name:']," 916ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['address1', 'Address line 1:']," 917ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['address2', 'Address line 2:']," 918ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['city', 'City:']," 919ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['state', 'State:']," 920ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['zip', 'ZIP code:']," 921ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['country', 'Country:']," 922ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['phone', 'Phone number:']," 923ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ];" 924ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 925ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " for (var i = 0; i < elements.length; i++) {" 926ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var name = elements[i][0];" 927ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var label = elements[i][1];" 928ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " AddElement(name, label);" 929ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 930ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 931ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</script>"))); 932ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 933ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Dynamically construct the form. 934ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScript(GetRenderViewHost(), "BuildForm();")); 935ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 936ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 937ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 938ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 939ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 940ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that form filling works after reloading the current page. 941ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillAfterReload) { 942ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 943ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 944ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 945ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 946ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 947ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 948ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Reload the page. 9490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::WebContents* web_contents = GetWebContents(); 950ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch web_contents->GetController().Reload(false); 951ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::WaitForLoadStop(web_contents); 952ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 953ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 954ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 955ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 956ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 9573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillAfterTranslate) { 958f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 959f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (TranslateService::IsTranslateBubbleEnabled()) 960f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return; 961f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 962ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 963ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 964ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url(std::string(kDataURIPrefix) + 965ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<form action=\"http://www.example.com/\" method=\"POST\">" 966ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"fn\">なまえ</label>" 967ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"fn\"" 9684ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " onfocus=\"domAutomationController.send(true)\"" 969ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "><br>" 970ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"ln\">みょうじ</label>" 971ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"ln\"><br>" 972ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"a1\">Address line 1:</label>" 973ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"a1\"><br>" 974ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"a2\">Address line 2:</label>" 975ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"a2\"><br>" 976ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"ci\">City:</label>" 977ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"ci\"><br>" 978ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"st\">State:</label>" 979ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"st\">" 980ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 981ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">California</option>" 982ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"TX\">Texas</option>" 983ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 984ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"z\">ZIP code:</label>" 985ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"z\"><br>" 986ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"co\">Country:</label>" 987ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"co\">" 988ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 989ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">Canada</option>" 990ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"US\">United States</option>" 991ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 992ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"ph\">Phone number:</label>" 993ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"ph\"><br>" 9943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "</form>" 9953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Add additional Japanese characters to ensure the translate bar 9963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // will appear. 9973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "我々は重要な、興味深いものになるが、時折状況が発生するため苦労や痛みは" 9983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "彼にいくつかの素晴らしいを調達することができます。それから、いくつかの利"); 9993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1000424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) content::WindowedNotificationObserver infobar_observer( 10013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, 10023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::NotificationService::AllSources()); 10033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 10043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url)); 1005ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 10063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Wait for the translation bar to appear and get it. 1007424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) infobar_observer.Wait(); 1008a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch InfoBarService* infobar_service = 1009a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch InfoBarService::FromWebContents(GetWebContents()); 1010a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) TranslateInfoBarDelegate* delegate = 1011a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch infobar_service->infobar_at(0)->delegate()->AsTranslateInfoBarDelegate(); 1012ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(delegate); 1013c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, 1014c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch delegate->translate_step()); 1015ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1016ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Simulate translation button press. 1017ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch delegate->Translate(); 1018ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1019ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::WindowedNotificationObserver translation_observer( 1020ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch chrome::NOTIFICATION_PAGE_TRANSLATED, 1021ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::NotificationService::AllSources()); 1022ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1023424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Simulate the translate script being retrieved. 1024424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Pass fake google.translate lib as the translate script. 1025424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) SimulateURLFetch(true); 1026424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1027ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Simulate the render notifying the translation has been done. 1028ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch translation_observer.Wait(); 1029ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1030ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 1031ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1032ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1033ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test phone fields parse correctly from a given profile. 1034ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// The high level key presses execute the following: Select the first text 1035ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// field, invoke the autofill popup list, select the first profile within the 1036ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// list, and commit to the profile to populate the form. 1037116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Flakily times out on windows. http://crbug.com/390564 1038116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 1039116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_ComparePhoneNumbers DISABLED_ComparePhoneNumbers 1040116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1041116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_ComparePhoneNumbers ComparePhoneNumbers 1042116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1043116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, MAYBE_ComparePhoneNumbers) { 1044ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 1045ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1046ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillProfile profile; 1047ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Bob")); 1048ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith")); 1049ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16("1234 H St.")); 1050ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_CITY, ASCIIToUTF16("San Jose")); 1051ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA")); 1052ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_ZIP, ASCIIToUTF16("95110")); 1053ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("1-408-555-4567")); 1054ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetProfile(profile); 1055ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1056ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL("files/autofill/form_phones.html"); 1057ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1058ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 1059ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1060ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("NAME_FIRST", "Bob"); 1061ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("NAME_LAST", "Smith"); 1062ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_LINE1", "1234 H St."); 1063ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_CITY", "San Jose"); 1064ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_STATE", "CA"); 1065ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_ZIP", "95110"); 1066ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_WHOLE_NUMBER", "14085554567"); 1067ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_CITY_CODE-1", "408"); 1068ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_CITY_CODE-2", "408"); 1069ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_NUMBER", "5554567"); 1070ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_NUMBER_3-1", "555"); 1071ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_NUMBER_3-2", "555"); 1072ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_NUMBER_4-1", "4567"); 1073ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_NUMBER_4-2", "4567"); 1074ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_EXT-1", std::string()); 1075ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_EXT-2", std::string()); 1076ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_COUNTRY_CODE-1", "1"); 1077ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1078ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1079ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that Autofill does not fill in read-only fields. 1080ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, NoAutofillForReadOnlyFields) { 1081ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 1082ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1083ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string addr_line1("1234 H St."); 1084ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1085ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillProfile profile; 1086ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Bob")); 1087ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith")); 1088ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(EMAIL_ADDRESS, ASCIIToUTF16("bsmith@gmail.com")); 1089ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16(addr_line1)); 1090ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_CITY, ASCIIToUTF16("San Jose")); 1091ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA")); 1092ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_ZIP, ASCIIToUTF16("95110")); 1093ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(COMPANY_NAME, ASCIIToUTF16("Company X")); 1094ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("408-871-4567")); 1095ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetProfile(profile); 1096ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1097ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL("files/autofill/read_only_field_test.html"); 1098ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1099ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("firstname"); 1100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("email", std::string()); 1102ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("address", addr_line1); 1103ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1104ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1105ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test form is fillable from a profile after form was reset. 1106ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Steps: 1107ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// 1. Fill form using a saved profile. 1108ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// 2. Reset the form. 1109ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// 3. Fill form using a saved profile. 1110ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Flakily times out: http://crbug.com/270341 1111ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, DISABLED_FormFillableOnReset) { 1112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 1113ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1114ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 1115ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1116ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL("files/autofill/autofill_test_form.html"); 1117ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1118ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 1119ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1120ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScript( 11210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetWebContents(), "document.getElementById('testform').reset()")); 1122ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1123ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 1124ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1125ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("NAME_FIRST", "Milton"); 1126ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("NAME_LAST", "Waddams"); 1127ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("EMAIL_ADDRESS", "red.swingline@initech.com"); 1128ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_LINE1", "4120 Freidrich Lane"); 1129ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_CITY", "Austin"); 1130ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_STATE", "Texas"); 1131ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_ZIP", "78744"); 1132ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_COUNTRY", "United States"); 1133ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_WHOLE_NUMBER", "5125551234"); 1134ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1135ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1136ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test Autofill distinguishes a middle initial in a name. 1137ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Flakily times out: http://crbug.com/270341 1138ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 1139ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DISABLED_DistinguishMiddleInitialWithinName) { 1140ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 1141ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1142ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 1143ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1144ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL( 1145ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "files/autofill/autofill_middleinit_form.html"); 1146ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1147ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 1148ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1149ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("NAME_MIDDLE", "C"); 1150ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1151ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1152ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test forms with multiple email addresses are filled properly. 1153ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Entire form should be filled with one user gesture. 1154ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Flakily times out: http://crbug.com/270341 1155ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 1156ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DISABLED_MultipleEmailFilledByOneUserGesture) { 1157ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 1158ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1159ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string email("bsmith@gmail.com"); 1160ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1161ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillProfile profile; 1162ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Bob")); 1163ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith")); 1164ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(EMAIL_ADDRESS, ASCIIToUTF16(email)); 1165ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("4088714567")); 1166ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetProfile(profile); 1167ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1168ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL( 1169ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "files/autofill/autofill_confirmemail_form.html"); 1170ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1171ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 1172ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1173ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("EMAIL_CONFIRM", email); 1174ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // TODO(isherman): verify entire form. 1175ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1176ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1177424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// http://crbug.com/281527 1178ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#if defined(OS_MACOSX) 1179ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#define MAYBE_FormFillLatencyAfterSubmit FormFillLatencyAfterSubmit 1180ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#else 1181ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#define MAYBE_FormFillLatencyAfterSubmit DISABLED_FormFillLatencyAfterSubmit 1182ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#endif 1183ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test latency time on form submit with lots of stored Autofill profiles. 1184ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// This test verifies when a profile is selected from the Autofill dictionary 1185ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// that consists of thousands of profiles, the form does not hang after being 1186ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// submitted. 1187ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 1188ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch MAYBE_FormFillLatencyAfterSubmit) { 1189ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 1190ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1191ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::vector<std::string> cities; 1192ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch cities.push_back("San Jose"); 1193ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch cities.push_back("San Francisco"); 1194ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch cities.push_back("Sacramento"); 1195ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch cities.push_back("Los Angeles"); 1196ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1197ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::vector<std::string> streets; 1198ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch streets.push_back("St"); 1199ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch streets.push_back("Ave"); 1200ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch streets.push_back("Ln"); 1201ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch streets.push_back("Ct"); 1202ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1203ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const int kNumProfiles = 1500; 1204ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Time start_time = base::Time::Now(); 1205ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::vector<AutofillProfile> profiles; 1206ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch for (int i = 0; i < kNumProfiles; i++) { 1207ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillProfile profile; 1208a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 name(base::IntToString16(i)); 1209a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 email(name + ASCIIToUTF16("@example.com")); 1210a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 street = ASCIIToUTF16( 1211ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::IntToString(base::RandInt(0, 10000)) + " " + 1212ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch streets[base::RandInt(0, streets.size() - 1)]); 12135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 city = 12145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASCIIToUTF16(cities[base::RandInt(0, cities.size() - 1)]); 1215a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 zip(base::IntToString16(base::RandInt(0, 10000))); 1216ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_FIRST, name); 1217ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(EMAIL_ADDRESS, email); 1218ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_LINE1, street); 1219ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_CITY, city); 12205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA")); 1221ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_ZIP, zip); 12225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); 1223ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profiles.push_back(profile); 1224ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 1225ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetProfiles(&profiles); 1226ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // TODO(isherman): once we're sure this test doesn't timeout on any bots, this 1227ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // can be removd. 1228ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch LOG(INFO) << "Created " << kNumProfiles << " profiles in " << 1229ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch (base::Time::Now() - start_time).InSeconds() << " seconds."; 1230ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1231ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL( 1232ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "files/autofill/latency_after_submit_test.html"); 1233ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1234ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 1235ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1236ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::WindowedNotificationObserver load_stop_observer( 1237ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::NOTIFICATION_LOAD_STOP, 1238ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::Source<content::NavigationController>( 12390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &GetWebContents()->GetController())); 1240ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1241ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScript( 1242ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 1243ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('testform').submit();")); 1244ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // This will ensure the test didn't hang. 1245ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch load_stop_observer.Wait(); 1246ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1247ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1248ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that Chrome doesn't crash when autocomplete is disabled while the user 1249ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// is interacting with the form. This is a regression test for 1250ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// http://crbug.com/160476 1251ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 1252ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DisableAutocompleteWhileFilling) { 1253ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 1254ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1255ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 1256ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 1257ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 1258ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1259ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill: Start filling the first name field with "M" and wait for 1260ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // the popup to be shown. 1261ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch FocusFirstNameField(); 1262ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 1263ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1264ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Now that the popup with suggestions is showing, disable autocomplete for 1265ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // the active field. 1266ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScript( 1267ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 1268ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.querySelector('input').autocomplete = 'off';")); 1269ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1270ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press the down arrow to select the suggestion and attempt to preview the 1271ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // autofilled form. 12720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) SendKeyToPopupAndWait(ui::VKEY_DOWN); 1273ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1274ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace autofill 1276