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 3cb24968391a66a546decdd795647ab74f37092d..4fd51657c3e443247f56f0ced8ffc9f759a85ee1 100644 |
--- a/chrome/browser/autocomplete/search_provider_unittest.cc |
+++ b/chrome/browser/autocomplete/search_provider_unittest.cc |
@@ -3103,3 +3103,73 @@ TEST_F(SearchProviderTest, CheckDuplicateMatchesSaved) { |
EXPECT_EQ(0U, match_apricot.duplicate_matches.size()); |
} |
+ |
+#if defined(OS_ANDROID) |
+TEST_F(SearchProviderTest, SuggestQueryUsesToken) { |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kEnableAnswersInSuggest); |
+ |
+ TemplateURLService* turl_model = |
+ TemplateURLServiceFactory::GetForProfile(&profile_); |
+ |
+ TemplateURLData data; |
+ data.short_name = ASCIIToUTF16("default"); |
+ data.SetKeyword(data.short_name); |
+ data.SetURL("http://example/{searchTerms}{google:sessionToken}"); |
+ data.suggestions_url = |
+ "http://suggest/?q={searchTerms}&{google:sessionToken}"; |
+ default_t_url_ = new TemplateURL(&profile_, data); |
+ turl_model->Add(default_t_url_); |
+ turl_model->SetUserSelectedDefaultSearchProvider(default_t_url_); |
+ |
+ base::string16 term = term1_.substr(0, term1_.length() - 1); |
+ QueryForInput(term, false, false); |
+ |
+ // Make sure the default provider's suggest service was queried. |
+ net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( |
+ SearchProvider::kDefaultProviderURLFetcherID); |
+ ASSERT_TRUE(fetcher); |
+ |
+ // And the URL matches what we expected. |
+ TemplateURLRef::SearchTermsArgs search_terms_args(term); |
+ search_terms_args.session_token = provider_->current_token_; |
+ GURL expected_url(default_t_url_->suggestions_url_ref().ReplaceSearchTerms( |
+ search_terms_args)); |
+ EXPECT_EQ(fetcher->GetOriginalURL().spec(), expected_url.spec()); |
+ |
+ // Complete running the fetcher to clean up. |
+ fetcher->set_response_code(200); |
+ fetcher->delegate()->OnURLFetchComplete(fetcher); |
+ RunTillProviderDone(); |
+} |
+#endif |
+ |
+TEST_F(SearchProviderTest, SessionToken) { |
+ // Subsequent calls always get the same token. |
+ std::string token = provider_->GetSessionToken(); |
+ std::string token2 = provider_->GetSessionToken(); |
+ EXPECT_EQ(token, token2); |
+ EXPECT_FALSE(token.empty()); |
+ |
+ // Calls do not regenerate a token. |
+ provider_->current_token_ = "PRE-EXISTING TOKEN"; |
+ token = provider_->GetSessionToken(); |
+ EXPECT_EQ(token, "PRE-EXISTING TOKEN"); |
+ |
+ // ... unless the token has expired. |
+ provider_->current_token_.clear(); |
+ const base::TimeDelta kSmallDelta = base::TimeDelta::FromMilliseconds(1); |
+ provider_->token_expiration_time_ = base::TimeTicks::Now() - kSmallDelta; |
+ token = provider_->GetSessionToken(); |
+ EXPECT_FALSE(token.empty()); |
+ EXPECT_EQ(token, provider_->current_token_); |
+ |
+ // The expiration time is always updated. |
+ provider_->GetSessionToken(); |
+ base::TimeTicks expiration_time_1 = provider_->token_expiration_time_; |
+ base::PlatformThread::Sleep(kSmallDelta); |
+ provider_->GetSessionToken(); |
+ base::TimeTicks expiration_time_2 = provider_->token_expiration_time_; |
+ EXPECT_GT(expiration_time_2, expiration_time_1); |
+ EXPECT_GE(expiration_time_2, expiration_time_1 + kSmallDelta); |
+} |