Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(49)

Side by Side Diff: chrome/browser/autocomplete/autocomplete_browsertest.cc

Issue 1855423003: Interpret '?' and Ctrl-K or Ctrl-E as putting omnibox in keyword search mode for Default Search Pro… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed compilation on Mac and removed forced query unit tests Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/format_macros.h" 8 #include "base/format_macros.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
11 #include "build/build_config.h" 11 #include "build/build_config.h"
12 #include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h" 12 #include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h"
13 #include "chrome/browser/extensions/extension_browsertest.h" 13 #include "chrome/browser/extensions/extension_browsertest.h"
14 #include "chrome/browser/extensions/extension_service.h" 14 #include "chrome/browser/extensions/extension_service.h"
15 #include "chrome/browser/extensions/unpacked_installer.h" 15 #include "chrome/browser/extensions/unpacked_installer.h"
16 #include "chrome/browser/history/history_service_factory.h" 16 #include "chrome/browser/history/history_service_factory.h"
17 #include "chrome/browser/profiles/profile.h" 17 #include "chrome/browser/profiles/profile.h"
18 #include "chrome/browser/search_engines/template_url_service_factory.h" 18 #include "chrome/browser/search_engines/template_url_service_factory.h"
19 #include "chrome/browser/ui/browser.h" 19 #include "chrome/browser/ui/browser.h"
20 #include "chrome/browser/ui/browser_commands.h" 20 #include "chrome/browser/ui/browser_commands.h"
21 #include "chrome/browser/ui/browser_tabstrip.h" 21 #include "chrome/browser/ui/browser_tabstrip.h"
22 #include "chrome/browser/ui/browser_window.h" 22 #include "chrome/browser/ui/browser_window.h"
23 #include "chrome/browser/ui/location_bar/location_bar.h" 23 #include "chrome/browser/ui/location_bar/location_bar.h"
24 #include "chrome/browser/ui/tabs/tab_strip_model.h" 24 #include "chrome/browser/ui/tabs/tab_strip_model.h"
25 #include "chrome/common/chrome_paths.h" 25 #include "chrome/common/chrome_paths.h"
26 #include "chrome/common/url_constants.h" 26 #include "chrome/common/url_constants.h"
27 #include "chrome/test/base/in_process_browser_test.h" 27 #include "chrome/test/base/in_process_browser_test.h"
28 #include "chrome/test/base/interactive_test_utils.h"
28 #include "chrome/test/base/search_test_utils.h" 29 #include "chrome/test/base/search_test_utils.h"
29 #include "chrome/test/base/test_switches.h" 30 #include "chrome/test/base/test_switches.h"
30 #include "chrome/test/base/ui_test_utils.h" 31 #include "chrome/test/base/ui_test_utils.h"
31 #include "components/history/core/browser/history_service.h" 32 #include "components/history/core/browser/history_service.h"
32 #include "components/metrics/proto/omnibox_event.pb.h" 33 #include "components/metrics/proto/omnibox_event.pb.h"
33 #include "components/omnibox/browser/autocomplete_input.h" 34 #include "components/omnibox/browser/autocomplete_input.h"
34 #include "components/omnibox/browser/autocomplete_match.h" 35 #include "components/omnibox/browser/autocomplete_match.h"
35 #include "components/omnibox/browser/autocomplete_provider.h" 36 #include "components/omnibox/browser/autocomplete_provider.h"
36 #include "components/omnibox/browser/omnibox_popup_model.h" 37 #include "components/omnibox/browser/omnibox_popup_model.h"
37 #include "components/omnibox/browser/omnibox_view.h" 38 #include "components/omnibox/browser/omnibox_view.h"
39 #include "components/search_engines/template_url_service.h"
38 #include "content/public/browser/notification_service.h" 40 #include "content/public/browser/notification_service.h"
39 #include "content/public/browser/notification_types.h" 41 #include "content/public/browser/notification_types.h"
40 #include "testing/gtest/include/gtest/gtest.h" 42 #include "testing/gtest/include/gtest/gtest.h"
41 43
42 namespace { 44 namespace {
43 45
44 base::string16 AutocompleteResultAsString(const AutocompleteResult& result) { 46 base::string16 AutocompleteResultAsString(const AutocompleteResult& result) {
45 std::string output(base::StringPrintf("{%" PRIuS "} ", result.size())); 47 std::string output(base::StringPrintf("{%" PRIuS "} ", result.size()));
46 for (size_t i = 0; i < result.size(); ++i) { 48 for (size_t i = 0; i < result.size(); ++i) {
47 AutocompleteMatch match = result.match_at(i); 49 AutocompleteMatch match = result.match_at(i);
(...skipping 14 matching lines...) Expand all
62 } 64 }
63 65
64 LocationBar* GetLocationBar() const { 66 LocationBar* GetLocationBar() const {
65 return browser()->window()->GetLocationBar(); 67 return browser()->window()->GetLocationBar();
66 } 68 }
67 69
68 AutocompleteController* GetAutocompleteController() const { 70 AutocompleteController* GetAutocompleteController() const {
69 return GetLocationBar()->GetOmniboxView()->model()->popup_model()-> 71 return GetLocationBar()->GetOmniboxView()->model()->popup_model()->
70 autocomplete_controller(); 72 autocomplete_controller();
71 } 73 }
74
75 void FocusSearchCheckPreconditions() {
Peter Kasting 2016/04/15 00:58:55 Nit: Technically, I think this could be const, sin
Tom (Use chromium acct) 2016/04/15 05:20:51 Acknowledged.
76 LocationBar* location_bar = GetLocationBar();
77 OmniboxView* omnibox_view = location_bar->GetOmniboxView();
78 OmniboxEditModel* omnibox_model = omnibox_view->model();
79
80 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid());
81 EXPECT_EQ(base::UTF8ToUTF16(url::kAboutBlankURL),
82 omnibox_view->GetText());
83 EXPECT_EQ(base::string16(), omnibox_model->keyword());
84 EXPECT_FALSE(omnibox_model->is_keyword_hint());
85 EXPECT_FALSE(omnibox_model->is_keyword_selected());
86 }
72 }; 87 };
73 88
74 IN_PROC_BROWSER_TEST_F(AutocompleteBrowserTest, Basic) { 89 IN_PROC_BROWSER_TEST_F(AutocompleteBrowserTest, Basic) {
75 #if defined(OS_WIN) && defined(USE_ASH) 90 #if defined(OS_WIN) && defined(USE_ASH)
76 // Disable this test in Metro+Ash for now (http://crbug.com/262796). 91 // Disable this test in Metro+Ash for now (http://crbug.com/262796).
77 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 92 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
78 switches::kAshBrowserTests)) 93 switches::kAshBrowserTests))
79 return; 94 return;
80 #endif 95 #endif
81 96
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 #if defined(OS_WIN) && defined(USE_ASH) 216 #if defined(OS_WIN) && defined(USE_ASH)
202 // Disable this test in Metro+Ash for now (http://crbug.com/262796). 217 // Disable this test in Metro+Ash for now (http://crbug.com/262796).
203 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 218 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
204 switches::kAshBrowserTests)) 219 switches::kAshBrowserTests))
205 return; 220 return;
206 #endif 221 #endif
207 222
208 WaitForTemplateURLServiceToLoad(); 223 WaitForTemplateURLServiceToLoad();
209 LocationBar* location_bar = GetLocationBar(); 224 LocationBar* location_bar = GetLocationBar();
210 OmniboxView* omnibox_view = location_bar->GetOmniboxView(); 225 OmniboxView* omnibox_view = location_bar->GetOmniboxView();
226 OmniboxEditModel* omnibox_model = omnibox_view->model();
211 227
212 // Focus search when omnibox is blank 228 TemplateURLService* template_url_service =
229 TemplateURLServiceFactory::GetForProfile(browser()->profile());
230 base::string16 default_search_keyword =
231 template_url_service->GetDefaultSearchProvider()->keyword();
232
233 base::string16 query_text = base::ASCIIToUTF16("foo");
234
235 size_t selection_start, selection_end;
236
237 // Focus search when omnibox is blank.
213 { 238 {
214 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid()); 239 FocusSearchCheckPreconditions();
215 EXPECT_EQ(base::UTF8ToUTF16(url::kAboutBlankURL), omnibox_view->GetText());
216 240
217 location_bar->FocusSearch(); 241 location_bar->FocusSearch();
218 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid()); 242 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid());
219 EXPECT_EQ(base::ASCIIToUTF16("?"), omnibox_view->GetText()); 243 EXPECT_EQ(base::string16(), omnibox_view->GetText());
244 EXPECT_EQ(default_search_keyword, omnibox_model->keyword());
245 EXPECT_FALSE(omnibox_model->is_keyword_hint());
246 EXPECT_TRUE(omnibox_model->is_keyword_selected());
220 247
221 size_t selection_start, selection_end;
222 omnibox_view->GetSelectionBounds(&selection_start, &selection_end); 248 omnibox_view->GetSelectionBounds(&selection_start, &selection_end);
223 EXPECT_EQ(1U, selection_start); 249 EXPECT_EQ(0U, selection_start);
224 EXPECT_EQ(1U, selection_end); 250 EXPECT_EQ(0U, selection_end);
251
252 omnibox_view->RevertAll();
225 } 253 }
226 254
227 // Focus search when omnibox is _not_ alread in forced query mode. 255 // Focus search when omnibox is _not_ alread in forced query mode.
Peter Kasting 2016/04/15 00:58:55 There is no such thing as forced query mode anymor
Tom (Use chromium acct) 2016/04/15 05:20:51 Done.
228 { 256 {
229 omnibox_view->SetUserText(base::ASCIIToUTF16("foo")); 257 FocusSearchCheckPreconditions();
258
259 omnibox_view->SetUserText(query_text);
230 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid()); 260 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid());
231 EXPECT_EQ(base::ASCIIToUTF16("foo"), omnibox_view->GetText()); 261 EXPECT_EQ(query_text, omnibox_view->GetText());
262 EXPECT_EQ(base::string16(), omnibox_model->keyword());
263 EXPECT_FALSE(omnibox_model->is_keyword_hint());
264 EXPECT_FALSE(omnibox_model->is_keyword_selected());
232 265
233 location_bar->FocusSearch(); 266 location_bar->FocusSearch();
234 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid()); 267 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid());
235 EXPECT_EQ(base::ASCIIToUTF16("?"), omnibox_view->GetText()); 268 EXPECT_EQ(query_text, omnibox_view->GetText());
269 EXPECT_EQ(default_search_keyword, omnibox_model->keyword());
270 EXPECT_FALSE(omnibox_model->is_keyword_hint());
271 EXPECT_TRUE(omnibox_model->is_keyword_selected());
236 272
237 size_t selection_start, selection_end;
238 omnibox_view->GetSelectionBounds(&selection_start, &selection_end); 273 omnibox_view->GetSelectionBounds(&selection_start, &selection_end);
239 EXPECT_EQ(1U, selection_start); 274 EXPECT_EQ(0U, std::min(selection_start, selection_end));
240 EXPECT_EQ(1U, selection_end); 275 EXPECT_EQ(query_text.length(), std::max(selection_start, selection_end));
276
277 omnibox_view->RevertAll();
241 } 278 }
242 279
243 // Focus search when omnibox _is_ already in forced query mode, but no query 280 // Focus search when omnibox _is_ already in forced query mode, but no query
244 // has been typed. 281 // has been typed.
245 { 282 {
246 omnibox_view->SetUserText(base::ASCIIToUTF16("?")); 283 FocusSearchCheckPreconditions();
247 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid());
248 EXPECT_EQ(base::ASCIIToUTF16("?"), omnibox_view->GetText());
249 284
250 location_bar->FocusSearch(); 285 location_bar->FocusSearch();
251 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid()); 286 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid());
252 EXPECT_EQ(base::ASCIIToUTF16("?"), omnibox_view->GetText()); 287 EXPECT_EQ(base::string16(), omnibox_view->GetText());
288 EXPECT_EQ(default_search_keyword, omnibox_model->keyword());
289 EXPECT_FALSE(omnibox_model->is_keyword_hint());
290 EXPECT_TRUE(omnibox_model->is_keyword_selected());
253 291
254 size_t selection_start, selection_end;
255 omnibox_view->GetSelectionBounds(&selection_start, &selection_end); 292 omnibox_view->GetSelectionBounds(&selection_start, &selection_end);
256 EXPECT_EQ(1U, selection_start); 293 EXPECT_EQ(0U, selection_start);
257 EXPECT_EQ(1U, selection_end); 294 EXPECT_EQ(0U, selection_end);
295
296 location_bar->FocusSearch();
297 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid());
298 EXPECT_EQ(base::string16(), omnibox_view->GetText());
299 EXPECT_EQ(default_search_keyword, omnibox_model->keyword());
300 EXPECT_FALSE(omnibox_model->is_keyword_hint());
301 EXPECT_TRUE(omnibox_model->is_keyword_selected());
302
303 omnibox_view->GetSelectionBounds(&selection_start, &selection_end);
304 EXPECT_EQ(0U, selection_start);
305 EXPECT_EQ(0U, selection_end);
306
307 omnibox_view->RevertAll();
258 } 308 }
259 309
260 // Focus search when omnibox _is_ already in forced query mode, and some query 310 // Focus search when omnibox _is_ already in forced query mode, and some query
261 // has been typed. 311 // has been typed.
262 { 312 {
263 omnibox_view->SetUserText(base::ASCIIToUTF16("?foo")); 313 FocusSearchCheckPreconditions();
314
315 omnibox_view->SetUserText(query_text);
316 location_bar->FocusSearch();
264 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid()); 317 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid());
265 EXPECT_EQ(base::ASCIIToUTF16("?foo"), omnibox_view->GetText()); 318 EXPECT_EQ(query_text, omnibox_view->GetText());
319 EXPECT_EQ(default_search_keyword, omnibox_model->keyword());
320 EXPECT_FALSE(omnibox_model->is_keyword_hint());
321 EXPECT_TRUE(omnibox_model->is_keyword_selected());
322
323 omnibox_view->GetSelectionBounds(&selection_start, &selection_end);
324 EXPECT_EQ(0U, std::min(selection_start, selection_end));
325 EXPECT_EQ(query_text.length(), std::max(selection_start, selection_end));
266 326
267 location_bar->FocusSearch(); 327 location_bar->FocusSearch();
268 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid()); 328 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid());
269 EXPECT_EQ(base::ASCIIToUTF16("?foo"), omnibox_view->GetText()); 329 EXPECT_EQ(query_text, omnibox_view->GetText());
330 EXPECT_EQ(default_search_keyword, omnibox_model->keyword());
331 EXPECT_FALSE(omnibox_model->is_keyword_hint());
332 EXPECT_TRUE(omnibox_model->is_keyword_selected());
270 333
271 size_t selection_start, selection_end;
272 omnibox_view->GetSelectionBounds(&selection_start, &selection_end); 334 omnibox_view->GetSelectionBounds(&selection_start, &selection_end);
273 EXPECT_EQ(1U, std::min(selection_start, selection_end)); 335 EXPECT_EQ(0U, std::min(selection_start, selection_end));
274 EXPECT_EQ(4U, std::max(selection_start, selection_end)); 336 EXPECT_EQ(query_text.length(), std::max(selection_start, selection_end));
337
338 omnibox_view->RevertAll();
275 } 339 }
276 340
277 // Focus search when omnibox is in forced query mode with leading whitespace. 341 // If the user gets into keyword mode using a keyboard shortcut, and presses
342 // backspace, they should be left with their original query without their dsp
343 // keyword.
278 { 344 {
279 omnibox_view->SetUserText(base::ASCIIToUTF16(" ?foo")); 345 FocusSearchCheckPreconditions();
346
347 omnibox_view->SetUserText(query_text);
348 // The user presses Ctrl-K.
349 location_bar->FocusSearch();
350 // The user presses backspace.
351 omnibox_model->ClearKeyword();
352
280 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid()); 353 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid());
281 EXPECT_EQ(base::ASCIIToUTF16(" ?foo"), omnibox_view->GetText()); 354 EXPECT_EQ(query_text, omnibox_view->GetText());
355 EXPECT_EQ(base::string16(), omnibox_model->keyword());
356 EXPECT_FALSE(omnibox_model->is_keyword_hint());
357 EXPECT_FALSE(omnibox_model->is_keyword_selected());
282 358
283 location_bar->FocusSearch(); 359 omnibox_view->RevertAll();
360 }
361
362 // If the user gets into keyword mode by typing '?', they should be put into
363 // keyword mode for their default search provider. If they press backspace,
364 // they should be left with '?' in the omnibox.
365 {
366 FocusSearchCheckPreconditions();
367
368 omnibox_view->SetUserText(base::ASCIIToUTF16("?"));
369
284 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid()); 370 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid());
285 EXPECT_EQ(base::ASCIIToUTF16(" ?foo"), omnibox_view->GetText()); 371 EXPECT_EQ(base::string16(), omnibox_view->GetText());
372 EXPECT_EQ(default_search_keyword, omnibox_model->keyword());
373 EXPECT_FALSE(omnibox_model->is_keyword_hint());
374 EXPECT_TRUE(omnibox_model->is_keyword_selected());
286 375
287 size_t selection_start, selection_end; 376 // The user presses backspace.
288 omnibox_view->GetSelectionBounds(&selection_start, &selection_end); 377 omnibox_model->ClearKeyword();
289 EXPECT_EQ(4U, std::min(selection_start, selection_end)); 378
290 EXPECT_EQ(7U, std::max(selection_start, selection_end)); 379 EXPECT_FALSE(location_bar->GetDestinationURL().is_valid());
380 EXPECT_EQ(base::ASCIIToUTF16("?"), omnibox_view->GetText());
381 EXPECT_EQ(base::string16(), omnibox_model->keyword());
382 EXPECT_FALSE(omnibox_model->is_keyword_hint());
383 EXPECT_FALSE(omnibox_model->is_keyword_selected());
384
385 omnibox_view->RevertAll();
291 } 386 }
292 } 387 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698