15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/command_line.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/history_quick_provider.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h" 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/history_service.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_service_factory.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/ui/location_bar/location_bar.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/omnibox/omnibox_popup_model.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/omnibox/omnibox_view.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/toolbar/test_toolbar_model.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/interactive_test_utils.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/browser/bookmark_model.h" 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/browser/bookmark_utils.h" 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/test/bookmark_test_helpers.h" 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_input.h" 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_match.h" 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url.h" 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/dns/mock_host_resolver.h" 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/clipboard/clipboard.h" 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/clipboard/scoped_clipboard_writer.h" 46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event_constants.h" 47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/point.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::UTF16ToUTF8; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::Time; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::TimeDelta; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSearchKeyword[] = "foo"; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSearchKeyword2[] = "footest.com"; 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const ui::KeyboardCode kSearchKeywordKeys[] = { 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::VKEY_F, ui::VKEY_O, ui::VKEY_O, ui::VKEY_UNKNOWN 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const ui::KeyboardCode kSearchKeywordPrefixKeys[] = { 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::VKEY_F, ui::VKEY_O, ui::VKEY_UNKNOWN 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const ui::KeyboardCode kSearchKeywordCompletionKeys[] = { 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::VKEY_O, ui::VKEY_UNKNOWN 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSearchURL[] = "http://www.foo.com/search?q={searchTerms}"; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSearchShortName[] = "foo"; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSearchText[] = "abc"; 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const ui::KeyboardCode kSearchTextKeys[] = { 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::VKEY_A, ui::VKEY_B, ui::VKEY_C, ui::VKEY_UNKNOWN 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSearchTextURL[] = "http://www.foo.com/search?q=abc"; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kInlineAutocompleteText[] = "def"; 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const ui::KeyboardCode kInlineAutocompleteTextKeys[] = { 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::VKEY_D, ui::VKEY_E, ui::VKEY_F, ui::VKEY_UNKNOWN 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Hostnames that shall be blocked by host resolver. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char *kBlockedHostnames[] = { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "foo", 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "*.foo.com", 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "bar", 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "*.bar.com", 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "abc", 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "*.abc.com", 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "def", 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "*.def.com", 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "*.site.com", 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "history", 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "z" 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const struct TestHistoryEntry { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* url; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* title; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int visit_count; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int typed_count; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool starred; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} kHistoryEntries[] = { 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {"http://www.bar.com/1", "Page 1", 10, 10, false }, 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {"http://www.bar.com/2", "Page 2", 9, 9, false }, 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {"http://www.bar.com/3", "Page 3", 8, 8, false }, 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {"http://www.bar.com/4", "Page 4", 7, 7, false }, 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {"http://www.bar.com/5", "Page 5", 6, 6, false }, 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {"http://www.bar.com/6", "Page 6", 5, 5, false }, 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {"http://www.bar.com/7", "Page 7", 4, 4, false }, 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {"http://www.bar.com/8", "Page 8", 3, 3, false }, 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {"http://www.bar.com/9", "Page 9", 2, 2, false }, 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {"http://www.site.com/path/1", "Site 1", 4, 4, false }, 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {"http://www.site.com/path/2", "Site 2", 3, 3, false }, 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {"http://www.site.com/path/3", "Site 3", 2, 2, false }, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // To trigger inline autocomplete. 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {"http://www.def.com", "Page def", 10000, 10000, true }, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used in particular for the desired TLD test. This makes it test 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the interesting case when there's an intranet host with the same 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // name as the .com. 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {"http://bar/", "Bar", 1, 0, false }, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Stores the given text to clipboard. 126a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void SetClipboardText(const base::string16& text) { 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::ScopedClipboardWriter writer(ui::CLIPBOARD_TYPE_COPY_PASTE); 1287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) writer.WriteText(text); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kCtrlOrCmdMask = ui::EF_COMMAND_DOWN; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kCtrlOrCmdMask = ui::EF_CONTROL_DOWN; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OmniboxViewTest : public InProcessBrowserTest, 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::NotificationObserver { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SetupComponents()); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::FocusLocationBar(browser()); 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void GetOmniboxViewForBrowser( 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Browser* browser, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OmniboxView** omnibox_view) { 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserWindow* window = browser->window(); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(window); 154424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) LocationBar* location_bar = window->GetLocationBar(); 155424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(location_bar); 156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *omnibox_view = location_bar->GetOmniboxView(); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(*omnibox_view); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetOmniboxView(OmniboxView** omnibox_view) { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetOmniboxViewForBrowser(browser(), omnibox_view); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void SendKeyForBrowser(const Browser* browser, 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::KeyboardCode key, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers) { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser, key, 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (modifiers & ui::EF_CONTROL_DOWN) != 0, 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (modifiers & ui::EF_SHIFT_DOWN) != 0, 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (modifiers & ui::EF_ALT_DOWN) != 0, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (modifiers & ui::EF_COMMAND_DOWN) != 0)); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SendKey(ui::KeyboardCode key, int modifiers) { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendKeyForBrowser(browser(), key, modifiers); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void SendKeySequence(const ui::KeyboardCode* keys) { 1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (; *keys != ui::VKEY_UNKNOWN; ++keys) 1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(*keys, 0)); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool SendKeyAndWait(const Browser* browser, 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::KeyboardCode key, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers, 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int type, 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WARN_UNUSED_RESULT { 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ui_test_utils::SendKeyPressAndWait( 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser, key, 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (modifiers & ui::EF_CONTROL_DOWN) != 0, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (modifiers & ui::EF_SHIFT_DOWN) != 0, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (modifiers & ui::EF_ALT_DOWN) != 0, 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (modifiers & ui::EF_COMMAND_DOWN) != 0, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type, source); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WaitForTabOpenOrCloseForBrowser(const Browser* browser, 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_tab_count) { 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int tab_count = browser->tab_strip_model()->count(); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (tab_count == expected_tab_count) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar.Add(this, 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tab_count < expected_tab_count) ? 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<int>(chrome::NOTIFICATION_TAB_PARENTED) : 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<int>(content::NOTIFICATION_WEB_CONTENTS_DESTROYED), 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while (!HasFailure() && 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->tab_strip_model()->count() != expected_tab_count) { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunMessageLoop(); 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(expected_tab_count, browser->tab_strip_model()->count()); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WaitForTabOpenOrClose(int expected_tab_count) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForTabOpenOrCloseForBrowser(browser(), expected_tab_count); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WaitForAutocompleteControllerDone() { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OmniboxView* omnibox_view = NULL; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteController* controller = 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) omnibox_view->model()->autocomplete_controller(); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(controller); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (controller->done()) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar; 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar.Add(this, 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_AUTOCOMPLETE_CONTROLLER_RESULT_READY, 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<AutocompleteController>(controller)); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (!HasFailure() && !controller->done()) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunMessageLoop(); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(controller->done()); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetupSearchEngine() { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = browser()->profile(); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLService* model = 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLServiceFactory::GetForProfile(profile); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(model); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui_test_utils::WaitForTemplateURLServiceToLoad(model); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(model->loaded()); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLData data; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.short_name = ASCIIToUTF16(kSearchShortName); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.SetKeyword(ASCIIToUTF16(kSearchKeyword)); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.SetURL(kSearchURL); 260f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURL* template_url = new TemplateURL(data); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model->Add(template_url); 2625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu model->SetUserSelectedDefaultSearchProvider(template_url); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.SetKeyword(ASCIIToUTF16(kSearchKeyword2)); 265f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) model->Add(new TemplateURL(data)); 266010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 267010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Remove built-in template urls, like google.com, bing.com etc., as they 268010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // may appear as autocomplete suggests and interfere with our tests. 269010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) TemplateURLService::TemplateURLVector urls = model->GetTemplateURLs(); 270010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) for (TemplateURLService::TemplateURLVector::const_iterator i = urls.begin(); 271010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) i != urls.end(); 272010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ++i) { 273010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if ((*i)->prepopulate_id() != 0) 274010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) model->Remove(*i); 275010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddHistoryEntry(const TestHistoryEntry& entry, const Time& time) { 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = browser()->profile(); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryService* history_service = HistoryServiceFactory::GetForProfile( 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile, Profile::EXPLICIT_ACCESS); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(history_service); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!history_service->BackendLoaded()) { 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar; 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar.Add(this, chrome::NOTIFICATION_HISTORY_LOADED, 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<Profile>(profile)); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunMessageLoop(); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModel* bookmark_model = 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModelFactory::GetForProfile(profile); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(bookmark_model); 29458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) test::WaitForBookmarkModelToLoad(bookmark_model); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url(entry.url); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add everything in order of time. We don't want to have a time that 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is "right now" or it will nondeterministically appear in the results. 2995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) history_service->AddPageWithDetails(url, base::UTF8ToUTF16(entry.title), 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry.visit_count, 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry.typed_count, time, false, 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history::SOURCE_BROWSED); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (entry.starred) 304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bookmarks::AddIfNotBookmarked(bookmark_model, url, base::string16()); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait at least for the AddPageWithDetails() call to finish. 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar.Add(this, chrome::NOTIFICATION_HISTORY_URLS_MODIFIED, 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<Profile>(profile)); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunMessageLoop(); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We don't want to return until all observers have processed this 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // notification, because some (e.g. the in-memory history database) may do 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // something important. Since we don't know where in the observer list we 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // stand, just spin the message loop once more to allow the current 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // callstack to complete. 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunAllPendingInMessageLoop(); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetupHistory() { 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add enough history pages containing |kSearchText| to trigger 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // open history page url in autocomplete result. 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(kHistoryEntries); i++) { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add everything in order of time. We don't want to have a time that 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is "right now" or it will nondeterministically appear in the results. 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time t = Time::Now() - TimeDelta::FromHours(i + 1); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(AddHistoryEntry(kHistoryEntries[i], t)); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetupHostResolver() { 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(kBlockedHostnames); ++i) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_resolver()->AddSimulatedFailure(kBlockedHostnames[i]); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetupComponents() { 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SetupHostResolver()); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SetupSearchEngine()); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SetupHistory()); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationDetails& details) OVERRIDE { 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case content::NOTIFICATION_WEB_CONTENTS_DESTROYED: 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case chrome::NOTIFICATION_TAB_PARENTED: 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case chrome::NOTIFICATION_AUTOCOMPLETE_CONTROLLER_RESULT_READY: 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case chrome::NOTIFICATION_HISTORY_LOADED: 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case chrome::NOTIFICATION_HISTORY_URLS_MODIFIED: 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FAIL() << "Unexpected notification type"; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 355b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->Quit(); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Test if ctrl-* accelerators are workable in omnibox. 360f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// See http://crbug.com/19193: omnibox blocks ctrl-* commands 361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// 362f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Flaky on interactive tests (dbg), http://crbug.com/69433 363f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, DISABLED_BrowserAccelerators) { 364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 367f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int tab_count = browser()->tab_strip_model()->count(); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 369f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Create a new Tab. 370f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::NewTab(browser()); 371f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForTabOpenOrClose(tab_count + 1)); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 373f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Select the first Tab. 374f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_1, kCtrlOrCmdMask)); 375f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(0, browser()->tab_strip_model()->active_index()); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 377f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::FocusLocationBar(browser()); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 379f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Select the second Tab. 380f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_2, kCtrlOrCmdMask)); 381f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(1, browser()->tab_strip_model()->active_index()); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 383f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::FocusLocationBar(browser()); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Try ctrl-w to close a Tab. 386f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_W, kCtrlOrCmdMask)); 387f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForTabOpenOrClose(tab_count)); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 389f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Try ctrl-l to focus location bar. 390f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->SetUserText(ASCIIToUTF16("Hello world")); 391f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(omnibox_view->IsSelectAll()); 392f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_L, kCtrlOrCmdMask)); 393f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(omnibox_view->IsSelectAll()); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Try editing the location bar text. 396f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RIGHT, 0)); 397f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(omnibox_view->IsSelectAll()); 398f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_S, 0)); 399f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Hello worlds"), omnibox_view->GetText()); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 401f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Try ctrl-x to cut text. 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 403f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Mac uses alt-left/right to select a word. 404f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 405f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendKey(ui::VKEY_LEFT, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN)); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 407f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 408f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendKey(ui::VKEY_LEFT, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN)); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 410f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(omnibox_view->IsSelectAll()); 411f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_X, kCtrlOrCmdMask)); 412f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Hello "), omnibox_view->GetText()); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS) && !defined(OS_MACOSX) 415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Try alt-f4 to close the browser. 416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(SendKeyAndWait( 417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser(), ui::VKEY_F4, ui::EF_ALT_DOWN, 418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::NOTIFICATION_BROWSER_CLOSED, 419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::Source<Browser>(browser()))); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 421f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 423f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Flakily fails and times out on Win only. http://crbug.com/69941 4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Fails on Linux. http://crbug.com/408634 4251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_WIN) || defined(OS_LINUX) 426f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_PopupAccelerators DISABLED_PopupAccelerators 427f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else 428f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_PopupAccelerators PopupAccelerators 429f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 430f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 431f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, MAYBE_PopupAccelerators) { 432f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Create a popup. 433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Browser* popup = CreateBrowserForPopup(browser()->profile()); 434f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(popup)); 435f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 436f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 437f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetOmniboxViewForBrowser(popup, &omnibox_view)); 438f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::FocusLocationBar(popup); 439f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(omnibox_view->IsSelectAll()); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX) 442f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Try ctrl-w to close the popup. 443f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // This piece of code doesn't work on Mac, because the Browser object won't 444f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // be destroyed before finishing the current message loop iteration, thus 445f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // No BROWSER_CLOSED notification will be sent. 446f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(SendKeyAndWait( 447f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup, ui::VKEY_W, ui::EF_CONTROL_DOWN, 448f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::NOTIFICATION_BROWSER_CLOSED, content::Source<Browser>(popup))); 449f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 450f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Create another popup. 451f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup = CreateBrowserForPopup(browser()->profile()); 452f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(popup)); 453f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 454f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetOmniboxViewForBrowser(popup, &omnibox_view)); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 457f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Set the edit text to "Hello world". 458f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->SetUserText(ASCIIToUTF16("Hello world")); 459f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::FocusLocationBar(popup); 460f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(omnibox_view->IsSelectAll()); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 462f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Try editing the location bar text -- should be disallowed. 463f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeyForBrowser(popup, ui::VKEY_S, 0)); 464f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Hello world"), omnibox_view->GetText()); 465f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(omnibox_view->IsSelectAll()); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 467f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 468f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendKeyForBrowser(popup, ui::VKEY_X, kCtrlOrCmdMask)); 469f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Hello world"), omnibox_view->GetText()); 470f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(omnibox_view->IsSelectAll()); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS) && !defined(OS_MACOSX) 473f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Try alt-f4 to close the popup. 474f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(SendKeyAndWait( 475f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup, ui::VKEY_F4, ui::EF_ALT_DOWN, 476f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::NOTIFICATION_BROWSER_CLOSED, content::Source<Browser>(popup))); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 478f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 480f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// http://crbug.com/133341 481f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_LINUX) 482f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_BackspaceInKeywordMode DISABLED_BackspaceInKeywordMode 483f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else 484f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_BackspaceInKeywordMode BackspaceInKeywordMode 485f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 487f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, MAYBE_BackspaceInKeywordMode) { 488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 491f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Trigger keyword hint mode. 492f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchKeywordKeys)); 493f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); 494f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(kSearchKeyword, UTF16ToUTF8(omnibox_view->model()->keyword())); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Trigger keyword mode. 497f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, 0)); 498f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 499f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(kSearchKeyword, UTF16ToUTF8(omnibox_view->model()->keyword())); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 501f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Backspace without search text should bring back keyword hint mode. 502f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); 503f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); 504f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(kSearchKeyword, UTF16ToUTF8(omnibox_view->model()->keyword())); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 506f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Trigger keyword mode again. 507f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, 0)); 508f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 509f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(kSearchKeyword, UTF16ToUTF8(omnibox_view->model()->keyword())); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 511f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Input something as search text. 512f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextKeys)); 513f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 514f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Should stay in keyword mode while deleting search text by pressing 515f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // backspace. 516f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t i = 0; i < arraysize(kSearchText) - 1; ++i) { 517f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); 518f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 519f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(kSearchKeyword, UTF16ToUTF8(omnibox_view->model()->keyword())); 520f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 522f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Input something as search text. 523f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextKeys)); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Move cursor to the beginning of the search text. 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 527f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Home doesn't work on Mac trybot. 528f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_A, ui::EF_CONTROL_DOWN)); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 530f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_HOME, 0)); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 532f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Backspace at the beginning of the search text shall turn off 533f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // the keyword mode. 534f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); 535f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 5365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(base::string16(), omnibox_view->model()->keyword()); 537f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(std::string(kSearchKeyword) + kSearchText, 538f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UTF16ToUTF8(omnibox_view->GetText())); 539f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 541f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// http://crbug.com/158913 542f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_CHROMEOS) || defined(OS_WIN) 543f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_Escape DISABLED_Escape 544f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else 545f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_Escape Escape 546f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 5471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 548f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, MAYBE_Escape) { 549f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIHistoryURL)); 550f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::FocusLocationBar(browser()); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 552f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 553f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 old_text = omnibox_view->GetText(); 556f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(old_text.empty()); 557f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(omnibox_view->IsSelectAll()); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 559f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Delete all text in omnibox. 560f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); 561f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(omnibox_view->GetText().empty()); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 563f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Escape shall revert the text in omnibox. 564f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_ESCAPE, 0)); 565f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(old_text, omnibox_view->GetText()); 566f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(omnibox_view->IsSelectAll()); 567f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 568f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#undef MAYBE_ESCAPE 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 570f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, DesiredTLD) { 571f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 572f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 573f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxPopupModel* popup_model = omnibox_view->model()->popup_model(); 574f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 576f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Test ctrl-Enter. 5775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const ui::KeyboardCode kKeys[] = { 5785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::VKEY_B, ui::VKEY_A, ui::VKEY_R, ui::VKEY_UNKNOWN 5795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }; 580f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kKeys)); 581f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 582f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model->IsOpen()); 583f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // ctrl-Enter triggers desired_tld feature, thus www.bar.com shall be 584f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // opened. 585f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(SendKeyAndWait(browser(), ui::VKEY_RETURN, ui::EF_CONTROL_DOWN, 586f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::NOTIFICATION_NAV_ENTRY_COMMITTED, 587f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::Source<content::NavigationController>( 588f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &browser()->tab_strip_model()->GetActiveWebContents()-> 589f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetController()))); 590f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 591f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL url = browser()->tab_strip_model()->GetActiveWebContents()->GetURL(); 592f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ("www.bar.com", url.host()); 593f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ("/", url.path()); 594f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 596f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, DesiredTLDWithTemporaryText) { 597f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 598f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 599f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxPopupModel* popup_model = omnibox_view->model()->popup_model(); 600f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 602f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Profile* profile = browser()->profile(); 603f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TemplateURLService* template_url_service = 604f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TemplateURLServiceFactory::GetForProfile(profile); 605f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 606f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Add a non-substituting keyword. This ensures the popup will have a 607f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // non-verbatim entry with "ab" as a prefix. This way, by arrowing down, we 608f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // can set "abc" as temporary text in the omnibox. 609f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TemplateURLData data; 610f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) data.short_name = ASCIIToUTF16("abc"); 611f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) data.SetKeyword(ASCIIToUTF16(kSearchText)); 612f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) data.SetURL("http://abc.com/"); 613f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) template_url_service->Add(new TemplateURL(data)); 614f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 615f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Send "ab", so that an "abc" entry appears in the popup. 6165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const ui::KeyboardCode kSearchTextPrefixKeys[] = { 6175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::VKEY_A, ui::VKEY_B, ui::VKEY_UNKNOWN 6185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }; 619f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextPrefixKeys)); 620f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 621f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model->IsOpen()); 622f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 623f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Arrow down to the "abc" entry in the popup. 624f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t size = popup_model->result().size(); 625f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) while (popup_model->selected_line() < size - 1) { 626f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_DOWN, 0)); 627f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (omnibox_view->GetText() == ASCIIToUTF16("abc")) 628f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) break; 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 630f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(ASCIIToUTF16("abc"), omnibox_view->GetText()); 631f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 632f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Hitting ctrl-enter should navigate based on the current text rather than 633f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // the original input, i.e. to www.abc.com instead of www.ab.com. 634f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(SendKeyAndWait( 635f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser(), ui::VKEY_RETURN, ui::EF_CONTROL_DOWN, 636f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::NOTIFICATION_NAV_ENTRY_COMMITTED, 637f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::Source<content::NavigationController>( 638f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &browser()->tab_strip_model()->GetActiveWebContents()-> 639f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetController()))); 640f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 641f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL url(browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 642f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ("www.abc.com", url.host()); 643f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ("/", url.path()); 644f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 646f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, AltEnter) { 647f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 648f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 649f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 650f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->SetUserText(ASCIIToUTF16(chrome::kChromeUIHistoryURL)); 651f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int tab_count = browser()->tab_strip_model()->count(); 652f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // alt-Enter opens a new tab. 653f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RETURN, ui::EF_ALT_DOWN)); 654f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForTabOpenOrClose(tab_count + 1)); 655f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 657f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// http://crbug.com/133354, http://crbug.com/146953 658f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, DISABLED_EnterToSearch) { 659f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 660f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 661f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxPopupModel* popup_model = omnibox_view->model()->popup_model(); 662f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 664f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Test Enter to search. 665f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextKeys)); 666f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 667f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model->IsOpen()); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 669f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Check if the default match result is Search Primary Provider. 670f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 671f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup_model->result().default_match()->type); 672f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 673f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Open the default match. 674f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(SendKeyAndWait(browser(), ui::VKEY_RETURN, 0, 675f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::NOTIFICATION_NAV_ENTRY_COMMITTED, 676f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::Source<content::NavigationController>( 677f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &browser()->tab_strip_model()->GetActiveWebContents()-> 678f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetController()))); 679f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL url = browser()->tab_strip_model()->GetActiveWebContents()->GetURL(); 680f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(kSearchTextURL, url.spec()); 681f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 682f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Test that entering a single character then Enter performs a search. 6835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const ui::KeyboardCode kSearchSingleCharKeys[] = { 6845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::VKEY_Z, ui::VKEY_UNKNOWN 6855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }; 686f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::FocusLocationBar(browser()); 687f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(omnibox_view->IsSelectAll()); 688f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchSingleCharKeys)); 689f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 690f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model->IsOpen()); 691f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ("z", UTF16ToUTF8(omnibox_view->GetText())); 692f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 693f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Check if the default match result is Search Primary Provider. 694f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 695f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup_model->result().default_match()->type); 696f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 697f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Open the default match. 698f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(SendKeyAndWait(browser(), ui::VKEY_RETURN, 0, 699f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::NOTIFICATION_NAV_ENTRY_COMMITTED, 700f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::Source<content::NavigationController>( 701f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &browser()->tab_strip_model()->GetActiveWebContents()-> 702f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetController()))); 703f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) url = browser()->tab_strip_model()->GetActiveWebContents()->GetURL(); 704f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ("http://www.foo.com/search?q=z", url.spec()); 705f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(OmniboxViewTest, EscapeToDefaultMatch) { 708f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 709f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 710f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxPopupModel* popup_model = omnibox_view->model()->popup_model(); 711f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 713f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Input something to trigger inline autocomplete. 714f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kInlineAutocompleteTextKeys)); 715f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 716f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model->IsOpen()); 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 718a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 old_text = omnibox_view->GetText(); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 720f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Make sure inline autocomplete is triggerred. 721f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_GT(old_text.length(), arraysize(kInlineAutocompleteText) - 1); 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 723f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t old_selected_line = popup_model->selected_line(); 724f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(0U, old_selected_line); 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 726f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Move to another line with different text. 727f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t size = popup_model->result().size(); 728f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) while (popup_model->selected_line() < size - 1) { 729f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_DOWN, 0)); 730f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NE(old_selected_line, popup_model->selected_line()); 731f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (old_text != omnibox_view->GetText()) 732f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) break; 733f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_NE(old_text, omnibox_view->GetText()); 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 737f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Escape shall revert back to the default match item. 738f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_ESCAPE, 0)); 739f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(old_text, omnibox_view->GetText()); 740f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(old_selected_line, popup_model->selected_line()); 741f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Flaky on Windows: http://crbug.com/146619 7441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_WIN) 745f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_BasicTextOperations DISABLED_BasicTextOperations 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 747f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_BasicTextOperations BasicTextOperations 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 750f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, MAYBE_BasicTextOperations) { 751f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); 752f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::FocusLocationBar(browser()); 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 754f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 755f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 757a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 old_text = omnibox_view->GetText(); 758f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16(url::kAboutBlankURL), old_text); 759f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(omnibox_view->IsSelectAll()); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 761f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t start, end; 762f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->GetSelectionBounds(&start, &end); 7631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_WIN) || defined(OS_LINUX) 7641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Views textfields select-all in reverse to show the leading text. 7651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::swap(start, end); 7661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 767f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(0U, start); 768f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(old_text.size(), end); 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 770f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Move the cursor to the end. 771f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_MACOSX) 772f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // End doesn't work on Mac trybot. 773f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_E, ui::EF_CONTROL_DOWN)); 774f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else 775f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_END, 0)); 776f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 777f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(omnibox_view->IsSelectAll()); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 779f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Make sure the cursor is placed correctly. 780f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->GetSelectionBounds(&start, &end); 781f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(old_text.size(), start); 782f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(old_text.size(), end); 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 784f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Insert one character at the end. Make sure we won't insert 785f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // anything after the special ZWS mark used in gtk implementation. 786f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_A, 0)); 7875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(old_text + base::char16('a'), omnibox_view->GetText()); 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 789f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Delete one character from the end. Make sure we won't delete the special 790f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // ZWS mark used in gtk implementation. 791f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); 792f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(old_text, omnibox_view->GetText()); 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 794f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->SelectAll(true); 795f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(omnibox_view->IsSelectAll()); 796f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->GetSelectionBounds(&start, &end); 7971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_WIN) || defined(OS_LINUX) 7981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Views textfields select-all in reverse to show the leading text. 7991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::swap(start, end); 8001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 801f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(0U, start); 802f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(old_text.size(), end); 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 804f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Delete the content 805f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_DELETE, 0)); 806f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(omnibox_view->IsSelectAll()); 807f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->GetSelectionBounds(&start, &end); 808f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(0U, start); 809f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(0U, end); 810f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(omnibox_view->GetText().empty()); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 812f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Check if RevertAll() can set text and cursor correctly. 813f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->RevertAll(); 814f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(omnibox_view->IsSelectAll()); 815f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(old_text, omnibox_view->GetText()); 816f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->GetSelectionBounds(&start, &end); 817f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(old_text.size(), start); 818f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(old_text.size(), end); 819f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(OmniboxViewTest, AcceptKeywordBySpace) { 822f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 823f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 search_keyword(ASCIIToUTF16(kSearchKeyword)); 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 827f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Trigger keyword hint mode. 828f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchKeywordKeys)); 829f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); 830f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword, omnibox_view->model()->keyword()); 831f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword, omnibox_view->GetText()); 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 833f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Trigger keyword mode by space. 834f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_SPACE, 0)); 835f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 836f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword, omnibox_view->model()->keyword()); 837f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->GetText().empty()); 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 839f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Revert to keyword hint mode. 8405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) omnibox_view->model()->ClearKeyword(base::string16()); 841f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); 842f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword, omnibox_view->model()->keyword()); 843f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword, omnibox_view->GetText()); 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Keyword should also be accepted by typing an ideographic space. 846f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->OnBeforePossibleChange(); 847f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->SetWindowTextAndCaretPos(search_keyword + 8485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::WideToUTF16(L"\x3000"), search_keyword.length() + 1, false, false); 849f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->OnAfterPossibleChange(); 850f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 851f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword, omnibox_view->model()->keyword()); 852f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->GetText().empty()); 853f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 854f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Revert to keyword hint mode. 8555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) omnibox_view->model()->ClearKeyword(base::string16()); 856f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); 857f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword, omnibox_view->model()->keyword()); 858f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword, omnibox_view->GetText()); 859f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 860f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Keyword shouldn't be accepted by pressing space with a trailing 861f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // whitespace. 8625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) omnibox_view->SetWindowTextAndCaretPos(search_keyword + base::char16(' '), 863f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) search_keyword.length() + 1, false, false); 864f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_SPACE, 0)); 865f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); 866f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword, omnibox_view->model()->keyword()); 867f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword + ASCIIToUTF16(" "), omnibox_view->GetText()); 868f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 869f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Keyword shouldn't be accepted by deleting the trailing space. 870f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); 871f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); 872f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword, omnibox_view->model()->keyword()); 8735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(search_keyword + base::char16(' '), omnibox_view->GetText()); 874f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 875f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Keyword shouldn't be accepted by pressing space before a trailing space. 876f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, 0)); 877f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_SPACE, 0)); 878f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); 879f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword, omnibox_view->model()->keyword()); 880f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword + ASCIIToUTF16(" "), omnibox_view->GetText()); 881f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 882f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Keyword should be accepted by pressing space in the middle of context and 883f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // just after the keyword. 884f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); 885f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_A, 0)); 886f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, 0)); 887f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_SPACE, 0)); 888f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 889f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword, omnibox_view->model()->keyword()); 890f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(ASCIIToUTF16("a "), omnibox_view->GetText()); 891f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t start, end; 892f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->GetSelectionBounds(&start, &end); 893f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(0U, start); 894f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(0U, end); 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 896f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Keyword shouldn't be accepted by pasting "foo bar". 8975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) omnibox_view->SetUserText(base::string16()); 898f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 899f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->keyword().empty()); 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 901f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->OnBeforePossibleChange(); 902f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->model()->OnPaste(); 903f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->SetWindowTextAndCaretPos(search_keyword + 904f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASCIIToUTF16(" bar"), search_keyword.length() + 4, false, false); 905f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->OnAfterPossibleChange(); 906f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 907f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->keyword().empty()); 908f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword + ASCIIToUTF16(" bar"), omnibox_view->GetText()); 909f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 910f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Keyword shouldn't be accepted for case like: "foo b|ar" -> "foo b |ar". 911f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, 0)); 912f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, 0)); 913f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_SPACE, 0)); 914f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 915f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->keyword().empty()); 916f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword + ASCIIToUTF16(" b ar"), omnibox_view->GetText()); 917f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 918f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Keyword could be accepted by pressing space with a selected range at the 919f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // end of text. 920f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->OnBeforePossibleChange(); 921f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->OnInlineAutocompleteTextMaybeChanged( 922f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) search_keyword + ASCIIToUTF16(" "), search_keyword.length()); 923f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->OnAfterPossibleChange(); 924f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); 925f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword, omnibox_view->model()->keyword()); 926f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword + ASCIIToUTF16(" "), omnibox_view->GetText()); 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 928f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->GetSelectionBounds(&start, &end); 929f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NE(start, end); 930f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_SPACE, 0)); 931f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 932f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword, omnibox_view->model()->keyword()); 9335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(base::string16(), omnibox_view->GetText()); 934f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 935f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Space should accept keyword even when inline autocomplete is available. 9365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) omnibox_view->SetUserText(base::string16()); 937f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const TestHistoryEntry kHistoryFoobar = { 9385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "http://www.foobar.com", "Page foobar", 100, 100, true 939f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 940f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 941f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Add a history entry to trigger inline autocomplete when typing "foo". 942f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 943f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddHistoryEntry(kHistoryFoobar, Time::Now() - TimeDelta::FromHours(1))); 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Type "fo" to trigger inline autocomplete. 9465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchKeywordPrefixKeys)); 947f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 948f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->popup_model()->IsOpen()); 949f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NE(search_keyword, omnibox_view->GetText()); 950f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 951f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Keyword hint shouldn't be visible. 952f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 953f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->keyword().empty()); 954f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 9555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Add the "o". Inline autocompletion should still happen, but now we 9565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // should also get a keyword hint because we've typed a keyword exactly. 9575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchKeywordCompletionKeys)); 9585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 9595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->popup_model()->IsOpen()); 9605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_NE(search_keyword, omnibox_view->GetText()); 9615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); 9625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->keyword().empty()); 9635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 964f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Trigger keyword mode by space. 965f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_SPACE, 0)); 966f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 967f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword, omnibox_view->model()->keyword()); 968f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->GetText().empty()); 969f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 970f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Space in the middle of a temporary text, which separates the text into 971f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // keyword and replacement portions, should trigger keyword mode. 9725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) omnibox_view->SetUserText(base::string16()); 973f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchKeywordKeys)); 974f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 975f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxPopupModel* popup_model = omnibox_view->model()->popup_model(); 976f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model->IsOpen()); 977f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(ASCIIToUTF16("foobar.com"), omnibox_view->GetText()); 978f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->model()->OnUpOrDownKeyPressed(1); 979f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->model()->OnUpOrDownKeyPressed(-1); 980f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, 0)); 981f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, 0)); 982f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, 0)); 983f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, 0)); 984f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, 0)); 985f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, 0)); 986f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, 0)); 987f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_SPACE, 0)); 988f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 989f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword, omnibox_view->model()->keyword()); 990f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(ASCIIToUTF16("bar.com"), omnibox_view->GetText()); 991f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 992f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Space after temporary text that looks like a keyword, when the original 993f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // input does not look like a keyword, should trigger keyword mode. 9945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) omnibox_view->SetUserText(base::string16()); 995f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const TestHistoryEntry kHistoryFoo = { 9965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "http://footest.com", "Page footest", 1000, 1000, true 997f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 998f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 999f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Add a history entry to trigger HQP matching with text == keyword when 1000f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // typing "fo te". 1001f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 1002f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddHistoryEntry(kHistoryFoo, Time::Now() - TimeDelta::FromMinutes(10))); 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1004f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_F, 0)); 1005f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_O, 0)); 1006f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_SPACE, 0)); 1007f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_T, 0)); 1008f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_E, 0)); 1009f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 1010f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model->IsOpen()); 1011a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 search_keyword2(ASCIIToUTF16(kSearchKeyword2)); 1012f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) while ((omnibox_view->GetText() != search_keyword2) && 1013f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) (popup_model->selected_line() < popup_model->result().size() - 1)) 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) omnibox_view->model()->OnUpOrDownKeyPressed(1); 1015f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword2, omnibox_view->GetText()); 1016f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_SPACE, 0)); 1017f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 1018f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(search_keyword2, omnibox_view->model()->keyword()); 1019f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->GetText().empty()); 1020f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(OmniboxViewTest, NonSubstitutingKeywordTest) { 1023f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 1024f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 1025f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxPopupModel* popup_model = omnibox_view->model()->popup_model(); 1026f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model); 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1028f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Profile* profile = browser()->profile(); 1029f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TemplateURLService* template_url_service = 1030f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TemplateURLServiceFactory::GetForProfile(profile); 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1032f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Add a non-default substituting keyword. 1033f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TemplateURLData data; 1034f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) data.short_name = ASCIIToUTF16("Search abc"); 1035f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) data.SetKeyword(ASCIIToUTF16(kSearchText)); 1036f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) data.SetURL("http://abc.com/{searchTerms}"); 1037f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURL* template_url = new TemplateURL(data); 1038f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) template_url_service->Add(template_url); 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) omnibox_view->SetUserText(base::string16()); 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1042f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Non-default substituting keyword shouldn't be matched by default. 1043f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextKeys)); 1044f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 1045f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model->IsOpen()); 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1047f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Check if the default match result is Search Primary Provider. 1048f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 1049f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup_model->result().default_match()->type); 1050f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(kSearchTextURL, 1051f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup_model->result().default_match()->destination_url.spec()); 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) omnibox_view->SetUserText(base::string16()); 1054f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 1055f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(popup_model->IsOpen()); 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1057f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Try a non-substituting keyword. 1058f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) template_url_service->Remove(template_url); 1059f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) data.short_name = ASCIIToUTF16("abc"); 1060f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) data.SetURL("http://abc.com/"); 1061f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) template_url_service->Add(new TemplateURL(data)); 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1063f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // We always allow exact matches for non-substituting keywords. 1064f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextKeys)); 1065f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 1066f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model->IsOpen()); 1067f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(AutocompleteMatchType::HISTORY_KEYWORD, 1068f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup_model->result().default_match()->type); 1069f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ("http://abc.com/", 1070f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup_model->result().default_match()->destination_url.spec()); 1071f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(OmniboxViewTest, DeleteItem) { 1074f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Disable the search provider, to make sure the popup contains only history 1075f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // items. 1076f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TemplateURLService* model = 1077f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TemplateURLServiceFactory::GetForProfile(browser()->profile()); 10785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu model->SetUserSelectedDefaultSearchProvider(NULL); 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1080f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); 1081f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::FocusLocationBar(browser()); 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1083f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 1084f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1086f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxPopupModel* popup_model = omnibox_view->model()->popup_model(); 1087f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model); 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1089a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 old_text = omnibox_view->GetText(); 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1091f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Input something that can match history items. 1092f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->SetUserText(ASCIIToUTF16("site.com/p")); 1093f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 1094f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model->IsOpen()); 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1096f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Delete the inline autocomplete part. 1097f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_DELETE, 0)); 1098f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 1099f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model->IsOpen()); 1100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_GE(popup_model->result().size(), 3U); 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 user_text = omnibox_view->GetText(); 1103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(ASCIIToUTF16("site.com/p"), user_text); 1104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->SelectAll(true); 1105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->IsSelectAll()); 1106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Move down. 1108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t default_line = popup_model->selected_line(); 1109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->model()->OnUpOrDownKeyPressed(1); 1110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(default_line + 1, popup_model->selected_line()); 1111a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 selected_text = 1112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup_model->result().match_at(default_line + 1).fill_into_edit; 1113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Temporary text is shown. 1114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(selected_text, omnibox_view->GetText()); 1115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->IsSelectAll()); 1116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Delete the item. 1118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup_model->TryDeletingCurrentItem(); 1119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 1120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The selected line shouldn't be changed, because we have more than two 1121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // items. 1122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(default_line + 1, popup_model->selected_line()); 1123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Make sure the item is really deleted. 1124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NE(selected_text, 1125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup_model->result().match_at(default_line + 1).fill_into_edit); 1126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) selected_text = 1127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup_model->result().match_at(default_line + 1).fill_into_edit; 1128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // New temporary text is shown. 1129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(selected_text, omnibox_view->GetText()); 1130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Revert to the default match. 1132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->OnEscapeKeyPressed()); 1133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(default_line, popup_model->selected_line()); 1134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(user_text, omnibox_view->GetText()); 1135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->IsSelectAll()); 1136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Move down and up to select the default match as temporary text. 1138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->model()->OnUpOrDownKeyPressed(1); 1139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(default_line + 1, popup_model->selected_line()); 1140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->model()->OnUpOrDownKeyPressed(-1); 1141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(default_line, popup_model->selected_line()); 1142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) selected_text = popup_model->result().match_at(default_line).fill_into_edit; 1144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // New temporary text is shown. 1145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(selected_text, omnibox_view->GetText()); 1146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->IsSelectAll()); 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if 0 1149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // TODO(mrossetti): http://crbug.com/82335 1150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Delete the default item. 1151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup_model->TryDeletingCurrentItem(); 1152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 1153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The selected line shouldn't be changed, but the default item should have 1154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // been changed. 1155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(default_line, popup_model->selected_line()); 1156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Make sure the item is really deleted. 1157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_NE(selected_text, 1158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup_model->result().match_at(default_line).fill_into_edit); 1159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) selected_text = 1160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup_model->result().match_at(default_line).fill_into_edit; 1161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // New temporary text is shown. 1162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(selected_text, omnibox_view->GetText()); 1163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // As the current selected item is the new default item, pressing Escape key 1166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // should revert all directly. 1167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->OnEscapeKeyPressed()); 1168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(old_text, omnibox_view->GetText()); 1169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->IsSelectAll()); 1170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// http://crbug.com/133344 1173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_LINUX) 1174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_TabAcceptKeyword DISABLED_TabAcceptKeyword 1175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else 1176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_TabAcceptKeyword TabAcceptKeyword 1177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, MAYBE_TabAcceptKeyword) { 1180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 1181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1183a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 text = ASCIIToUTF16(kSearchKeyword); 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Trigger keyword hint mode. 1186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchKeywordKeys)); 1187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); 1188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(text, omnibox_view->model()->keyword()); 1189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(text, omnibox_view->GetText()); 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Trigger keyword mode by tab. 1192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, 0)); 1193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 1194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(text, omnibox_view->model()->keyword()); 1195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->GetText().empty()); 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Revert to keyword hint mode. 1198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); 1199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); 1200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(text, omnibox_view->model()->keyword()); 1201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(text, omnibox_view->GetText()); 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The location bar should still have focus. 1204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Trigger keyword mode by tab. 1207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, 0)); 1208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 1209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(text, omnibox_view->model()->keyword()); 1210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->GetText().empty()); 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Revert to keyword hint mode with SHIFT+TAB. 1213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_MACOSX) 1214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACKTAB, 0)); 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, ui::EF_SHIFT_DOWN)); 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); 1219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(text, omnibox_view->model()->keyword()); 1220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(text, omnibox_view->GetText()); 1221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if !defined(OS_MACOSX) 1225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Mac intentionally does not support this behavior. 1226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// http://crbug.com/133360 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) 1229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_TabTraverseResultsTest DISABLED_TabTraverseResultsTest 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_TabTraverseResultsTest TabTraverseResultsTest 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, MAYBE_TabTraverseResultsTest) { 1235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 1236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 1237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxPopupModel* popup_model = omnibox_view->model()->popup_model(); 1238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model); 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Input something to trigger results. 12415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const ui::KeyboardCode kKeys[] = { 12425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::VKEY_B, ui::VKEY_A, ui::VKEY_R, ui::VKEY_UNKNOWN 12435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }; 1244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kKeys)); 1245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 1246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model->IsOpen()); 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t old_selected_line = popup_model->selected_line(); 1249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(0U, old_selected_line); 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Move down the results. 1252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t size = popup_model->result().size(); 1253f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) popup_model->selected_line() < size - 1; 1254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) old_selected_line = popup_model->selected_line()) { 1255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, 0)); 1256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_LT(old_selected_line, popup_model->selected_line()); 1257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Don't move past the end. 1260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, 0)); 1261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(old_selected_line, popup_model->selected_line()); 1262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Move back up the results. 1265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (; popup_model->selected_line() > 0U; 1266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) old_selected_line = popup_model->selected_line()) { 1267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, ui::EF_SHIFT_DOWN)); 1268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_GT(old_selected_line, popup_model->selected_line()); 1269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Don't move past the beginning. 1272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, ui::EF_SHIFT_DOWN)); 1273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(0U, popup_model->selected_line()); 1274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const TestHistoryEntry kHistoryFoo = { 12775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "http://foo/", "Page foo", 1, 1, false 1278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Add a history entry so "foo" gets multiple matches. 1281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 1282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddHistoryEntry(kHistoryFoo, Time::Now() - TimeDelta::FromHours(1))); 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Load results. 1285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(omnibox_view->SelectAll(false)); 1286f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchKeywordKeys)); 1287f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1289f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Trigger keyword mode by tab. 1290a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 text = ASCIIToUTF16(kSearchKeyword); 1291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, 0)); 1292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 1293f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(text, omnibox_view->model()->keyword()); 1294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->GetText().empty()); 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1296f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The location bar should still have focus. 1297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Pressing tab again should move to the next result and clear keyword 1300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // mode. 1301f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, 0)); 1302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(1U, omnibox_view->model()->popup_model()->selected_line()); 1303f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 1304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NE(text, omnibox_view->model()->keyword()); 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1306f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The location bar should still have focus. 1307f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Moving back up should not show keyword mode. 1310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, ui::EF_SHIFT_DOWN)); 1311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); 1312f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(text, omnibox_view->model()->keyword()); 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1314f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/133347 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_PersistKeywordModeOnTabSwitch DISABLED_PersistKeywordModeOnTabSwitch 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_PersistKeywordModeOnTabSwitch PersistKeywordModeOnTabSwitch 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAYBE_PersistKeywordModeOnTabSwitch) { 1328f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 1329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 1330f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Trigger keyword hint mode. 1332f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchKeywordKeys)); 1333f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(omnibox_view->model()->is_keyword_hint()); 1334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(kSearchKeyword, UTF16ToUTF8(omnibox_view->model()->keyword())); 1335f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1336f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Trigger keyword mode. 1337f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_TAB, 0)); 1338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(omnibox_view->model()->is_keyword_hint()); 1339f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(kSearchKeyword, UTF16ToUTF8(omnibox_view->model()->keyword())); 1340f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Input something as search text. 1342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kSearchTextKeys)); 1343f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1344f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Create a new tab. 1345f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::NewTab(browser()); 1346f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1347f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Switch back to the first tab. 1348f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser()->tab_strip_model()->ActivateTabAt(0, true); 1349f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1350f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Make sure we're still in keyword mode. 1351f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(kSearchKeyword, UTF16ToUTF8(omnibox_view->model()->keyword())); 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/133355 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_CtrlKeyPressedWithInlineAutocompleteTest DISABLED_CtrlKeyPressedWithInlineAutocompleteTest 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_CtrlKeyPressedWithInlineAutocompleteTest CtrlKeyPressedWithInlineAutocompleteTest 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAYBE_CtrlKeyPressedWithInlineAutocompleteTest) { 1363f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 1364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 1365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OmniboxPopupModel* popup_model = omnibox_view->model()->popup_model(); 1366f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model); 1367f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1368f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Input something to trigger inline autocomplete. 1369f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kInlineAutocompleteTextKeys)); 1370f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 1371f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(popup_model->IsOpen()); 1372f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1373a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 old_text = omnibox_view->GetText(); 1374f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1375f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Make sure inline autocomplete is triggerred. 1376f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_GT(old_text.length(), arraysize(kInlineAutocompleteText) - 1); 1377f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1378f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Press ctrl key. 1379f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view->model()->OnControlKeyChanged(true); 1380f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1381f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Inline autocomplete should still be there. 1382f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(old_text, omnibox_view->GetText()); 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(TOOLKIT_VIEWS) 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, UndoRedo) { 1387f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::FocusLocationBar(browser()); 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OmniboxView* omnibox_view = NULL; 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1393a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 old_text = omnibox_view->GetText(); 1394f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16(url::kAboutBlankURL), old_text); 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(omnibox_view->IsSelectAll()); 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Delete the text, then undo. 13983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(omnibox_view->GetText().empty()); 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN)); 14013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_EQ(old_text, omnibox_view->GetText()); 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Redo should delete the text again. 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN)); 14063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(omnibox_view->GetText().empty()); 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Looks like the undo manager doesn't support restoring selection. 14093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN)); 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(omnibox_view->IsSelectAll()); 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The cursor should be at the end. 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t start, end; 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) omnibox_view->GetSelectionBounds(&start, &end); 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(old_text.size(), start); 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(old_text.size(), end); 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 141846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Delete three characters; "about:bl" should not trigger inline autocomplete. 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); 142146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); 142246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(old_text.substr(0, old_text.size() - 3), omnibox_view->GetText()); 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Undo delete. 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN)); 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(old_text, omnibox_view->GetText()); 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Redo delete. 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN)); 143146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(old_text.substr(0, old_text.size() - 3), omnibox_view->GetText()); 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delete everything. 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) omnibox_view->SelectAll(true); 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(omnibox_view->GetText().empty()); 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Undo delete everything. 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN)); 144046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(old_text.substr(0, old_text.size() - 3), omnibox_view->GetText()); 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Undo delete two characters. 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN)); 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(old_text, omnibox_view->GetText()); 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 144746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, BackspaceDeleteHalfWidthKatakana) { 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OmniboxView* omnibox_view = NULL; 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Insert text: ダ 14515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) omnibox_view->SetUserText(base::UTF8ToUTF16("\357\276\200\357\276\236")); 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the cursor to the end. 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_END, 0)); 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Backspace should delete one character. 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); 14585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("\357\276\200"), omnibox_view->GetText()); 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1460a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif // defined(TOOLKIT_VIEWS) 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1462effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Flaky test. crbug.com/356850 1463effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_F(OmniboxViewTest, 1464effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DISABLED_DoesNotUpdateAutocompleteOnBlur) { 14652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 14662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 14672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OmniboxPopupModel* popup_model = omnibox_view->model()->popup_model(); 14682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(popup_model); 14692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Input something to trigger inline autocomplete. 14712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kInlineAutocompleteTextKeys)); 14722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 14732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(popup_model->IsOpen()); 14742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t start, end; 14752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) omnibox_view->GetSelectionBounds(&start, &end); 14762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(start != end); 1477a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 old_autocomplete_text = 14785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu omnibox_view->model()->autocomplete_controller()->input_.text(); 14792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Unfocus the omnibox. This should clear the text field selection and 14812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // close the popup, but should not run autocomplete. 14822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note: GTK preserves the selection when the omnibox is unfocused. 14832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER); 14842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(popup_model->IsOpen()); 14852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) omnibox_view->GetSelectionBounds(&start, &end); 14862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(start == end); 14872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(old_autocomplete_text, 14895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu omnibox_view->model()->autocomplete_controller()->input_.text()); 14902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, Paste) { 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OmniboxView* omnibox_view = NULL; 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OmniboxPopupModel* popup_model = omnibox_view->model()->popup_model(); 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(popup_model); 14977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(popup_model->IsOpen()); 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Paste should yield the expected text and open the popup. 15007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SetClipboardText(ASCIIToUTF16(kSearchText)); 15017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_V, kCtrlOrCmdMask)); 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 15037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(kSearchText), omnibox_view->GetText()); 15047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(popup_model->IsOpen()); 15057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 15067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Close the popup and select all. 15077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) omnibox_view->CloseOmniboxPopup(); 15087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) omnibox_view->SelectAll(false); 15097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(popup_model->IsOpen()); 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Pasting the same text again over itself should re-open the popup. 15127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_V, kCtrlOrCmdMask)); 15137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 15147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(kSearchText), omnibox_view->GetText()); 15157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(popup_model->IsOpen()); 15167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) omnibox_view->CloseOmniboxPopup(); 15177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(popup_model->IsOpen()); 15187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 15197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Pasting amid text should yield the expected text and re-open the popup. 15207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) omnibox_view->SetWindowTextAndCaretPos(ASCIIToUTF16("abcd"), 2, false, false); 15217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SetClipboardText(ASCIIToUTF16("123")); 15227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_V, kCtrlOrCmdMask)); 15237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("ab123cd"), omnibox_view->GetText()); 15247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(popup_model->IsOpen()); 15254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 15264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Ctrl/Cmd+Alt+V should not paste. 15274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 15284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SendKey(ui::VKEY_V, kCtrlOrCmdMask | ui::EF_ALT_DOWN)); 15294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("ab123cd"), omnibox_view->GetText()); 15304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // TODO(msw): Test that AltGr+V does not paste. 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, CopyURLToClipboard) { 15342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set permanent text thus making sure that omnibox treats 'google.com' 15352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // as URL (not as ordinary user input). 153658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestToolbarModel* test_toolbar_model = new TestToolbarModel; 153758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<ToolbarModel> toolbar_model(test_toolbar_model); 153858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) test_toolbar_model->set_text(ASCIIToUTF16("http://www.google.com/")); 153958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) browser()->swap_toolbar_models(&toolbar_model); 154058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 154158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 15422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OmniboxEditModel* edit_model = omnibox_view->model(); 15432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NE(static_cast<OmniboxEditModel*>(NULL), edit_model); 154458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) edit_model->UpdatePermanentText(); 154558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 154658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* target_url = "http://www.google.com/calendar"; 154758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) omnibox_view->SetUserText(ASCIIToUTF16(target_url)); 15482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Location bar must have focus. 15502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::FocusLocationBar(browser()); 15512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 15522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Select full URL and copy it to clipboard. General text and html should 15542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // be available. 15552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) omnibox_view->SelectAll(true); 15562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(omnibox_view->IsSelectAll()); 15572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); 15584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) clipboard->Clear(ui::CLIPBOARD_TYPE_COPY_PASTE); 15592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(chrome::ExecuteCommand(browser(), IDC_COPY)); 15602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(target_url), omnibox_view->GetText()); 15612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(clipboard->IsFormatAvailable( 15624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::Clipboard::GetPlainTextFormatType(), ui::CLIPBOARD_TYPE_COPY_PASTE)); 15632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Make sure HTML format isn't written. See 15654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // BookmarkNodeData::WriteToClipboard() for details. 15664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(clipboard->IsFormatAvailable( 15674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::Clipboard::GetHtmlFormatType(), ui::CLIPBOARD_TYPE_COPY_PASTE)); 15682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // These platforms should read bookmark format. 15702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_CHROMEOS) || defined(OS_MACOSX) 1571a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title; 15722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string url; 15732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clipboard->ReadBookmark(&title, &url); 15742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(target_url, url); 15752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(target_url), title); 15762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 15772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, CutURLToClipboard) { 15802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set permanent text thus making sure that omnibox treats 'google.com' 15812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // as URL (not as ordinary user input). 158258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestToolbarModel* test_toolbar_model = new TestToolbarModel; 158358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<ToolbarModel> toolbar_model(test_toolbar_model); 158458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) test_toolbar_model->set_text(ASCIIToUTF16("http://www.google.com/")); 158558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) browser()->swap_toolbar_models(&toolbar_model); 158658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 158758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 15882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OmniboxEditModel* edit_model = omnibox_view->model(); 15892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NE(static_cast<OmniboxEditModel*>(NULL), edit_model); 159058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) edit_model->UpdatePermanentText(); 159158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 159258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* target_url = "http://www.google.com/calendar"; 159358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) omnibox_view->SetUserText(ASCIIToUTF16(target_url)); 15942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Location bar must have focus. 15962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::FocusLocationBar(browser()); 15972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 15982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Select full URL and cut it. General text and html should be available 16002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // in the clipboard. 16012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) omnibox_view->SelectAll(true); 16022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(omnibox_view->IsSelectAll()); 16032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); 16044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) clipboard->Clear(ui::CLIPBOARD_TYPE_COPY_PASTE); 16052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(chrome::ExecuteCommand(browser(), IDC_CUT)); 16065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), omnibox_view->GetText()); 16072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(clipboard->IsFormatAvailable( 16084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::Clipboard::GetPlainTextFormatType(), ui::CLIPBOARD_TYPE_COPY_PASTE)); 16092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Make sure HTML format isn't written. See 16114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // BookmarkNodeData::WriteToClipboard() for details. 16124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(clipboard->IsFormatAvailable( 16134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::Clipboard::GetHtmlFormatType(), ui::CLIPBOARD_TYPE_COPY_PASTE)); 16142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // These platforms should read bookmark format. 16162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_CHROMEOS) || defined(OS_MACOSX) 1617a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title; 16182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string url; 16192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clipboard->ReadBookmark(&title, &url); 16202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(target_url, url); 16212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(target_url), title); 16222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 16232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, CopyTextToClipboard) { 16262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 16272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 16282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* target_text = "foo"; 16292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) omnibox_view->SetUserText(ASCIIToUTF16(target_text)); 16302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Location bar must have focus. 16322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::FocusLocationBar(browser()); 16332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 16342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Select full text and copy it to the clipboard. 16362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) omnibox_view->SelectAll(true); 16372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(omnibox_view->IsSelectAll()); 16382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); 16394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) clipboard->Clear(ui::CLIPBOARD_TYPE_COPY_PASTE); 16402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(chrome::ExecuteCommand(browser(), IDC_COPY)); 16412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(clipboard->IsFormatAvailable( 16424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::Clipboard::GetPlainTextFormatType(), ui::CLIPBOARD_TYPE_COPY_PASTE)); 16432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(clipboard->IsFormatAvailable( 16444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::Clipboard::GetHtmlFormatType(), ui::CLIPBOARD_TYPE_COPY_PASTE)); 16452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(target_text), omnibox_view->GetText()); 16462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, CutTextToClipboard) { 16492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 16502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 16512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* target_text = "foo"; 16522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) omnibox_view->SetUserText(ASCIIToUTF16(target_text)); 16532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Location bar must have focus. 16552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::FocusLocationBar(browser()); 16562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 16572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Select full text and cut it to the clipboard. 16592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) omnibox_view->SelectAll(true); 16602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(omnibox_view->IsSelectAll()); 16612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); 16624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) clipboard->Clear(ui::CLIPBOARD_TYPE_COPY_PASTE); 16632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(chrome::ExecuteCommand(browser(), IDC_CUT)); 16642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(clipboard->IsFormatAvailable( 16654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::Clipboard::GetPlainTextFormatType(), ui::CLIPBOARD_TYPE_COPY_PASTE)); 16662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(clipboard->IsFormatAvailable( 16674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui::Clipboard::GetHtmlFormatType(), ui::CLIPBOARD_TYPE_COPY_PASTE)); 16685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), omnibox_view->GetText()); 16692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1671c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, EditSearchEngines) { 1672f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Disable settings-in-a-window to simplify test. 1673f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::CommandLine::ForCurrentProcess()->AppendSwitch( 1674f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ::switches::kDisableSettingsWindow); 1675c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 1676c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 1677c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(chrome::ExecuteCommand(browser(), IDC_EDIT_SEARCH_ENGINES)); 1678c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 1679c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string target_url = 1680c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(chrome::kChromeUISettingsURL) + chrome::kSearchEnginesSubPage; 1681c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(target_url), omnibox_view->GetText()); 1682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(omnibox_view->model()->popup_model()->IsOpen()); 1683c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1684c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(OmniboxViewTest, BeginningShownAfterBlur) { 1686c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 1687c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 1688c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1689c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) omnibox_view->OnBeforePossibleChange(); 1690c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) omnibox_view->SetWindowTextAndCaretPos(ASCIIToUTF16("data:text/plain,test"), 1691c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5U, false, false); 1692c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) omnibox_view->OnAfterPossibleChange(); 16931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 1694c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t start, end; 1695c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) omnibox_view->GetSelectionBounds(&start, &end); 16961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(5U, start); 16971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(5U, end); 1698c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui_test_utils::FocusView(browser(), VIEW_ID_TAB_CONTAINER); 17001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 1701c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1702c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) omnibox_view->GetSelectionBounds(&start, &end); 17031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, start); 17041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, end); 1705c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1706fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 1707fb250657ef40d7500f20882d5c9909c1013367d3Ben MurdochIN_PROC_BROWSER_TEST_F(OmniboxViewTest, CtrlArrowAfterArrowSuggestions) { 1708fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch OmniboxView* omnibox_view = NULL; 1709fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 1710fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch OmniboxPopupModel* popup_model = omnibox_view->model()->popup_model(); 1711fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch ASSERT_TRUE(popup_model); 1712fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 1713fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // Input something to trigger results. 17145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const ui::KeyboardCode kKeys[] = { 17155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::VKEY_B, ui::VKEY_A, ui::VKEY_R, ui::VKEY_UNKNOWN 17165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }; 1717f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(SendKeySequence(kKeys)); 1718fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 1719fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch ASSERT_TRUE(popup_model->IsOpen()); 1720fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 1721fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch ASSERT_EQ(ASCIIToUTF16("bar.com/1"), omnibox_view->GetText()); 1722fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 1723fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // Arrow down on a suggestion, and omnibox text should be the suggestion. 1724fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_DOWN, 0)); 1725fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); 1726fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch ASSERT_EQ(ASCIIToUTF16("www.bar.com/2"), omnibox_view->GetText()); 1727fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 1728fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // Highlight the last 2 words and the omnibox text should not change. 1729fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // Simulating Ctrl-shift-left only once does not seem to highlight anything 1730fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // on Linux. 1731fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#if defined(OS_MACOSX) 1732fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // Mac uses alt-left/right to select a word. 1733fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch const int modifiers = ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN; 1734fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#else 1735fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch const int modifiers = ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN; 1736fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#endif 1737fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, modifiers)); 1738fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_LEFT, modifiers)); 1739fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch ASSERT_EQ(ASCIIToUTF16("www.bar.com/2"), omnibox_view->GetText()); 1740fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch} 1741d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1742d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, 1743d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) PersistSearchReplacementAcrossTabSwitch) { 1744a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_TRUE(browser()->toolbar_model()->url_replacement_enabled()); 1745a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) browser()->toolbar_model()->set_url_replacement_enabled(false); 1746d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1747d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Create a new tab. 1748d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) chrome::NewTab(browser()); 1749a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_TRUE(browser()->toolbar_model()->url_replacement_enabled()); 1750d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1751d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Switch back to the first tab. 1752d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) browser()->tab_strip_model()->ActivateTabAt(0, true); 1753a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_FALSE(browser()->toolbar_model()->url_replacement_enabled()); 1754d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 1755d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1756d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(OmniboxViewTest, 1757d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DontUpdateURLWhileSearchTermReplacementIsDisabled) { 1758d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) OmniboxView* omnibox_view = NULL; 1759d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); 1760d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) TestToolbarModel* test_toolbar_model = new TestToolbarModel; 1761d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_ptr<ToolbarModel> toolbar_model(test_toolbar_model); 1762d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) browser()->swap_toolbar_models(&toolbar_model); 1763d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1764a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 url_a(ASCIIToUTF16("http://www.a.com/")); 1765a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 url_b(ASCIIToUTF16("http://www.b.com/")); 1766a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 url_c(ASCIIToUTF16("http://www.c.com/")); 1767d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) chrome::FocusLocationBar(browser()); 1768d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) test_toolbar_model->set_text(url_a); 1769d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) omnibox_view->Update(); 1770d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(url_a, omnibox_view->GetText()); 1771d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1772a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Disable URL replacement and update. Because the omnibox has focus, the 1773a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // visible text shouldn't change; see comments in 1774d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // OmniboxEditModel::UpdatePermanentText(). 1775a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) browser()->toolbar_model()->set_url_replacement_enabled(false); 1776d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) test_toolbar_model->set_text(url_b); 1777d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) omnibox_view->Update(); 1778d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(url_a, omnibox_view->GetText()); 1779d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1780a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Re-enable URL replacement and ensure updating changes the text. 1781a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) browser()->toolbar_model()->set_url_replacement_enabled(true); 1782d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // We have to change the toolbar model text here, or Update() will do nothing. 1783d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // This is because the previous update already updated the permanent text. 1784d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) test_toolbar_model->set_text(url_c); 1785d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) omnibox_view->Update(); 1786d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(url_c, omnibox_view->GetText()); 1787d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1788d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // The same test, but using RevertAll() to reset search term replacement. 1789d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) test_toolbar_model->set_text(url_a); 1790d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) omnibox_view->Update(); 1791d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(url_a, omnibox_view->GetText()); 1792a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) browser()->toolbar_model()->set_url_replacement_enabled(false); 1793d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) test_toolbar_model->set_text(url_b); 1794d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) omnibox_view->Update(); 1795d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(url_a, omnibox_view->GetText()); 1796d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) omnibox_view->RevertAll(); 1797d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(url_b, omnibox_view->GetText()); 1798d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) test_toolbar_model->set_text(url_c); 1799d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) omnibox_view->Update(); 1800d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(url_c, omnibox_view->GetText()); 1801d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 1802d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1803effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_F(OmniboxViewTest, EscDisablesSearchTermReplacement) { 1804effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch browser()->toolbar_model()->set_url_replacement_enabled(true); 1805d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) chrome::FocusLocationBar(browser()); 1806effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_ESCAPE, 0)); 1807effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_FALSE(browser()->toolbar_model()->url_replacement_enabled()); 1808d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 1809