Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(346)

Side by Side Diff: chrome/browser/autocomplete/search_provider_unittest.cc

Issue 471673002: Omnibox: Prevent Asynchronous Suggestions from Changing Default Match (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add clarifying comment Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 "chrome/browser/autocomplete/search_provider.h" 5 #include "chrome/browser/autocomplete/search_provider.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/metrics/field_trial.h" 10 #include "base/metrics/field_trial.h"
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 // Tell the SearchProvider the default suggest query is done. 430 // Tell the SearchProvider the default suggest query is done.
431 default_fetcher->set_response_code(200); 431 default_fetcher->set_response_code(200);
432 default_fetcher->delegate()->OnURLFetchComplete(default_fetcher); 432 default_fetcher->delegate()->OnURLFetchComplete(default_fetcher);
433 } 433 }
434 434
435 void SearchProviderTest::ForcedQueryTestHelper( 435 void SearchProviderTest::ForcedQueryTestHelper(
436 const std::string& input, 436 const std::string& input,
437 const std::string& json, 437 const std::string& json,
438 const std::string expected_matches[3], 438 const std::string expected_matches[3],
439 const std::string& error_description) { 439 const std::string& error_description) {
440 QueryForInput(ASCIIToUTF16(input), false, false); 440 // Send the query twice in order to bypass checks about whether a single
441 net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( 441 // new reply can change the inline autocompletion.
442 SearchProvider::kDefaultProviderURLFetcherID); 442 for (size_t i = 0; i < 2; i++) {
443 ASSERT_TRUE(fetcher); 443 QueryForInput(ASCIIToUTF16(input), false, false);
444 fetcher->set_response_code(200); 444 net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID(
445 fetcher->SetResponseString(json); 445 SearchProvider::kDefaultProviderURLFetcherID);
446 fetcher->delegate()->OnURLFetchComplete(fetcher); 446 ASSERT_TRUE(fetcher);
447 RunTillProviderDone(); 447 fetcher->set_response_code(200);
448 fetcher->SetResponseString(json);
449 fetcher->delegate()->OnURLFetchComplete(fetcher);
450 RunTillProviderDone();
451 }
448 452
449 const ACMatches& matches = provider_->matches(); 453 const ACMatches& matches = provider_->matches();
450 ASSERT_LE(matches.size(), 3u); 454 ASSERT_LE(matches.size(), 3u);
451 size_t i = 0; 455 size_t i = 0;
452 // Ensure that the returned matches equal the expectations. 456 // Ensure that the returned matches equal the expectations.
453 for (; i < matches.size(); ++i) { 457 for (; i < matches.size(); ++i) {
454 EXPECT_EQ(ASCIIToUTF16(expected_matches[i]), matches[i].contents) << 458 EXPECT_EQ(ASCIIToUTF16(expected_matches[i]), matches[i].contents) <<
455 error_description; 459 error_description;
456 } 460 }
457 // Ensure that no expected matches are missing. 461 // Ensure that no expected matches are missing.
(...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after
1119 fetcher->delegate()->OnURLFetchComplete(fetcher); 1123 fetcher->delegate()->OnURLFetchComplete(fetcher);
1120 fetcher = NULL; 1124 fetcher = NULL;
1121 1125
1122 // Run till the history results complete. 1126 // Run till the history results complete.
1123 RunTillProviderDone(); 1127 RunTillProviderDone();
1124 1128
1125 // Make sure the only match is 'a.com' and it doesn't have a template_url. 1129 // Make sure the only match is 'a.com' and it doesn't have a template_url.
1126 AutocompleteMatch nav_match; 1130 AutocompleteMatch nav_match;
1127 EXPECT_TRUE(FindMatchWithDestination(GURL("http://a.com"), &nav_match)); 1131 EXPECT_TRUE(FindMatchWithDestination(GURL("http://a.com"), &nav_match));
1128 EXPECT_TRUE(nav_match.keyword.empty()); 1132 EXPECT_TRUE(nav_match.keyword.empty());
1129 EXPECT_TRUE(nav_match.allowed_to_be_default_match); 1133 EXPECT_FALSE(nav_match.allowed_to_be_default_match);
1130 EXPECT_FALSE(FindMatchWithDestination(GURL("http://a.com/b"), &nav_match)); 1134 EXPECT_FALSE(FindMatchWithDestination(GURL("http://a.com/b"), &nav_match));
1131 } 1135 }
1132 1136
1133 // Verifies that the most relevant suggest results are added properly. 1137 // Verifies that the most relevant suggest results are added properly.
1134 TEST_F(SearchProviderTest, SuggestRelevance) { 1138 TEST_F(SearchProviderTest, SuggestRelevance) {
1135 QueryForInput(ASCIIToUTF16("a"), false, false); 1139 QueryForInput(ASCIIToUTF16("a"), false, false);
1136 1140
1137 // Make sure the default provider's suggest service was queried. 1141 // Make sure the default provider's suggest service was queried.
1138 net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( 1142 net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID(
1139 SearchProvider::kDefaultProviderURLFetcherID); 1143 SearchProvider::kDefaultProviderURLFetcherID);
(...skipping 12 matching lines...) Expand all
1152 AutocompleteMatch verbatim, match_a1, match_a2, match_a3, match_a4; 1156 AutocompleteMatch verbatim, match_a1, match_a2, match_a3, match_a4;
1153 EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a"), &verbatim)); 1157 EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a"), &verbatim));
1154 EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a1"), &match_a1)); 1158 EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a1"), &match_a1));
1155 EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a2"), &match_a2)); 1159 EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a2"), &match_a2));
1156 EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a3"), &match_a3)); 1160 EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a3"), &match_a3));
1157 EXPECT_FALSE(FindMatchWithContents(ASCIIToUTF16("a4"), &match_a4)); 1161 EXPECT_FALSE(FindMatchWithContents(ASCIIToUTF16("a4"), &match_a4));
1158 EXPECT_GT(verbatim.relevance, match_a1.relevance); 1162 EXPECT_GT(verbatim.relevance, match_a1.relevance);
1159 EXPECT_GT(match_a1.relevance, match_a2.relevance); 1163 EXPECT_GT(match_a1.relevance, match_a2.relevance);
1160 EXPECT_GT(match_a2.relevance, match_a3.relevance); 1164 EXPECT_GT(match_a2.relevance, match_a3.relevance);
1161 EXPECT_TRUE(verbatim.allowed_to_be_default_match); 1165 EXPECT_TRUE(verbatim.allowed_to_be_default_match);
1162 EXPECT_TRUE(match_a1.allowed_to_be_default_match); 1166 EXPECT_FALSE(match_a1.allowed_to_be_default_match);
1163 EXPECT_TRUE(match_a2.allowed_to_be_default_match); 1167 EXPECT_FALSE(match_a2.allowed_to_be_default_match);
1164 EXPECT_TRUE(match_a3.allowed_to_be_default_match); 1168 EXPECT_FALSE(match_a3.allowed_to_be_default_match);
1165 } 1169 }
1166 1170
1167 // Verifies that the default provider abandons suggested relevance scores 1171 // Verifies that the default provider abandons suggested relevance scores
1168 // when in keyword mode. This should happen regardless of whether the 1172 // when in keyword mode. This should happen regardless of whether the
1169 // keyword provider returns suggested relevance scores. 1173 // keyword provider returns suggested relevance scores.
1170 TEST_F(SearchProviderTest, DefaultProviderNoSuggestRelevanceInKeywordMode) { 1174 TEST_F(SearchProviderTest, DefaultProviderNoSuggestRelevanceInKeywordMode) {
1171 struct { 1175 struct {
1172 const std::string default_provider_json; 1176 const std::string default_provider_json;
1173 const std::string keyword_provider_json; 1177 const std::string keyword_provider_json;
1174 const std::string matches[5]; 1178 const std::string matches[5];
(...skipping 12 matching lines...) Expand all
1187 "{\"google:verbatimrelevance\":9700," 1191 "{\"google:verbatimrelevance\":9700,"
1188 "\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 1192 "\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"],"
1189 "\"google:suggestrelevance\":[9900, 9800]}]", 1193 "\"google:suggestrelevance\":[9900, 9800]}]",
1190 "[\"a\",[\"akeyword-query\"],[],[],{\"google:suggesttype\":[\"QUERY\"]," 1194 "[\"a\",[\"akeyword-query\"],[],[],{\"google:suggesttype\":[\"QUERY\"],"
1191 "\"google:verbatimrelevance\":9500," 1195 "\"google:verbatimrelevance\":9500,"
1192 "\"google:suggestrelevance\":[9600]}]", 1196 "\"google:suggestrelevance\":[9600]}]",
1193 { "akeyword-query", "a", "k a", "adefault.com", "k adefault-query" } } 1197 { "akeyword-query", "a", "k a", "adefault.com", "k adefault-query" } }
1194 }; 1198 };
1195 1199
1196 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 1200 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) {
1197 QueryForInput(ASCIIToUTF16("k a"), false, true); 1201 // Send the query twice in order to bypass checks about whether a single
1198 net::TestURLFetcher* default_fetcher = 1202 // new reply can change the inline autocompletion.
1199 test_factory_.GetFetcherByID( 1203 for (size_t j = 0; j < 2; j++) {
1200 SearchProvider::kDefaultProviderURLFetcherID); 1204 QueryForInput(ASCIIToUTF16("k a"), false, true);
1201 ASSERT_TRUE(default_fetcher); 1205 net::TestURLFetcher* default_fetcher =
1202 default_fetcher->set_response_code(200); 1206 test_factory_.GetFetcherByID(
1203 default_fetcher->SetResponseString(cases[i].default_provider_json); 1207 SearchProvider::kDefaultProviderURLFetcherID);
1204 default_fetcher->delegate()->OnURLFetchComplete(default_fetcher); 1208 ASSERT_TRUE(default_fetcher);
1205 net::TestURLFetcher* keyword_fetcher = 1209 default_fetcher->set_response_code(200);
1206 test_factory_.GetFetcherByID( 1210 default_fetcher->SetResponseString(cases[i].default_provider_json);
1207 SearchProvider::kKeywordProviderURLFetcherID); 1211 default_fetcher->delegate()->OnURLFetchComplete(default_fetcher);
1208 ASSERT_TRUE(keyword_fetcher); 1212 net::TestURLFetcher* keyword_fetcher =
1209 keyword_fetcher->set_response_code(200); 1213 test_factory_.GetFetcherByID(
1210 keyword_fetcher->SetResponseString(cases[i].keyword_provider_json); 1214 SearchProvider::kKeywordProviderURLFetcherID);
1211 keyword_fetcher->delegate()->OnURLFetchComplete(keyword_fetcher); 1215 ASSERT_TRUE(keyword_fetcher);
1212 RunTillProviderDone(); 1216 keyword_fetcher->set_response_code(200);
1217 keyword_fetcher->SetResponseString(cases[i].keyword_provider_json);
1218 keyword_fetcher->delegate()->OnURLFetchComplete(keyword_fetcher);
1219 RunTillProviderDone();
1220 }
1213 1221
1214 const std::string description = "for input with default_provider_json=" + 1222 const std::string description = "for input with default_provider_json=" +
1215 cases[i].default_provider_json + " and keyword_provider_json=" + 1223 cases[i].default_provider_json + " and keyword_provider_json=" +
1216 cases[i].keyword_provider_json; 1224 cases[i].keyword_provider_json;
1217 const ACMatches& matches = provider_->matches(); 1225 const ACMatches& matches = provider_->matches();
1218 ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].matches)); 1226 ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].matches));
1219 size_t j = 0; 1227 size_t j = 0;
1220 // Ensure that the returned matches equal the expectations. 1228 // Ensure that the returned matches equal the expectations.
1221 for (; j < matches.size(); ++j) { 1229 for (; j < matches.size(); ++j) {
1222 EXPECT_EQ(ASCIIToUTF16(cases[i].matches[j]), matches[j].contents) << 1230 EXPECT_EQ(ASCIIToUTF16(cases[i].matches[j]), matches[j].contents) <<
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1260 { "[\"a\",[\"http://b.com\", \"http://c.com\"],[],[]," 1268 { "[\"a\",[\"http://b.com\", \"http://c.com\"],[],[],"
1261 "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]}]", 1269 "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]}]",
1262 { { "a", true }, { "b.com", false }, kEmptyMatch, kEmptyMatch, 1270 { { "a", true }, { "b.com", false }, kEmptyMatch, kEmptyMatch,
1263 kEmptyMatch, kEmptyMatch }, 1271 kEmptyMatch, kEmptyMatch },
1264 std::string() }, 1272 std::string() },
1265 1273
1266 // Ensure that verbatimrelevance scores reorder or suppress verbatim. 1274 // Ensure that verbatimrelevance scores reorder or suppress verbatim.
1267 // Negative values will have no effect; the calculated value will be used. 1275 // Negative values will have no effect; the calculated value will be used.
1268 { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9999," 1276 { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9999,"
1269 "\"google:suggestrelevance\":[9998]}]", 1277 "\"google:suggestrelevance\":[9998]}]",
1270 { { "a", true}, { "a1", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, 1278 { { "a", true}, { "a1", false }, kEmptyMatch, kEmptyMatch, kEmptyMatch,
1271 kEmptyMatch }, 1279 kEmptyMatch },
1272 std::string() }, 1280 std::string() },
1273 { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9998," 1281 { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9998,"
1274 "\"google:suggestrelevance\":[9999]}]", 1282 "\"google:suggestrelevance\":[9999]}]",
1275 { { "a1", true }, { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, 1283 { { "a1", true }, { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch,
1276 kEmptyMatch }, 1284 kEmptyMatch },
1277 "1" }, 1285 "1" },
1278 { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0," 1286 { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0,"
1279 "\"google:suggestrelevance\":[9999]}]", 1287 "\"google:suggestrelevance\":[9999]}]",
1280 { { "a1", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch, 1288 { { "a1", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch,
1281 kEmptyMatch }, 1289 kEmptyMatch },
1282 "1" }, 1290 "1" },
1283 { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":-1," 1291 { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":-1,"
1284 "\"google:suggestrelevance\":[9999]}]", 1292 "\"google:suggestrelevance\":[9999]}]",
1285 { { "a1", true }, { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, 1293 { { "a1", true }, { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch,
1286 kEmptyMatch }, 1294 kEmptyMatch },
1287 "1" }, 1295 "1" },
1288 { "[\"a\",[\"http://a.com\"],[],[]," 1296 { "[\"a\",[\"http://a.com\"],[],[],"
1289 "{\"google:suggesttype\":[\"NAVIGATION\"]," 1297 "{\"google:suggesttype\":[\"NAVIGATION\"],"
1290 "\"google:verbatimrelevance\":9999," 1298 "\"google:verbatimrelevance\":9999,"
1291 "\"google:suggestrelevance\":[9998]}]", 1299 "\"google:suggestrelevance\":[9998]}]",
1292 { { "a", true }, { "a.com", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, 1300 { { "a", true }, { "a.com", false }, kEmptyMatch, kEmptyMatch,
1293 kEmptyMatch }, 1301 kEmptyMatch, kEmptyMatch },
1294 std::string() }, 1302 std::string() },
1295 { "[\"a\",[\"http://a.com\"],[],[]," 1303 { "[\"a\",[\"http://a.com\"],[],[],"
1296 "{\"google:suggesttype\":[\"NAVIGATION\"]," 1304 "{\"google:suggesttype\":[\"NAVIGATION\"],"
1297 "\"google:verbatimrelevance\":9998," 1305 "\"google:verbatimrelevance\":9998,"
1298 "\"google:suggestrelevance\":[9999]}]", 1306 "\"google:suggestrelevance\":[9999]}]",
1299 { { "a.com", true }, { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, 1307 { { "a.com", true }, { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch,
1300 kEmptyMatch }, 1308 kEmptyMatch },
1301 ".com" }, 1309 ".com" },
1302 { "[\"a\",[\"http://a.com\"],[],[]," 1310 { "[\"a\",[\"http://a.com\"],[],[],"
1303 "{\"google:suggesttype\":[\"NAVIGATION\"]," 1311 "{\"google:suggesttype\":[\"NAVIGATION\"],"
1304 "\"google:verbatimrelevance\":0," 1312 "\"google:verbatimrelevance\":0,"
1305 "\"google:suggestrelevance\":[9999]}]", 1313 "\"google:suggestrelevance\":[9999]}]",
1306 { { "a.com", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch, 1314 { { "a.com", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch,
1307 kEmptyMatch }, 1315 kEmptyMatch },
1308 ".com" }, 1316 ".com" },
1309 { "[\"a\",[\"http://a.com\"],[],[]," 1317 { "[\"a\",[\"http://a.com\"],[],[],"
1310 "{\"google:suggesttype\":[\"NAVIGATION\"]," 1318 "{\"google:suggesttype\":[\"NAVIGATION\"],"
1311 "\"google:verbatimrelevance\":-1," 1319 "\"google:verbatimrelevance\":-1,"
1312 "\"google:suggestrelevance\":[9999]}]", 1320 "\"google:suggestrelevance\":[9999]}]",
1313 { { "a.com", true }, { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, 1321 { { "a.com", true }, { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch,
1314 kEmptyMatch }, 1322 kEmptyMatch },
1315 ".com" }, 1323 ".com" },
1316 1324
1317 // Ensure that both types of relevance scores reorder matches together. 1325 // Ensure that both types of relevance scores reorder matches together.
1318 { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[9999, 9997]," 1326 { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[9999, 9997],"
1319 "\"google:verbatimrelevance\":9998}]", 1327 "\"google:verbatimrelevance\":9998}]",
1320 { { "a1", true }, { "a", true }, { "a2", true }, kEmptyMatch, kEmptyMatch, 1328 { { "a1", true }, { "a", true }, { "a2", false }, kEmptyMatch,
1321 kEmptyMatch }, 1329 kEmptyMatch, kEmptyMatch },
1322 "1" }, 1330 "1" },
1323 1331
1324 // Allow non-inlineable matches to be the highest-scoring match but, 1332 // Allow non-inlineable matches to be the highest-scoring match but,
1325 // if the result set lacks a single inlineable result, abandon suggested 1333 // if the result set lacks a single inlineable result, abandon suggested
1326 // relevance scores entirely. 1334 // relevance scores entirely.
1327 { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]}]", 1335 { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]}]",
1328 { { "b", false }, { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, 1336 { { "b", false }, { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch,
1329 kEmptyMatch }, 1337 kEmptyMatch },
1330 std::string() }, 1338 std::string() },
1331 { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]," 1339 { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999],"
(...skipping 24 matching lines...) Expand all
1356 { { "a1", true }, { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, 1364 { { "a1", true }, { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch,
1357 kEmptyMatch }, 1365 kEmptyMatch },
1358 "1" }, 1366 "1" },
1359 { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[1]," 1367 { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[1],"
1360 "\"google:verbatimrelevance\":0}]", 1368 "\"google:verbatimrelevance\":0}]",
1361 { { "a1", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch, 1369 { { "a1", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch,
1362 kEmptyMatch }, 1370 kEmptyMatch },
1363 "1" }, 1371 "1" },
1364 { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 2]," 1372 { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 2],"
1365 "\"google:verbatimrelevance\":0}]", 1373 "\"google:verbatimrelevance\":0}]",
1366 { { "a2", true }, { "a1", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, 1374 { { "a2", true }, { "a1", false }, kEmptyMatch, kEmptyMatch, kEmptyMatch,
1367 kEmptyMatch }, 1375 kEmptyMatch },
1368 "2" }, 1376 "2" },
1369 { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 3]," 1377 { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 3],"
1370 "\"google:verbatimrelevance\":2}]", 1378 "\"google:verbatimrelevance\":2}]",
1371 { { "a2", true }, { "a", true }, { "a1", true }, kEmptyMatch, kEmptyMatch, 1379 { { "a2", true }, { "a", true }, { "a1", false }, kEmptyMatch,
1372 kEmptyMatch }, 1380 kEmptyMatch, kEmptyMatch },
1373 "2" }, 1381 "2" },
1374 { "[\"a\",[\"http://a.com\"],[],[]," 1382 { "[\"a\",[\"http://a.com\"],[],[],"
1375 "{\"google:suggesttype\":[\"NAVIGATION\"]," 1383 "{\"google:suggesttype\":[\"NAVIGATION\"],"
1376 "\"google:suggestrelevance\":[1]," 1384 "\"google:suggestrelevance\":[1],"
1377 "\"google:verbatimrelevance\":0}]", 1385 "\"google:verbatimrelevance\":0}]",
1378 { { "a.com", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch, 1386 { { "a.com", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch,
1379 kEmptyMatch }, 1387 kEmptyMatch },
1380 ".com" }, 1388 ".com" },
1381 { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1389 { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[],"
1382 "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1390 "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"],"
1383 "\"google:suggestrelevance\":[1, 2]," 1391 "\"google:suggestrelevance\":[1, 2],"
1384 "\"google:verbatimrelevance\":0}]", 1392 "\"google:verbatimrelevance\":0}]",
1385 { { "a2.com", true }, { "a1.com", true }, kEmptyMatch, kEmptyMatch, 1393 { { "a2.com", true }, { "a1.com", false }, kEmptyMatch, kEmptyMatch,
1386 kEmptyMatch, kEmptyMatch }, 1394 kEmptyMatch, kEmptyMatch },
1387 "2.com" }, 1395 "2.com" },
1388 1396
1389 // Ensure that all suggestions are considered, regardless of order. 1397 // Ensure that all suggestions are considered, regardless of order.
1390 { "[\"a\",[\"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\"],[],[]," 1398 { "[\"a\",[\"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\"],[],[],"
1391 "{\"google:suggestrelevance\":[1, 2, 3, 4, 5, 6, 7]}]", 1399 "{\"google:suggestrelevance\":[1, 2, 3, 4, 5, 6, 7]}]",
1392 { { "a", true }, { "h", false }, { "g", false }, { "f", false }, 1400 { { "a", true }, { "h", false }, { "g", false }, { "f", false },
1393 { "e", false }, { "d", false } }, 1401 { "e", false }, { "d", false } },
1394 std::string() }, 1402 std::string() },
1395 { "[\"a\",[\"http://b.com\", \"http://c.com\", \"http://d.com\"," 1403 { "[\"a\",[\"http://b.com\", \"http://c.com\", \"http://d.com\","
1396 "\"http://e.com\", \"http://f.com\", \"http://g.com\"," 1404 "\"http://e.com\", \"http://f.com\", \"http://g.com\","
1397 "\"http://h.com\"],[],[]," 1405 "\"http://h.com\"],[],[],"
1398 "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"," 1406 "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\","
1399 "\"NAVIGATION\", \"NAVIGATION\"," 1407 "\"NAVIGATION\", \"NAVIGATION\","
1400 "\"NAVIGATION\", \"NAVIGATION\"," 1408 "\"NAVIGATION\", \"NAVIGATION\","
1401 "\"NAVIGATION\"]," 1409 "\"NAVIGATION\"],"
1402 "\"google:suggestrelevance\":[1, 2, 3, 4, 5, 6, 7]}]", 1410 "\"google:suggestrelevance\":[1, 2, 3, 4, 5, 6, 7]}]",
1403 { { "a", true }, { "h.com", false }, { "g.com", false }, 1411 { { "a", true }, { "h.com", false }, { "g.com", false },
1404 { "f.com", false }, { "e.com", false }, { "d.com", false } }, 1412 { "f.com", false }, { "e.com", false }, { "d.com", false } },
1405 std::string() }, 1413 std::string() },
1406 1414
1407 // Ensure that incorrectly sized suggestion relevance lists are ignored. 1415 // Ensure that incorrectly sized suggestion relevance lists are ignored.
1408 { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1]}]", 1416 { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1]}]",
1409 { { "a", true }, { "a1", true }, { "a2", true }, kEmptyMatch, kEmptyMatch, 1417 { { "a", true }, { "a1", false }, { "a2", false }, kEmptyMatch,
1410 kEmptyMatch }, 1418 kEmptyMatch, kEmptyMatch },
1411 std::string() }, 1419 std::string() },
1412 { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[9999, 1]}]", 1420 { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[9999, 1]}]",
1413 { { "a", true }, { "a1", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, 1421 { { "a", true }, { "a1", false }, kEmptyMatch, kEmptyMatch, kEmptyMatch,
1414 kEmptyMatch }, 1422 kEmptyMatch },
1415 std::string() }, 1423 std::string() },
1416 { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1424 { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[],"
1417 "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1425 "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"],"
1418 "\"google:suggestrelevance\":[1]}]", 1426 "\"google:suggestrelevance\":[1]}]",
1419 { { "a", true }, { "a1.com", true }, kEmptyMatch, kEmptyMatch, 1427 { { "a", true }, { "a1.com", false }, kEmptyMatch, kEmptyMatch,
1420 kEmptyMatch, kEmptyMatch }, 1428 kEmptyMatch, kEmptyMatch },
1421 std::string() }, 1429 std::string() },
1422 { "[\"a\",[\"http://a1.com\"],[],[]," 1430 { "[\"a\",[\"http://a1.com\"],[],[],"
1423 "{\"google:suggesttype\":[\"NAVIGATION\"]," 1431 "{\"google:suggesttype\":[\"NAVIGATION\"],"
1424 "\"google:suggestrelevance\":[9999, 1]}]", 1432 "\"google:suggestrelevance\":[9999, 1]}]",
1425 { { "a", true }, { "a1.com", true }, kEmptyMatch, kEmptyMatch, 1433 { { "a", true }, { "a1.com", false }, kEmptyMatch, kEmptyMatch,
1426 kEmptyMatch, kEmptyMatch }, 1434 kEmptyMatch, kEmptyMatch },
1427 std::string() }, 1435 std::string() },
1428 1436
1429 // Ensure that all 'verbatim' results are merged with their maximum score. 1437 // Ensure that all 'verbatim' results are merged with their maximum score.
1430 { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 1438 { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[],"
1431 "{\"google:suggestrelevance\":[9998, 9997, 9999]}]", 1439 "{\"google:suggestrelevance\":[9998, 9997, 9999]}]",
1432 { { "a2", true }, { "a", true }, { "a1", true }, kEmptyMatch, kEmptyMatch, 1440 { { "a2", true }, { "a", true }, { "a1", false }, kEmptyMatch,
1433 kEmptyMatch }, 1441 kEmptyMatch, kEmptyMatch },
1434 "2" }, 1442 "2" },
1435 { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 1443 { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[],"
1436 "{\"google:suggestrelevance\":[9998, 9997, 9999]," 1444 "{\"google:suggestrelevance\":[9998, 9997, 9999],"
1437 "\"google:verbatimrelevance\":0}]", 1445 "\"google:verbatimrelevance\":0}]",
1438 { { "a2", true }, { "a", true }, { "a1", true }, kEmptyMatch, kEmptyMatch, 1446 { { "a2", true }, { "a", true }, { "a1", false }, kEmptyMatch,
1439 kEmptyMatch }, 1447 kEmptyMatch, kEmptyMatch },
1440 "2" }, 1448 "2" },
1441 1449
1442 // Ensure that verbatim is always generated without other suggestions. 1450 // Ensure that verbatim is always generated without other suggestions.
1443 // TODO(msw): Ensure verbatimrelevance is respected (except suppression). 1451 // TODO(msw): Ensure verbatimrelevance is respected (except suppression).
1444 { "[\"a\",[],[],[],{\"google:verbatimrelevance\":1}]", 1452 { "[\"a\",[],[],[],{\"google:verbatimrelevance\":1}]",
1445 { { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch, 1453 { { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch,
1446 kEmptyMatch }, 1454 kEmptyMatch },
1447 std::string() }, 1455 std::string() },
1448 { "[\"a\",[],[],[],{\"google:verbatimrelevance\":0}]", 1456 { "[\"a\",[],[],[],{\"google:verbatimrelevance\":0}]",
1449 { { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch, 1457 { { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch,
1450 kEmptyMatch }, 1458 kEmptyMatch },
1451 std::string() }, 1459 std::string() },
1452 }; 1460 };
1453 1461
1454 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 1462 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) {
1455 QueryForInput(ASCIIToUTF16("a"), false, false); 1463 // Send the query twice in order to bypass checks about whether a single
1456 net::TestURLFetcher* fetcher = 1464 // new reply can change the inline autocompletion.
1457 test_factory_.GetFetcherByID( 1465 for (size_t j = 0; j < 2; j++) {
1458 SearchProvider::kDefaultProviderURLFetcherID); 1466 QueryForInput(ASCIIToUTF16("a"), false, false);
1459 ASSERT_TRUE(fetcher); 1467 net::TestURLFetcher* fetcher =
1460 fetcher->set_response_code(200); 1468 test_factory_.GetFetcherByID(
1461 fetcher->SetResponseString(cases[i].json); 1469 SearchProvider::kDefaultProviderURLFetcherID);
1462 fetcher->delegate()->OnURLFetchComplete(fetcher); 1470 ASSERT_TRUE(fetcher);
1463 RunTillProviderDone(); 1471 fetcher->set_response_code(200);
1472 fetcher->SetResponseString(cases[i].json);
1473 fetcher->delegate()->OnURLFetchComplete(fetcher);
1474 RunTillProviderDone();
1475 }
1464 1476
1465 const std::string description = "for input with json=" + cases[i].json; 1477 const std::string description = "for input with json=" + cases[i].json;
1466 const ACMatches& matches = provider_->matches(); 1478 const ACMatches& matches = provider_->matches();
1467 ASSERT_FALSE(matches.empty()); 1479 ASSERT_FALSE(matches.empty());
1468 // Find the first match that's allowed to be the default match and check 1480 // Find the first match that's allowed to be the default match and check
1469 // its inline_autocompletion. 1481 // its inline_autocompletion.
1470 ACMatches::const_iterator it = FindDefaultMatch(matches); 1482 ACMatches::const_iterator it = FindDefaultMatch(matches);
1471 ASSERT_NE(matches.end(), it); 1483 ASSERT_NE(matches.end(), it);
1472 EXPECT_EQ(ASCIIToUTF16(cases[i].inline_autocompletion), 1484 EXPECT_EQ(ASCIIToUTF16(cases[i].inline_autocompletion),
1473 it->inline_autocompletion) << description; 1485 it->inline_autocompletion) << description;
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1543 { "b.com", false, false }, 1555 { "b.com", false, false },
1544 { "k a", false, false }, 1556 { "k a", false, false },
1545 kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1557 kEmptyMatch, kEmptyMatch, kEmptyMatch },
1546 std::string() }, 1558 std::string() },
1547 1559
1548 // Ensure that verbatimrelevance scores reorder or suppress verbatim. 1560 // Ensure that verbatimrelevance scores reorder or suppress verbatim.
1549 // Negative values will have no effect; the calculated value will be used. 1561 // Negative values will have no effect; the calculated value will be used.
1550 { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9999," 1562 { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9999,"
1551 "\"google:suggestrelevance\":[9998]}]", 1563 "\"google:suggestrelevance\":[9998]}]",
1552 { { "a", true, true }, 1564 { { "a", true, true },
1553 { "a1", true, true }, 1565 { "a1", true, false },
1554 { "k a", false, false }, 1566 { "k a", false, false },
1555 kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1567 kEmptyMatch, kEmptyMatch, kEmptyMatch },
1556 std::string() }, 1568 std::string() },
1557 { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9998," 1569 { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9998,"
1558 "\"google:suggestrelevance\":[9999]}]", 1570 "\"google:suggestrelevance\":[9999]}]",
1559 { { "a1", true, true }, 1571 { { "a1", true, true },
1560 { "a", true, true }, 1572 { "a", true, true },
1561 { "k a", false, false }, 1573 { "k a", false, false },
1562 kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1574 kEmptyMatch, kEmptyMatch, kEmptyMatch },
1563 "1" }, 1575 "1" },
(...skipping 18 matching lines...) Expand all
1582 { "a.com", false, false }, 1594 { "a.com", false, false },
1583 { "k a", false, false }, 1595 { "k a", false, false },
1584 kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1596 kEmptyMatch, kEmptyMatch, kEmptyMatch },
1585 std::string() }, 1597 std::string() },
1586 1598
1587 // Ensure that both types of relevance scores reorder matches together. 1599 // Ensure that both types of relevance scores reorder matches together.
1588 { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[9999, 9997]," 1600 { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[9999, 9997],"
1589 "\"google:verbatimrelevance\":9998}]", 1601 "\"google:verbatimrelevance\":9998}]",
1590 { { "a1", true, true }, 1602 { { "a1", true, true },
1591 { "a", true, true }, 1603 { "a", true, true },
1592 { "a2", true, true }, 1604 { "a2", true, false },
1593 { "k a", false, false }, 1605 { "k a", false, false },
1594 kEmptyMatch, kEmptyMatch }, 1606 kEmptyMatch, kEmptyMatch },
1595 "1" }, 1607 "1" },
1596 1608
1597 // Check that non-inlinable matches may be ranked as the highest result 1609 // Check that non-inlinable matches may be ranked as the highest result
1598 // if there is at least one inlineable match. 1610 // if there is at least one inlineable match.
1599 { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]}]", 1611 { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]}]",
1600 { { "b", true, false }, 1612 { { "b", true, false },
1601 { "a", true, true }, 1613 { "a", true, true },
1602 { "k a", false, false }, 1614 { "k a", false, false },
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1647 "\"google:verbatimrelevance\":0}]", 1659 "\"google:verbatimrelevance\":0}]",
1648 { { "k a", false, false }, 1660 { { "k a", false, false },
1649 { "a1", true, true }, 1661 { "a1", true, true },
1650 kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1662 kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch },
1651 "1" }, 1663 "1" },
1652 { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 2]," 1664 { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 2],"
1653 "\"google:verbatimrelevance\":0}]", 1665 "\"google:verbatimrelevance\":0}]",
1654 { 1666 {
1655 { "k a", false, false }, 1667 { "k a", false, false },
1656 { "a2", true, true }, 1668 { "a2", true, true },
1657 { "a1", true, true }, 1669 { "a1", true, false },
1658 kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1670 kEmptyMatch, kEmptyMatch, kEmptyMatch },
1659 "2" }, 1671 "2" },
1660 { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 3]," 1672 { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 3],"
1661 "\"google:verbatimrelevance\":2}]", 1673 "\"google:verbatimrelevance\":2}]",
1662 { { "k a", false, false }, 1674 { { "k a", false, false },
1663 { "a2", true, true }, 1675 { "a2", true, true },
1664 { "a", true, true }, 1676 { "a", true, true },
1665 { "a1", true, true }, 1677 { "a1", true, false },
1666 kEmptyMatch, kEmptyMatch }, 1678 kEmptyMatch, kEmptyMatch },
1667 "2" }, 1679 "2" },
1668 1680
1669 // Ensure that all suggestions are considered, regardless of order. 1681 // Ensure that all suggestions are considered, regardless of order.
1670 { "[\"a\",[\"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\"],[],[]," 1682 { "[\"a\",[\"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\"],[],[],"
1671 "{\"google:suggestrelevance\":[1, 2, 3, 4, 5, 6, 7]}]", 1683 "{\"google:suggestrelevance\":[1, 2, 3, 4, 5, 6, 7]}]",
1672 { { "a", true, true }, 1684 { { "a", true, true },
1673 { "k a", false, false }, 1685 { "k a", false, false },
1674 { "h", true, false }, 1686 { "h", true, false },
1675 { "g", true, false }, 1687 { "g", true, false },
(...skipping 14 matching lines...) Expand all
1690 { "g.com", false, false }, 1702 { "g.com", false, false },
1691 { "f.com", false, false }, 1703 { "f.com", false, false },
1692 { "e.com", false, false } }, 1704 { "e.com", false, false } },
1693 std::string() }, 1705 std::string() },
1694 1706
1695 // Ensure that incorrectly sized suggestion relevance lists are ignored. 1707 // Ensure that incorrectly sized suggestion relevance lists are ignored.
1696 // Note that keyword suggestions by default (not in suggested relevance 1708 // Note that keyword suggestions by default (not in suggested relevance
1697 // mode) score more highly than the default verbatim. 1709 // mode) score more highly than the default verbatim.
1698 { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1]}]", 1710 { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1]}]",
1699 { { "a", true, true }, 1711 { { "a", true, true },
1700 { "a1", true, true }, 1712 { "a1", true, false },
1701 { "a2", true, true }, 1713 { "a2", true, false },
1702 { "k a", false, false }, 1714 { "k a", false, false },
1703 kEmptyMatch, kEmptyMatch }, 1715 kEmptyMatch, kEmptyMatch },
1704 std::string() }, 1716 std::string() },
1705 { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[9999, 1]}]", 1717 { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[9999, 1]}]",
1706 { { "a", true, true }, 1718 { { "a", true, true },
1707 { "a1", true, true }, 1719 { "a1", true, false },
1708 { "k a", false, false }, 1720 { "k a", false, false },
1709 kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1721 kEmptyMatch, kEmptyMatch, kEmptyMatch },
1710 std::string() }, 1722 std::string() },
1711 // In this case, ignoring the suggested relevance scores means we keep 1723 // In this case, ignoring the suggested relevance scores means we keep
1712 // only one navsuggest result. 1724 // only one navsuggest result.
1713 { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1725 { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[],"
1714 "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1726 "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"],"
1715 "\"google:suggestrelevance\":[1]}]", 1727 "\"google:suggestrelevance\":[1]}]",
1716 { { "a", true, true }, 1728 { { "a", true, true },
1717 { "a1.com", false, false }, 1729 { "a1.com", false, false },
1718 { "k a", false, false }, 1730 { "k a", false, false },
1719 kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1731 kEmptyMatch, kEmptyMatch, kEmptyMatch },
1720 std::string() }, 1732 std::string() },
1721 { "[\"a\",[\"http://a1.com\"],[],[]," 1733 { "[\"a\",[\"http://a1.com\"],[],[],"
1722 "{\"google:suggesttype\":[\"NAVIGATION\"]," 1734 "{\"google:suggesttype\":[\"NAVIGATION\"],"
1723 "\"google:suggestrelevance\":[9999, 1]}]", 1735 "\"google:suggestrelevance\":[9999, 1]}]",
1724 { { "a", true, true }, 1736 { { "a", true, true },
1725 { "a1.com", false, false }, 1737 { "a1.com", false, false },
1726 { "k a", false, false }, 1738 { "k a", false, false },
1727 kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1739 kEmptyMatch, kEmptyMatch, kEmptyMatch },
1728 std::string() }, 1740 std::string() },
1729 1741
1730 // Ensure that all 'verbatim' results are merged with their maximum score. 1742 // Ensure that all 'verbatim' results are merged with their maximum score.
1731 { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 1743 { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[],"
1732 "{\"google:suggestrelevance\":[9998, 9997, 9999]}]", 1744 "{\"google:suggestrelevance\":[9998, 9997, 9999]}]",
1733 { { "a2", true, true }, 1745 { { "a2", true, true },
1734 { "a", true, true }, 1746 { "a", true, true },
1735 { "a1", true, true }, 1747 { "a1", true, false },
1736 { "k a", false, false }, 1748 { "k a", false, false },
1737 kEmptyMatch, kEmptyMatch }, 1749 kEmptyMatch, kEmptyMatch },
1738 "2" }, 1750 "2" },
1739 { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 1751 { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[],"
1740 "{\"google:suggestrelevance\":[9998, 9997, 9999]," 1752 "{\"google:suggestrelevance\":[9998, 9997, 9999],"
1741 "\"google:verbatimrelevance\":0}]", 1753 "\"google:verbatimrelevance\":0}]",
1742 { { "a2", true, true }, 1754 { { "a2", true, true },
1743 { "a", true, true }, 1755 { "a", true, true },
1744 { "a1", true, true }, 1756 { "a1", true, false },
1745 { "k a", false, false }, 1757 { "k a", false, false },
1746 kEmptyMatch, kEmptyMatch }, 1758 kEmptyMatch, kEmptyMatch },
1747 "2" }, 1759 "2" },
1748 1760
1749 // Ensure that verbatim is always generated without other suggestions. 1761 // Ensure that verbatim is always generated without other suggestions.
1750 // TODO(mpearson): Ensure the value of verbatimrelevance is respected 1762 // TODO(mpearson): Ensure the value of verbatimrelevance is respected
1751 // (except when suggested relevances are ignored). 1763 // (except when suggested relevances are ignored).
1752 { "[\"a\",[],[],[],{\"google:verbatimrelevance\":1}]", 1764 { "[\"a\",[],[],[],{\"google:verbatimrelevance\":1}]",
1753 { { "k a", false, false }, 1765 { { "k a", false, false },
1754 { "a", true, true }, 1766 { "a", true, true },
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1793 std::string() }, 1805 std::string() },
1794 // Check when navsuggest scores more than verbatim and there is query 1806 // Check when navsuggest scores more than verbatim and there is query
1795 // suggestion but it scores lower. 1807 // suggestion but it scores lower.
1796 { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1808 { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[],"
1797 "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1809 "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"],"
1798 "\"google:verbatimrelevance\":9990," 1810 "\"google:verbatimrelevance\":9990,"
1799 "\"google:suggestrelevance\":[9998, 9999, 1300]}]", 1811 "\"google:suggestrelevance\":[9998, 9999, 1300]}]",
1800 { { "a2.com", false, false }, 1812 { { "a2.com", false, false },
1801 { "a1.com", false, false }, 1813 { "a1.com", false, false },
1802 { "a", true, true }, 1814 { "a", true, true },
1803 { "a3", true, true }, 1815 { "a3", true, false },
1804 { "k a", false, false }, 1816 { "k a", false, false },
1805 kEmptyMatch }, 1817 kEmptyMatch },
1806 std::string() }, 1818 std::string() },
1807 { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1819 { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[],"
1808 "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1820 "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"],"
1809 "\"google:verbatimrelevance\":9990," 1821 "\"google:verbatimrelevance\":9990,"
1810 "\"google:suggestrelevance\":[9999, 9998, 1300]}]", 1822 "\"google:suggestrelevance\":[9999, 9998, 1300]}]",
1811 { { "a1.com", false, false }, 1823 { { "a1.com", false, false },
1812 { "a2.com", false, false }, 1824 { "a2.com", false, false },
1813 { "a", true, true }, 1825 { "a", true, true },
1814 { "a3", true, true }, 1826 { "a3", true, false },
1815 { "k a", false, false }, 1827 { "k a", false, false },
1816 kEmptyMatch }, 1828 kEmptyMatch },
1817 std::string() }, 1829 std::string() },
1818 // Check when navsuggest scores more than a query suggestion. There is 1830 // Check when navsuggest scores more than a query suggestion. There is
1819 // a verbatim but it scores lower. 1831 // a verbatim but it scores lower.
1820 { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1832 { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[],"
1821 "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1833 "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"],"
1822 "\"google:verbatimrelevance\":9990," 1834 "\"google:verbatimrelevance\":9990,"
1823 "\"google:suggestrelevance\":[9998, 9999, 9997]}]", 1835 "\"google:suggestrelevance\":[9998, 9999, 9997]}]",
1824 { { "a2.com", false, false }, 1836 { { "a2.com", false, false },
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1901 { { "a3", true, true }, 1913 { { "a3", true, true },
1902 { "a1.com", false, false }, 1914 { "a1.com", false, false },
1903 { "a2.com", false, false }, 1915 { "a2.com", false, false },
1904 { "a", true, true }, 1916 { "a", true, true },
1905 { "k a", false, false }, 1917 { "k a", false, false },
1906 kEmptyMatch }, 1918 kEmptyMatch },
1907 "3" }, 1919 "3" },
1908 }; 1920 };
1909 1921
1910 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 1922 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) {
1911 QueryForInput(ASCIIToUTF16("k a"), false, true); 1923 // Send the query twice in order to bypass checks about whether a single
1924 // new reply can change the inline autocompletion.
1925 for (size_t j = 0; j < 2; j++) {
1926 QueryForInput(ASCIIToUTF16("k a"), false, true);
1912 1927
1913 // Set up a default fetcher with no results. 1928 // Set up a default fetcher with no results.
1914 net::TestURLFetcher* default_fetcher = 1929 net::TestURLFetcher* default_fetcher =
1915 test_factory_.GetFetcherByID( 1930 test_factory_.GetFetcherByID(
1916 SearchProvider::kDefaultProviderURLFetcherID); 1931 SearchProvider::kDefaultProviderURLFetcherID);
1917 ASSERT_TRUE(default_fetcher); 1932 ASSERT_TRUE(default_fetcher);
1918 default_fetcher->set_response_code(200); 1933 default_fetcher->set_response_code(200);
1919 default_fetcher->delegate()->OnURLFetchComplete(default_fetcher); 1934 default_fetcher->delegate()->OnURLFetchComplete(default_fetcher);
1920 default_fetcher = NULL; 1935 default_fetcher = NULL;
1921 1936
1922 // Set up a keyword fetcher with provided results. 1937 // Set up a keyword fetcher with provided results.
1923 net::TestURLFetcher* keyword_fetcher = 1938 net::TestURLFetcher* keyword_fetcher =
1924 test_factory_.GetFetcherByID( 1939 test_factory_.GetFetcherByID(
1925 SearchProvider::kKeywordProviderURLFetcherID); 1940 SearchProvider::kKeywordProviderURLFetcherID);
1926 ASSERT_TRUE(keyword_fetcher); 1941 ASSERT_TRUE(keyword_fetcher);
1927 keyword_fetcher->set_response_code(200); 1942 keyword_fetcher->set_response_code(200);
1928 keyword_fetcher->SetResponseString(cases[i].json); 1943 keyword_fetcher->SetResponseString(cases[i].json);
1929 keyword_fetcher->delegate()->OnURLFetchComplete(keyword_fetcher); 1944 keyword_fetcher->delegate()->OnURLFetchComplete(keyword_fetcher);
1930 keyword_fetcher = NULL; 1945 keyword_fetcher = NULL;
1931 RunTillProviderDone(); 1946 RunTillProviderDone();
1947 }
1932 1948
1933 const std::string description = "for input with json=" + cases[i].json; 1949 const std::string description = "for input with json=" + cases[i].json;
1934 const ACMatches& matches = provider_->matches(); 1950 const ACMatches& matches = provider_->matches();
1935 ASSERT_FALSE(matches.empty()); 1951 ASSERT_FALSE(matches.empty());
1936 // Find the first match that's allowed to be the default match and check 1952 // Find the first match that's allowed to be the default match and check
1937 // its inline_autocompletion. 1953 // its inline_autocompletion.
1938 ACMatches::const_iterator it = FindDefaultMatch(matches); 1954 ACMatches::const_iterator it = FindDefaultMatch(matches);
1939 ASSERT_NE(matches.end(), it); 1955 ASSERT_NE(matches.end(), it);
1940 EXPECT_EQ(ASCIIToUTF16(cases[i].inline_autocompletion), 1956 EXPECT_EQ(ASCIIToUTF16(cases[i].inline_autocompletion),
1941 it->inline_autocompletion) << description; 1957 it->inline_autocompletion) << description;
1942 1958
1943 ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].matches)); 1959 ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].matches));
1944 size_t j = 0; 1960 size_t j = 0;
1945 // Ensure that the returned matches equal the expectations. 1961 // Ensure that the returned matches equal the expectations.
1946 for (; j < matches.size(); ++j) { 1962 for (; j < matches.size(); ++j) {
1947 EXPECT_EQ(ASCIIToUTF16(cases[i].matches[j].contents), 1963 EXPECT_EQ(ASCIIToUTF16(cases[i].matches[j].contents),
1948 matches[j].contents) << description; 1964 matches[j].contents) << description;
1949 EXPECT_EQ(cases[i].matches[j].from_keyword, 1965 EXPECT_EQ(cases[i].matches[j].from_keyword,
1950 matches[j].keyword == ASCIIToUTF16("k")) << description; 1966 matches[j].keyword == ASCIIToUTF16("k")) << description;
1951 EXPECT_EQ(cases[i].matches[j].allowed_to_be_default_match, 1967 EXPECT_EQ(cases[i].matches[j].allowed_to_be_default_match,
1952 matches[j].allowed_to_be_default_match) << description; 1968 matches[j].allowed_to_be_default_match) << description;
1953 } 1969 }
1954 // Ensure that no expected matches are missing. 1970 // Ensure that no expected matches are missing.
1955 for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) 1971 for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j)
1956 EXPECT_EQ(kNotApplicable, cases[i].matches[j].contents) << 1972 EXPECT_EQ(kNotApplicable, cases[i].matches[j].contents) <<
1957 "Case # " << i << " " << description; 1973 "Case # " << i << " " << description;
1958 } 1974 }
1959 } 1975 }
1960 1976
1977 TEST_F(SearchProviderTest, DontInlineAutocompleteAsynchronously) {
1978 struct Match {
1979 std::string contents;
1980 bool allowed_to_be_default_match;
1981 };
1982 const Match kEmptyMatch = { kNotApplicable, false };
1983 // This test sends two separate queries, each receiving different JSON
1984 // replies, and checks that receiving the second reply doesn't cause
1985 // an unexpected inline autcompletion.
1986 struct {
1987 const std::string first_json;
1988 const std::string second_json;
1989 const Match matches[4];
1990 } cases[] = {
1991 // A simple test that verifies we inline autocomplete if the new top
1992 // suggestion is the same as the old inline autocompleted suggestion.
1993 { "[\"a\",[\"ab1\", \"ab2\"],[],[],"
1994 "{\"google:verbatimrelevance\":1300,"
1995 "\"google:suggestrelevance\":[1302, 1301]}]",
1996 "[\"ab\",[\"ab1\", \"ab2\"],[],[],"
1997 "{\"google:verbatimrelevance\":1300,"
1998 "\"google:suggestrelevance\":[1302, 1301]}]",
1999 { { "ab1", true }, { "ab2", false }, { "ab", true }, kEmptyMatch } },
2000 // Ditto, just for a navigation suggestion.
2001 { "[\"a\",[\"ab1.com\", \"ab2.com\"],[],[],"
2002 "{\"google:verbatimrelevance\":1300,"
2003 "\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"],"
2004 "\"google:suggestrelevance\":[1302, 1301]}]",
2005 "[\"ab\",[\"ab1.com\", \"ab2.com\"],[],[],"
2006 "{\"google:verbatimrelevance\":1300,"
2007 "\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"],"
2008 "\"google:suggestrelevance\":[1302, 1301]}]",
2009 { { "ab1.com", true }, { "ab2.com", false }, { "ab", true },
2010 kEmptyMatch } },
2011
2012 // Without an original inline autcompletion, a new inline autcompletion
2013 // should be rejected.
2014 { "[\"a\",[\"ab1\", \"ab2\"],[],[],"
2015 "{\"google:verbatimrelevance\":1300,"
2016 "\"google:suggestrelevance\":[900, 800]}]",
2017 "[\"ab\",[\"ab1\", \"ab2\"],[],[],"
2018 "{\"google:suggestrelevance\":[1302, 1301],"
2019 "\"google:verbatimrelevance\":1300}]",
2020 { { "ab1", false }, { "ab2", false }, { "ab", true }, kEmptyMatch } },
2021 { "[\"a\",[\"ab1\", \"ab2\"],[],[],"
2022 "{\"google:verbatimrelevance\":1300,"
2023 "\"google:suggestrelevance\":[900, 800]}]",
2024 "[\"ab\",[\"ab1\", \"ab2\"],[],[],"
2025 "{\"google:verbatimrelevance\":1300,"
2026 "\"google:suggestrelevance\":[1301, 1302]}]",
2027 { { "ab2", false }, { "ab1", false }, { "ab", true }, kEmptyMatch } },
2028 // Now, the same verifications but with the new inline autocompletion as a
2029 // navsuggestion. The new autocompletion should still be rejected.
2030 { "[\"a\",[\"ab1.com\", \"ab2.com\"],[],[],"
2031 "{\"google:verbatimrelevance\":1300,"
2032 "\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"],"
2033 "\"google:suggestrelevance\":[900, 800]}]",
2034 "[\"ab\",[\"ab1.com\", \"ab2.com\"],[],[],"
2035 "{\"google:verbatimrelevance\":1300,"
2036 "\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"],"
2037 "\"google:suggestrelevance\":[1302, 1301]}]",
2038 { { "ab1.com", false }, { "ab2.com", false }, { "ab", true },
2039 kEmptyMatch } },
2040 { "[\"a\",[\"ab1.com\", \"ab2.com\"],[],[],"
2041 "{\"google:verbatimrelevance\":1300,"
2042 "\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"],"
2043 "\"google:suggestrelevance\":[900, 800]}]",
2044 "[\"ab\",[\"ab1.com\", \"ab2.com\"],[],[],"
2045 "{\"google:verbatimrelevance\":1300,"
2046 "\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"],"
2047 "\"google:suggestrelevance\":[1301, 1302]}]",
2048 { { "ab2.com", false }, { "ab1.com", false }, { "ab", true },
2049 kEmptyMatch } },
2050 };
2051
2052 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) {
2053 // First, send the query "a" and receive the provided JSON reply,
2054 // |first_json|.
2055 QueryForInput(ASCIIToUTF16("a"), false, false);
2056 net::TestURLFetcher* first_fetcher =
2057 test_factory_.GetFetcherByID(
2058 SearchProvider::kDefaultProviderURLFetcherID);
2059 ASSERT_TRUE(first_fetcher);
2060 first_fetcher->set_response_code(200);
2061 first_fetcher->SetResponseString(cases[i].first_json);
2062 first_fetcher->delegate()->OnURLFetchComplete(first_fetcher);
2063 RunTillProviderDone();
2064
2065 // Then, send the query "ab" and get the provided JSON reply,
2066 // |second_json|.
2067 QueryForInput(ASCIIToUTF16("ab"), false, false);
2068 net::TestURLFetcher* second_fetcher =
2069 test_factory_.GetFetcherByID(
2070 SearchProvider::kDefaultProviderURLFetcherID);
2071 ASSERT_TRUE(second_fetcher);
2072 second_fetcher->set_response_code(200);
2073 second_fetcher->SetResponseString(cases[i].second_json);
2074 second_fetcher->delegate()->OnURLFetchComplete(second_fetcher);
2075 RunTillProviderDone();
2076
2077 // Finally, check that we have the expected results.
2078 const std::string description = "for input with first_json=" +
2079 cases[i].first_json + " and second_json=" + cases[i].second_json;
2080 const ACMatches& matches = provider_->matches();
2081 ASSERT_FALSE(matches.empty());
2082 ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].matches));
2083 size_t j = 0;
2084 // Ensure that the returned matches equal the expectations.
2085 for (; j < matches.size(); ++j) {
2086 EXPECT_EQ(ASCIIToUTF16(cases[i].matches[j].contents),
2087 matches[j].contents) << description;
2088 EXPECT_EQ(cases[i].matches[j].allowed_to_be_default_match,
2089 matches[j].allowed_to_be_default_match) << description;
2090 }
2091 // Ensure that no expected matches are missing.
2092 for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j)
2093 EXPECT_EQ(kNotApplicable, cases[i].matches[j].contents) <<
2094 "Case # " << j << " " << description;
2095 }
2096 }
2097
1961 TEST_F(SearchProviderTest, LocalAndRemoteRelevances) { 2098 TEST_F(SearchProviderTest, LocalAndRemoteRelevances) {
1962 // We hardcode the string "term1" below, so ensure that the search term that 2099 // We hardcode the string "term1" below, so ensure that the search term that
1963 // got added to history already is that string. 2100 // got added to history already is that string.
1964 ASSERT_EQ(ASCIIToUTF16("term1"), term1_); 2101 ASSERT_EQ(ASCIIToUTF16("term1"), term1_);
1965 base::string16 term = term1_.substr(0, term1_.length() - 1); 2102 base::string16 term = term1_.substr(0, term1_.length() - 1);
1966 2103
1967 AddSearchToHistory(default_t_url_, term + ASCIIToUTF16("2"), 2); 2104 AddSearchToHistory(default_t_url_, term + ASCIIToUTF16("2"), 2);
1968 profile_.BlockUntilHistoryProcessesPendingRequests(); 2105 profile_.BlockUntilHistoryProcessesPendingRequests();
1969 2106
1970 struct { 2107 struct {
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
2083 { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2220 { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true },
2084 kEmptyMatch, kEmptyMatch } }, 2221 kEmptyMatch, kEmptyMatch } },
2085 { "a.com", "[\"a.com\",[\"https://a.com\"],[],[]," 2222 { "a.com", "[\"a.com\",[\"https://a.com\"],[],[],"
2086 "{\"google:suggesttype\":[\"NAVIGATION\"]," 2223 "{\"google:suggesttype\":[\"NAVIGATION\"],"
2087 "\"google:suggestrelevance\":[9999]}]", 2224 "\"google:suggestrelevance\":[9999]}]",
2088 { { "https://a.com", AutocompleteMatchType::NAVSUGGEST, true }, 2225 { { "https://a.com", AutocompleteMatchType::NAVSUGGEST, true },
2089 { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2226 { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true },
2090 kEmptyMatch, kEmptyMatch } }, 2227 kEmptyMatch, kEmptyMatch } },
2091 2228
2092 // Ensure topmost inlineable SUGGEST matches are NOT allowed for URL 2229 // Ensure topmost inlineable SUGGEST matches are NOT allowed for URL
2093 // input. SearchProvider disregards search and verbatim suggested 2230 // input.
2094 // relevances.
2095 { "a.com", "[\"a.com\",[\"a.com info\"],[],[]," 2231 { "a.com", "[\"a.com\",[\"a.com info\"],[],[],"
2096 "{\"google:suggestrelevance\":[9999]}]", 2232 "{\"google:suggestrelevance\":[9999]}]",
2097 { { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2233 { { "a.com info", AutocompleteMatchType::SEARCH_SUGGEST, false },
2098 { "a.com info", AutocompleteMatchType::SEARCH_SUGGEST, true }, 2234 { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true },
2099 kEmptyMatch, kEmptyMatch } }, 2235 kEmptyMatch, kEmptyMatch } },
2100 { "a.com", "[\"a.com\",[\"a.com info\"],[],[]," 2236 { "a.com", "[\"a.com\",[\"a.com info\"],[],[],"
2101 "{\"google:suggestrelevance\":[9999]}]", 2237 "{\"google:suggestrelevance\":[9999]}]",
2102 { { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2238 { { "a.com info", AutocompleteMatchType::SEARCH_SUGGEST, false },
2103 { "a.com info", AutocompleteMatchType::SEARCH_SUGGEST, true }, 2239 { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true },
2104 kEmptyMatch, kEmptyMatch } }, 2240 kEmptyMatch, kEmptyMatch } },
2105 2241
2106 // Ensure the fallback mechanism allows inlinable NAVIGATION matches. 2242 // Ensure the fallback mechanism allows inlinable NAVIGATION matches.
2107 { "a.com", "[\"a.com\",[\"a.com info\", \"http://a.com/b\"],[],[]," 2243 { "a.com", "[\"a.com\",[\"a.com info\", \"http://a.com/b\"],[],[],"
2108 "{\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 2244 "{\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"],"
2109 "\"google:suggestrelevance\":[9999, 9998]}]", 2245 "\"google:suggestrelevance\":[9999, 9998]}]",
2110 { { "a.com/b", AutocompleteMatchType::NAVSUGGEST, true }, 2246 { { "a.com info", AutocompleteMatchType::SEARCH_SUGGEST, false },
2111 { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2247 { "a.com/b", AutocompleteMatchType::NAVSUGGEST, true },
2112 { "a.com info", AutocompleteMatchType::SEARCH_SUGGEST, true }, 2248 { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true },
2113 kEmptyMatch } }, 2249 kEmptyMatch } },
2250 // In this case, when we abandon relevance scores, we restore the
2251 // |allowed_to_be_default_match| of the "a.com info" query. This doesn't
2252 // violate any constraints because we know it's not going to be used.
2114 { "a.com", "[\"a.com\",[\"a.com info\", \"http://a.com/b\"],[],[]," 2253 { "a.com", "[\"a.com\",[\"a.com info\", \"http://a.com/b\"],[],[],"
2115 "{\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 2254 "{\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"],"
2116 "\"google:suggestrelevance\":[9998, 9997]," 2255 "\"google:suggestrelevance\":[9998, 9997],"
2117 "\"google:verbatimrelevance\":9999}]", 2256 "\"google:verbatimrelevance\":9999}]",
2118 { { "a.com/b", AutocompleteMatchType::NAVSUGGEST, true }, 2257 { { "a.com/b", AutocompleteMatchType::NAVSUGGEST, true },
2119 { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2258 { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true },
2120 { "a.com info", AutocompleteMatchType::SEARCH_SUGGEST, true }, 2259 { "a.com info", AutocompleteMatchType::SEARCH_SUGGEST, true },
2121 kEmptyMatch } }, 2260 kEmptyMatch } },
2122 2261
2123 // Ensure topmost non-inlineable SUGGEST matches are allowed for URL 2262 // Ensure topmost non-inlineable SUGGEST matches are allowed for URL
2124 // input assuming the top inlineable match is not a query (i.e., is a 2263 // input assuming the top inlineable match is not a query (i.e., is a
2125 // NAVSUGGEST). 2264 // NAVSUGGEST).
2126 { "a.com", "[\"a.com\",[\"info\"],[],[]," 2265 { "a.com", "[\"a.com\",[\"info\"],[],[],"
2127 "{\"google:suggestrelevance\":[9999]}]", 2266 "{\"google:suggestrelevance\":[9999]}]",
2128 { { "info", AutocompleteMatchType::SEARCH_SUGGEST, false }, 2267 { { "info", AutocompleteMatchType::SEARCH_SUGGEST, false },
2129 { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2268 { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true },
2130 kEmptyMatch, kEmptyMatch } }, 2269 kEmptyMatch, kEmptyMatch } },
2131 { "a.com", "[\"a.com\",[\"info\"],[],[]," 2270 { "a.com", "[\"a.com\",[\"info\"],[],[],"
2132 "{\"google:suggestrelevance\":[9999]}]", 2271 "{\"google:suggestrelevance\":[9999]}]",
2133 { { "info", AutocompleteMatchType::SEARCH_SUGGEST, false }, 2272 { { "info", AutocompleteMatchType::SEARCH_SUGGEST, false },
2134 { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2273 { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true },
2135 kEmptyMatch, kEmptyMatch } }, 2274 kEmptyMatch, kEmptyMatch } },
2136 }; 2275 };
2137 2276
2138 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 2277 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) {
2139 QueryForInput(ASCIIToUTF16(cases[i].input), false, false); 2278 // Send the query twice in order to bypass checks about whether a single
2140 net::TestURLFetcher* fetcher = 2279 // new reply can change the inline autocompletion.
2141 test_factory_.GetFetcherByID( 2280 for (size_t j = 0; j < 2; j++) {
2142 SearchProvider::kDefaultProviderURLFetcherID); 2281 QueryForInput(ASCIIToUTF16(cases[i].input), false, false);
2143 ASSERT_TRUE(fetcher); 2282 net::TestURLFetcher* fetcher =
2144 fetcher->set_response_code(200); 2283 test_factory_.GetFetcherByID(
2145 fetcher->SetResponseString(cases[i].json); 2284 SearchProvider::kDefaultProviderURLFetcherID);
2146 fetcher->delegate()->OnURLFetchComplete(fetcher); 2285 ASSERT_TRUE(fetcher);
2147 RunTillProviderDone(); 2286 fetcher->set_response_code(200);
2287 fetcher->SetResponseString(cases[i].json);
2288 fetcher->delegate()->OnURLFetchComplete(fetcher);
2289 RunTillProviderDone();
2290 }
2148 2291
2292 const std::string description = "input=" + cases[i].input + " json=" +
2293 cases[i].json;
2149 size_t j = 0; 2294 size_t j = 0;
2150 const ACMatches& matches = provider_->matches(); 2295 const ACMatches& matches = provider_->matches();
2151 ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].output)); 2296 ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].output)) <<
2297 description;
2152 // Ensure that the returned matches equal the expectations. 2298 // Ensure that the returned matches equal the expectations.
2153 for (; j < matches.size(); ++j) { 2299 for (; j < matches.size(); ++j) {
2154 EXPECT_EQ(ASCIIToUTF16(cases[i].output[j].match_contents), 2300 EXPECT_EQ(ASCIIToUTF16(cases[i].output[j].match_contents),
2155 matches[j].contents); 2301 matches[j].contents) << description;
2156 EXPECT_EQ(cases[i].output[j].match_type, matches[j].type); 2302 EXPECT_EQ(cases[i].output[j].match_type, matches[j].type) << description;
2157 EXPECT_EQ(cases[i].output[j].allowed_to_be_default_match, 2303 EXPECT_EQ(cases[i].output[j].allowed_to_be_default_match,
2158 matches[j].allowed_to_be_default_match); 2304 matches[j].allowed_to_be_default_match) << description;
2159 } 2305 }
2160 // Ensure that no expected matches are missing. 2306 // Ensure that no expected matches are missing.
2161 for (; j < ARRAYSIZE_UNSAFE(cases[i].output); ++j) { 2307 for (; j < ARRAYSIZE_UNSAFE(cases[i].output); ++j) {
2162 EXPECT_EQ(kNotApplicable, cases[i].output[j].match_contents); 2308 EXPECT_EQ(kNotApplicable, cases[i].output[j].match_contents) <<
2309 description;
2163 EXPECT_EQ(AutocompleteMatchType::NUM_TYPES, 2310 EXPECT_EQ(AutocompleteMatchType::NUM_TYPES,
2164 cases[i].output[j].match_type); 2311 cases[i].output[j].match_type) << description;
2165 EXPECT_FALSE(cases[i].output[j].allowed_to_be_default_match); 2312 EXPECT_FALSE(cases[i].output[j].allowed_to_be_default_match) <<
2313 description;
2166 } 2314 }
2167 } 2315 }
2168 } 2316 }
2169 2317
2170 // A basic test that verifies the field trial triggered parsing logic. 2318 // A basic test that verifies the field trial triggered parsing logic.
2171 TEST_F(SearchProviderTest, FieldTrialTriggeredParsing) { 2319 TEST_F(SearchProviderTest, FieldTrialTriggeredParsing) {
2172 QueryForInput(ASCIIToUTF16("foo"), false, false); 2320 QueryForInput(ASCIIToUTF16("foo"), false, false);
2173 2321
2174 // Make sure the default providers suggest service was queried. 2322 // Make sure the default providers suggest service was queried.
2175 net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( 2323 net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID(
(...skipping 1086 matching lines...) Expand 10 before | Expand all | Expand 10 after
3262 // Mismatching input will return empty prefetch data. 3410 // Mismatching input will return empty prefetch data.
3263 AutocompleteInput input2(base::ASCIIToUTF16("weather n"), 3411 AutocompleteInput input2(base::ASCIIToUTF16("weather n"),
3264 base::string16::npos, base::string16(), GURL(), 3412 base::string16::npos, base::string16(), GURL(),
3265 metrics::OmniboxEventProto::INVALID_SPEC, false, 3413 metrics::OmniboxEventProto::INVALID_SPEC, false,
3266 false, true, true, 3414 false, true, true,
3267 ChromeAutocompleteSchemeClassifier(&profile_)); 3415 ChromeAutocompleteSchemeClassifier(&profile_));
3268 provider_->DoAnswersQuery(input2); 3416 provider_->DoAnswersQuery(input2);
3269 EXPECT_TRUE(provider_->prefetch_data_.full_query_text.empty()); 3417 EXPECT_TRUE(provider_->prefetch_data_.full_query_text.empty());
3270 EXPECT_TRUE(provider_->prefetch_data_.query_type.empty()); 3418 EXPECT_TRUE(provider_->prefetch_data_.query_type.empty());
3271 } 3419 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698