omnibox_controller_unittest.cc revision 868fa2fe829687343ffae624259930155e16dbd8
125b3c049e70834cf33790a28643ab058b507b35cBen Cheng// Copyright 2013 The Chromium Authors. All rights reserved. 225b3c049e70834cf33790a28643ab058b507b35cBen Cheng// Use of this source code is governed by a BSD-style license that can be 325b3c049e70834cf33790a28643ab058b507b35cBen Cheng// found in the LICENSE file. 425b3c049e70834cf33790a28643ab058b507b35cBen Cheng 525b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "base/prefs/pref_service.h" 625b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "chrome/browser/autocomplete/autocomplete_controller.h" 725b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "chrome/browser/autocomplete/autocomplete_provider.h" 825b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "chrome/browser/search/search.h" 925b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "chrome/browser/ui/omnibox/omnibox_controller.h" 1025b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "chrome/common/pref_names.h" 1125b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "chrome/test/base/testing_profile.h" 1225b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include "testing/gtest/include/gtest/gtest.h" 1325b3c049e70834cf33790a28643ab058b507b35cBen Cheng 1425b3c049e70834cf33790a28643ab058b507b35cBen Chengclass OmniboxControllerTest : public testing::Test { 1525b3c049e70834cf33790a28643ab058b507b35cBen Cheng protected: 1625b3c049e70834cf33790a28643ab058b507b35cBen Cheng OmniboxControllerTest(); 1725b3c049e70834cf33790a28643ab058b507b35cBen Cheng virtual ~OmniboxControllerTest(); 1825b3c049e70834cf33790a28643ab058b507b35cBen Cheng 1925b3c049e70834cf33790a28643ab058b507b35cBen Cheng void CreateController(); 2025b3c049e70834cf33790a28643ab058b507b35cBen Cheng void AssertProviders(int expected_providers); 2125b3c049e70834cf33790a28643ab058b507b35cBen Cheng 2225b3c049e70834cf33790a28643ab058b507b35cBen Cheng PrefService* GetPrefs() { return profile_.GetPrefs(); } 2325b3c049e70834cf33790a28643ab058b507b35cBen Cheng const ACProviders* GetAutocompleteProviders() const { 2425b3c049e70834cf33790a28643ab058b507b35cBen Cheng return omnibox_controller_->autocomplete_controller()->providers(); 2525b3c049e70834cf33790a28643ab058b507b35cBen Cheng } 2625b3c049e70834cf33790a28643ab058b507b35cBen Cheng 2725b3c049e70834cf33790a28643ab058b507b35cBen Cheng private: 2825b3c049e70834cf33790a28643ab058b507b35cBen Cheng TestingProfile profile_; 2925b3c049e70834cf33790a28643ab058b507b35cBen Cheng scoped_ptr<OmniboxController> omnibox_controller_; 3025b3c049e70834cf33790a28643ab058b507b35cBen Cheng 3125b3c049e70834cf33790a28643ab058b507b35cBen Cheng DISALLOW_COPY_AND_ASSIGN(OmniboxControllerTest); 3225b3c049e70834cf33790a28643ab058b507b35cBen Cheng}; 3325b3c049e70834cf33790a28643ab058b507b35cBen Cheng 3425b3c049e70834cf33790a28643ab058b507b35cBen ChengOmniboxControllerTest::OmniboxControllerTest() { 3525b3c049e70834cf33790a28643ab058b507b35cBen Cheng} 3625b3c049e70834cf33790a28643ab058b507b35cBen Cheng 3725b3c049e70834cf33790a28643ab058b507b35cBen ChengOmniboxControllerTest::~OmniboxControllerTest() { 3825b3c049e70834cf33790a28643ab058b507b35cBen Cheng} 3925b3c049e70834cf33790a28643ab058b507b35cBen Cheng 4025b3c049e70834cf33790a28643ab058b507b35cBen Chengvoid OmniboxControllerTest::CreateController() { 4125b3c049e70834cf33790a28643ab058b507b35cBen Cheng omnibox_controller_.reset(new OmniboxController(NULL, &profile_)); 4225b3c049e70834cf33790a28643ab058b507b35cBen Cheng} 4325b3c049e70834cf33790a28643ab058b507b35cBen Cheng 4425b3c049e70834cf33790a28643ab058b507b35cBen Cheng// Checks that the list of autocomplete providers used by the OmniboxController 4525b3c049e70834cf33790a28643ab058b507b35cBen Cheng// matches the one in the |expected_providers| bit field. 4625b3c049e70834cf33790a28643ab058b507b35cBen Chengvoid OmniboxControllerTest::AssertProviders(int expected_providers) { 4725b3c049e70834cf33790a28643ab058b507b35cBen Cheng const ACProviders* providers = GetAutocompleteProviders(); 4825b3c049e70834cf33790a28643ab058b507b35cBen Cheng 4925b3c049e70834cf33790a28643ab058b507b35cBen Cheng for (size_t i = 0; i < providers->size(); ++i) { 5025b3c049e70834cf33790a28643ab058b507b35cBen Cheng // Ensure this is a provider we wanted. 5125b3c049e70834cf33790a28643ab058b507b35cBen Cheng int type = providers->at(i)->type(); 5225b3c049e70834cf33790a28643ab058b507b35cBen Cheng ASSERT_TRUE(expected_providers & type); 5325b3c049e70834cf33790a28643ab058b507b35cBen Cheng 5425b3c049e70834cf33790a28643ab058b507b35cBen Cheng // Remove it from expectations so we fail if it's there twice. 5525b3c049e70834cf33790a28643ab058b507b35cBen Cheng expected_providers &= ~type; 5625b3c049e70834cf33790a28643ab058b507b35cBen Cheng } 5725b3c049e70834cf33790a28643ab058b507b35cBen Cheng 5825b3c049e70834cf33790a28643ab058b507b35cBen Cheng // Ensure we saw all the providers we expected. 5925b3c049e70834cf33790a28643ab058b507b35cBen Cheng ASSERT_EQ(0, expected_providers); 6025b3c049e70834cf33790a28643ab058b507b35cBen Cheng} 6125b3c049e70834cf33790a28643ab058b507b35cBen Cheng 6225b3c049e70834cf33790a28643ab058b507b35cBen ChengTEST_F(OmniboxControllerTest, CheckDefaultAutocompleteProviders) { 6325b3c049e70834cf33790a28643ab058b507b35cBen Cheng CreateController(); 6425b3c049e70834cf33790a28643ab058b507b35cBen Cheng // First collect the basic providers. 6525b3c049e70834cf33790a28643ab058b507b35cBen Cheng int observed_providers = 0; 6625b3c049e70834cf33790a28643ab058b507b35cBen Cheng const ACProviders* providers = GetAutocompleteProviders(); 6725b3c049e70834cf33790a28643ab058b507b35cBen Cheng for (size_t i = 0; i < providers->size(); ++i) 6825b3c049e70834cf33790a28643ab058b507b35cBen Cheng observed_providers |= providers->at(i)->type(); 6925b3c049e70834cf33790a28643ab058b507b35cBen Cheng // Ensure we have at least one provider. 7025b3c049e70834cf33790a28643ab058b507b35cBen Cheng ASSERT_NE(0, observed_providers); 7125b3c049e70834cf33790a28643ab058b507b35cBen Cheng 7225b3c049e70834cf33790a28643ab058b507b35cBen Cheng // Ensure instant extended includes all the basic ones save for those that are 7325b3c049e70834cf33790a28643ab058b507b35cBen Cheng // not expected to run in instant extended. 7425b3c049e70834cf33790a28643ab058b507b35cBen Cheng int providers_with_instant_extended = 7525b3c049e70834cf33790a28643ab058b507b35cBen Cheng observed_providers & 7625b3c049e70834cf33790a28643ab058b507b35cBen Cheng ~AutocompleteProvider::TYPE_SHORTCUTS; 7725b3c049e70834cf33790a28643ab058b507b35cBen Cheng // TODO(beaudoin): remove TYPE_SEARCH once it's no longer needed to pass 7825b3c049e70834cf33790a28643ab058b507b35cBen Cheng // the Instant suggestion through via FinalizeInstantQuery. 7925b3c049e70834cf33790a28643ab058b507b35cBen Cheng chrome::EnableInstantExtendedAPIForTesting(); 8025b3c049e70834cf33790a28643ab058b507b35cBen Cheng CreateController(); 8125b3c049e70834cf33790a28643ab058b507b35cBen Cheng AssertProviders(providers_with_instant_extended); 8225b3c049e70834cf33790a28643ab058b507b35cBen Cheng} 8325b3c049e70834cf33790a28643ab058b507b35cBen Cheng