Home | History | Annotate | Download | only in omnibox
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/extensions/api/omnibox/omnibox_api_testbase.h"
      6 #include "chrome/browser/search_engines/template_url_service_factory.h"
      7 #include "chrome/test/base/ui_test_utils.h"
      8 
      9 
     10 // Tests that the autocomplete popup doesn't reopen after accepting input for
     11 // a given query.
     12 // http://crbug.com/88552
     13 IN_PROC_BROWSER_TEST_F(OmniboxApiTest, PopupStaysClosed) {
     14   ASSERT_TRUE(RunExtensionTest("omnibox")) << message_;
     15 
     16   // The results depend on the TemplateURLService being loaded. Make sure it is
     17   // loaded so that the autocomplete results are consistent.
     18   ui_test_utils::WaitForTemplateURLServiceToLoad(
     19       TemplateURLServiceFactory::GetForProfile(browser()->profile()));
     20 
     21   LocationBar* location_bar = GetLocationBar(browser());
     22   OmniboxView* omnibox_view = location_bar->GetLocationEntry();
     23   AutocompleteController* autocomplete_controller =
     24       GetAutocompleteController(browser());
     25   OmniboxPopupModel* popup_model = omnibox_view->model()->popup_model();
     26 
     27   // Input a keyword query and wait for suggestions from the extension.
     28   omnibox_view->OnBeforePossibleChange();
     29   omnibox_view->SetUserText(ASCIIToUTF16("keyword comman"));
     30   omnibox_view->OnAfterPossibleChange();
     31   WaitForAutocompleteDone(autocomplete_controller);
     32   EXPECT_TRUE(autocomplete_controller->done());
     33   EXPECT_TRUE(popup_model->IsOpen());
     34 
     35   // Quickly type another query and accept it before getting suggestions back
     36   // for the query. The popup will close after accepting input - ensure that it
     37   // does not reopen when the extension returns its suggestions.
     38   ResultCatcher catcher;
     39 
     40   // TODO: Rather than send this second request by talking to the controller
     41   // directly, figure out how to send it via the proper calls to
     42   // location_bar or location_bar->().
     43   autocomplete_controller->Start(
     44       AutocompleteInput(ASCIIToUTF16("keyword command"), string16::npos,
     45                         string16(), GURL(), AutocompleteInput::NEW_TAB_PAGE,
     46                         true, false, true, AutocompleteInput::ALL_MATCHES));
     47   location_bar->AcceptInput();
     48   WaitForAutocompleteDone(autocomplete_controller);
     49   EXPECT_TRUE(autocomplete_controller->done());
     50   // This checks that the keyword provider (via javascript)
     51   // gets told to navigate to the string "command".
     52   EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
     53   EXPECT_FALSE(popup_model->IsOpen());
     54 }
     55