1// Copyright 2014 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/search/search.h" 6 7#include "base/command_line.h" 8#include "base/memory/scoped_ptr.h" 9#include "base/metrics/field_trial.h" 10#include "base/metrics/statistics_recorder.h" 11#include "chrome/common/chrome_switches.h" 12#include "components/search/search.h" 13#include "components/search/search_switches.h" 14#include "components/variations/entropy_provider.h" 15#include "testing/gtest/include/gtest/gtest.h" 16 17namespace chrome { 18 19namespace { 20 21TEST(SearchTest, QueryExtractionEnabled) { 22 // Query extraction is always enabled on mobile. 23 EXPECT_TRUE(IsQueryExtractionEnabled()); 24} 25 26class SearchUtilTest : public testing::Test { 27 protected: 28 virtual void SetUp() { 29 field_trial_list_.reset(new base::FieldTrialList( 30 new metrics::SHA1EntropyProvider("42"))); 31 base::StatisticsRecorder::Initialize(); 32 } 33 34 private: 35 scoped_ptr<base::FieldTrialList> field_trial_list_; 36}; 37 38TEST_F(SearchUtilTest, UseDefaultEmbeddedSearchPageVersion) { 39 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( 40 "EmbeddedSearch", "Group1 espv:-1 query_extraction:1")); 41 EXPECT_TRUE(IsQueryExtractionEnabled()); 42 EXPECT_EQ("espv=1&", InstantExtendedEnabledParam(true)); 43 EXPECT_EQ("espv=1&", InstantExtendedEnabledParam(false)); 44} 45 46TEST_F(SearchUtilTest, ShouldPrefetchSearchResults_InstantExtendedAPIEnabled) { 47 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( 48 "EmbeddedSearch", 49 "Group1 espv:2 prefetch_results:1")); 50 EXPECT_TRUE(ShouldPrefetchSearchResults()); 51 EXPECT_TRUE(IsInstantExtendedAPIEnabled()); 52 EXPECT_EQ(2ul, EmbeddedSearchPageVersion()); 53} 54 55TEST_F(SearchUtilTest, ShouldPrefetchSearchResults_InstantExtendedAPIDisabled) { 56 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( 57 "EmbeddedSearch", 58 "Group1 espv:1 prefetch_results:1")); 59 EXPECT_FALSE(ShouldPrefetchSearchResults()); 60 EXPECT_FALSE(IsInstantExtendedAPIEnabled()); 61 EXPECT_EQ(1ul, EmbeddedSearchPageVersion()); 62} 63 64TEST_F(SearchUtilTest, ShouldPrefetchSearchResults_DisabledViaFieldTrials) { 65 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( 66 "EmbeddedSearch", 67 "Group1 espv:2 prefetch_results:0")); 68 EXPECT_FALSE(ShouldPrefetchSearchResults()); 69 EXPECT_EQ(2ul, EmbeddedSearchPageVersion()); 70} 71 72TEST_F(SearchUtilTest, ShouldPrefetchSearchResults_EnabledViaCommandLine) { 73 CommandLine::ForCurrentProcess()->AppendSwitch( 74 switches::kPrefetchSearchResults); 75 // Command-line enable should override Finch. 76 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( 77 "EmbeddedSearch", "Group1 espv:2 prefetch_results:0")); 78 EXPECT_TRUE(ShouldPrefetchSearchResults()); 79 EXPECT_EQ(2ul, EmbeddedSearchPageVersion()); 80} 81 82TEST_F(SearchUtilTest, 83 ShouldReuseInstantSearchBasePage_PrefetchResultsFlagDisabled) { 84 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( 85 "EmbeddedSearch", 86 "Group1 espv:2 prefetch_results:0 reuse_instant_search_base_page:1")); 87 EXPECT_FALSE(ShouldPrefetchSearchResults()); 88 EXPECT_FALSE(ShouldReuseInstantSearchBasePage()); 89 EXPECT_EQ(2ul, EmbeddedSearchPageVersion()); 90} 91 92TEST_F(SearchUtilTest, ShouldReuseInstantSearchBasePage_EnabledViaFieldTrial) { 93 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( 94 "EmbeddedSearch", 95 "Group1 espv:2 prefetch_results:1 reuse_instant_search_base_page:1")); 96 EXPECT_TRUE(ShouldReuseInstantSearchBasePage()); 97 EXPECT_EQ(2ul, EmbeddedSearchPageVersion()); 98} 99 100TEST_F(SearchUtilTest, ShouldReuseInstantSearchBasePage_DisabledViaFieldTrial) { 101 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( 102 "EmbeddedSearch", 103 "Group1 espv:2 prefetch_results:1 reuse_instant_search_base_page:0")); 104 EXPECT_FALSE(ShouldReuseInstantSearchBasePage()); 105 EXPECT_EQ(2ul, EmbeddedSearchPageVersion()); 106} 107 108} // namespace 109 110} // namespace chrome 111