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