15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved.
25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be
35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file.
45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/search/search.h"
65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/command_line.h"
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/scoped_ptr.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/metrics/field_trial.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/metrics/statistics_recorder.h"
115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/common/chrome_switches.h"
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/search/search.h"
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/search/search_switches.h"
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/variations/entropy_provider.h"
155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "testing/gtest/include/gtest/gtest.h"
165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace chrome {
185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace {
205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
21116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(SearchTest, QueryExtractionEnabled) {
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Query extraction is always enabled on mobile.
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(IsQueryExtractionEnabled());
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SearchUtilTest : public testing::Test {
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch protected:
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void SetUp() {
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    field_trial_list_.reset(new base::FieldTrialList(
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        new metrics::SHA1EntropyProvider("42")));
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    base::StatisticsRecorder::Initialize();
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<base::FieldTrialList> field_trial_list_;
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
38116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(SearchUtilTest, UseDefaultEmbeddedSearchPageVersion) {
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "EmbeddedSearch", "Group1 espv:-1 query_extraction:1"));
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(IsQueryExtractionEnabled());
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ("espv=1&", InstantExtendedEnabledParam(true));
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ("espv=1&", InstantExtendedEnabledParam(false));
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
46116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(SearchUtilTest, ShouldPrefetchSearchResults_InstantExtendedAPIEnabled) {
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "EmbeddedSearch",
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "Group1 espv:2 prefetch_results:1"));
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(ShouldPrefetchSearchResults());
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(IsInstantExtendedAPIEnabled());
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2ul, EmbeddedSearchPageVersion());
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
55116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(SearchUtilTest, ShouldPrefetchSearchResults_InstantExtendedAPIDisabled) {
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "EmbeddedSearch",
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "Group1 espv:1 prefetch_results:1"));
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(ShouldPrefetchSearchResults());
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(IsInstantExtendedAPIEnabled());
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(1ul, EmbeddedSearchPageVersion());
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
64116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(SearchUtilTest, ShouldPrefetchSearchResults_DisabledViaFieldTrials) {
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "EmbeddedSearch",
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "Group1 espv:2 prefetch_results:0"));
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(ShouldPrefetchSearchResults());
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2ul, EmbeddedSearchPageVersion());
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
72116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(SearchUtilTest, ShouldPrefetchSearchResults_EnabledViaCommandLine) {
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  CommandLine::ForCurrentProcess()->AppendSwitch(
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      switches::kPrefetchSearchResults);
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Command-line enable should override Finch.
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "EmbeddedSearch", "Group1 espv:2 prefetch_results:0"));
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(ShouldPrefetchSearchResults());
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2ul, EmbeddedSearchPageVersion());
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
82116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(SearchUtilTest,
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch       ShouldReuseInstantSearchBasePage_PrefetchResultsFlagDisabled) {
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "EmbeddedSearch",
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "Group1 espv:2 prefetch_results:0 reuse_instant_search_base_page:1"));
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(ShouldPrefetchSearchResults());
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(ShouldReuseInstantSearchBasePage());
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2ul, EmbeddedSearchPageVersion());
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
92116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(SearchUtilTest, ShouldReuseInstantSearchBasePage_EnabledViaFieldTrial) {
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "EmbeddedSearch",
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "Group1 espv:2 prefetch_results:1 reuse_instant_search_base_page:1"));
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(ShouldReuseInstantSearchBasePage());
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2ul, EmbeddedSearchPageVersion());
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
100116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(SearchUtilTest, ShouldReuseInstantSearchBasePage_DisabledViaFieldTrial) {
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "EmbeddedSearch",
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "Group1 espv:2 prefetch_results:1 reuse_instant_search_base_page:0"));
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(ShouldReuseInstantSearchBasePage());
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(2ul, EmbeddedSearchPageVersion());
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}  // namespace
1095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}  // namespace chrome
111