| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/metrics/field_trial.h" | 6 #include "base/metrics/field_trial.h" |
| 7 #include "base/metrics/histogram_base.h" | |
| 8 #include "base/metrics/histogram_samples.h" | |
| 9 #include "base/metrics/statistics_recorder.h" | 7 #include "base/metrics/statistics_recorder.h" |
| 10 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
| 11 #include "chrome/browser/search/instant_service.h" | 9 #include "chrome/browser/search/instant_service.h" |
| 12 #include "chrome/browser/search/instant_service_factory.h" | 10 #include "chrome/browser/search/instant_service_factory.h" |
| 13 #include "chrome/browser/search/search.h" | 11 #include "chrome/browser/search/search.h" |
| 14 #include "chrome/browser/search_engines/search_terms_data.h" | 12 #include "chrome/browser/search_engines/search_terms_data.h" |
| 15 #include "chrome/browser/search_engines/template_url_service.h" | 13 #include "chrome/browser/search_engines/template_url_service.h" |
| 16 #include "chrome/browser/search_engines/template_url_service_factory.h" | 14 #include "chrome/browser/search_engines/template_url_service_factory.h" |
| 17 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 15 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 18 #include "chrome/common/chrome_switches.h" | 16 #include "chrome/common/chrome_switches.h" |
| 19 #include "chrome/common/pref_names.h" | 17 #include "chrome/common/pref_names.h" |
| 20 #include "chrome/common/url_constants.h" | 18 #include "chrome/common/url_constants.h" |
| 21 #include "chrome/test/base/browser_with_test_window_test.h" | 19 #include "chrome/test/base/browser_with_test_window_test.h" |
| 22 #include "chrome/test/base/ui_test_utils.h" | 20 #include "chrome/test/base/ui_test_utils.h" |
| 23 #include "components/variations/entropy_provider.h" | 21 #include "components/variations/entropy_provider.h" |
| 24 #include "content/public/browser/render_process_host.h" | 22 #include "content/public/browser/render_process_host.h" |
| 25 #include "content/public/browser/render_view_host.h" | 23 #include "content/public/browser/render_view_host.h" |
| 26 #include "content/public/browser/site_instance.h" | 24 #include "content/public/browser/site_instance.h" |
| 27 #include "content/public/browser/web_contents.h" | 25 #include "content/public/browser/web_contents.h" |
| 28 #include "content/public/common/renderer_preferences.h" | 26 #include "content/public/common/renderer_preferences.h" |
| 29 | 27 |
| 30 namespace chrome { | 28 namespace chrome { |
| 31 | 29 |
| 32 class EmbeddedSearchFieldTrialTest : public testing::Test { | 30 class EmbeddedSearchFieldTrialTest : public testing::Test { |
| 33 protected: | 31 protected: |
| 34 virtual void SetUp() { | 32 virtual void SetUp() { |
| 35 field_trial_list_.reset(new base::FieldTrialList( | 33 field_trial_list_.reset(new base::FieldTrialList( |
| 36 new metrics::SHA1EntropyProvider("42"))); | 34 new metrics::SHA1EntropyProvider("42"))); |
| 37 base::StatisticsRecorder::Initialize(); | 35 base::StatisticsRecorder::Initialize(); |
| 38 ResetInstantExtendedOptInStateGateForTest(); | |
| 39 } | 36 } |
| 40 | 37 |
| 41 private: | 38 private: |
| 42 scoped_ptr<base::FieldTrialList> field_trial_list_; | 39 scoped_ptr<base::FieldTrialList> field_trial_list_; |
| 43 }; | 40 }; |
| 44 | 41 |
| 45 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoEmptyAndValid) { | 42 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoEmptyAndValid) { |
| 46 FieldTrialFlags flags; | 43 FieldTrialFlags flags; |
| 47 uint64 group_number = 0; | |
| 48 | 44 |
| 49 EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number)); | 45 EXPECT_TRUE(GetFieldTrialInfo(&flags)); |
| 50 EXPECT_EQ(0ul, group_number); | |
| 51 EXPECT_EQ(0ul, flags.size()); | 46 EXPECT_EQ(0ul, flags.size()); |
| 52 | 47 |
| 53 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 48 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 54 "InstantExtended", "Group77")); | 49 "InstantExtended", "Group77")); |
| 55 EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number)); | 50 EXPECT_TRUE(GetFieldTrialInfo(&flags)); |
| 56 EXPECT_EQ(77ul, group_number); | |
| 57 EXPECT_EQ(0ul, flags.size()); | 51 EXPECT_EQ(0ul, flags.size()); |
| 58 } | 52 } |
| 59 | 53 |
| 60 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoInvalidNumber) { | 54 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoInvalidNumber) { |
| 61 FieldTrialFlags flags; | 55 FieldTrialFlags flags; |
| 62 uint64 group_number = 0; | |
| 63 | 56 |
| 64 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 57 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 65 "InstantExtended", "Group77.2")); | 58 "InstantExtended", "Group77.2")); |
| 66 EXPECT_FALSE(GetFieldTrialInfo(&flags, &group_number)); | 59 EXPECT_TRUE(GetFieldTrialInfo(&flags)); |
| 67 EXPECT_EQ(0ul, group_number); | |
| 68 EXPECT_EQ(0ul, flags.size()); | 60 EXPECT_EQ(0ul, flags.size()); |
| 69 } | 61 } |
| 70 | 62 |
| 71 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoInvalidName) { | 63 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoInvalidName) { |
| 72 FieldTrialFlags flags; | 64 FieldTrialFlags flags; |
| 73 uint64 group_number = 0; | |
| 74 | 65 |
| 75 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 66 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 76 "InstantExtended", "Invalid77")); | 67 "InstantExtended", "Invalid77")); |
| 77 EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number)); | 68 EXPECT_TRUE(GetFieldTrialInfo(&flags)); |
| 78 EXPECT_EQ(0ul, group_number); | |
| 79 EXPECT_EQ(0ul, flags.size()); | 69 EXPECT_EQ(0ul, flags.size()); |
| 80 } | 70 } |
| 81 | 71 |
| 82 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoValidGroup) { | 72 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoValidGroup) { |
| 83 FieldTrialFlags flags; | 73 FieldTrialFlags flags; |
| 84 uint64 group_number = 0; | |
| 85 | 74 |
| 86 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 75 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 87 "InstantExtended", "Group77")); | 76 "InstantExtended", "Group77")); |
| 88 EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number)); | 77 EXPECT_TRUE(GetFieldTrialInfo(&flags)); |
| 89 EXPECT_EQ(77ul, group_number); | |
| 90 EXPECT_EQ(0ul, flags.size()); | 78 EXPECT_EQ(0ul, flags.size()); |
| 91 } | 79 } |
| 92 | 80 |
| 93 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoValidFlag) { | 81 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoValidFlag) { |
| 94 FieldTrialFlags flags; | 82 FieldTrialFlags flags; |
| 95 uint64 group_number = 0; | |
| 96 | 83 |
| 97 EXPECT_EQ(9999ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags)); | 84 EXPECT_EQ(9999ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags)); |
| 98 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 85 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 99 "InstantExtended", "Group77 foo:6")); | 86 "InstantExtended", "Group77 foo:6")); |
| 100 EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number)); | 87 EXPECT_TRUE(GetFieldTrialInfo(&flags)); |
| 101 EXPECT_EQ(77ul, group_number); | |
| 102 EXPECT_EQ(1ul, flags.size()); | 88 EXPECT_EQ(1ul, flags.size()); |
| 103 EXPECT_EQ(6ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags)); | 89 EXPECT_EQ(6ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags)); |
| 104 } | 90 } |
| 105 | 91 |
| 106 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoNewName) { | 92 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoNewName) { |
| 107 FieldTrialFlags flags; | 93 FieldTrialFlags flags; |
| 108 uint64 group_number = 0; | |
| 109 | 94 |
| 110 EXPECT_EQ(9999ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags)); | 95 EXPECT_EQ(9999ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags)); |
| 111 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 96 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 112 "EmbeddedSearch", "Group77 foo:6")); | 97 "EmbeddedSearch", "Group77 foo:6")); |
| 113 EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number)); | 98 EXPECT_TRUE(GetFieldTrialInfo(&flags)); |
| 114 EXPECT_EQ(77ul, group_number); | |
| 115 EXPECT_EQ(1ul, flags.size()); | 99 EXPECT_EQ(1ul, flags.size()); |
| 116 EXPECT_EQ(6ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags)); | 100 EXPECT_EQ(6ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags)); |
| 117 } | 101 } |
| 118 | 102 |
| 119 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoNewNameOverridesOld) { | 103 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoNewNameOverridesOld) { |
| 120 FieldTrialFlags flags; | 104 FieldTrialFlags flags; |
| 121 uint64 group_number = 0; | |
| 122 | 105 |
| 123 EXPECT_EQ(9999ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags)); | 106 EXPECT_EQ(9999ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags)); |
| 124 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 107 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 125 "EmbeddedSearch", "Group77 foo:6")); | 108 "EmbeddedSearch", "Group77 foo:6")); |
| 126 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 109 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 127 "InstantExtended", "Group78 foo:5")); | 110 "InstantExtended", "Group78 foo:5")); |
| 128 EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number)); | 111 EXPECT_TRUE(GetFieldTrialInfo(&flags)); |
| 129 EXPECT_EQ(77ul, group_number); | |
| 130 EXPECT_EQ(1ul, flags.size()); | 112 EXPECT_EQ(1ul, flags.size()); |
| 131 EXPECT_EQ(6ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags)); | 113 EXPECT_EQ(6ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags)); |
| 132 } | 114 } |
| 133 | 115 |
| 134 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoLotsOfFlags) { | 116 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoLotsOfFlags) { |
| 135 FieldTrialFlags flags; | 117 FieldTrialFlags flags; |
| 136 uint64 group_number = 0; | |
| 137 | 118 |
| 138 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 119 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 139 "InstantExtended", "Group77 bar:1 baz:7 cat:dogs")); | 120 "InstantExtended", "Group77 bar:1 baz:7 cat:dogs")); |
| 140 EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number)); | 121 EXPECT_TRUE(GetFieldTrialInfo(&flags)); |
| 141 EXPECT_EQ(77ul, group_number); | |
| 142 EXPECT_EQ(3ul, flags.size()); | 122 EXPECT_EQ(3ul, flags.size()); |
| 143 EXPECT_EQ(true, GetBoolValueForFlagWithDefault("bar", false, flags)); | 123 EXPECT_EQ(true, GetBoolValueForFlagWithDefault("bar", false, flags)); |
| 144 EXPECT_EQ(7ul, GetUInt64ValueForFlagWithDefault("baz", 0, flags)); | 124 EXPECT_EQ(7ul, GetUInt64ValueForFlagWithDefault("baz", 0, flags)); |
| 145 EXPECT_EQ("dogs", | 125 EXPECT_EQ("dogs", |
| 146 GetStringValueForFlagWithDefault("cat", std::string(), flags)); | 126 GetStringValueForFlagWithDefault("cat", std::string(), flags)); |
| 147 EXPECT_EQ("default", | 127 EXPECT_EQ("default", |
| 148 GetStringValueForFlagWithDefault("moose", "default", flags)); | 128 GetStringValueForFlagWithDefault("moose", "default", flags)); |
| 149 } | 129 } |
| 150 | 130 |
| 151 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoDisabled) { | 131 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoDisabled) { |
| 152 FieldTrialFlags flags; | 132 FieldTrialFlags flags; |
| 153 uint64 group_number = 0; | |
| 154 | 133 |
| 155 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 134 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 156 "InstantExtended", "Group77 bar:1 baz:7 cat:dogs DISABLED")); | 135 "InstantExtended", "Group77 bar:1 baz:7 cat:dogs DISABLED")); |
| 157 EXPECT_FALSE(GetFieldTrialInfo(&flags, &group_number)); | 136 EXPECT_FALSE(GetFieldTrialInfo(&flags)); |
| 158 EXPECT_EQ(0ul, group_number); | |
| 159 EXPECT_EQ(0ul, flags.size()); | 137 EXPECT_EQ(0ul, flags.size()); |
| 160 } | 138 } |
| 161 | 139 |
| 162 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoControlFlags) { | 140 TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoControlFlags) { |
| 163 FieldTrialFlags flags; | 141 FieldTrialFlags flags; |
| 164 uint64 group_number = 0; | |
| 165 | 142 |
| 166 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 143 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 167 "InstantExtended", "Control77 bar:1 baz:7 cat:dogs")); | 144 "InstantExtended", "Control77 bar:1 baz:7 cat:dogs")); |
| 168 EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number)); | 145 EXPECT_TRUE(GetFieldTrialInfo(&flags)); |
| 169 EXPECT_EQ(0ul, group_number); | |
| 170 EXPECT_EQ(3ul, flags.size()); | 146 EXPECT_EQ(3ul, flags.size()); |
| 171 } | 147 } |
| 172 | 148 |
| 173 class InstantExtendedAPIEnabledTest : public testing::Test { | 149 class InstantExtendedAPIEnabledTest : public testing::Test { |
| 174 public: | |
| 175 InstantExtendedAPIEnabledTest() : histogram_(NULL) { | |
| 176 } | |
| 177 protected: | 150 protected: |
| 178 virtual void SetUp() { | 151 virtual void SetUp() { |
| 179 field_trial_list_.reset(new base::FieldTrialList( | 152 field_trial_list_.reset(new base::FieldTrialList( |
| 180 new metrics::SHA1EntropyProvider("42"))); | 153 new metrics::SHA1EntropyProvider("42"))); |
| 181 base::StatisticsRecorder::Initialize(); | |
| 182 ResetInstantExtendedOptInStateGateForTest(); | |
| 183 previous_metrics_count_.resize(INSTANT_EXTENDED_OPT_IN_STATE_ENUM_COUNT, 0); | |
| 184 base::HistogramBase* histogram = GetHistogram(); | |
| 185 if (histogram) { | |
| 186 scoped_ptr<base::HistogramSamples> samples(histogram->SnapshotSamples()); | |
| 187 if (samples.get()) { | |
| 188 for (int state = INSTANT_EXTENDED_NOT_SET; | |
| 189 state < INSTANT_EXTENDED_OPT_IN_STATE_ENUM_COUNT; ++state) { | |
| 190 previous_metrics_count_[state] = samples->GetCount(state); | |
| 191 } | |
| 192 } | |
| 193 } | |
| 194 } | 154 } |
| 195 | 155 |
| 196 virtual CommandLine* GetCommandLine() const { | 156 virtual CommandLine* GetCommandLine() const { |
| 197 return CommandLine::ForCurrentProcess(); | 157 return CommandLine::ForCurrentProcess(); |
| 198 } | 158 } |
| 199 | 159 |
| 200 void ValidateMetrics(base::HistogramBase::Sample value) { | |
| 201 base::HistogramBase* histogram = GetHistogram(); | |
| 202 if (histogram) { | |
| 203 scoped_ptr<base::HistogramSamples> samples(histogram->SnapshotSamples()); | |
| 204 if (samples.get()) { | |
| 205 for (int state = INSTANT_EXTENDED_NOT_SET; | |
| 206 state < INSTANT_EXTENDED_OPT_IN_STATE_ENUM_COUNT; ++state) { | |
| 207 if (state == value) { | |
| 208 EXPECT_EQ(previous_metrics_count_[state] + 1, | |
| 209 samples->GetCount(state)); | |
| 210 } else { | |
| 211 EXPECT_EQ(previous_metrics_count_[state], samples->GetCount(state)); | |
| 212 } | |
| 213 } | |
| 214 } | |
| 215 } | |
| 216 } | |
| 217 | |
| 218 private: | 160 private: |
| 219 base::HistogramBase* GetHistogram() { | |
| 220 if (!histogram_) { | |
| 221 histogram_ = base::StatisticsRecorder::FindHistogram( | |
| 222 "InstantExtended.OptInState"); | |
| 223 } | |
| 224 return histogram_; | |
| 225 } | |
| 226 base::HistogramBase* histogram_; | |
| 227 scoped_ptr<base::FieldTrialList> field_trial_list_; | 161 scoped_ptr<base::FieldTrialList> field_trial_list_; |
| 228 std::vector<int> previous_metrics_count_; | |
| 229 }; | 162 }; |
| 230 | 163 |
| 231 TEST_F(InstantExtendedAPIEnabledTest, EnabledViaCommandLineFlag) { | |
| 232 GetCommandLine()->AppendSwitch(switches::kEnableInstantExtendedAPI); | |
| 233 EXPECT_TRUE(IsInstantExtendedAPIEnabled()); | |
| 234 #if defined(OS_IOS) || defined(OS_ANDROID) | |
| 235 EXPECT_EQ(1ul, EmbeddedSearchPageVersion()); | |
| 236 #else | |
| 237 EXPECT_EQ(2ul, EmbeddedSearchPageVersion()); | |
| 238 #endif | |
| 239 ValidateMetrics(INSTANT_EXTENDED_OPT_IN); | |
| 240 } | |
| 241 | |
| 242 TEST_F(InstantExtendedAPIEnabledTest, EnabledViaFinchFlag) { | 164 TEST_F(InstantExtendedAPIEnabledTest, EnabledViaFinchFlag) { |
| 243 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended", | 165 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended", |
| 244 "Group1 espv:42")); | 166 "Group1 espv:42")); |
| 245 EXPECT_TRUE(IsInstantExtendedAPIEnabled()); | 167 EXPECT_TRUE(IsInstantExtendedAPIEnabled()); |
| 246 EXPECT_EQ(42ul, EmbeddedSearchPageVersion()); | 168 EXPECT_EQ(42ul, EmbeddedSearchPageVersion()); |
| 247 ValidateMetrics(INSTANT_EXTENDED_NOT_SET); | |
| 248 } | 169 } |
| 249 | 170 |
| 250 TEST_F(InstantExtendedAPIEnabledTest, DisabledViaCommandLineFlag) { | 171 TEST_F(InstantExtendedAPIEnabledTest, DisabledViaFinchFlag) { |
| 251 GetCommandLine()->AppendSwitch(switches::kDisableInstantExtendedAPI); | |
| 252 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended", | 172 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended", |
| 253 "Group1 espv:2")); | 173 "Group1 espv:0")); |
| 254 EXPECT_FALSE(IsInstantExtendedAPIEnabled()); | 174 EXPECT_FALSE(IsInstantExtendedAPIEnabled()); |
| 255 EXPECT_EQ(0ul, EmbeddedSearchPageVersion()); | 175 EXPECT_EQ(0ul, EmbeddedSearchPageVersion()); |
| 256 ValidateMetrics(INSTANT_EXTENDED_OPT_OUT); | |
| 257 } | 176 } |
| 258 | 177 |
| 259 typedef InstantExtendedAPIEnabledTest ShouldHideTopVerbatimTest; | 178 typedef InstantExtendedAPIEnabledTest ShouldHideTopVerbatimTest; |
| 260 | 179 |
| 261 TEST_F(ShouldHideTopVerbatimTest, DoNotHideByDefault) { | 180 TEST_F(ShouldHideTopVerbatimTest, DoNotHideByDefault) { |
| 262 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 181 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 263 "InstantExtended", "Control")); | 182 "InstantExtended", "Control")); |
| 264 EXPECT_FALSE(ShouldHideTopVerbatimMatch()); | 183 EXPECT_FALSE(ShouldHideTopVerbatimMatch()); |
| 265 } | 184 } |
| 266 | 185 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 281 "InstantExtended", "Controll1 hide_verbatim:1")); | 200 "InstantExtended", "Controll1 hide_verbatim:1")); |
| 282 EXPECT_TRUE(ShouldHideTopVerbatimMatch()); | 201 EXPECT_TRUE(ShouldHideTopVerbatimMatch()); |
| 283 } | 202 } |
| 284 | 203 |
| 285 TEST_F(ShouldHideTopVerbatimTest, DisableByFlag) { | 204 TEST_F(ShouldHideTopVerbatimTest, DisableByFlag) { |
| 286 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 205 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 287 "InstantExtended", "Group1 hide_verbatim:0")); | 206 "InstantExtended", "Group1 hide_verbatim:0")); |
| 288 EXPECT_FALSE(ShouldHideTopVerbatimMatch()); | 207 EXPECT_FALSE(ShouldHideTopVerbatimMatch()); |
| 289 } | 208 } |
| 290 | 209 |
| 291 typedef InstantExtendedAPIEnabledTest ShouldSuppressInstantExtendedOnSRPTest; | 210 typedef InstantExtendedAPIEnabledTest IsQueryExtractionEnabledTest; |
| 292 | 211 |
| 293 TEST_F(ShouldSuppressInstantExtendedOnSRPTest, NotSet) { | 212 TEST_F(IsQueryExtractionEnabledTest, NotSet) { |
| 294 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 213 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 295 "InstantExtended", "Group1 espv:2")); | 214 "InstantExtended", "Group1 espv:2")); |
| 296 EXPECT_FALSE(ShouldSuppressInstantExtendedOnSRP()); | 215 EXPECT_TRUE(IsInstantExtendedAPIEnabled()); |
| 216 EXPECT_FALSE(IsQueryExtractionEnabled()); |
| 217 EXPECT_EQ(2ul, EmbeddedSearchPageVersion()); |
| 218 } |
| 219 |
| 220 TEST_F(IsQueryExtractionEnabledTest, QueryExtractionEnabledViaFinch) { |
| 221 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 222 "InstantExtended", "Group1 espv:2 query_extraction:1")); |
| 297 EXPECT_TRUE(IsInstantExtendedAPIEnabled()); | 223 EXPECT_TRUE(IsInstantExtendedAPIEnabled()); |
| 298 EXPECT_TRUE(IsQueryExtractionEnabled()); | 224 EXPECT_TRUE(IsQueryExtractionEnabled()); |
| 299 EXPECT_EQ(2ul, EmbeddedSearchPageVersion()); | 225 EXPECT_EQ(2ul, EmbeddedSearchPageVersion()); |
| 300 } | 226 } |
| 301 | 227 |
| 302 TEST_F(ShouldSuppressInstantExtendedOnSRPTest, NotSuppressOnSRP) { | 228 TEST_F(IsQueryExtractionEnabledTest, QueryExtractionEnabledViaCommandLine) { |
| 303 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 229 EnableQueryExtractionForTesting(); |
| 304 "InstantExtended", "Group1 espv:2 suppress_on_srp:0")); | |
| 305 EXPECT_FALSE(ShouldSuppressInstantExtendedOnSRP()); | |
| 306 EXPECT_TRUE(IsInstantExtendedAPIEnabled()); | 230 EXPECT_TRUE(IsInstantExtendedAPIEnabled()); |
| 307 EXPECT_TRUE(IsQueryExtractionEnabled()); | 231 EXPECT_TRUE(IsQueryExtractionEnabled()); |
| 308 EXPECT_EQ(2ul, EmbeddedSearchPageVersion()); | 232 EXPECT_EQ(2ul, EmbeddedSearchPageVersion()); |
| 309 } | 233 } |
| 310 | 234 |
| 311 TEST_F(ShouldSuppressInstantExtendedOnSRPTest, SuppressOnSRP) { | 235 TEST_F(IsQueryExtractionEnabledTest, QueryExtractionDisabledViaFinch) { |
| 312 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | 236 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
| 313 "InstantExtended", "Group1 espv:2 suppress_on_srp:1")); | 237 "InstantExtended", "Group1 espv:2 query_extraction:0")); |
| 314 EXPECT_TRUE(ShouldSuppressInstantExtendedOnSRP()); | |
| 315 EXPECT_TRUE(IsInstantExtendedAPIEnabled()); | 238 EXPECT_TRUE(IsInstantExtendedAPIEnabled()); |
| 316 EXPECT_FALSE(IsQueryExtractionEnabled()); | 239 EXPECT_FALSE(IsQueryExtractionEnabled()); |
| 317 EXPECT_EQ(2ul, EmbeddedSearchPageVersion()); | 240 EXPECT_EQ(2ul, EmbeddedSearchPageVersion()); |
| 318 } | 241 } |
| 319 | 242 |
| 320 class SearchTest : public BrowserWithTestWindowTest { | 243 class SearchTest : public BrowserWithTestWindowTest { |
| 321 protected: | 244 protected: |
| 322 virtual void SetUp() OVERRIDE { | 245 virtual void SetUp() OVERRIDE { |
| 323 BrowserWithTestWindowTest::SetUp(); | 246 BrowserWithTestWindowTest::SetUp(); |
| 324 field_trial_list_.reset(new base::FieldTrialList( | 247 field_trial_list_.reset(new base::FieldTrialList( |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 | 304 |
| 382 scoped_ptr<base::FieldTrialList> field_trial_list_; | 305 scoped_ptr<base::FieldTrialList> field_trial_list_; |
| 383 }; | 306 }; |
| 384 | 307 |
| 385 struct SearchTestCase { | 308 struct SearchTestCase { |
| 386 const char* url; | 309 const char* url; |
| 387 bool expected_result; | 310 bool expected_result; |
| 388 const char* comment; | 311 const char* comment; |
| 389 }; | 312 }; |
| 390 | 313 |
| 391 TEST_F(SearchTest, ShouldAssignURLToInstantRendererExtendedDisabled) { | 314 TEST_F(SearchTest, ShouldAssignURLToInstantRendererSRPEnabled) { |
| 392 DisableInstantExtendedAPIForTesting(); | 315 EnableQueryExtractionForTesting(); |
| 393 | |
| 394 const SearchTestCase kTestCases[] = { | |
| 395 {"chrome-search://foo/bar", false, ""}, | |
| 396 {"http://foo.com/instant", false, ""}, | |
| 397 {"http://foo.com/instant?foo=bar", false, ""}, | |
| 398 {"https://foo.com/instant", false, ""}, | |
| 399 {"https://foo.com/instant#foo=bar", false, ""}, | |
| 400 {"HtTpS://fOo.CoM/instant", false, ""}, | |
| 401 {"http://foo.com:80/instant", false, ""}, | |
| 402 {"invalid URL", false, "Invalid URL"}, | |
| 403 {"unknown://scheme/path", false, "Unknown scheme"}, | |
| 404 {"ftp://foo.com/instant", false, "Non-HTTP scheme"}, | |
| 405 {"http://sub.foo.com/instant", false, "Non-exact host"}, | |
| 406 {"http://foo.com:26/instant", false, "Non-default port"}, | |
| 407 {"http://foo.com/instant/bar", false, "Non-exact path"}, | |
| 408 {"http://foo.com/Instant", false, "Case sensitive path"}, | |
| 409 {"http://foo.com/", false, "Non-exact path"}, | |
| 410 {"https://foo.com/", false, "Non-exact path"}, | |
| 411 {"https://foo.com/url?strk", false, "Non-extended mode"}, | |
| 412 {"https://foo.com/alt?strk", false, "Non-extended mode"}, | |
| 413 }; | |
| 414 | |
| 415 for (size_t i = 0; i < arraysize(kTestCases); ++i) { | |
| 416 const SearchTestCase& test = kTestCases[i]; | |
| 417 EXPECT_EQ(test.expected_result, | |
| 418 ShouldAssignURLToInstantRenderer(GURL(test.url), profile())) | |
| 419 << test.url << " " << test.comment; | |
| 420 } | |
| 421 } | |
| 422 | |
| 423 TEST_F(SearchTest, ShouldAssignURLToInstantRendererExtendedEnabled) { | |
| 424 EnableInstantExtendedAPIForTesting(); | |
| 425 | 316 |
| 426 const SearchTestCase kTestCases[] = { | 317 const SearchTestCase kTestCases[] = { |
| 427 {chrome::kChromeSearchLocalNtpUrl, true, ""}, | 318 {chrome::kChromeSearchLocalNtpUrl, true, ""}, |
| 428 {"https://foo.com/instant?strk", true, ""}, | 319 {"https://foo.com/instant?strk", true, ""}, |
| 429 {"https://foo.com/instant#strk", true, ""}, | 320 {"https://foo.com/instant#strk", true, ""}, |
| 430 {"https://foo.com/instant?strk=0", true, ""}, | 321 {"https://foo.com/instant?strk=0", true, ""}, |
| 431 {"https://foo.com/url?strk", true, ""}, | 322 {"https://foo.com/url?strk", true, ""}, |
| 432 {"https://foo.com/alt?strk", true, ""}, | 323 {"https://foo.com/alt?strk", true, ""}, |
| 433 {"http://foo.com/instant", false, "Non-HTTPS"}, | 324 {"http://foo.com/instant", false, "Non-HTTPS"}, |
| 434 {"http://foo.com/instant?strk", false, "Non-HTTPS"}, | 325 {"http://foo.com/instant?strk", false, "Non-HTTPS"}, |
| 435 {"http://foo.com/instant?strk=1", false, "Non-HTTPS"}, | 326 {"http://foo.com/instant?strk=1", false, "Non-HTTPS"}, |
| 436 {"https://foo.com/instant", false, "No search terms replacement"}, | 327 {"https://foo.com/instant", false, "No search terms replacement"}, |
| 437 {"https://foo.com/?strk", false, "Non-exact path"}, | 328 {"https://foo.com/?strk", false, "Non-exact path"}, |
| 438 }; | 329 }; |
| 439 | 330 |
| 440 for (size_t i = 0; i < arraysize(kTestCases); ++i) { | 331 for (size_t i = 0; i < arraysize(kTestCases); ++i) { |
| 441 const SearchTestCase& test = kTestCases[i]; | 332 const SearchTestCase& test = kTestCases[i]; |
| 442 EXPECT_EQ(test.expected_result, | 333 EXPECT_EQ(test.expected_result, |
| 443 ShouldAssignURLToInstantRenderer(GURL(test.url), profile())) | 334 ShouldAssignURLToInstantRenderer(GURL(test.url), profile())) |
| 444 << test.url << " " << test.comment; | 335 << test.url << " " << test.comment; |
| 445 } | 336 } |
| 446 } | 337 } |
| 447 | 338 |
| 448 TEST_F(SearchTest, ShouldAssignURLToInstantRendererExtendedEnabledNotOnSRP) { | 339 TEST_F(SearchTest, ShouldAssignURLToInstantRenderer) { |
| 449 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( | |
| 450 "InstantExtended", "Group1 espv:2 suppress_on_srp:1")); | |
| 451 | |
| 452 const SearchTestCase kTestCases[] = { | 340 const SearchTestCase kTestCases[] = { |
| 453 {chrome::kChromeSearchLocalNtpUrl, true, ""}, | 341 {chrome::kChromeSearchLocalNtpUrl, true, ""}, |
| 454 {"https://foo.com/instant?strk", true, ""}, | 342 {"https://foo.com/instant?strk", true, ""}, |
| 455 {"https://foo.com/instant#strk", true, ""}, | 343 {"https://foo.com/instant#strk", true, ""}, |
| 456 {"https://foo.com/instant?strk=0", true, ""}, | 344 {"https://foo.com/instant?strk=0", true, ""}, |
| 457 {"https://foo.com/url?strk", false, "Disabled on SRP"}, | 345 {"https://foo.com/url?strk", false, "Disabled on SRP"}, |
| 458 {"https://foo.com/alt?strk", false, "Disabled ON SRP"}, | 346 {"https://foo.com/alt?strk", false, "Disabled ON SRP"}, |
| 459 {"http://foo.com/instant", false, "Non-HTTPS"}, | 347 {"http://foo.com/instant", false, "Non-HTTPS"}, |
| 460 {"http://foo.com/instant?strk", false, "Non-HTTPS"}, | 348 {"http://foo.com/instant?strk", false, "Non-HTTPS"}, |
| 461 {"http://foo.com/instant?strk=1", false, "Non-HTTPS"}, | 349 {"http://foo.com/instant?strk=1", false, "Non-HTTPS"}, |
| 462 {"https://foo.com/instant", false, "No search terms replacement"}, | 350 {"https://foo.com/instant", false, "No search terms replacement"}, |
| 463 {"https://foo.com/?strk", false, "Non-exact path"}, | 351 {"https://foo.com/?strk", false, "Non-exact path"}, |
| 464 }; | 352 }; |
| 465 | 353 |
| 466 for (size_t i = 0; i < arraysize(kTestCases); ++i) { | 354 for (size_t i = 0; i < arraysize(kTestCases); ++i) { |
| 467 const SearchTestCase& test = kTestCases[i]; | 355 const SearchTestCase& test = kTestCases[i]; |
| 468 EXPECT_EQ(test.expected_result, | 356 EXPECT_EQ(test.expected_result, |
| 469 ShouldAssignURLToInstantRenderer(GURL(test.url), profile())) | 357 ShouldAssignURLToInstantRenderer(GURL(test.url), profile())) |
| 470 << test.url << " " << test.comment; | 358 << test.url << " " << test.comment; |
| 471 } | 359 } |
| 472 } | 360 } |
| 473 | 361 |
| 474 TEST_F(SearchTest, ShouldUseProcessPerSiteForInstantURL) { | 362 TEST_F(SearchTest, ShouldUseProcessPerSiteForInstantURL) { |
| 475 EnableInstantExtendedAPIForTesting(); | |
| 476 | |
| 477 const SearchTestCase kTestCases[] = { | 363 const SearchTestCase kTestCases[] = { |
| 478 {"chrome-search://local-ntp", true, "Local NTP"}, | 364 {"chrome-search://local-ntp", true, "Local NTP"}, |
| 479 {"chrome-search://online-ntp", true, "Online NTP"}, | 365 {"chrome-search://online-ntp", true, "Online NTP"}, |
| 480 {"invalid-scheme://local-ntp", false, "Invalid Local NTP URL"}, | 366 {"invalid-scheme://local-ntp", false, "Invalid Local NTP URL"}, |
| 481 {"invalid-scheme://online-ntp", false, "Invalid Online NTP URL"}, | 367 {"invalid-scheme://online-ntp", false, "Invalid Online NTP URL"}, |
| 482 {"chrome-search://foo.com", false, "Search result page"}, | 368 {"chrome-search://foo.com", false, "Search result page"}, |
| 483 {"https://foo.com/instant?strk", false, ""}, | 369 {"https://foo.com/instant?strk", false, ""}, |
| 484 {"https://foo.com/instant#strk", false, ""}, | 370 {"https://foo.com/instant#strk", false, ""}, |
| 485 {"https://foo.com/instant?strk=0", false, ""}, | 371 {"https://foo.com/instant?strk=0", false, ""}, |
| 486 {"https://foo.com/url?strk", false, ""}, | 372 {"https://foo.com/url?strk", false, ""}, |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 529 "https://foo.com/url?strk", true, true }, | 415 "https://foo.com/url?strk", true, true }, |
| 530 {"SRP -> Regular", | 416 {"SRP -> Regular", |
| 531 "https://foo.com/url?strk", true, | 417 "https://foo.com/url?strk", true, |
| 532 "https://foo.com/other", false, false }, | 418 "https://foo.com/other", false, false }, |
| 533 {"Regular -> SRP", | 419 {"Regular -> SRP", |
| 534 "https://foo.com/other", false, | 420 "https://foo.com/other", false, |
| 535 "https://foo.com/url?strk", true, false }, | 421 "https://foo.com/url?strk", true, false }, |
| 536 }; | 422 }; |
| 537 | 423 |
| 538 TEST_F(SearchTest, ProcessIsolation) { | 424 TEST_F(SearchTest, ProcessIsolation) { |
| 539 EnableInstantExtendedAPIForTesting(); | 425 EnableQueryExtractionForTesting(); |
| 540 | 426 |
| 541 for (size_t i = 0; i < arraysize(kProcessIsolationTestCases); ++i) { | 427 for (size_t i = 0; i < arraysize(kProcessIsolationTestCases); ++i) { |
| 542 const ProcessIsolationTestCase& test = kProcessIsolationTestCases[i]; | 428 const ProcessIsolationTestCase& test = kProcessIsolationTestCases[i]; |
| 543 AddTab(browser(), GURL("chrome://blank")); | 429 AddTab(browser(), GURL("chrome://blank")); |
| 544 const content::WebContents* contents = | 430 const content::WebContents* contents = |
| 545 browser()->tab_strip_model()->GetActiveWebContents(); | 431 browser()->tab_strip_model()->GetActiveWebContents(); |
| 546 | 432 |
| 547 // Navigate to start URL. | 433 // Navigate to start URL. |
| 548 NavigateAndCommitActiveTab(GURL(test.start_url)); | 434 NavigateAndCommitActiveTab(GURL(test.start_url)); |
| 549 EXPECT_EQ(test.start_in_instant_process, InInstantProcess(contents)) | 435 EXPECT_EQ(test.start_in_instant_process, InInstantProcess(contents)) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 568 EXPECT_EQ(test.same_site_instance, | 454 EXPECT_EQ(test.same_site_instance, |
| 569 start_rvh == contents->GetRenderViewHost()) | 455 start_rvh == contents->GetRenderViewHost()) |
| 570 << test.description; | 456 << test.description; |
| 571 EXPECT_EQ(test.same_site_instance, | 457 EXPECT_EQ(test.same_site_instance, |
| 572 start_rph == contents->GetRenderProcessHost()) | 458 start_rph == contents->GetRenderProcessHost()) |
| 573 << test.description; | 459 << test.description; |
| 574 } | 460 } |
| 575 } | 461 } |
| 576 | 462 |
| 577 TEST_F(SearchTest, ProcessIsolation_RendererInitiated) { | 463 TEST_F(SearchTest, ProcessIsolation_RendererInitiated) { |
| 578 EnableInstantExtendedAPIForTesting(); | 464 EnableQueryExtractionForTesting(); |
| 579 | 465 |
| 580 for (size_t i = 0; i < arraysize(kProcessIsolationTestCases); ++i) { | 466 for (size_t i = 0; i < arraysize(kProcessIsolationTestCases); ++i) { |
| 581 const ProcessIsolationTestCase& test = kProcessIsolationTestCases[i]; | 467 const ProcessIsolationTestCase& test = kProcessIsolationTestCases[i]; |
| 582 AddTab(browser(), GURL("chrome://blank")); | 468 AddTab(browser(), GURL("chrome://blank")); |
| 583 content::WebContents* contents = | 469 content::WebContents* contents = |
| 584 browser()->tab_strip_model()->GetActiveWebContents(); | 470 browser()->tab_strip_model()->GetActiveWebContents(); |
| 585 | 471 |
| 586 // Navigate to start URL. | 472 // Navigate to start URL. |
| 587 NavigateAndCommitActiveTab(GURL(test.start_url)); | 473 NavigateAndCommitActiveTab(GURL(test.start_url)); |
| 588 EXPECT_EQ(test.start_in_instant_process, InInstantProcess(contents)) | 474 EXPECT_EQ(test.start_in_instant_process, InInstantProcess(contents)) |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 633 {"https://foo.com/url?strk&bar=abc", false, "Has query terms"}, | 519 {"https://foo.com/url?strk&bar=abc", false, "Has query terms"}, |
| 634 {"http://foo.com/instant?strk=1", false, "Insecure URL"}, | 520 {"http://foo.com/instant?strk=1", false, "Insecure URL"}, |
| 635 {"https://foo.com/instant", false, "No search term replacement"}, | 521 {"https://foo.com/instant", false, "No search term replacement"}, |
| 636 {"chrome://blank/", false, "Chrome scheme"}, | 522 {"chrome://blank/", false, "Chrome scheme"}, |
| 637 {"chrome-search://foo", false, "Chrome-search scheme"}, | 523 {"chrome-search://foo", false, "Chrome-search scheme"}, |
| 638 {chrome::kChromeSearchLocalNtpUrl, true, "Local new tab page"}, | 524 {chrome::kChromeSearchLocalNtpUrl, true, "Local new tab page"}, |
| 639 {"https://bar.com/instant?strk=1", false, "Random non-search page"}, | 525 {"https://bar.com/instant?strk=1", false, "Random non-search page"}, |
| 640 }; | 526 }; |
| 641 | 527 |
| 642 TEST_F(SearchTest, InstantNTPExtendedEnabled) { | 528 TEST_F(SearchTest, InstantNTPExtendedEnabled) { |
| 643 EnableInstantExtendedAPIForTesting(); | 529 EnableQueryExtractionForTesting(); |
| 644 AddTab(browser(), GURL("chrome://blank")); | 530 AddTab(browser(), GURL("chrome://blank")); |
| 645 for (size_t i = 0; i < arraysize(kInstantNTPTestCases); ++i) { | 531 for (size_t i = 0; i < arraysize(kInstantNTPTestCases); ++i) { |
| 646 const SearchTestCase& test = kInstantNTPTestCases[i]; | 532 const SearchTestCase& test = kInstantNTPTestCases[i]; |
| 647 NavigateAndCommitActiveTab(GURL(test.url)); | 533 NavigateAndCommitActiveTab(GURL(test.url)); |
| 648 const content::WebContents* contents = | 534 const content::WebContents* contents = |
| 649 browser()->tab_strip_model()->GetWebContentsAt(0); | 535 browser()->tab_strip_model()->GetWebContentsAt(0); |
| 650 EXPECT_EQ(test.expected_result, IsInstantNTP(contents)) | 536 EXPECT_EQ(test.expected_result, IsInstantNTP(contents)) |
| 651 << test.url << " " << test.comment; | 537 << test.url << " " << test.comment; |
| 652 } | 538 } |
| 653 } | 539 } |
| 654 | 540 |
| 655 TEST_F(SearchTest, InstantNTPExtendedDisabled) { | |
| 656 AddTab(browser(), GURL("chrome://blank")); | |
| 657 for (size_t i = 0; i < arraysize(kInstantNTPTestCases); ++i) { | |
| 658 const SearchTestCase& test = kInstantNTPTestCases[i]; | |
| 659 NavigateAndCommitActiveTab(GURL(test.url)); | |
| 660 const content::WebContents* contents = | |
| 661 browser()->tab_strip_model()->GetWebContentsAt(0); | |
| 662 EXPECT_FALSE(IsInstantNTP(contents)) << test.url << " " << test.comment; | |
| 663 } | |
| 664 } | |
| 665 | |
| 666 TEST_F(SearchTest, InstantNTPCustomNavigationEntry) { | 541 TEST_F(SearchTest, InstantNTPCustomNavigationEntry) { |
| 667 EnableInstantExtendedAPIForTesting(); | 542 EnableQueryExtractionForTesting(); |
| 668 AddTab(browser(), GURL("chrome://blank")); | 543 AddTab(browser(), GURL("chrome://blank")); |
| 669 for (size_t i = 0; i < arraysize(kInstantNTPTestCases); ++i) { | 544 for (size_t i = 0; i < arraysize(kInstantNTPTestCases); ++i) { |
| 670 const SearchTestCase& test = kInstantNTPTestCases[i]; | 545 const SearchTestCase& test = kInstantNTPTestCases[i]; |
| 671 NavigateAndCommitActiveTab(GURL(test.url)); | 546 NavigateAndCommitActiveTab(GURL(test.url)); |
| 672 content::WebContents* contents = | 547 content::WebContents* contents = |
| 673 browser()->tab_strip_model()->GetWebContentsAt(0); | 548 browser()->tab_strip_model()->GetWebContentsAt(0); |
| 674 content::NavigationController& controller = contents->GetController(); | 549 content::NavigationController& controller = contents->GetController(); |
| 675 controller.SetTransientEntry( | 550 controller.SetTransientEntry( |
| 676 controller.CreateNavigationEntry(GURL("chrome://blank"), | 551 controller.CreateNavigationEntry(GURL("chrome://blank"), |
| 677 content::Referrer(), | 552 content::Referrer(), |
| 678 content::PAGE_TRANSITION_LINK, | 553 content::PAGE_TRANSITION_LINK, |
| 679 false, | 554 false, |
| 680 std::string(), | 555 std::string(), |
| 681 contents->GetBrowserContext())); | 556 contents->GetBrowserContext())); |
| 682 // The active entry is chrome://blank and not an NTP. | 557 // The active entry is chrome://blank and not an NTP. |
| 683 EXPECT_FALSE(IsInstantNTP(contents)); | 558 EXPECT_FALSE(IsInstantNTP(contents)); |
| 684 EXPECT_EQ(test.expected_result, | 559 EXPECT_EQ(test.expected_result, |
| 685 NavEntryIsInstantNTP(contents, | 560 NavEntryIsInstantNTP(contents, |
| 686 controller.GetLastCommittedEntry())) | 561 controller.GetLastCommittedEntry())) |
| 687 << test.url << " " << test.comment; | 562 << test.url << " " << test.comment; |
| 688 } | 563 } |
| 689 } | 564 } |
| 690 | 565 |
| 691 TEST_F(SearchTest, InstantCacheableNTPNavigationEntry) { | 566 TEST_F(SearchTest, InstantCacheableNTPNavigationEntry) { |
| 692 EnableInstantExtendedAPIForTesting(); | |
| 693 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended", | 567 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended", |
| 694 "Group1 use_cacheable_ntp:1")); | 568 "Group1 use_cacheable_ntp:1")); |
| 695 | 569 |
| 696 AddTab(browser(), GURL("chrome://blank")); | 570 AddTab(browser(), GURL("chrome://blank")); |
| 697 content::WebContents* contents = | 571 content::WebContents* contents = |
| 698 browser()->tab_strip_model()->GetWebContentsAt(0); | 572 browser()->tab_strip_model()->GetWebContentsAt(0); |
| 699 content::NavigationController& controller = contents->GetController(); | 573 content::NavigationController& controller = contents->GetController(); |
| 700 // Local NTP. | 574 // Local NTP. |
| 701 NavigateAndCommitActiveTab(GURL(chrome::kChromeSearchLocalNtpUrl)); | 575 NavigateAndCommitActiveTab(GURL(chrome::kChromeSearchLocalNtpUrl)); |
| 702 EXPECT_TRUE(NavEntryIsInstantNTP(contents, | 576 EXPECT_TRUE(NavEntryIsInstantNTP(contents, |
| 703 controller.GetLastCommittedEntry())); | 577 controller.GetLastCommittedEntry())); |
| 704 // Instant page is not cacheable NTP. | 578 // Instant page is not cacheable NTP. |
| 705 NavigateAndCommitActiveTab(GetInstantURL(profile(), kDisableStartMargin)); | 579 NavigateAndCommitActiveTab(GetInstantURL(profile(), kDisableStartMargin)); |
| 706 EXPECT_FALSE(NavEntryIsInstantNTP(contents, | 580 EXPECT_FALSE(NavEntryIsInstantNTP(contents, |
| 707 controller.GetLastCommittedEntry())); | 581 controller.GetLastCommittedEntry())); |
| 708 // Test Cacheable NTP | 582 // Test Cacheable NTP |
| 709 NavigateAndCommitActiveTab(chrome::GetNewTabPageURL(profile())); | 583 NavigateAndCommitActiveTab(chrome::GetNewTabPageURL(profile())); |
| 710 EXPECT_TRUE(NavEntryIsInstantNTP(contents, | 584 EXPECT_TRUE(NavEntryIsInstantNTP(contents, |
| 711 controller.GetLastCommittedEntry())); | 585 controller.GetLastCommittedEntry())); |
| 712 } | 586 } |
| 713 | 587 |
| 714 TEST_F(SearchTest, UseLocalNTPInIncognito) { | 588 TEST_F(SearchTest, UseLocalNTPInIncognito) { |
| 715 EnableInstantExtendedAPIForTesting(); | |
| 716 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended", | 589 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended", |
| 717 "Group1 use_cacheable_ntp:1")); | 590 "Group1 use_cacheable_ntp:1")); |
| 718 EXPECT_EQ(GURL(), chrome::GetNewTabPageURL( | 591 EXPECT_EQ(GURL(), chrome::GetNewTabPageURL( |
| 719 profile()->GetOffTheRecordProfile())); | 592 profile()->GetOffTheRecordProfile())); |
| 720 } | 593 } |
| 721 | 594 |
| 722 TEST_F(SearchTest, GetInstantURLExtendedEnabled) { | 595 TEST_F(SearchTest, GetInstantURL) { |
| 723 // Instant is disabled, so no Instant URL. | 596 // No Instant URL because "strk" is missing. |
| 724 EXPECT_EQ(GURL(), GetInstantURL(profile(), kDisableStartMargin)); | |
| 725 | |
| 726 // Enable Instant. Still no Instant URL because "strk" is missing. | |
| 727 EnableInstantExtendedAPIForTesting(); | |
| 728 SetDefaultInstantTemplateUrl(false); | 597 SetDefaultInstantTemplateUrl(false); |
| 729 EXPECT_EQ(GURL(), GetInstantURL(profile(), kDisableStartMargin)); | 598 EXPECT_EQ(GURL(), GetInstantURL(profile(), kDisableStartMargin)); |
| 730 | 599 |
| 731 // Set an Instant URL with a valid search terms replacement key. | 600 // Set an Instant URL with a valid search terms replacement key. |
| 732 SetDefaultInstantTemplateUrl(true); | 601 SetDefaultInstantTemplateUrl(true); |
| 733 | 602 |
| 734 // Now there should be a valid Instant URL. Note the HTTPS "upgrade". | 603 // Now there should be a valid Instant URL. Note the HTTPS "upgrade". |
| 735 EXPECT_EQ(GURL("https://foo.com/instant?foo=foo#foo=foo&strk"), | 604 EXPECT_EQ(GURL("https://foo.com/instant?foo=foo#foo=foo&strk"), |
| 736 GetInstantURL(profile(), kDisableStartMargin)); | 605 GetInstantURL(profile(), kDisableStartMargin)); |
| 737 | 606 |
| 738 // Enable suggest. No difference. | 607 // Enable suggest. No difference. |
| 739 profile()->GetPrefs()->SetBoolean(prefs::kSearchSuggestEnabled, true); | 608 profile()->GetPrefs()->SetBoolean(prefs::kSearchSuggestEnabled, true); |
| 740 EXPECT_EQ(GURL("https://foo.com/instant?foo=foo#foo=foo&strk"), | 609 EXPECT_EQ(GURL("https://foo.com/instant?foo=foo#foo=foo&strk"), |
| 741 GetInstantURL(profile(), kDisableStartMargin)); | 610 GetInstantURL(profile(), kDisableStartMargin)); |
| 742 | 611 |
| 743 // Disable suggest. No Instant URL. | 612 // Disable suggest. No Instant URL. |
| 744 profile()->GetPrefs()->SetBoolean(prefs::kSearchSuggestEnabled, false); | 613 profile()->GetPrefs()->SetBoolean(prefs::kSearchSuggestEnabled, false); |
| 745 EXPECT_EQ(GURL(), GetInstantURL(profile(), kDisableStartMargin)); | 614 EXPECT_EQ(GURL(), GetInstantURL(profile(), kDisableStartMargin)); |
| 746 } | 615 } |
| 747 | 616 |
| 748 TEST_F(SearchTest, StartMarginCGI) { | 617 TEST_F(SearchTest, StartMarginCGI) { |
| 749 // Instant is disabled, so no Instant URL. | 618 // No margin. |
| 750 EXPECT_EQ(GURL(), GetInstantURL(profile(), kDisableStartMargin)); | |
| 751 | |
| 752 // Enable Instant. No margin. | |
| 753 EnableInstantExtendedAPIForTesting(); | |
| 754 profile()->GetPrefs()->SetBoolean(prefs::kSearchSuggestEnabled, true); | 619 profile()->GetPrefs()->SetBoolean(prefs::kSearchSuggestEnabled, true); |
| 755 | |
| 756 EXPECT_EQ(GURL("https://foo.com/instant?foo=foo#foo=foo&strk"), | 620 EXPECT_EQ(GURL("https://foo.com/instant?foo=foo#foo=foo&strk"), |
| 757 GetInstantURL(profile(), kDisableStartMargin)); | 621 GetInstantURL(profile(), kDisableStartMargin)); |
| 758 | 622 |
| 759 // With start margin. | 623 // With start margin. |
| 760 EXPECT_EQ(GURL("https://foo.com/instant?es_sm=10&foo=foo#foo=foo&strk"), | 624 EXPECT_EQ(GURL("https://foo.com/instant?es_sm=10&foo=foo#foo=foo&strk"), |
| 761 GetInstantURL(profile(), 10)); | 625 GetInstantURL(profile(), 10)); |
| 762 } | 626 } |
| 763 | 627 |
| 764 TEST_F(SearchTest, CommandLineOverrides) { | 628 TEST_F(SearchTest, CommandLineOverrides) { |
| 765 EnableInstantExtendedAPIForTesting(); | 629 EnableQueryExtractionForTesting(); |
| 766 | 630 |
| 767 GURL local_instant_url(GetLocalInstantURL(profile())); | 631 GURL local_instant_url(GetLocalInstantURL(profile())); |
| 768 EXPECT_EQ(GURL(chrome::kChromeSearchLocalNtpUrl), local_instant_url); | 632 EXPECT_EQ(GURL(chrome::kChromeSearchLocalNtpUrl), local_instant_url); |
| 769 | 633 |
| 770 TemplateURLService* template_url_service = | 634 TemplateURLService* template_url_service = |
| 771 TemplateURLServiceFactory::GetForProfile(profile()); | 635 TemplateURLServiceFactory::GetForProfile(profile()); |
| 772 TemplateURLData data; | 636 TemplateURLData data; |
| 773 data.SetURL("{google:baseURL}search?q={searchTerms}"); | 637 data.SetURL("{google:baseURL}search?q={searchTerms}"); |
| 774 data.instant_url = "{google:baseURL}webhp?strk"; | 638 data.instant_url = "{google:baseURL}webhp?strk"; |
| 775 data.search_terms_replacement_key = "strk"; | 639 data.search_terms_replacement_key = "strk"; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 803 // If we specify extra search query params, they should be inserted into the | 667 // If we specify extra search query params, they should be inserted into the |
| 804 // query portion of the instant URL. | 668 // query portion of the instant URL. |
| 805 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 669 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 806 switches::kExtraSearchQueryParams, "a=b"); | 670 switches::kExtraSearchQueryParams, "a=b"); |
| 807 instant_url = GetInstantURL(profile(), kDisableStartMargin); | 671 instant_url = GetInstantURL(profile(), kDisableStartMargin); |
| 808 ASSERT_TRUE(instant_url.is_valid()); | 672 ASSERT_TRUE(instant_url.is_valid()); |
| 809 EXPECT_EQ("http://www.bar.com/webhp?a=b&strk", instant_url.spec()); | 673 EXPECT_EQ("http://www.bar.com/webhp?a=b&strk", instant_url.spec()); |
| 810 } | 674 } |
| 811 | 675 |
| 812 TEST_F(SearchTest, ShouldShowInstantNTP_Default) { | 676 TEST_F(SearchTest, ShouldShowInstantNTP_Default) { |
| 813 EnableInstantExtendedAPIForTesting(); | |
| 814 EXPECT_TRUE(ShouldShowInstantNTP()); | 677 EXPECT_TRUE(ShouldShowInstantNTP()); |
| 815 } | 678 } |
| 816 | 679 |
| 817 TEST_F(SearchTest, ShouldShowInstantNTP_DisabledViaFinch) { | 680 TEST_F(SearchTest, ShouldShowInstantNTP_DisabledViaFinch) { |
| 818 EnableInstantExtendedAPIForTesting(); | |
| 819 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended", | 681 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended", |
| 820 "Group1 show_ntp:0")); | 682 "Group1 show_ntp:0")); |
| 821 EXPECT_FALSE(ShouldShowInstantNTP()); | 683 EXPECT_FALSE(ShouldShowInstantNTP()); |
| 822 } | 684 } |
| 823 | 685 |
| 824 TEST_F(SearchTest, ShouldShowInstantNTP_DisabledByUseCacheableNTPFinchFlag) { | 686 TEST_F(SearchTest, ShouldShowInstantNTP_DisabledByUseCacheableNTPFinchFlag) { |
| 825 EnableInstantExtendedAPIForTesting(); | |
| 826 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended", | 687 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended", |
| 827 "Group1 use_cacheable_ntp:1")); | 688 "Group1 use_cacheable_ntp:1")); |
| 828 EXPECT_FALSE(ShouldShowInstantNTP()); | 689 EXPECT_FALSE(ShouldShowInstantNTP()); |
| 829 } | 690 } |
| 830 | 691 |
| 831 TEST_F(SearchTest, ShouldUseCacheableNTP_Default) { | 692 TEST_F(SearchTest, ShouldUseCacheableNTP_Default) { |
| 832 EnableInstantExtendedAPIForTesting(); | |
| 833 EXPECT_FALSE(ShouldUseCacheableNTP()); | 693 EXPECT_FALSE(ShouldUseCacheableNTP()); |
| 834 } | 694 } |
| 835 | 695 |
| 836 TEST_F(SearchTest, ShouldUseCacheableNTP_EnabledViaFinch) { | 696 TEST_F(SearchTest, ShouldUseCacheableNTP_EnabledViaFinch) { |
| 837 EnableInstantExtendedAPIForTesting(); | |
| 838 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended", | 697 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended", |
| 839 "Group1 use_cacheable_ntp:1")); | 698 "Group1 use_cacheable_ntp:1")); |
| 840 EXPECT_TRUE(ShouldUseCacheableNTP()); | 699 EXPECT_TRUE(ShouldUseCacheableNTP()); |
| 841 } | 700 } |
| 842 | 701 |
| 843 TEST_F(SearchTest, ShouldUseCacheableNTP_EnabledViaCommandLine) { | 702 TEST_F(SearchTest, ShouldUseCacheableNTP_EnabledViaCommandLine) { |
| 844 EnableInstantExtendedAPIForTesting(); | |
| 845 CommandLine::ForCurrentProcess()-> | 703 CommandLine::ForCurrentProcess()-> |
| 846 AppendSwitch(switches::kUseCacheableNewTabPage); | 704 AppendSwitch(switches::kUseCacheableNewTabPage); |
| 847 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended", | 705 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended", |
| 848 "Group1 use_cacheable_ntp:0")); | 706 "Group1 use_cacheable_ntp:0")); |
| 849 EXPECT_TRUE(ShouldUseCacheableNTP()); | 707 EXPECT_TRUE(ShouldUseCacheableNTP()); |
| 850 } | 708 } |
| 851 | 709 |
| 852 TEST_F(SearchTest, IsNTPURL) { | 710 TEST_F(SearchTest, IsNTPURL) { |
| 853 GURL invalid_url; | 711 GURL invalid_url; |
| 854 GURL ntp_url(chrome::kChromeUINewTabURL); | 712 GURL ntp_url(chrome::kChromeUINewTabURL); |
| 855 GURL local_ntp_url(GetLocalInstantURL(profile())); | 713 GURL local_ntp_url(GetLocalInstantURL(profile())); |
| 856 | 714 |
| 857 EXPECT_FALSE(chrome::IsNTPURL(invalid_url, profile())); | 715 EXPECT_FALSE(chrome::IsNTPURL(invalid_url, profile())); |
| 858 EXPECT_FALSE(chrome::IsNTPURL(local_ntp_url, profile())); | |
| 859 | 716 |
| 860 EXPECT_TRUE(chrome::IsNTPURL(ntp_url, NULL)); | 717 EnableQueryExtractionForTesting(); |
| 861 EXPECT_FALSE(chrome::IsNTPURL(local_ntp_url, NULL)); | |
| 862 | |
| 863 // Enable Instant. No margin. | |
| 864 EnableInstantExtendedAPIForTesting(); | |
| 865 profile()->GetPrefs()->SetBoolean(prefs::kSearchSuggestEnabled, true); | 718 profile()->GetPrefs()->SetBoolean(prefs::kSearchSuggestEnabled, true); |
| 866 GURL remote_ntp_url(GetInstantURL(profile(), kDisableStartMargin)); | 719 GURL remote_ntp_url(GetInstantURL(profile(), kDisableStartMargin)); |
| 867 GURL search_url_with_search_terms("https://foo.com/url?strk&bar=abc"); | 720 GURL search_url_with_search_terms("https://foo.com/url?strk&bar=abc"); |
| 868 GURL search_url_without_search_terms("https://foo.com/url?strk&bar"); | 721 GURL search_url_without_search_terms("https://foo.com/url?strk&bar"); |
| 869 | 722 |
| 870 EXPECT_FALSE(chrome::IsNTPURL(ntp_url, profile())); | 723 EXPECT_FALSE(chrome::IsNTPURL(ntp_url, profile())); |
| 871 EXPECT_TRUE(chrome::IsNTPURL(local_ntp_url, profile())); | 724 EXPECT_TRUE(chrome::IsNTPURL(local_ntp_url, profile())); |
| 872 EXPECT_TRUE(chrome::IsNTPURL(remote_ntp_url, profile())); | 725 EXPECT_TRUE(chrome::IsNTPURL(remote_ntp_url, profile())); |
| 873 EXPECT_FALSE(chrome::IsNTPURL(search_url_with_search_terms, profile())); | 726 EXPECT_FALSE(chrome::IsNTPURL(search_url_with_search_terms, profile())); |
| 874 EXPECT_TRUE(chrome::IsNTPURL(search_url_without_search_terms, profile())); | 727 EXPECT_TRUE(chrome::IsNTPURL(search_url_without_search_terms, profile())); |
| 875 | 728 |
| 876 EXPECT_FALSE(chrome::IsNTPURL(ntp_url, NULL)); | 729 EXPECT_FALSE(chrome::IsNTPURL(ntp_url, NULL)); |
| 877 EXPECT_FALSE(chrome::IsNTPURL(local_ntp_url, NULL)); | 730 EXPECT_FALSE(chrome::IsNTPURL(local_ntp_url, NULL)); |
| 878 EXPECT_FALSE(chrome::IsNTPURL(remote_ntp_url, NULL)); | 731 EXPECT_FALSE(chrome::IsNTPURL(remote_ntp_url, NULL)); |
| 879 EXPECT_FALSE(chrome::IsNTPURL(search_url_with_search_terms, NULL)); | 732 EXPECT_FALSE(chrome::IsNTPURL(search_url_with_search_terms, NULL)); |
| 880 EXPECT_FALSE(chrome::IsNTPURL(search_url_without_search_terms, NULL)); | 733 EXPECT_FALSE(chrome::IsNTPURL(search_url_without_search_terms, NULL)); |
| 881 } | 734 } |
| 882 | 735 |
| 883 } // namespace chrome | 736 } // namespace chrome |
| OLD | NEW |