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" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/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" 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/test/base/interactive_test_utils.h" 30ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/test/base/test_switches.h" 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/autofill/content/browser/content_autofill_driver.h" 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_manager.h" 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_manager_test_delegate.h" 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_profile.h" 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/autofill/core/browser/autofill_test_utils.h" 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager.h" 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager_observer.h" 39ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "components/autofill/core/browser/validation.h" 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/infobars/core/confirm_infobar_delegate.h" 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/infobars/core/infobar.h" 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "components/infobars/core/infobar_manager.h" 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/translate/core/browser/translate_infobar_delegate.h" 44ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "content/public/browser/navigation_controller.h" 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_observer.h" 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_registrar.h" 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_service.h" 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/render_view_host.h" 490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "content/public/browser/render_widget_host.h" 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/web_contents.h" 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/browser_test_utils.h" 52ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "content/public/test/test_renderer_host.h" 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/test_utils.h" 54ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "net/url_request/test_url_fetcher_factory.h" 55ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "testing/gmock/include/gmock/gmock.h" 56ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h" 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill { 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 634ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdochstatic const char kDataURIPrefix[] = "data:text/html;charset=utf-8,"; 644ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdochstatic const char kTestFormString[] = 65ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<form action=\"http://www.example.com/\" method=\"POST\">" 66ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"firstname\">First name:</label>" 67ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"firstname\"" 684ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " onfocus=\"domAutomationController.send(true)\"><br>" 69ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"lastname\">Last name:</label>" 70ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"lastname\"><br>" 71ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address1\">Address line 1:</label>" 72ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address1\"><br>" 73ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address2\">Address line 2:</label>" 74ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address2\"><br>" 75ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"city\">City:</label>" 76ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"city\"><br>" 77ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"state\">State:</label>" 78ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"state\">" 79ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 80ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">California</option>" 81ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"TX\">Texas</option>" 82ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 83ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"zip\">ZIP code:</label>" 84ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"zip\"><br>" 85ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"country\">Country:</label>" 86ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"country\">" 87ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 88ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">Canada</option>" 89ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"US\">United States</option>" 90ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 91ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"phone\">Phone number:</label>" 92ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"phone\"><br>" 93ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</form>"; 94ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 952385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 962385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// AutofillManagerTestDelegateImpl -------------------------------------------- 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AutofillManagerTestDelegateImpl 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : public autofill::AutofillManagerTestDelegate { 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillManagerTestDelegateImpl() {} 1022385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch virtual ~AutofillManagerTestDelegateImpl() {} 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 104a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // autofill::AutofillManagerTestDelegate: 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DidPreviewFormData() OVERRIDE { 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(loop_runner_->loop_running()); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_->Quit(); 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DidFillFormData() OVERRIDE { 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(loop_runner_->loop_running()); 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_->Quit(); 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DidShowSuggestions() OVERRIDE { 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(loop_runner_->loop_running()); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_->Quit(); 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void Reset() { 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_ = new content::MessageLoopRunner(); 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void Wait() { 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) loop_runner_->Run(); 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<content::MessageLoopRunner> loop_runner_; 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AutofillManagerTestDelegateImpl); 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1342385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 1352385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// WindowedPersonalDataManagerObserver ---------------------------------------- 1362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WindowedPersonalDataManagerObserver 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : public PersonalDataManagerObserver, 139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public infobars::InfoBarManager::Observer { 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) explicit WindowedPersonalDataManagerObserver(Browser* browser) 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : alerted_(false), 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) has_run_message_loop_(false), 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser_(browser), 145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) infobar_service_(InfoBarService::FromWebContents( 146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) browser_->tab_strip_model()->GetActiveWebContents())) { 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PersonalDataManagerFactory::GetForProfile(browser_->profile())-> 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddObserver(this); 149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) infobar_service_->AddObserver(this); 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~WindowedPersonalDataManagerObserver() { 153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) while (infobar_service_->infobar_count() > 0) { 154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) infobar_service_->RemoveInfoBar(infobar_service_->infobar_at(0)); 1552385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } 156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) infobar_service_->RemoveObserver(this); 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // PersonalDataManagerObserver: 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnPersonalDataChanged() OVERRIDE { 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (has_run_message_loop_) { 16290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoopForUI::current()->Quit(); 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) has_run_message_loop_ = false; 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) alerted_ = true; 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnInsufficientFormData() OVERRIDE { 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnPersonalDataChanged(); 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 173a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) void Wait() { 174a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (!alerted_) { 175a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) has_run_message_loop_ = true; 176a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) content::RunMessageLoop(); 177a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 178a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) PersonalDataManagerFactory::GetForProfile(browser_->profile())-> 179a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) RemoveObserver(this); 180a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 181a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 183010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // infobars::InfoBarManager::Observer: 184010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void OnInfoBarAdded(infobars::InfoBar* infobar) OVERRIDE { 185010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) infobar_service_->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate()-> 186010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) Accept(); 187010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 188010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool alerted_; 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool has_run_message_loop_; 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* browser_; 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InfoBarService* infobar_service_; 1932385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 1942385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch DISALLOW_COPY_AND_ASSIGN(WindowedPersonalDataManagerObserver); 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1972385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// AutofillInteractiveTest ---------------------------------------------------- 1982385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AutofillInteractiveTest : public InProcessBrowserTest { 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 2010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) AutofillInteractiveTest() : 2020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) key_press_event_sink_( 2030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) base::Bind(&AutofillInteractiveTest::HandleKeyPressEvent, 2040f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) base::Unretained(this))) {} 2052385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch virtual ~AutofillInteractiveTest() {} 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 207a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // InProcessBrowserTest: 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Don't want Keychain coming up on Mac. 210a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) test::DisableSystemServices(browser()->profile()->GetPrefs()); 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Inject the test delegate into the AutofillManager. 2130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::WebContents* web_contents = GetWebContents(); 214a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContentAutofillDriver* autofill_driver = 215a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ContentAutofillDriver::FromWebContents(web_contents); 2167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AutofillManager* autofill_manager = autofill_driver->autofill_manager(); 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_manager->SetTestDelegate(&test_delegate_); 2186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // If the mouse happened to be over where the suggestions are shown, then 2206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // the preview will show up and will fail the tests. We need to give it a 2216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // point that's within the browser frame, or else the method hangs. 2226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) gfx::Point reset_mouse(GetWebContents()->GetContainerBounds().origin()); 2236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) reset_mouse = gfx::Point(reset_mouse.x() + 5, reset_mouse.y() + 5); 2246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(reset_mouse)); 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void TearDownOnMainThread() OVERRIDE { 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Make sure to close any showing popups prior to tearing down the UI. 2290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::WebContents* web_contents = GetWebContents(); 230a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutofillManager* autofill_manager = ContentAutofillDriver::FromWebContents( 231a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) web_contents)->autofill_manager(); 232f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) autofill_manager->client()->HideAutofillPopup(); 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 235a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) PersonalDataManager* GetPersonalDataManager() { 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return PersonalDataManagerFactory::GetForProfile(browser()->profile()); 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::WebContents* GetWebContents() { 2400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return browser()->tab_strip_model()->GetActiveWebContents(); 241a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 242a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::RenderViewHost* GetRenderViewHost() { 2440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return GetWebContents()->GetRenderViewHost(); 245a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 246a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void CreateTestProfile() { 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillProfile profile; 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetProfileInfo( 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &profile, "Milton", "C.", "Waddams", 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "red.swingline@initech.com", "Initech", "4120 Freidrich Lane", 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "Basement", "Austin", "Texas", "78744", "US", "5125551234"); 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WindowedPersonalDataManagerObserver observer(browser()); 255a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetPersonalDataManager()->AddProfile(profile); 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AddProfile is asynchronous. Wait for it to finish before continuing the 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // tests. 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observer.Wait(); 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 262ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void SetProfiles(std::vector<AutofillProfile>* profiles) { 263ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WindowedPersonalDataManagerObserver observer(browser()); 264ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetPersonalDataManager()->SetProfiles(profiles); 265ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch observer.Wait(); 266ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 267ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 268ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void SetProfile(const AutofillProfile& profile) { 269ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::vector<AutofillProfile> profiles; 270ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profiles.push_back(profile); 271ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetProfiles(&profiles); 272ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 273ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 274ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Populates a webpage form using autofill data and keypress events. 275ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // This function focuses the specified input field in the form, and then 276ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // sends keypress events to the tab to cause the form to be populated. 277ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void PopulateForm(const std::string& field_id) { 278ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string js("document.getElementById('" + field_id + "').focus();"); 279ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScript(GetRenderViewHost(), js)); 280ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 281ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPageAndWait(ui::VKEY_DOWN); 282ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 283ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 284ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 285ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectFieldValue(const std::string& field_name, 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& expected_value) { 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string value; 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractString( 2900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetWebContents(), 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "window.domAutomationController.send(" 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " document.getElementById('" + field_name + "').value);", 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &value)); 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(expected_value, value); 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void GetFieldBackgroundColor(const std::string& field_name, 2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string* color) { 2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(content::ExecuteScriptAndExtractString( 3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetWebContents(), 3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "window.domAutomationController.send(" 3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " document.defaultView.getComputedStyle(document.getElementById('" + 3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci field_name + "')).backgroundColor);", 3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci color)); 3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 307ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void SimulateURLFetch(bool success) { 308ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); 309ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(fetcher); 310ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch net::URLRequestStatus status; 311ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch status.set_status(success ? net::URLRequestStatus::SUCCESS : 312ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch net::URLRequestStatus::FAILED); 313ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 314ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string script = " var google = {};" 315ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "google.translate = (function() {" 316ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " return {" 317ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " TranslateService: function() {" 318ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " return {" 319ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " isAvailable : function() {" 320ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " return true;" 321ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }," 322ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " restore : function() {" 323ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " return;" 324ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }," 325ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " getDetectedLanguage : function() {" 326ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " return \"ja\";" 327ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }," 328ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " translatePage : function(originalLang, targetLang," 329ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " onTranslateProgress) {" 330ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " document.getElementsByTagName(\"body\")[0].innerHTML = '" + 331ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string(kTestFormString) + 332ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ';" 333ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " onTranslateProgress(100, true, false);" 334ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 335ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " };" 336ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 337ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " };" 3383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "})();" 3393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "cr.googleTranslate.onTranslateElementLoad();"; 340ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 341ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch fetcher->set_url(fetcher->GetOriginalURL()); 342ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch fetcher->set_status(status); 343ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch fetcher->set_response_code(success ? 200 : 500); 344ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch fetcher->SetResponseString(script); 345ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch fetcher->delegate()->OnURLFetchComplete(fetcher); 346ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 347ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void FocusFirstNameField() { 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool result = false; 350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 351a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetRenderViewHost(), 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "if (document.readyState === 'complete')" 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " document.getElementById('firstname').focus();" 354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "else" 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " domAutomationController.send(false);", 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &result)); 357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result); 358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Simulates a click on the middle of the DOM element with the given |id|. 3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void ClickElementWithId(const std::string& id) { 3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int x; 3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractInt( 3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetRenderViewHost(), 3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "var bounds = document.getElementById('" + 3665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) id + 3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "').getBoundingClientRect();" 3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "domAutomationController.send(" 3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) " Math.floor(bounds.left + bounds.width / 2));", 3705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &x)); 3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int y; 3725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractInt( 3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetRenderViewHost(), 3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "var bounds = document.getElementById('" + 3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) id + 3765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "').getBoundingClientRect();" 3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "domAutomationController.send(" 3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) " Math.floor(bounds.top + bounds.height / 2));", 3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &y)); 3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::SimulateMouseClickAt(GetWebContents(), 3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0, 3825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) blink::WebMouseEvent::ButtonLeft, 3835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gfx::Point(x, y)); 3845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void ClickFirstNameField() { 3875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ClickElementWithId("firstname")); 3885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Make a pointless round trip to the renderer, giving the popup a chance to 3915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // show if it's going to. If it does show, an assert in 3925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // AutofillManagerTestDelegateImpl will trigger. 3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void MakeSurePopupDoesntAppear() { 3945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int unused; 3955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractInt( 3965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetRenderViewHost(), "domAutomationController.send(42)", &unused)); 3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 399c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectFilledTestForm() { 400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("firstname", "Milton"); 401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("lastname", "Waddams"); 402c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("address1", "4120 Freidrich Lane"); 403c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("address2", "Basement"); 404c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("city", "Austin"); 405c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("state", "TX"); 406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("zip", "78744"); 407c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("country", "US"); 408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFieldValue("phone", "5125551234"); 409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SendKeyToPageAndWait(ui::KeyboardCode key) { 412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_delegate_.Reset(); 413c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::SimulateKeyPress( 4140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetWebContents(), key, false, false, false, false); 415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_delegate_.Wait(); 416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bool HandleKeyPressEvent(const content::NativeWebKeyboardEvent& event) { 4190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return true; 4200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 4210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SendKeyToPopupAndWait(ui::KeyboardCode key) { 4230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Route popup-targeted key presses via the render view host. 424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NativeWebKeyboardEvent event; 425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) event.windowsKeyCode = key; 426f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) event.type = blink::WebKeyboardEvent::RawKeyDown; 427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_delegate_.Reset(); 4280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Install the key press event sink to ensure that any events that are not 4290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // handled by the installed callbacks do not end up crashing the test. 4300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetRenderViewHost()->AddKeyPressEventCallback(key_press_event_sink_); 4310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetRenderViewHost()->ForwardKeyboardEvent(event); 432c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_delegate_.Wait(); 4330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetRenderViewHost()->RemoveKeyPressEventCallback(key_press_event_sink_); 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Datalist does not support autofill preview. There is no need to start 4371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // message loop for Datalist. 4381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SendKeyToDataListPopup(ui::KeyboardCode key) { 4391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Route popup-targeted key presses via the render view host. 4401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::NativeWebKeyboardEvent event; 4411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci event.windowsKeyCode = key; 4421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci event.type = blink::WebKeyboardEvent::RawKeyDown; 4431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Install the key press event sink to ensure that any events that are not 4441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // handled by the installed callbacks do not end up crashing the test. 4451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetRenderViewHost()->AddKeyPressEventCallback(key_press_event_sink_); 4461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetRenderViewHost()->ForwardKeyboardEvent(event); 4471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetRenderViewHost()->RemoveKeyPressEventCallback(key_press_event_sink_); 4481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 450ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void TryBasicFormFill() { 451ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch FocusFirstNameField(); 452ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 453ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Start filling the first name field with "M" and wait for the popup to be 454ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // shown. 455ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 456ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 457ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press the down arrow to select the suggestion and preview the autofilled 458ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // form. 459ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 460ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 461ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // The previewed values should not be accessible to JavaScript. 462ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("firstname", "M"); 463ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("lastname", std::string()); 464ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("address1", std::string()); 465ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("address2", std::string()); 466ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("city", std::string()); 467ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("state", std::string()); 468ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("zip", std::string()); 469ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("country", std::string()); 470ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("phone", std::string()); 471ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // TODO(isherman): It would be nice to test that the previewed values are 472ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // displayed: http://crbug.com/57220 473ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 474ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press Enter to accept the autofill suggestions. 475ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 476ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 477ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // The form should be filled. 478ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFilledTestForm(); 479ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 480ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 4815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AutofillManagerTestDelegateImpl* test_delegate() { return &test_delegate_; } 4825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4832385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch private: 484c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutofillManagerTestDelegateImpl test_delegate_; 4852385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 486ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch net::TestURLFetcherFactory url_fetcher_factory_; 487ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 4880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // KeyPressEventCallback that serves as a sink to ensure that every key press 4890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // event the tests create and have the WebContents forward is handled by some 4900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // key press event callback. It is necessary to have this sinkbecause if no 4910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // key press event callback handles the event (at least on Mac), a DCHECK 4920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // ends up going off that the |event| doesn't have an |os_event| associated 4930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // with it. 4940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::RenderWidgetHost::KeyPressEventCallback key_press_event_sink_; 4950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 4962385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch DISALLOW_COPY_AND_ASSIGN(AutofillInteractiveTest); 497c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 499ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that basic form fill is working. 500ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, BasicFormFill) { 501ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 502ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 503ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 504ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 505ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 5062385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 507ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 508ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 509ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 5102385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 511ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that form filling can be initiated by pressing the down arrow. 512ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillViaDownArrow) { 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateTestProfile(); 514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 515c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Load the test page. 516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL(std::string(kDataURIPrefix) + kTestFormString))); 518c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 519c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Focus a fillable field. 520c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FocusFirstNameField(); 521c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 522ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press the down arrow to initiate Autofill and wait for the popup to be 523ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // shown. 524ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPageAndWait(ui::VKEY_DOWN); 525ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 526ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press the down arrow to select the suggestion and preview the autofilled 527ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // form. 528ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 529ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 530ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press Enter to accept the autofill suggestions. 531ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 532ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 533ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // The form should be filled. 534ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFilledTestForm(); 535ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 536ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 537ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillSelectViaTab) { 538ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 539ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 540ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 541ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 542ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 543ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 544ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Focus a fillable field. 545ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch FocusFirstNameField(); 546558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 547c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Press the down arrow to initiate Autofill and wait for the popup to be 548c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // shown. 549c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SendKeyToPageAndWait(ui::VKEY_DOWN); 550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 551c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Press the down arrow to select the suggestion and preview the autofilled 552c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // form. 553c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SendKeyToPopupAndWait(ui::VKEY_DOWN); 554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Press tab to accept the autofill suggestions. 556c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SendKeyToPopupAndWait(ui::VKEY_TAB); 557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 558c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The form should be filled. 559c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectFilledTestForm(); 560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 561c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillViaClick) { 5635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CreateTestProfile(); 5645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Load the test page. 5665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 5675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) browser(), GURL(std::string(kDataURIPrefix) + kTestFormString))); 5685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Focus a fillable field. 5695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(FocusFirstNameField()); 5705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Now click it. 5725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) test_delegate()->Reset(); 5735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ClickFirstNameField()); 5745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) test_delegate()->Wait(); 5755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Press the down arrow to select the suggestion and preview the autofilled 5775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // form. 5785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SendKeyToPopupAndWait(ui::VKEY_DOWN); 5795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Press Enter to accept the autofill suggestions. 5815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SendKeyToPopupAndWait(ui::VKEY_RETURN); 5825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // The form should be filled. 5845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectFilledTestForm(); 5855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 5865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Makes sure that the first click does *not* activate the popup. 5885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, DontAutofillForFirstClick) { 5895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CreateTestProfile(); 5905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Load the test page. 5925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 5935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) browser(), GURL(std::string(kDataURIPrefix) + kTestFormString))); 5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Click the first name field while it's out of focus, then twiddle our thumbs 5965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // a bit. If a popup were to show, it would hit the asserts in 5975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // AutofillManagerTestDelegateImpl while we're wasting time. 5985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ClickFirstNameField()); 5995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(MakeSurePopupDoesntAppear()); 6005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // The second click should activate the popup since the first click focused 6025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // the field. 6035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) test_delegate()->Reset(); 6045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ClickFirstNameField()); 6055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) test_delegate()->Wait(); 6065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Makes sure that clicking outside the focused field doesn't activate 6095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// the popup. 6105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, DontAutofillForOutsideClick) { 6115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CreateTestProfile(); 6125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Load the test page. 6145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 6155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) browser(), 6165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GURL(std::string(kDataURIPrefix) + kTestFormString + 6175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "<button disabled id='disabled-button'>Cant click this</button>"))); 6185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(FocusFirstNameField()); 6205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Clicking a disabled button will generate a mouse event but focus doesn't 6225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // change. This tests that autofill can handle a mouse event outside a focused 6235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // input *without* showing the popup. 6245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ClickElementWithId("disabled-button")); 6255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(MakeSurePopupDoesntAppear()); 6265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) test_delegate()->Reset(); 6285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ClickFirstNameField()); 6295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) test_delegate()->Wait(); 6305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 6315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Test that a field is still autofillable after the previously autofilled 633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// value is deleted. 634116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnDeleteValueAfterAutofill) { 635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CreateTestProfile(); 636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 637116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Load the test page. 638116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 640116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 641116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Invoke and accept the Autofill popup and verify the form was filled. 642116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FocusFirstNameField(); 643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 644116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 645116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 646116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExpectFilledTestForm(); 647116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Delete the value of a filled field. 649116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(content::ExecuteScript( 650116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetRenderViewHost(), 651116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "document.getElementById('firstname').value = '';")); 652116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExpectFieldValue("firstname", ""); 653116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 654116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Invoke and accept the Autofill popup and verify the field was filled. 655116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 656116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 657116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 658116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExpectFieldValue("firstname", "Milton"); 659116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 660116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 6611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Test that an input field is not rendered with the yellow autofilled 6621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// background color when choosing an option from the datalist suggestion list. 6631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnSelectOptionFromDatalist) { 6641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Load the test page. 6651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 6661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser(), 6671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL(std::string(kDataURIPrefix) + 6681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "<form action=\"http://www.example.com/\" method=\"POST\">" 6691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " <input list=\"dl\" type=\"search\" id=\"firstname\"" 6701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " onfocus=\"domAutomationController.send(true)\"><br>" 6711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " <datalist id=\"dl\">" 6721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " <option value=\"Adam\"></option>" 6731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " <option value=\"Bob\"></option>" 6741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " <option value=\"Carl\"></option>" 6751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " </datalist>" 6761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "</form>"))); 6771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string orginalcolor; 6781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetFieldBackgroundColor("firstname", &orginalcolor); 6791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FocusFirstNameField(); 6811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SendKeyToPageAndWait(ui::VKEY_DOWN); 6821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SendKeyToDataListPopup(ui::VKEY_DOWN); 6831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SendKeyToDataListPopup(ui::VKEY_RETURN); 6841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExpectFieldValue("firstname", "Adam"); 6851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string color; 6861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetFieldBackgroundColor("firstname", &color); 6871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(color, orginalcolor); 6881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6904ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch// Test that a JavaScript oninput event is fired after auto-filling a form. 6914ad1aa43a48567659193a298fad74f55e00b3dd9Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnInputAfterAutofill) { 6924ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch CreateTestProfile(); 6934ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 6944ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch const char kOnInputScript[] = 6954ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "<script>" 6964ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "focused_fired = false;" 6974ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "unfocused_fired = false;" 6984ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "changed_select_fired = false;" 6994ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "unchanged_select_fired = false;" 7004ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('firstname').oninput = function() {" 7014ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " focused_fired = true;" 7024ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "};" 7034ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('lastname').oninput = function() {" 7044ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " unfocused_fired = true;" 7054ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "};" 7064ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('state').oninput = function() {" 7074ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " changed_select_fired = true;" 7084ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "};" 7094ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('country').oninput = function() {" 7104ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " unchanged_select_fired = true;" 7114ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "};" 7124ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('country').value = 'US';" 7134ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "</script>"; 7144ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 7154ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Load the test page. 7164ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 7174ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString + kOnInputScript))); 7184ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 7194ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Invoke Autofill. 7204ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch FocusFirstNameField(); 7214ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 7224ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Start filling the first name field with "M" and wait for the popup to be 7234ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // shown. 7244ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 7254ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 7264ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Press the down arrow to select the suggestion and preview the autofilled 7274ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // form. 7284ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 7294ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 7304ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Press Enter to accept the autofill suggestions. 7314ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 7324ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 7334ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // The form should be filled. 7344ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ExpectFilledTestForm(); 7354ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 7364ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch bool focused_fired = false; 7374ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch bool unfocused_fired = false; 7384ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch bool changed_select_fired = false; 7394ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch bool unchanged_select_fired = false; 7404ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 7414ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 7424ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(focused_fired);", 7434ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &focused_fired)); 7444ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 7454ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 7464ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(unfocused_fired);", 7474ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &unfocused_fired)); 7484ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 7494ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 7504ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(changed_select_fired);", 7514ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &changed_select_fired)); 7524ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 7534ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 7544ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(unchanged_select_fired);", 7554ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &unchanged_select_fired)); 7564ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_TRUE(focused_fired); 7574ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_TRUE(unfocused_fired); 7584ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_TRUE(changed_select_fired); 7594ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_FALSE(unchanged_select_fired); 7604ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch} 7614ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 762ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that a JavaScript onchange event is fired after auto-filling a form. 7634ad1aa43a48567659193a298fad74f55e00b3dd9Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnChangeAfterAutofill) { 764ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 765ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 7664ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch const char kOnChangeScript[] = 767ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<script>" 768ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "focused_fired = false;" 769ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "unfocused_fired = false;" 770ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "changed_select_fired = false;" 771ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "unchanged_select_fired = false;" 772ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('firstname').onchange = function() {" 773ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " focused_fired = true;" 774ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 775ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('lastname').onchange = function() {" 776ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " unfocused_fired = true;" 777ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 778ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('state').onchange = function() {" 779ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " changed_select_fired = true;" 780ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 781ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('country').onchange = function() {" 782ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " unchanged_select_fired = true;" 783ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 784ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('country').value = 'US';" 785ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</script>"; 786ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 787ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 788ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 789ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString + kOnChangeScript))); 790ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 791ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 792ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch FocusFirstNameField(); 793ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 794ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Start filling the first name field with "M" and wait for the popup to be 795ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // shown. 796ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 797ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 798ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press the down arrow to select the suggestion and preview the autofilled 799ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // form. 800ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 801ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 802ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press Enter to accept the autofill suggestions. 803ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 804ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 805ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // The form should be filled. 806ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFilledTestForm(); 807ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 808ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool focused_fired = false; 809ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool unfocused_fired = false; 810ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool changed_select_fired = false; 811ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool unchanged_select_fired = false; 812ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 813ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 814ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "domAutomationController.send(focused_fired);", 815ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &focused_fired)); 816ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 817ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 818ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "domAutomationController.send(unfocused_fired);", 819ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &unfocused_fired)); 820ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 821ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 822ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "domAutomationController.send(changed_select_fired);", 823ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &changed_select_fired)); 824ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 825ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 826ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "domAutomationController.send(unchanged_select_fired);", 827ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch &unchanged_select_fired)); 8284ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_TRUE(focused_fired); 829ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_TRUE(unfocused_fired); 830ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_TRUE(changed_select_fired); 831ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_FALSE(unchanged_select_fired); 8324ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch} 833ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 8344ad1aa43a48567659193a298fad74f55e00b3dd9Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, InputFiresBeforeChange) { 8354ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch CreateTestProfile(); 8364ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 8374ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch const char kInputFiresBeforeChangeScript[] = 8384ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "<script>" 8394ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "inputElementEvents = [];" 8404ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "function recordInputElementEvent(e) {" 8414ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " if (e.target.tagName != 'INPUT') throw 'only <input> tags allowed';" 8424ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " inputElementEvents.push(e.type);" 8434ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "}" 8444ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "selectElementEvents = [];" 8454ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "function recordSelectElementEvent(e) {" 8464ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " if (e.target.tagName != 'SELECT') throw 'only <select> tags allowed';" 8474ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " selectElementEvents.push(e.type);" 8484ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "}" 8494ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('lastname').oninput = recordInputElementEvent;" 8504ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('lastname').onchange = recordInputElementEvent;" 8514ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('country').oninput = recordSelectElementEvent;" 8524ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "document.getElementById('country').onchange = recordSelectElementEvent;" 8534ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "</script>"; 8544ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 8554ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Load the test page. 8564ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 8574ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString + 8584ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch kInputFiresBeforeChangeScript))); 8594ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 8604ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Invoke and accept the Autofill popup and verify the form was filled. 8614ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch FocusFirstNameField(); 8624ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 8634ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_DOWN); 8644ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch SendKeyToPopupAndWait(ui::VKEY_RETURN); 8654ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ExpectFilledTestForm(); 8664ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 8674ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch int num_input_element_events = -1; 8684ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractInt( 869ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 8704ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(inputElementEvents.length);", 8714ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &num_input_element_events)); 8724ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_EQ(2, num_input_element_events); 8734ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 8744ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch std::vector<std::string> input_element_events; 8754ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch input_element_events.resize(2); 8764ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 8774ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractString( 8784ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 8794ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(inputElementEvents[0]);", 8804ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &input_element_events[0])); 8814ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractString( 8824ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 8834ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(inputElementEvents[1]);", 8844ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &input_element_events[1])); 8854ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 8864ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_EQ("input", input_element_events[0]); 8874ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_EQ("change", input_element_events[1]); 8884ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 8894ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch int num_select_element_events = -1; 8904ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractInt( 8914ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 8924ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(selectElementEvents.length);", 8934ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &num_select_element_events)); 8944ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_EQ(2, num_select_element_events); 8954ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 8964ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch std::vector<std::string> select_element_events; 8974ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch select_element_events.resize(2); 8984ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 8994ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractString( 9004ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 9014ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(selectElementEvents[0]);", 9024ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &select_element_events[0])); 9034ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractString( 9044ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch GetRenderViewHost(), 9054ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "domAutomationController.send(selectElementEvents[1]);", 9064ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch &select_element_events[1])); 9074ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 9084ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_EQ("input", select_element_events[0]); 9094ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_EQ("change", select_element_events[1]); 910ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 911ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 912ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that we can autofill forms distinguished only by their |id| attribute. 913ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 914ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillFormsDistinguishedById) { 915ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 916ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 917ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 918ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string kURL = 919ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string(kDataURIPrefix) + kTestFormString + 920ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<script>" 921ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "var mainForm = document.forms[0];" 922ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "mainForm.id = 'mainForm';" 923ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "var newForm = document.createElement('form');" 924ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "newForm.action = mainForm.action;" 925ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "newForm.method = mainForm.method;" 926ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "newForm.id = 'newForm';" 927ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "mainForm.parentNode.insertBefore(newForm, mainForm);" 928ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</script>"; 929ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), GURL(kURL))); 930ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 931ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 932ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 933ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 934ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 935ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that we properly autofill forms with repeated fields. 936ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// In the wild, the repeated fields are typically either email fields 937ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// (duplicated for "confirmation"); or variants that are hot-swapped via 938ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// JavaScript, with only one actually visible at any given time. 939ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillFormWithRepeatedField) { 940ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 941ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 942ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 943ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 944ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + 945ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<form action=\"http://www.example.com/\" method=\"POST\">" 946ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"firstname\">First name:</label>" 947ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"firstname\"" 9484ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " onfocus=\"domAutomationController.send(true)\"><br>" 949ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"lastname\">Last name:</label>" 950ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"lastname\"><br>" 951ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address1\">Address line 1:</label>" 952ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address1\"><br>" 953ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address2\">Address line 2:</label>" 954ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address2\"><br>" 955ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"city\">City:</label>" 956ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"city\"><br>" 957ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"state\">State:</label>" 958ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"state\">" 959ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 960ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">California</option>" 961ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"TX\">Texas</option>" 962ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 963ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"state_freeform\" style=\"display:none\">State:</label>" 964ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"state_freeform\"" 965ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " style=\"display:none\"><br>" 966ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"zip\">ZIP code:</label>" 967ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"zip\"><br>" 968ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"country\">Country:</label>" 969ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"country\">" 970ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 971ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">Canada</option>" 972ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"US\">United States</option>" 973ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 974ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"phone\">Phone number:</label>" 975ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"phone\"><br>" 976ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</form>"))); 977ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 978ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 979ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 980ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("state_freeform", std::string()); 981ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 982ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 983ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that we properly autofill forms with non-autofillable fields. 984ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 985ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillFormWithNonAutofillableField) { 986ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 987ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 988ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 989ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 990ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + 991ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<form action=\"http://www.example.com/\" method=\"POST\">" 992ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"firstname\">First name:</label>" 993ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"firstname\"" 9944ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " onfocus=\"domAutomationController.send(true)\"><br>" 995ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"middlename\">Middle name:</label>" 996ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"middlename\" autocomplete=\"off\" /><br>" 997ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"lastname\">Last name:</label>" 998ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"lastname\"><br>" 999ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address1\">Address line 1:</label>" 1000ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address1\"><br>" 1001ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"address2\">Address line 2:</label>" 1002ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"address2\"><br>" 1003ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"city\">City:</label>" 1004ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"city\"><br>" 1005ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"state\">State:</label>" 1006ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"state\">" 1007ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 1008ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">California</option>" 1009ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"TX\">Texas</option>" 1010ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 1011ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"zip\">ZIP code:</label>" 1012ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"zip\"><br>" 1013ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"country\">Country:</label>" 1014ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"country\">" 1015ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 1016ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">Canada</option>" 1017ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"US\">United States</option>" 1018ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 1019ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"phone\">Phone number:</label>" 1020ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"phone\"><br>" 1021ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</form>"))); 1022ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1023ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 1024ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 1025ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1026ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1027ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that we can Autofill dynamically generated forms. 1028ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, DynamicFormFill) { 1029ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 1030ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1031ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 1032ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 1033ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + 1034ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<form id=\"form\" action=\"http://www.example.com/\"" 1035ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " method=\"POST\"></form>" 1036ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<script>" 1037ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "function AddElement(name, label) {" 1038ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var form = document.getElementById('form');" 1039ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 1040ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var label_text = document.createTextNode(label);" 1041ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var label_element = document.createElement('label');" 1042ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " label_element.setAttribute('for', name);" 1043ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " label_element.appendChild(label_text);" 1044ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " form.appendChild(label_element);" 1045ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 1046ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " if (name === 'state' || name === 'country') {" 1047ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var select_element = document.createElement('select');" 1048ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.setAttribute('id', name);" 1049ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.setAttribute('name', name);" 1050ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 1051ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " /* Add an empty selected option. */" 1052ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var default_option = new Option('--', '', true);" 1053ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.appendChild(default_option);" 1054ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 1055ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " /* Add the other options. */" 1056ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " if (name == 'state') {" 1057ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var option1 = new Option('California', 'CA');" 1058ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.appendChild(option1);" 1059ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var option2 = new Option('Texas', 'TX');" 1060ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.appendChild(option2);" 1061ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " } else {" 1062ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var option1 = new Option('Canada', 'CA');" 1063ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.appendChild(option1);" 1064ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var option2 = new Option('United States', 'US');" 1065ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " select_element.appendChild(option2);" 1066ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 1067ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 1068ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " form.appendChild(select_element);" 1069ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " } else {" 1070ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var input_element = document.createElement('input');" 1071ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " input_element.setAttribute('id', name);" 1072ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " input_element.setAttribute('name', name);" 1073ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 10744ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " /* Add the onfocus listener to the 'firstname' field. */" 1075ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " if (name === 'firstname') {" 10764ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " input_element.onfocus = function() {" 10774ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " domAutomationController.send(true);" 10784ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " };" 1079ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 1080ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 1081ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " form.appendChild(input_element);" 1082ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 1083ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 1084ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " form.appendChild(document.createElement('br'));" 1085ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 1086ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 1087ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "function BuildForm() {" 1088ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var elements = [" 1089ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['firstname', 'First name:']," 1090ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['lastname', 'Last name:']," 1091ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['address1', 'Address line 1:']," 1092ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['address2', 'Address line 2:']," 1093ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['city', 'City:']," 1094ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['state', 'State:']," 1095ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['zip', 'ZIP code:']," 1096ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['country', 'Country:']," 1097ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ['phone', 'Phone number:']," 1098ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ];" 1099ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" 1100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " for (var i = 0; i < elements.length; i++) {" 1101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var name = elements[i][0];" 1102ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " var label = elements[i][1];" 1103ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " AddElement(name, label);" 1104ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }" 1105ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "};" 1106ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "</script>"))); 1107ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1108ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Dynamically construct the form. 1109ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScript(GetRenderViewHost(), "BuildForm();")); 1110ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1111ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 1112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 1113ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1114ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1115ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that form filling works after reloading the current page. 1116ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillAfterReload) { 1117ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 1118ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1119ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 1120ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 1121ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 1122ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1123ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Reload the page. 11240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) content::WebContents* web_contents = GetWebContents(); 1125ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch web_contents->GetController().Reload(false); 1126ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::WaitForLoadStop(web_contents); 1127ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1128ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill. 1129ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 1130ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1131ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 11323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillAfterTranslate) { 1133f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 1134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (TranslateService::IsTranslateBubbleEnabled()) 1135f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return; 1136f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1137ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 1138ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1139ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url(std::string(kDataURIPrefix) + 1140ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<form action=\"http://www.example.com/\" method=\"POST\">" 1141ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"fn\">なまえ</label>" 1142ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"fn\"" 11434ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch " onfocus=\"domAutomationController.send(true)\"" 1144ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "><br>" 1145ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"ln\">みょうじ</label>" 1146ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"ln\"><br>" 1147ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"a1\">Address line 1:</label>" 1148ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"a1\"><br>" 1149ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"a2\">Address line 2:</label>" 1150ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"a2\"><br>" 1151ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"ci\">City:</label>" 1152ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"ci\"><br>" 1153ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"st\">State:</label>" 1154ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"st\">" 1155ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 1156ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">California</option>" 1157ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"TX\">Texas</option>" 1158ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 1159ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"z\">ZIP code:</label>" 1160ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"z\"><br>" 1161ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"co\">Country:</label>" 1162ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <select id=\"co\">" 1163ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"\" selected=\"yes\">--</option>" 1164ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"CA\">Canada</option>" 1165ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <option value=\"US\">United States</option>" 1166ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " </select><br>" 1167ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "<label for=\"ph\">Phone number:</label>" 1168ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " <input type=\"text\" id=\"ph\"><br>" 11693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "</form>" 11703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Add additional Japanese characters to ensure the translate bar 11713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // will appear. 11723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "我々は重要な、興味深いものになるが、時折状況が発生するため苦労や痛みは" 11733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "彼にいくつかの素晴らしいを調達することができます。それから、いくつかの利"); 11743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1175424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) content::WindowedNotificationObserver infobar_observer( 11763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, 11773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::NotificationService::AllSources()); 11783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 11793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url)); 1180ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 11813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Wait for the translation bar to appear and get it. 1182424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) infobar_observer.Wait(); 1183a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch InfoBarService* infobar_service = 1184a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch InfoBarService::FromWebContents(GetWebContents()); 11855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::TranslateInfoBarDelegate* delegate = 1186a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch infobar_service->infobar_at(0)->delegate()->AsTranslateInfoBarDelegate(); 1187ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(delegate); 1188c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, 1189c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch delegate->translate_step()); 1190ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1191ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Simulate translation button press. 1192ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch delegate->Translate(); 1193ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1194ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::WindowedNotificationObserver translation_observer( 1195ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch chrome::NOTIFICATION_PAGE_TRANSLATED, 1196ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::NotificationService::AllSources()); 1197ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1198424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Simulate the translate script being retrieved. 1199424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Pass fake google.translate lib as the translate script. 1200424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) SimulateURLFetch(true); 1201424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1202ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Simulate the render notifying the translation has been done. 1203ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch translation_observer.Wait(); 1204ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1205ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TryBasicFormFill(); 1206ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1207ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1208ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test phone fields parse correctly from a given profile. 1209ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// The high level key presses execute the following: Select the first text 1210ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// field, invoke the autofill popup list, select the first profile within the 1211ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// list, and commit to the profile to populate the form. 1212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Flakily times out on windows. http://crbug.com/390564 1213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 1214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_ComparePhoneNumbers DISABLED_ComparePhoneNumbers 1215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_ComparePhoneNumbers ComparePhoneNumbers 1217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1218116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, MAYBE_ComparePhoneNumbers) { 1219ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 1220ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1221ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillProfile profile; 1222ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Bob")); 1223ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith")); 1224ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16("1234 H St.")); 1225ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_CITY, ASCIIToUTF16("San Jose")); 1226ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA")); 1227ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_ZIP, ASCIIToUTF16("95110")); 1228ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("1-408-555-4567")); 1229ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetProfile(profile); 1230ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1231ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL("files/autofill/form_phones.html"); 1232ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1233ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 1234ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1235ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("NAME_FIRST", "Bob"); 1236ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("NAME_LAST", "Smith"); 1237ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_LINE1", "1234 H St."); 1238ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_CITY", "San Jose"); 1239ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_STATE", "CA"); 1240ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_ZIP", "95110"); 1241ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_WHOLE_NUMBER", "14085554567"); 1242ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_CITY_CODE-1", "408"); 1243ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_CITY_CODE-2", "408"); 1244ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_NUMBER", "5554567"); 1245ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_NUMBER_3-1", "555"); 1246ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_NUMBER_3-2", "555"); 1247ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_NUMBER_4-1", "4567"); 1248ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_NUMBER_4-2", "4567"); 1249ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_EXT-1", std::string()); 1250ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_EXT-2", std::string()); 1251ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_COUNTRY_CODE-1", "1"); 1252ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1253ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1254ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that Autofill does not fill in read-only fields. 1255ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, NoAutofillForReadOnlyFields) { 1256ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 1257ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1258ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string addr_line1("1234 H St."); 1259ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1260ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillProfile profile; 1261ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Bob")); 1262ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith")); 1263ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(EMAIL_ADDRESS, ASCIIToUTF16("bsmith@gmail.com")); 1264ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16(addr_line1)); 1265ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_CITY, ASCIIToUTF16("San Jose")); 1266ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA")); 1267ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_ZIP, ASCIIToUTF16("95110")); 1268ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(COMPANY_NAME, ASCIIToUTF16("Company X")); 1269ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("408-871-4567")); 1270ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetProfile(profile); 1271ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1272ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL("files/autofill/read_only_field_test.html"); 1273ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1274ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("firstname"); 1275ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1276ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("email", std::string()); 1277ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("address", addr_line1); 1278ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1279ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1280ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test form is fillable from a profile after form was reset. 1281ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Steps: 1282ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// 1. Fill form using a saved profile. 1283ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// 2. Reset the form. 1284ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// 3. Fill form using a saved profile. 1285ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Flakily times out: http://crbug.com/270341 1286ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, DISABLED_FormFillableOnReset) { 1287ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 1288ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1289ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 1290ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1291ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL("files/autofill/autofill_test_form.html"); 1292ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1293ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 1294ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1295ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScript( 12960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetWebContents(), "document.getElementById('testform').reset()")); 1297ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1298ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 1299ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1300ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("NAME_FIRST", "Milton"); 1301ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("NAME_LAST", "Waddams"); 1302ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("EMAIL_ADDRESS", "red.swingline@initech.com"); 1303ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_LINE1", "4120 Freidrich Lane"); 1304ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_CITY", "Austin"); 1305ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_STATE", "Texas"); 1306ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_ZIP", "78744"); 1307ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("ADDRESS_HOME_COUNTRY", "United States"); 1308ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("PHONE_HOME_WHOLE_NUMBER", "5125551234"); 1309ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1310ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1311ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test Autofill distinguishes a middle initial in a name. 1312ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Flakily times out: http://crbug.com/270341 1313ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 1314ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DISABLED_DistinguishMiddleInitialWithinName) { 1315ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 1316ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1317ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 1318ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1319ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL( 1320ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "files/autofill/autofill_middleinit_form.html"); 1321ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1322ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 1323ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1324ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("NAME_MIDDLE", "C"); 1325ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1326ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1327ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test forms with multiple email addresses are filled properly. 1328ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Entire form should be filled with one user gesture. 1329ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Flakily times out: http://crbug.com/270341 1330ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 1331ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DISABLED_MultipleEmailFilledByOneUserGesture) { 1332ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 1333ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1334ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string email("bsmith@gmail.com"); 1335ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1336ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillProfile profile; 1337ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Bob")); 1338ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_LAST, ASCIIToUTF16("Smith")); 1339ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(EMAIL_ADDRESS, ASCIIToUTF16(email)); 1340ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("4088714567")); 1341ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetProfile(profile); 1342ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1343ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL( 1344ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "files/autofill/autofill_confirmemail_form.html"); 1345ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1346ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 1347ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1348ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFieldValue("EMAIL_CONFIRM", email); 1349ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // TODO(isherman): verify entire form. 1350ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1351ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1352424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// http://crbug.com/281527 1353ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#if defined(OS_MACOSX) 1354ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#define MAYBE_FormFillLatencyAfterSubmit FormFillLatencyAfterSubmit 1355ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#else 1356ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#define MAYBE_FormFillLatencyAfterSubmit DISABLED_FormFillLatencyAfterSubmit 1357ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#endif 1358ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test latency time on form submit with lots of stored Autofill profiles. 1359ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// This test verifies when a profile is selected from the Autofill dictionary 1360ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// that consists of thousands of profiles, the form does not hang after being 1361ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// submitted. 1362ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 1363ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch MAYBE_FormFillLatencyAfterSubmit) { 1364ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(test_server()->Start()); 1365ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1366ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::vector<std::string> cities; 1367ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch cities.push_back("San Jose"); 1368ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch cities.push_back("San Francisco"); 1369ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch cities.push_back("Sacramento"); 1370ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch cities.push_back("Los Angeles"); 1371ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1372ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::vector<std::string> streets; 1373ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch streets.push_back("St"); 1374ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch streets.push_back("Ave"); 1375ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch streets.push_back("Ln"); 1376ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch streets.push_back("Ct"); 1377ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1378ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const int kNumProfiles = 1500; 1379ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::Time start_time = base::Time::Now(); 1380ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::vector<AutofillProfile> profiles; 1381ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch for (int i = 0; i < kNumProfiles; i++) { 1382ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AutofillProfile profile; 1383a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 name(base::IntToString16(i)); 1384a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 email(name + ASCIIToUTF16("@example.com")); 1385a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 street = ASCIIToUTF16( 1386ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::IntToString(base::RandInt(0, 10000)) + " " + 1387ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch streets[base::RandInt(0, streets.size() - 1)]); 13885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 city = 13895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASCIIToUTF16(cities[base::RandInt(0, cities.size() - 1)]); 1390a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 zip(base::IntToString16(base::RandInt(0, 10000))); 1391ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(NAME_FIRST, name); 1392ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(EMAIL_ADDRESS, email); 1393ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_LINE1, street); 1394ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_CITY, city); 13955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA")); 1396ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile.SetRawInfo(ADDRESS_HOME_ZIP, zip); 13975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); 1398ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profiles.push_back(profile); 1399ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 1400ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetProfiles(&profiles); 1401ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // TODO(isherman): once we're sure this test doesn't timeout on any bots, this 1402ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // can be removd. 1403ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch LOG(INFO) << "Created " << kNumProfiles << " profiles in " << 1404ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch (base::Time::Now() - start_time).InSeconds() << " seconds."; 1405ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1406ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL url = test_server()->GetURL( 1407ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "files/autofill/latency_after_submit_test.html"); 1408ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui_test_utils::NavigateToURL(browser(), url); 1409ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch PopulateForm("NAME_FIRST"); 1410ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1411ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::WindowedNotificationObserver load_stop_observer( 1412ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::NOTIFICATION_LOAD_STOP, 1413ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::Source<content::NavigationController>( 14140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &GetWebContents()->GetController())); 1415ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1416ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScript( 1417ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 1418ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.getElementById('testform').submit();")); 1419ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // This will ensure the test didn't hang. 1420ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch load_stop_observer.Wait(); 1421ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1422ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1423ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Test that Chrome doesn't crash when autocomplete is disabled while the user 1424ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// is interacting with the form. This is a regression test for 1425ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// http://crbug.com/160476 1426ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochIN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, 1427ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DisableAutocompleteWhileFilling) { 1428ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CreateTestProfile(); 1429ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1430ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Load the test page. 1431ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 1432ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(std::string(kDataURIPrefix) + kTestFormString))); 1433ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1434ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Invoke Autofill: Start filling the first name field with "M" and wait for 1435ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // the popup to be shown. 1436ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch FocusFirstNameField(); 1437ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SendKeyToPageAndWait(ui::VKEY_M); 1438ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1439ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Now that the popup with suggestions is showing, disable autocomplete for 1440ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // the active field. 1441ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(content::ExecuteScript( 1442ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetRenderViewHost(), 1443ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "document.querySelector('input').autocomplete = 'off';")); 1444ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1445ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Press the down arrow to select the suggestion and attempt to preview the 1446ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // autofilled form. 14470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) SendKeyToPopupAndWait(ui::VKEY_DOWN); 1448ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1449ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace autofill 1451