Index: chrome/browser/autocomplete/search_provider_unittest.cc |
diff --git a/chrome/browser/autocomplete/search_provider_unittest.cc b/chrome/browser/autocomplete/search_provider_unittest.cc |
index 7df13f483b590ec29760d793d150f1570de18fd6..c5c35a7dfa099e48519ed77669338f6b7d15360f 100644 |
--- a/chrome/browser/autocomplete/search_provider_unittest.cc |
+++ b/chrome/browser/autocomplete/search_provider_unittest.cc |
@@ -2483,7 +2483,8 @@ TEST_F(SearchProviderTest, RemoveStaleResultsTest) { |
} else { |
provider_->default_results_.suggest_results.push_back( |
SearchProvider::SuggestResult(ASCIIToUTF16(suggestion), string16(), |
- string16(), std::string(), false, |
+ string16(), std::string(), |
+ std::string(), false, |
cases[i].results[j].relevance, |
false, false)); |
} |
@@ -2960,6 +2961,87 @@ TEST_F(SearchProviderTest, XSSIGuardedJSONParsing) { |
} |
} |
+// Test that XSRF token gets set on an AutocompleteMatch when available for a |
+// personalized query. |
+TEST_F(SearchProviderTest, ParseXsrfToken) { |
+ struct Match { |
+ std::string contents; |
+ std::string xsrf_token; |
+ AutocompleteMatchType::Type type; |
+ }; |
+ |
+ const Match kEmptyMatch = { |
+ kNotApplicable, "", AutocompleteMatchType::NUM_TYPES}; |
+ |
+ struct { |
+ const std::string input_text; |
+ const std::string response_json; |
+ const Match matches[4]; |
+ } cases[] = { |
+ // Personalized query comes with an XSRF token |
+ { "a", |
+ "[\"a\",[\"ab\", \"ac\"],[],[]," |
+ "{\"google:suggesttype\":[\"PERSONALIZED_QUERY\",\"QUERY\"]," |
+ "\"google:suggestrelevance\":[1, 2]," |
+ "\"google:suggestdetail\":[{\"x\":\"xsrf123\"}, {}]}]", |
+ { { "a", "", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED }, |
+ { "ac", "", AutocompleteMatchType::SEARCH_SUGGEST }, |
+ { "ab", "xsrf123", AutocompleteMatchType::SEARCH_SUGGEST }, |
+ kEmptyMatch, |
+ }, |
+ }, |
+ // Personalized query, but no xsrf token in response -- old server case |
+ { "a", |
+ "[\"a\",[\"ab\", \"ac\"],[],[]," |
+ "{\"google:suggesttype\":[\"PERSONALIZED_QUERY\",\"QUERY\"]," |
+ "\"google:suggestrelevance\":[1, 2]," |
+ "\"google:suggestdetail\":[{}, {}]}]", |
+ { { "a", "", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED }, |
+ { "ac", "", AutocompleteMatchType::SEARCH_SUGGEST }, |
+ { "ab", "", AutocompleteMatchType::SEARCH_SUGGEST }, |
+ kEmptyMatch, |
+ }, |
+ }, |
+ // Unexpected: non-personalized query comes with an xsrf token, this |
+ // should be ignored. |
+ { "a", |
+ "[\"a\",[\"ab\", \"ac\"],[],[]," |
+ "{\"google:suggesttype\":[\"PERSONALIZED_QUERY\",\"QUERY\"]," |
+ "\"google:suggestrelevance\":[1, 2]," |
+ "\"google:suggestdetail\":[{\"x\":\"xsrf123\"}, {\"x\":\"xsrf\"}]}]", |
+ { { "a", "", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED }, |
+ { "ac", "", AutocompleteMatchType::SEARCH_SUGGEST }, |
+ { "ab", "xsrf123", AutocompleteMatchType::SEARCH_SUGGEST }, |
+ kEmptyMatch, |
+ }, |
+ }, |
+ }; |
+ |
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { |
+ QueryForInput(ASCIIToUTF16(cases[i].input_text), false, false); |
+ |
+ net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( |
+ SearchProvider::kDefaultProviderURLFetcherID); |
+ ASSERT_TRUE(fetcher); |
+ fetcher->set_response_code(200); |
+ fetcher->SetResponseString(cases[i].response_json); |
+ fetcher->delegate()->OnURLFetchComplete(fetcher); |
+ |
+ RunTillProviderDone(); |
+ |
+ const ACMatches& matches = provider_->matches(); |
+ ASSERT_FALSE(matches.empty()); |
+ |
+ SCOPED_TRACE("for input with json = " + cases[i].response_json); |
+ |
+ for (size_t j = 0; j < matches.size(); ++j) { |
+ const Match& match = cases[i].matches[j]; |
+ SCOPED_TRACE(" and match index: " + base::IntToString(j)); |
+ EXPECT_EQ(match.contents, UTF16ToUTF8(matches[j].contents)); |
+ EXPECT_EQ(match.xsrf_token, matches[j].search_terms_args->xsrf_token); |
+ } |
+ } |
+} |
TEST_F(SearchProviderTest, ReflectsBookmarkBarState) { |
profile_.GetPrefs()->SetBoolean(prefs::kShowBookmarkBar, false); |