1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/format_macros.h" 63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string_util.h" 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autocomplete/autocomplete.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autocomplete/autocomplete_edit.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autocomplete/autocomplete_edit_view.h" 11513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/autocomplete/autocomplete_match.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autocomplete/autocomplete_popup_model.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/history/history.h" 143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/tabs/tab_strip_model.h" 154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser_window.h" 1721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/omnibox/location_bar.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/url_constants.h" 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/in_process_browser_test.h" 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/ui_test_utils.h" 21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h" 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_type.h" 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Autocomplete test is flaky on ChromeOS. 263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// http://crbug.com/52928 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if defined(OS_CHROMEOS) 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#define MAYBE_Autocomplete FLAKY_Autocomplete 293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#else 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#define MAYBE_Autocomplete Autocomplete 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenstring16 AutocompleteResultAsString(const AutocompleteResult& result) { 3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::string output(base::StringPrintf("{%" PRIuS "} ", result.size())); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t i = 0; i < result.size(); ++i) { 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutocompleteMatch match = result.match_at(i); 4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::string provider_name = match.provider->name(); 4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen output.append(base::StringPrintf("[\"%s\" by \"%s\"] ", 4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen UTF16ToUTF8(match.contents).c_str(), 4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen provider_name.c_str())); 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return UTF8ToUTF16(output); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AutocompleteBrowserTest : public InProcessBrowserTest { 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LocationBar* GetLocationBar() const { 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return browser()->window()->GetLocationBar(); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutocompleteController* GetAutocompleteController() const { 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GetLocationBar()->location_entry()->model()->popup_model()-> 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch autocomplete_controller(); 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 62513209b27ff55e2841eac0e4120199c23acce758Ben MurdochIN_PROC_BROWSER_TEST_F(AutocompleteBrowserTest, Basic) { 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LocationBar* location_bar = GetLocationBar(); 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 6521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(UTF8ToUTF16(chrome::kAboutBlankURL), 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch location_bar->location_entry()->GetText()); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(phajdan.jr): check state of IsSelectAll when it's consistent across 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // platforms. 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch location_bar->FocusLocation(true); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(UTF8ToUTF16(chrome::kAboutBlankURL), 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch location_bar->location_entry()->GetText()); 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(location_bar->location_entry()->IsSelectAll()); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen location_bar->location_entry()->SetUserText(ASCIIToUTF16("chrome")); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(ASCIIToUTF16("chrome"), location_bar->location_entry()->GetText()); 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(location_bar->location_entry()->IsSelectAll()); 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch location_bar->location_entry()->RevertAll(); 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(UTF8ToUTF16(chrome::kAboutBlankURL), 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch location_bar->location_entry()->GetText()); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(location_bar->location_entry()->IsSelectAll()); 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen location_bar->location_entry()->SetUserText(ASCIIToUTF16("chrome")); 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch location_bar->Revert(); 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(UTF8ToUTF16(chrome::kAboutBlankURL), 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch location_bar->location_entry()->GetText()); 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(location_bar->location_entry()->IsSelectAll()); 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1003345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickIN_PROC_BROWSER_TEST_F(AutocompleteBrowserTest, MAYBE_Autocomplete) { 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The results depend on the history backend being loaded. Make sure it is 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // loaded so that the autocomplete results are consistent. 103731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ui_test_utils::WaitForHistoryToLoad(browser()); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LocationBar* location_bar = GetLocationBar(); 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutocompleteController* autocomplete_controller = GetAutocompleteController(); 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autocomplete_controller->Start( 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASCIIToUTF16("chrome"), string16(), true, false, true, 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutocompleteInput::SYNCHRONOUS_MATCHES); 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(autocomplete_controller->done()); 11421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 11521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->location_entry()->GetText().empty()); 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(location_bar->location_entry()->IsSelectAll()); 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const AutocompleteResult& result = autocomplete_controller->result(); 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // We get two matches because we have a provider for extension apps and the 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Chrome Web Store is a built-in Extension app. For this test, we only care 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // about the other match existing. 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_GE(result.size(), 1U) << AutocompleteResultAsString(result); 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AutocompleteMatch match = result.match_at(0); 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, match.type); 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(match.deletable); 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch location_bar->Revert(); 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 13021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 13172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(UTF8ToUTF16(chrome::kAboutBlankURL), 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch location_bar->location_entry()->GetText()); 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(location_bar->location_entry()->IsSelectAll()); 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const AutocompleteResult& result = autocomplete_controller->result(); 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result.empty()) << AutocompleteResultAsString(result); 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(AutocompleteBrowserTest, TabAwayRevertSelect) { 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // http://code.google.com/p/chromium/issues/detail?id=38385 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure that tabbing away from an empty omnibar causes a revert 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // and select all. 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LocationBar* location_bar = GetLocationBar(); 14472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(UTF8ToUTF16(chrome::kAboutBlankURL), 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch location_bar->location_entry()->GetText()); 14672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen location_bar->location_entry()->SetUserText(string16()); 147513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch browser()->AddSelectedTabWithURL(GURL(chrome::kAboutBlankURL), 148513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch PageTransition::START_PAGE); 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::WaitForNavigation( 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &browser()->GetSelectedTabContents()->controller()); 15172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(UTF8ToUTF16(chrome::kAboutBlankURL), 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch location_bar->location_entry()->GetText()); 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->CloseTab(); 15472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(UTF8ToUTF16(chrome::kAboutBlankURL), 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch location_bar->location_entry()->GetText()); 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(location_bar->location_entry()->IsSelectAll()); 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 1583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1593345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickIN_PROC_BROWSER_TEST_F(AutocompleteBrowserTest, FocusSearch) { 1603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick LocationBar* location_bar = GetLocationBar(); 1613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Focus search when omnibox is blank 1633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { 16421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 16572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(UTF8ToUTF16(chrome::kAboutBlankURL), 1663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick location_bar->location_entry()->GetText()); 1673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick location_bar->FocusSearch(); 16921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 17072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(ASCIIToUTF16("?"), location_bar->location_entry()->GetText()); 1713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick size_t selection_start, selection_end; 1733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick location_bar->location_entry()->GetSelectionBounds(&selection_start, 1743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick &selection_end); 1753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(1U, selection_start); 1763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(1U, selection_end); 1773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Focus search when omnibox is _not_ alread in forced query mode. 1803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { 18172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen location_bar->location_entry()->SetUserText(ASCIIToUTF16("foo")); 18221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 18372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(ASCIIToUTF16("foo"), location_bar->location_entry()->GetText()); 1843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick location_bar->FocusSearch(); 18621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 18772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(ASCIIToUTF16("?"), location_bar->location_entry()->GetText()); 1883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick size_t selection_start, selection_end; 1903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick location_bar->location_entry()->GetSelectionBounds(&selection_start, 1913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick &selection_end); 1923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(1U, selection_start); 1933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(1U, selection_end); 1943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Focus search when omnibox _is_ already in forced query mode, but no query 1973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // has been typed. 1983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { 19972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen location_bar->location_entry()->SetUserText(ASCIIToUTF16("?")); 20021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 20172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(ASCIIToUTF16("?"), location_bar->location_entry()->GetText()); 2023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick location_bar->FocusSearch(); 20421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 20572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(ASCIIToUTF16("?"), location_bar->location_entry()->GetText()); 2063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick size_t selection_start, selection_end; 2083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick location_bar->location_entry()->GetSelectionBounds(&selection_start, 2093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick &selection_end); 2103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(1U, selection_start); 2113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(1U, selection_end); 2123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 2133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Focus search when omnibox _is_ already in forced query mode, and some query 2153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // has been typed. 2163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { 21772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen location_bar->location_entry()->SetUserText(ASCIIToUTF16("?foo")); 21821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 21972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(ASCIIToUTF16("?foo"), location_bar->location_entry()->GetText()); 2203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick location_bar->FocusSearch(); 22221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 22372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(ASCIIToUTF16("?foo"), location_bar->location_entry()->GetText()); 2243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick size_t selection_start, selection_end; 2263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick location_bar->location_entry()->GetSelectionBounds(&selection_start, 2273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick &selection_end); 2283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(1U, std::min(selection_start, selection_end)); 2293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(4U, std::max(selection_start, selection_end)); 2303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 2313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Focus search when omnibox is in forced query mode with leading whitespace. 2333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { 23472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen location_bar->location_entry()->SetUserText(ASCIIToUTF16(" ?foo")); 23521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 23672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(ASCIIToUTF16(" ?foo"), 23772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen location_bar->location_entry()->GetText()); 2383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick location_bar->FocusSearch(); 24021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_TRUE(location_bar->GetInputString().empty()); 24172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(ASCIIToUTF16(" ?foo"), 24272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen location_bar->location_entry()->GetText()); 2433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick size_t selection_start, selection_end; 2453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick location_bar->location_entry()->GetSelectionBounds(&selection_start, 2463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick &selection_end); 2473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(4U, std::min(selection_start, selection_end)); 2483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(7U, std::max(selection_start, selection_end)); 2493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 2503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 251