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