| OLD | NEW |
| 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 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 class SearchProviderTest : public testing::Test, | 102 class SearchProviderTest : public testing::Test, |
| 103 public AutocompleteProviderListener { | 103 public AutocompleteProviderListener { |
| 104 public: | 104 public: |
| 105 struct ResultInfo { | 105 struct ResultInfo { |
| 106 ResultInfo() : result_type(AutocompleteMatchType::NUM_TYPES), | 106 ResultInfo() : result_type(AutocompleteMatchType::NUM_TYPES), |
| 107 allowed_to_be_default_match(false) { | 107 allowed_to_be_default_match(false) { |
| 108 } | 108 } |
| 109 ResultInfo(GURL gurl, | 109 ResultInfo(GURL gurl, |
| 110 AutocompleteMatch::Type result_type, | 110 AutocompleteMatch::Type result_type, |
| 111 bool allowed_to_be_default_match, | 111 bool allowed_to_be_default_match, |
| 112 string16 fill_into_edit) | 112 base::string16 fill_into_edit) |
| 113 : gurl(gurl), | 113 : gurl(gurl), |
| 114 result_type(result_type), | 114 result_type(result_type), |
| 115 allowed_to_be_default_match(allowed_to_be_default_match), | 115 allowed_to_be_default_match(allowed_to_be_default_match), |
| 116 fill_into_edit(fill_into_edit) { | 116 fill_into_edit(fill_into_edit) { |
| 117 } | 117 } |
| 118 | 118 |
| 119 const GURL gurl; | 119 const GURL gurl; |
| 120 const AutocompleteMatch::Type result_type; | 120 const AutocompleteMatch::Type result_type; |
| 121 const bool allowed_to_be_default_match; | 121 const bool allowed_to_be_default_match; |
| 122 const string16 fill_into_edit; | 122 const base::string16 fill_into_edit; |
| 123 }; | 123 }; |
| 124 | 124 |
| 125 struct TestData { | 125 struct TestData { |
| 126 const string16 input; | 126 const base::string16 input; |
| 127 const size_t num_results; | 127 const size_t num_results; |
| 128 const ResultInfo output[3]; | 128 const ResultInfo output[3]; |
| 129 }; | 129 }; |
| 130 | 130 |
| 131 SearchProviderTest() | 131 SearchProviderTest() |
| 132 : default_t_url_(NULL), | 132 : default_t_url_(NULL), |
| 133 term1_(ASCIIToUTF16("term1")), | 133 term1_(ASCIIToUTF16("term1")), |
| 134 keyword_t_url_(NULL), | 134 keyword_t_url_(NULL), |
| 135 keyword_term_(ASCIIToUTF16("keyword")), | 135 keyword_term_(ASCIIToUTF16("keyword")), |
| 136 run_loop_(NULL) { | 136 run_loop_(NULL) { |
| 137 ResetFieldTrialList(); | 137 ResetFieldTrialList(); |
| 138 } | 138 } |
| 139 | 139 |
| 140 // See description above class for what this registers. | 140 // See description above class for what this registers. |
| 141 virtual void SetUp() OVERRIDE; | 141 virtual void SetUp() OVERRIDE; |
| 142 virtual void TearDown() OVERRIDE; | 142 virtual void TearDown() OVERRIDE; |
| 143 | 143 |
| 144 void RunTest(TestData* cases, int num_cases, bool prefer_keyword); | 144 void RunTest(TestData* cases, int num_cases, bool prefer_keyword); |
| 145 | 145 |
| 146 protected: | 146 protected: |
| 147 // Needed for AutocompleteFieldTrial::ActivateStaticTrials(); | 147 // Needed for AutocompleteFieldTrial::ActivateStaticTrials(); |
| 148 scoped_ptr<base::FieldTrialList> field_trial_list_; | 148 scoped_ptr<base::FieldTrialList> field_trial_list_; |
| 149 | 149 |
| 150 // Default value used for testing. | 150 // Default value used for testing. |
| 151 static const std::string kNotApplicable; | 151 static const std::string kNotApplicable; |
| 152 | 152 |
| 153 // Adds a search for |term|, using the engine |t_url| to the history, and | 153 // Adds a search for |term|, using the engine |t_url| to the history, and |
| 154 // returns the URL for that search. | 154 // returns the URL for that search. |
| 155 GURL AddSearchToHistory(TemplateURL* t_url, string16 term, int visit_count); | 155 GURL AddSearchToHistory(TemplateURL* t_url, base::string16 term, int visit_cou
nt); |
| 156 | 156 |
| 157 // Looks for a match in |provider_| with |contents| equal to |contents|. | 157 // Looks for a match in |provider_| with |contents| equal to |contents|. |
| 158 // Sets |match| to it if found. Returns whether |match| was set. | 158 // Sets |match| to it if found. Returns whether |match| was set. |
| 159 bool FindMatchWithContents(const string16& contents, | 159 bool FindMatchWithContents(const base::string16& contents, |
| 160 AutocompleteMatch* match); | 160 AutocompleteMatch* match); |
| 161 | 161 |
| 162 // Looks for a match in |provider_| with destination |url|. Sets |match| to | 162 // Looks for a match in |provider_| with destination |url|. Sets |match| to |
| 163 // it if found. Returns whether |match| was set. | 163 // it if found. Returns whether |match| was set. |
| 164 bool FindMatchWithDestination(const GURL& url, AutocompleteMatch* match); | 164 bool FindMatchWithDestination(const GURL& url, AutocompleteMatch* match); |
| 165 | 165 |
| 166 // AutocompleteProviderListener: | 166 // AutocompleteProviderListener: |
| 167 // If we're waiting for the provider to finish, this exits the message loop. | 167 // If we're waiting for the provider to finish, this exits the message loop. |
| 168 virtual void OnProviderUpdate(bool updated_matches) OVERRIDE; | 168 virtual void OnProviderUpdate(bool updated_matches) OVERRIDE; |
| 169 | 169 |
| 170 // Runs a nested message loop until provider_ is done. The message loop is | 170 // Runs a nested message loop until provider_ is done. The message loop is |
| 171 // exited by way of OnProviderUpdate. | 171 // exited by way of OnProviderUpdate. |
| 172 void RunTillProviderDone(); | 172 void RunTillProviderDone(); |
| 173 | 173 |
| 174 // Invokes Start on provider_, then runs all pending tasks. | 174 // Invokes Start on provider_, then runs all pending tasks. |
| 175 void QueryForInput(const string16& text, | 175 void QueryForInput(const base::string16& text, |
| 176 bool prevent_inline_autocomplete, | 176 bool prevent_inline_autocomplete, |
| 177 bool prefer_keyword); | 177 bool prefer_keyword); |
| 178 | 178 |
| 179 // Calls QueryForInput(), finishes any suggest query, then if |wyt_match| is | 179 // Calls QueryForInput(), finishes any suggest query, then if |wyt_match| is |
| 180 // non-NULL, sets it to the "what you typed" entry for |text|. | 180 // non-NULL, sets it to the "what you typed" entry for |text|. |
| 181 void QueryForInputAndSetWYTMatch(const string16& text, | 181 void QueryForInputAndSetWYTMatch(const base::string16& text, |
| 182 AutocompleteMatch* wyt_match); | 182 AutocompleteMatch* wyt_match); |
| 183 | 183 |
| 184 // Notifies the URLFetcher for the suggest query corresponding to the default | 184 // Notifies the URLFetcher for the suggest query corresponding to the default |
| 185 // search provider that it's done. | 185 // search provider that it's done. |
| 186 // Be sure and wrap calls to this in ASSERT_NO_FATAL_FAILURE. | 186 // Be sure and wrap calls to this in ASSERT_NO_FATAL_FAILURE. |
| 187 void FinishDefaultSuggestQuery(); | 187 void FinishDefaultSuggestQuery(); |
| 188 | 188 |
| 189 // Runs SearchProvider on |input|, for which the suggest server replies | 189 // Runs SearchProvider on |input|, for which the suggest server replies |
| 190 // with |json|, and expects that the resulting matches' contents equals | 190 // with |json|, and expects that the resulting matches' contents equals |
| 191 // that in |matches|. An empty entry in |matches| means no match should | 191 // that in |matches|. An empty entry in |matches| means no match should |
| 192 // be returned in that position. Reports any errors with a message that | 192 // be returned in that position. Reports any errors with a message that |
| 193 // includes |error_description|. | 193 // includes |error_description|. |
| 194 void ForcedQueryTestHelper(const std::string& input, | 194 void ForcedQueryTestHelper(const std::string& input, |
| 195 const std::string& json, | 195 const std::string& json, |
| 196 const std::string matches[3], | 196 const std::string matches[3], |
| 197 const std::string& error_description); | 197 const std::string& error_description); |
| 198 | 198 |
| 199 void ResetFieldTrialList(); | 199 void ResetFieldTrialList(); |
| 200 | 200 |
| 201 void ClearAllResults(); | 201 void ClearAllResults(); |
| 202 | 202 |
| 203 // See description above class for details of these fields. | 203 // See description above class for details of these fields. |
| 204 TemplateURL* default_t_url_; | 204 TemplateURL* default_t_url_; |
| 205 const string16 term1_; | 205 const base::string16 term1_; |
| 206 GURL term1_url_; | 206 GURL term1_url_; |
| 207 TemplateURL* keyword_t_url_; | 207 TemplateURL* keyword_t_url_; |
| 208 const string16 keyword_term_; | 208 const base::string16 keyword_term_; |
| 209 GURL keyword_url_; | 209 GURL keyword_url_; |
| 210 | 210 |
| 211 content::TestBrowserThreadBundle thread_bundle_; | 211 content::TestBrowserThreadBundle thread_bundle_; |
| 212 | 212 |
| 213 // URLFetcherFactory implementation registered. | 213 // URLFetcherFactory implementation registered. |
| 214 net::TestURLFetcherFactory test_factory_; | 214 net::TestURLFetcherFactory test_factory_; |
| 215 | 215 |
| 216 // Profile we use. | 216 // Profile we use. |
| 217 TestingProfile profile_; | 217 TestingProfile profile_; |
| 218 | 218 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 | 284 |
| 285 // Shutdown the provider before the profile. | 285 // Shutdown the provider before the profile. |
| 286 provider_ = NULL; | 286 provider_ = NULL; |
| 287 } | 287 } |
| 288 | 288 |
| 289 void SearchProviderTest::RunTest(TestData* cases, | 289 void SearchProviderTest::RunTest(TestData* cases, |
| 290 int num_cases, | 290 int num_cases, |
| 291 bool prefer_keyword) { | 291 bool prefer_keyword) { |
| 292 ACMatches matches; | 292 ACMatches matches; |
| 293 for (int i = 0; i < num_cases; ++i) { | 293 for (int i = 0; i < num_cases; ++i) { |
| 294 AutocompleteInput input(cases[i].input, string16::npos, string16(), GURL(), | 294 AutocompleteInput input(cases[i].input, base::string16::npos, base::string16
(), GURL(), |
| 295 AutocompleteInput::INVALID_SPEC, false, | 295 AutocompleteInput::INVALID_SPEC, false, |
| 296 prefer_keyword, true, | 296 prefer_keyword, true, |
| 297 AutocompleteInput::ALL_MATCHES); | 297 AutocompleteInput::ALL_MATCHES); |
| 298 provider_->Start(input, false); | 298 provider_->Start(input, false); |
| 299 matches = provider_->matches(); | 299 matches = provider_->matches(); |
| 300 string16 diagnostic_details = ASCIIToUTF16("Input was: ") + cases[i].input + | 300 base::string16 diagnostic_details = ASCIIToUTF16("Input was: ") + cases[i].i
nput + |
| 301 ASCIIToUTF16("; prefer_keyword was: ") + | 301 ASCIIToUTF16("; prefer_keyword was: ") + |
| 302 (prefer_keyword ? ASCIIToUTF16("true") : ASCIIToUTF16("false")); | 302 (prefer_keyword ? ASCIIToUTF16("true") : ASCIIToUTF16("false")); |
| 303 EXPECT_EQ(cases[i].num_results, matches.size()) << diagnostic_details; | 303 EXPECT_EQ(cases[i].num_results, matches.size()) << diagnostic_details; |
| 304 if (matches.size() == cases[i].num_results) { | 304 if (matches.size() == cases[i].num_results) { |
| 305 for (size_t j = 0; j < cases[i].num_results; ++j) { | 305 for (size_t j = 0; j < cases[i].num_results; ++j) { |
| 306 EXPECT_EQ(cases[i].output[j].gurl, matches[j].destination_url) << | 306 EXPECT_EQ(cases[i].output[j].gurl, matches[j].destination_url) << |
| 307 diagnostic_details; | 307 diagnostic_details; |
| 308 EXPECT_EQ(cases[i].output[j].result_type, matches[j].type) << | 308 EXPECT_EQ(cases[i].output[j].result_type, matches[j].type) << |
| 309 diagnostic_details; | 309 diagnostic_details; |
| 310 EXPECT_EQ(cases[i].output[j].fill_into_edit, | 310 EXPECT_EQ(cases[i].output[j].fill_into_edit, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 325 | 325 |
| 326 void SearchProviderTest::RunTillProviderDone() { | 326 void SearchProviderTest::RunTillProviderDone() { |
| 327 if (provider_->done()) | 327 if (provider_->done()) |
| 328 return; | 328 return; |
| 329 | 329 |
| 330 base::RunLoop run_loop; | 330 base::RunLoop run_loop; |
| 331 run_loop_ = &run_loop; | 331 run_loop_ = &run_loop; |
| 332 run_loop.Run(); | 332 run_loop.Run(); |
| 333 } | 333 } |
| 334 | 334 |
| 335 void SearchProviderTest::QueryForInput(const string16& text, | 335 void SearchProviderTest::QueryForInput(const base::string16& text, |
| 336 bool prevent_inline_autocomplete, | 336 bool prevent_inline_autocomplete, |
| 337 bool prefer_keyword) { | 337 bool prefer_keyword) { |
| 338 // Start a query. | 338 // Start a query. |
| 339 AutocompleteInput input(text, string16::npos, string16(), GURL(), | 339 AutocompleteInput input(text, base::string16::npos, base::string16(), GURL(), |
| 340 AutocompleteInput::INVALID_SPEC, | 340 AutocompleteInput::INVALID_SPEC, |
| 341 prevent_inline_autocomplete, prefer_keyword, true, | 341 prevent_inline_autocomplete, prefer_keyword, true, |
| 342 AutocompleteInput::ALL_MATCHES); | 342 AutocompleteInput::ALL_MATCHES); |
| 343 provider_->Start(input, false); | 343 provider_->Start(input, false); |
| 344 | 344 |
| 345 // RunUntilIdle so that the task scheduled by SearchProvider to create the | 345 // RunUntilIdle so that the task scheduled by SearchProvider to create the |
| 346 // URLFetchers runs. | 346 // URLFetchers runs. |
| 347 base::RunLoop().RunUntilIdle(); | 347 base::RunLoop().RunUntilIdle(); |
| 348 } | 348 } |
| 349 | 349 |
| 350 void SearchProviderTest::QueryForInputAndSetWYTMatch( | 350 void SearchProviderTest::QueryForInputAndSetWYTMatch( |
| 351 const string16& text, | 351 const base::string16& text, |
| 352 AutocompleteMatch* wyt_match) { | 352 AutocompleteMatch* wyt_match) { |
| 353 QueryForInput(text, false, false); | 353 QueryForInput(text, false, false); |
| 354 profile_.BlockUntilHistoryProcessesPendingRequests(); | 354 profile_.BlockUntilHistoryProcessesPendingRequests(); |
| 355 ASSERT_NO_FATAL_FAILURE(FinishDefaultSuggestQuery()); | 355 ASSERT_NO_FATAL_FAILURE(FinishDefaultSuggestQuery()); |
| 356 if (!wyt_match) | 356 if (!wyt_match) |
| 357 return; | 357 return; |
| 358 ASSERT_GE(provider_->matches().size(), 1u); | 358 ASSERT_GE(provider_->matches().size(), 1u); |
| 359 EXPECT_TRUE(FindMatchWithDestination(GURL( | 359 EXPECT_TRUE(FindMatchWithDestination(GURL( |
| 360 default_t_url_->url_ref().ReplaceSearchTerms( | 360 default_t_url_->url_ref().ReplaceSearchTerms( |
| 361 TemplateURLRef::SearchTermsArgs(text))), | 361 TemplateURLRef::SearchTermsArgs(text))), |
| 362 wyt_match)); | 362 wyt_match)); |
| 363 } | 363 } |
| 364 | 364 |
| 365 GURL SearchProviderTest::AddSearchToHistory(TemplateURL* t_url, | 365 GURL SearchProviderTest::AddSearchToHistory(TemplateURL* t_url, |
| 366 string16 term, | 366 base::string16 term, |
| 367 int visit_count) { | 367 int visit_count) { |
| 368 HistoryService* history = | 368 HistoryService* history = |
| 369 HistoryServiceFactory::GetForProfile(&profile_, | 369 HistoryServiceFactory::GetForProfile(&profile_, |
| 370 Profile::EXPLICIT_ACCESS); | 370 Profile::EXPLICIT_ACCESS); |
| 371 GURL search(t_url->url_ref().ReplaceSearchTerms( | 371 GURL search(t_url->url_ref().ReplaceSearchTerms( |
| 372 TemplateURLRef::SearchTermsArgs(term))); | 372 TemplateURLRef::SearchTermsArgs(term))); |
| 373 static base::Time last_added_time; | 373 static base::Time last_added_time; |
| 374 last_added_time = std::max(base::Time::Now(), | 374 last_added_time = std::max(base::Time::Now(), |
| 375 last_added_time + base::TimeDelta::FromMicroseconds(1)); | 375 last_added_time + base::TimeDelta::FromMicroseconds(1)); |
| 376 history->AddPageWithDetails(search, string16(), visit_count, visit_count, | 376 history->AddPageWithDetails(search, base::string16(), visit_count, visit_count
, |
| 377 last_added_time, false, history::SOURCE_BROWSED); | 377 last_added_time, false, history::SOURCE_BROWSED); |
| 378 history->SetKeywordSearchTermsForURL(search, t_url->id(), term); | 378 history->SetKeywordSearchTermsForURL(search, t_url->id(), term); |
| 379 return search; | 379 return search; |
| 380 } | 380 } |
| 381 | 381 |
| 382 bool SearchProviderTest::FindMatchWithContents(const string16& contents, | 382 bool SearchProviderTest::FindMatchWithContents(const base::string16& contents, |
| 383 AutocompleteMatch* match) { | 383 AutocompleteMatch* match) { |
| 384 for (ACMatches::const_iterator i = provider_->matches().begin(); | 384 for (ACMatches::const_iterator i = provider_->matches().begin(); |
| 385 i != provider_->matches().end(); ++i) { | 385 i != provider_->matches().end(); ++i) { |
| 386 if (i->contents == contents) { | 386 if (i->contents == contents) { |
| 387 *match = *i; | 387 *match = *i; |
| 388 return true; | 388 return true; |
| 389 } | 389 } |
| 390 } | 390 } |
| 391 return false; | 391 return false; |
| 392 } | 392 } |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 457 | 457 |
| 458 void SearchProviderTest::ClearAllResults() { | 458 void SearchProviderTest::ClearAllResults() { |
| 459 provider_->ClearAllResults(); | 459 provider_->ClearAllResults(); |
| 460 } | 460 } |
| 461 | 461 |
| 462 // Actual Tests --------------------------------------------------------------- | 462 // Actual Tests --------------------------------------------------------------- |
| 463 | 463 |
| 464 // Make sure we query history for the default provider and a URLFetcher is | 464 // Make sure we query history for the default provider and a URLFetcher is |
| 465 // created for the default provider suggest results. | 465 // created for the default provider suggest results. |
| 466 TEST_F(SearchProviderTest, QueryDefaultProvider) { | 466 TEST_F(SearchProviderTest, QueryDefaultProvider) { |
| 467 string16 term = term1_.substr(0, term1_.length() - 1); | 467 base::string16 term = term1_.substr(0, term1_.length() - 1); |
| 468 QueryForInput(term, false, false); | 468 QueryForInput(term, false, false); |
| 469 | 469 |
| 470 // Make sure the default providers suggest service was queried. | 470 // Make sure the default providers suggest service was queried. |
| 471 net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( | 471 net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( |
| 472 SearchProvider::kDefaultProviderURLFetcherID); | 472 SearchProvider::kDefaultProviderURLFetcherID); |
| 473 ASSERT_TRUE(fetcher); | 473 ASSERT_TRUE(fetcher); |
| 474 | 474 |
| 475 // And the URL matches what we expected. | 475 // And the URL matches what we expected. |
| 476 GURL expected_url(default_t_url_->suggestions_url_ref().ReplaceSearchTerms( | 476 GURL expected_url(default_t_url_->suggestions_url_ref().ReplaceSearchTerms( |
| 477 TemplateURLRef::SearchTermsArgs(term))); | 477 TemplateURLRef::SearchTermsArgs(term))); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 500 | 500 |
| 501 // The match for term1 should be more relevant than the what you typed match. | 501 // The match for term1 should be more relevant than the what you typed match. |
| 502 EXPECT_GT(term1_match.relevance, wyt_match.relevance); | 502 EXPECT_GT(term1_match.relevance, wyt_match.relevance); |
| 503 // This longer match should be inlineable. | 503 // This longer match should be inlineable. |
| 504 EXPECT_TRUE(term1_match.allowed_to_be_default_match); | 504 EXPECT_TRUE(term1_match.allowed_to_be_default_match); |
| 505 // The what you typed match should be too, of course. | 505 // The what you typed match should be too, of course. |
| 506 EXPECT_TRUE(wyt_match.allowed_to_be_default_match); | 506 EXPECT_TRUE(wyt_match.allowed_to_be_default_match); |
| 507 } | 507 } |
| 508 | 508 |
| 509 TEST_F(SearchProviderTest, HonorPreventInlineAutocomplete) { | 509 TEST_F(SearchProviderTest, HonorPreventInlineAutocomplete) { |
| 510 string16 term = term1_.substr(0, term1_.length() - 1); | 510 base::string16 term = term1_.substr(0, term1_.length() - 1); |
| 511 QueryForInput(term, true, false); | 511 QueryForInput(term, true, false); |
| 512 | 512 |
| 513 ASSERT_FALSE(provider_->matches().empty()); | 513 ASSERT_FALSE(provider_->matches().empty()); |
| 514 ASSERT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, | 514 ASSERT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, |
| 515 provider_->matches()[0].type); | 515 provider_->matches()[0].type); |
| 516 EXPECT_TRUE(provider_->matches()[0].allowed_to_be_default_match); | 516 EXPECT_TRUE(provider_->matches()[0].allowed_to_be_default_match); |
| 517 } | 517 } |
| 518 | 518 |
| 519 // Issues a query that matches the registered keyword and makes sure history | 519 // Issues a query that matches the registered keyword and makes sure history |
| 520 // is queried as well as URLFetchers getting created. | 520 // is queried as well as URLFetchers getting created. |
| 521 TEST_F(SearchProviderTest, QueryKeywordProvider) { | 521 TEST_F(SearchProviderTest, QueryKeywordProvider) { |
| 522 string16 term = keyword_term_.substr(0, keyword_term_.length() - 1); | 522 base::string16 term = keyword_term_.substr(0, keyword_term_.length() - 1); |
| 523 QueryForInput(keyword_t_url_->keyword() + ASCIIToUTF16(" ") + term, | 523 QueryForInput(keyword_t_url_->keyword() + ASCIIToUTF16(" ") + term, |
| 524 false, | 524 false, |
| 525 false); | 525 false); |
| 526 | 526 |
| 527 // Make sure the default providers suggest service was queried. | 527 // Make sure the default providers suggest service was queried. |
| 528 net::TestURLFetcher* default_fetcher = test_factory_.GetFetcherByID( | 528 net::TestURLFetcher* default_fetcher = test_factory_.GetFetcherByID( |
| 529 SearchProvider::kDefaultProviderURLFetcherID); | 529 SearchProvider::kDefaultProviderURLFetcherID); |
| 530 ASSERT_TRUE(default_fetcher); | 530 ASSERT_TRUE(default_fetcher); |
| 531 | 531 |
| 532 // Tell the SearchProvider the default suggest query is done. | 532 // Tell the SearchProvider the default suggest query is done. |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 618 } | 618 } |
| 619 | 619 |
| 620 TEST_F(SearchProviderTest, DontAutocompleteURLLikeTerms) { | 620 TEST_F(SearchProviderTest, DontAutocompleteURLLikeTerms) { |
| 621 AutocompleteClassifierFactory::GetInstance()->SetTestingFactoryAndUse( | 621 AutocompleteClassifierFactory::GetInstance()->SetTestingFactoryAndUse( |
| 622 &profile_, &AutocompleteClassifierFactory::BuildInstanceFor); | 622 &profile_, &AutocompleteClassifierFactory::BuildInstanceFor); |
| 623 GURL url = AddSearchToHistory(default_t_url_, | 623 GURL url = AddSearchToHistory(default_t_url_, |
| 624 ASCIIToUTF16("docs.google.com"), 1); | 624 ASCIIToUTF16("docs.google.com"), 1); |
| 625 | 625 |
| 626 // Add the term as a url. | 626 // Add the term as a url. |
| 627 HistoryServiceFactory::GetForProfile(&profile_, Profile::EXPLICIT_ACCESS)-> | 627 HistoryServiceFactory::GetForProfile(&profile_, Profile::EXPLICIT_ACCESS)-> |
| 628 AddPageWithDetails(GURL("http://docs.google.com"), string16(), 1, 1, | 628 AddPageWithDetails(GURL("http://docs.google.com"), base::string16(), 1, 1, |
| 629 base::Time::Now(), false, history::SOURCE_BROWSED); | 629 base::Time::Now(), false, history::SOURCE_BROWSED); |
| 630 profile_.BlockUntilHistoryProcessesPendingRequests(); | 630 profile_.BlockUntilHistoryProcessesPendingRequests(); |
| 631 | 631 |
| 632 AutocompleteMatch wyt_match; | 632 AutocompleteMatch wyt_match; |
| 633 ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("docs"), | 633 ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("docs"), |
| 634 &wyt_match)); | 634 &wyt_match)); |
| 635 | 635 |
| 636 // There should be two matches, one for what you typed, the other for | 636 // There should be two matches, one for what you typed, the other for |
| 637 // 'docs.google.com'. The search term should have a lower priority than the | 637 // 'docs.google.com'. The search term should have a lower priority than the |
| 638 // what you typed match. | 638 // what you typed match. |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 850 // Verifies AutocompleteControllers return results (including keyword | 850 // Verifies AutocompleteControllers return results (including keyword |
| 851 // results) in the right order and set descriptions for them correctly. | 851 // results) in the right order and set descriptions for them correctly. |
| 852 TEST_F(SearchProviderTest, KeywordOrderingAndDescriptions) { | 852 TEST_F(SearchProviderTest, KeywordOrderingAndDescriptions) { |
| 853 // Add an entry that corresponds to a keyword search with 'term2'. | 853 // Add an entry that corresponds to a keyword search with 'term2'. |
| 854 AddSearchToHistory(keyword_t_url_, ASCIIToUTF16("term2"), 1); | 854 AddSearchToHistory(keyword_t_url_, ASCIIToUTF16("term2"), 1); |
| 855 profile_.BlockUntilHistoryProcessesPendingRequests(); | 855 profile_.BlockUntilHistoryProcessesPendingRequests(); |
| 856 | 856 |
| 857 AutocompleteController controller(&profile_, NULL, | 857 AutocompleteController controller(&profile_, NULL, |
| 858 AutocompleteProvider::TYPE_SEARCH); | 858 AutocompleteProvider::TYPE_SEARCH); |
| 859 controller.Start(AutocompleteInput( | 859 controller.Start(AutocompleteInput( |
| 860 ASCIIToUTF16("k t"), string16::npos, string16(), GURL(), | 860 ASCIIToUTF16("k t"), base::string16::npos, base::string16(), GURL(), |
| 861 AutocompleteInput::INVALID_SPEC, false, false, true, | 861 AutocompleteInput::INVALID_SPEC, false, false, true, |
| 862 AutocompleteInput::ALL_MATCHES)); | 862 AutocompleteInput::ALL_MATCHES)); |
| 863 const AutocompleteResult& result = controller.result(); | 863 const AutocompleteResult& result = controller.result(); |
| 864 | 864 |
| 865 // There should be three matches, one for the keyword history, one for | 865 // There should be three matches, one for the keyword history, one for |
| 866 // keyword provider's what-you-typed, and one for the default provider's | 866 // keyword provider's what-you-typed, and one for the default provider's |
| 867 // what you typed, in that order. | 867 // what you typed, in that order. |
| 868 ASSERT_EQ(3u, result.size()); | 868 ASSERT_EQ(3u, result.size()); |
| 869 EXPECT_EQ(AutocompleteMatchType::SEARCH_HISTORY, result.match_at(0).type); | 869 EXPECT_EQ(AutocompleteMatchType::SEARCH_HISTORY, result.match_at(0).type); |
| 870 EXPECT_EQ(AutocompleteMatchType::SEARCH_OTHER_ENGINE, | 870 EXPECT_EQ(AutocompleteMatchType::SEARCH_OTHER_ENGINE, |
| (...skipping 1764 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2635 for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) | 2635 for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) |
| 2636 EXPECT_EQ(kNotApplicable, cases[i].matches[j].contents) << | 2636 EXPECT_EQ(kNotApplicable, cases[i].matches[j].contents) << |
| 2637 "Case # " << i << " " << description; | 2637 "Case # " << i << " " << description; |
| 2638 } | 2638 } |
| 2639 } | 2639 } |
| 2640 | 2640 |
| 2641 TEST_F(SearchProviderTest, LocalAndRemoteRelevances) { | 2641 TEST_F(SearchProviderTest, LocalAndRemoteRelevances) { |
| 2642 // We hardcode the string "term1" below, so ensure that the search term that | 2642 // We hardcode the string "term1" below, so ensure that the search term that |
| 2643 // got added to history already is that string. | 2643 // got added to history already is that string. |
| 2644 ASSERT_EQ(ASCIIToUTF16("term1"), term1_); | 2644 ASSERT_EQ(ASCIIToUTF16("term1"), term1_); |
| 2645 string16 term = term1_.substr(0, term1_.length() - 1); | 2645 base::string16 term = term1_.substr(0, term1_.length() - 1); |
| 2646 | 2646 |
| 2647 AddSearchToHistory(default_t_url_, term + ASCIIToUTF16("2"), 2); | 2647 AddSearchToHistory(default_t_url_, term + ASCIIToUTF16("2"), 2); |
| 2648 profile_.BlockUntilHistoryProcessesPendingRequests(); | 2648 profile_.BlockUntilHistoryProcessesPendingRequests(); |
| 2649 | 2649 |
| 2650 struct { | 2650 struct { |
| 2651 const string16 input; | 2651 const base::string16 input; |
| 2652 const std::string json; | 2652 const std::string json; |
| 2653 const std::string matches[6]; | 2653 const std::string matches[6]; |
| 2654 } cases[] = { | 2654 } cases[] = { |
| 2655 // The history results outscore the default verbatim score. term2 has more | 2655 // The history results outscore the default verbatim score. term2 has more |
| 2656 // visits so it outscores term1. The suggestions are still returned since | 2656 // visits so it outscores term1. The suggestions are still returned since |
| 2657 // they're server-scored. | 2657 // they're server-scored. |
| 2658 { term, | 2658 { term, |
| 2659 "[\"term\",[\"a1\", \"a2\", \"a3\"],[],[]," | 2659 "[\"term\",[\"a1\", \"a2\", \"a3\"],[],[]," |
| 2660 "{\"google:suggesttype\":[\"QUERY\", \"QUERY\", \"QUERY\"]," | 2660 "{\"google:suggesttype\":[\"QUERY\", \"QUERY\", \"QUERY\"]," |
| 2661 "\"google:suggestrelevance\":[1, 2, 3]}]", | 2661 "\"google:suggestrelevance\":[1, 2, 3]}]", |
| (...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3170 { "?ab", "http://www.abc.com", | 3170 { "?ab", "http://www.abc.com", |
| 3171 "?www.abc.com", "c.com", true }, | 3171 "?www.abc.com", "c.com", true }, |
| 3172 { "?abc.com", "http://www.abc.com", | 3172 { "?abc.com", "http://www.abc.com", |
| 3173 "?www.abc.com", "", true }, | 3173 "?www.abc.com", "", true }, |
| 3174 }; | 3174 }; |
| 3175 | 3175 |
| 3176 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { | 3176 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { |
| 3177 QueryForInput(ASCIIToUTF16(cases[i].input), false, false); | 3177 QueryForInput(ASCIIToUTF16(cases[i].input), false, false); |
| 3178 AutocompleteMatch match( | 3178 AutocompleteMatch match( |
| 3179 provider_->NavigationToMatch(SearchProvider::NavigationResult( | 3179 provider_->NavigationToMatch(SearchProvider::NavigationResult( |
| 3180 *provider_.get(), GURL(cases[i].url), string16(), false, 0, | 3180 *provider_.get(), GURL(cases[i].url), base::string16(), false, 0, |
| 3181 false))); | 3181 false))); |
| 3182 EXPECT_EQ(ASCIIToUTF16(cases[i].inline_autocompletion), | 3182 EXPECT_EQ(ASCIIToUTF16(cases[i].inline_autocompletion), |
| 3183 match.inline_autocompletion); | 3183 match.inline_autocompletion); |
| 3184 EXPECT_EQ(ASCIIToUTF16(cases[i].fill_into_edit), match.fill_into_edit); | 3184 EXPECT_EQ(ASCIIToUTF16(cases[i].fill_into_edit), match.fill_into_edit); |
| 3185 EXPECT_EQ(cases[i].allowed_to_be_default_match, | 3185 EXPECT_EQ(cases[i].allowed_to_be_default_match, |
| 3186 match.allowed_to_be_default_match); | 3186 match.allowed_to_be_default_match); |
| 3187 } | 3187 } |
| 3188 } | 3188 } |
| 3189 | 3189 |
| 3190 // Verifies that "http://" is not trimmed for input that is a leading substring. | 3190 // Verifies that "http://" is not trimmed for input that is a leading substring. |
| 3191 TEST_F(SearchProviderTest, NavigationInlineSchemeSubstring) { | 3191 TEST_F(SearchProviderTest, NavigationInlineSchemeSubstring) { |
| 3192 const string16 input(ASCIIToUTF16("ht")); | 3192 const base::string16 input(ASCIIToUTF16("ht")); |
| 3193 const string16 url(ASCIIToUTF16("http://a.com")); | 3193 const base::string16 url(ASCIIToUTF16("http://a.com")); |
| 3194 const SearchProvider::NavigationResult result( | 3194 const SearchProvider::NavigationResult result( |
| 3195 *provider_.get(), GURL(url), string16(), false, 0, false); | 3195 *provider_.get(), GURL(url), base::string16(), false, 0, false); |
| 3196 | 3196 |
| 3197 // Check the offset and strings when inline autocompletion is allowed. | 3197 // Check the offset and strings when inline autocompletion is allowed. |
| 3198 QueryForInput(input, false, false); | 3198 QueryForInput(input, false, false); |
| 3199 AutocompleteMatch match_inline(provider_->NavigationToMatch(result)); | 3199 AutocompleteMatch match_inline(provider_->NavigationToMatch(result)); |
| 3200 EXPECT_EQ(url, match_inline.fill_into_edit); | 3200 EXPECT_EQ(url, match_inline.fill_into_edit); |
| 3201 EXPECT_EQ(url.substr(2), match_inline.inline_autocompletion); | 3201 EXPECT_EQ(url.substr(2), match_inline.inline_autocompletion); |
| 3202 EXPECT_TRUE(match_inline.allowed_to_be_default_match); | 3202 EXPECT_TRUE(match_inline.allowed_to_be_default_match); |
| 3203 EXPECT_EQ(url, match_inline.contents); | 3203 EXPECT_EQ(url, match_inline.contents); |
| 3204 | 3204 |
| 3205 // Check the same offset and strings when inline autocompletion is prevented. | 3205 // Check the same offset and strings when inline autocompletion is prevented. |
| 3206 QueryForInput(input, true, false); | 3206 QueryForInput(input, true, false); |
| 3207 AutocompleteMatch match_prevent(provider_->NavigationToMatch(result)); | 3207 AutocompleteMatch match_prevent(provider_->NavigationToMatch(result)); |
| 3208 EXPECT_EQ(url, match_prevent.fill_into_edit); | 3208 EXPECT_EQ(url, match_prevent.fill_into_edit); |
| 3209 EXPECT_TRUE(match_prevent.inline_autocompletion.empty()); | 3209 EXPECT_TRUE(match_prevent.inline_autocompletion.empty()); |
| 3210 EXPECT_FALSE(match_prevent.allowed_to_be_default_match); | 3210 EXPECT_FALSE(match_prevent.allowed_to_be_default_match); |
| 3211 EXPECT_EQ(url, match_prevent.contents); | 3211 EXPECT_EQ(url, match_prevent.contents); |
| 3212 } | 3212 } |
| 3213 | 3213 |
| 3214 // Verifies that input "w" marks a more significant domain label than "www.". | 3214 // Verifies that input "w" marks a more significant domain label than "www.". |
| 3215 TEST_F(SearchProviderTest, NavigationInlineDomainClassify) { | 3215 TEST_F(SearchProviderTest, NavigationInlineDomainClassify) { |
| 3216 QueryForInput(ASCIIToUTF16("w"), false, false); | 3216 QueryForInput(ASCIIToUTF16("w"), false, false); |
| 3217 AutocompleteMatch match( | 3217 AutocompleteMatch match( |
| 3218 provider_->NavigationToMatch(SearchProvider::NavigationResult( | 3218 provider_->NavigationToMatch(SearchProvider::NavigationResult( |
| 3219 *provider_.get(), GURL("http://www.wow.com"), string16(), false, 0, | 3219 *provider_.get(), GURL("http://www.wow.com"), base::string16(), false,
0, |
| 3220 false))); | 3220 false))); |
| 3221 EXPECT_EQ(ASCIIToUTF16("ow.com"), match.inline_autocompletion); | 3221 EXPECT_EQ(ASCIIToUTF16("ow.com"), match.inline_autocompletion); |
| 3222 EXPECT_TRUE(match.allowed_to_be_default_match); | 3222 EXPECT_TRUE(match.allowed_to_be_default_match); |
| 3223 EXPECT_EQ(ASCIIToUTF16("www.wow.com"), match.fill_into_edit); | 3223 EXPECT_EQ(ASCIIToUTF16("www.wow.com"), match.fill_into_edit); |
| 3224 EXPECT_EQ(ASCIIToUTF16("www.wow.com"), match.contents); | 3224 EXPECT_EQ(ASCIIToUTF16("www.wow.com"), match.contents); |
| 3225 | 3225 |
| 3226 // Ensure that the match for input "w" is marked on "wow" and not "www". | 3226 // Ensure that the match for input "w" is marked on "wow" and not "www". |
| 3227 ASSERT_EQ(3U, match.contents_class.size()); | 3227 ASSERT_EQ(3U, match.contents_class.size()); |
| 3228 EXPECT_EQ(0U, match.contents_class[0].offset); | 3228 EXPECT_EQ(0U, match.contents_class[0].offset); |
| 3229 EXPECT_EQ(AutocompleteMatch::ACMatchClassification::URL, | 3229 EXPECT_EQ(AutocompleteMatch::ACMatchClassification::URL, |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3372 cases[i].verbatim_relevance; | 3372 cases[i].verbatim_relevance; |
| 3373 provider_->default_results_.navigation_results.clear(); | 3373 provider_->default_results_.navigation_results.clear(); |
| 3374 provider_->default_results_.suggest_results.clear(); | 3374 provider_->default_results_.suggest_results.clear(); |
| 3375 for (size_t j = 0; j < ARRAYSIZE_UNSAFE(cases[i].results); ++j) { | 3375 for (size_t j = 0; j < ARRAYSIZE_UNSAFE(cases[i].results); ++j) { |
| 3376 const std::string& suggestion = cases[i].results[j].suggestion; | 3376 const std::string& suggestion = cases[i].results[j].suggestion; |
| 3377 if (suggestion == kNotApplicable) | 3377 if (suggestion == kNotApplicable) |
| 3378 break; | 3378 break; |
| 3379 if (cases[i].results[j].is_navigation_result) { | 3379 if (cases[i].results[j].is_navigation_result) { |
| 3380 provider_->default_results_.navigation_results.push_back( | 3380 provider_->default_results_.navigation_results.push_back( |
| 3381 SearchProvider::NavigationResult( | 3381 SearchProvider::NavigationResult( |
| 3382 *provider_.get(), GURL(suggestion), string16(), false, | 3382 *provider_.get(), GURL(suggestion), base::string16(), false, |
| 3383 cases[i].results[j].relevance, false)); | 3383 cases[i].results[j].relevance, false)); |
| 3384 } else { | 3384 } else { |
| 3385 provider_->default_results_.suggest_results.push_back( | 3385 provider_->default_results_.suggest_results.push_back( |
| 3386 SearchProvider::SuggestResult(ASCIIToUTF16(suggestion), string16(), | 3386 SearchProvider::SuggestResult(ASCIIToUTF16(suggestion), base::string
16(), |
| 3387 string16(), std::string(), | 3387 base::string16(), std::string(), |
| 3388 std::string(), false, | 3388 std::string(), false, |
| 3389 cases[i].results[j].relevance, | 3389 cases[i].results[j].relevance, |
| 3390 false, false)); | 3390 false, false)); |
| 3391 } | 3391 } |
| 3392 } | 3392 } |
| 3393 | 3393 |
| 3394 provider_->input_ = AutocompleteInput( | 3394 provider_->input_ = AutocompleteInput( |
| 3395 ASCIIToUTF16(cases[i].omnibox_input), string16::npos, string16(), | 3395 ASCIIToUTF16(cases[i].omnibox_input), base::string16::npos, base::string
16(), |
| 3396 GURL(), AutocompleteInput::INVALID_SPEC, false, false, true, | 3396 GURL(), AutocompleteInput::INVALID_SPEC, false, false, true, |
| 3397 AutocompleteInput::ALL_MATCHES); | 3397 AutocompleteInput::ALL_MATCHES); |
| 3398 provider_->RemoveAllStaleResults(); | 3398 provider_->RemoveAllStaleResults(); |
| 3399 | 3399 |
| 3400 // Check cached results. | 3400 // Check cached results. |
| 3401 SearchProvider::SuggestResults::const_iterator sug_it = | 3401 SearchProvider::SuggestResults::const_iterator sug_it = |
| 3402 provider_->default_results_.suggest_results.begin(); | 3402 provider_->default_results_.suggest_results.begin(); |
| 3403 const SearchProvider::SuggestResults::const_iterator sug_end = | 3403 const SearchProvider::SuggestResults::const_iterator sug_end = |
| 3404 provider_->default_results_.suggest_results.end(); | 3404 provider_->default_results_.suggest_results.end(); |
| 3405 SearchProvider::NavigationResults::const_iterator nav_it = | 3405 SearchProvider::NavigationResults::const_iterator nav_it = |
| (...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3965 SCOPED_TRACE(" and match index: " + base::IntToString(j)); | 3965 SCOPED_TRACE(" and match index: " + base::IntToString(j)); |
| 3966 EXPECT_EQ(match.contents, UTF16ToUTF8(matches[j].contents)); | 3966 EXPECT_EQ(match.contents, UTF16ToUTF8(matches[j].contents)); |
| 3967 EXPECT_EQ(match.deletion_url, matches[j].GetAdditionalInfo( | 3967 EXPECT_EQ(match.deletion_url, matches[j].GetAdditionalInfo( |
| 3968 "deletion_url")); | 3968 "deletion_url")); |
| 3969 } | 3969 } |
| 3970 } | 3970 } |
| 3971 } | 3971 } |
| 3972 | 3972 |
| 3973 TEST_F(SearchProviderTest, ReflectsBookmarkBarState) { | 3973 TEST_F(SearchProviderTest, ReflectsBookmarkBarState) { |
| 3974 profile_.GetPrefs()->SetBoolean(prefs::kShowBookmarkBar, false); | 3974 profile_.GetPrefs()->SetBoolean(prefs::kShowBookmarkBar, false); |
| 3975 string16 term = term1_.substr(0, term1_.length() - 1); | 3975 base::string16 term = term1_.substr(0, term1_.length() - 1); |
| 3976 QueryForInput(term, true, false); | 3976 QueryForInput(term, true, false); |
| 3977 ASSERT_FALSE(provider_->matches().empty()); | 3977 ASSERT_FALSE(provider_->matches().empty()); |
| 3978 EXPECT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, | 3978 EXPECT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, |
| 3979 provider_->matches()[0].type); | 3979 provider_->matches()[0].type); |
| 3980 ASSERT_TRUE(provider_->matches()[0].search_terms_args != NULL); | 3980 ASSERT_TRUE(provider_->matches()[0].search_terms_args != NULL); |
| 3981 EXPECT_FALSE(provider_->matches()[0].search_terms_args->bookmark_bar_pinned); | 3981 EXPECT_FALSE(provider_->matches()[0].search_terms_args->bookmark_bar_pinned); |
| 3982 | 3982 |
| 3983 profile_.GetPrefs()->SetBoolean(prefs::kShowBookmarkBar, true); | 3983 profile_.GetPrefs()->SetBoolean(prefs::kShowBookmarkBar, true); |
| 3984 term = term1_.substr(0, term1_.length() - 1); | 3984 term = term1_.substr(0, term1_.length() - 1); |
| 3985 QueryForInput(term, true, false); | 3985 QueryForInput(term, true, false); |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4143 EXPECT_FALSE(provider_->deletion_handlers_.empty()); | 4143 EXPECT_FALSE(provider_->deletion_handlers_.empty()); |
| 4144 // Set up a default fetcher with provided results. | 4144 // Set up a default fetcher with provided results. |
| 4145 fetcher = test_factory_.GetFetcherByID( | 4145 fetcher = test_factory_.GetFetcherByID( |
| 4146 SearchProvider::kDeletionURLFetcherID); | 4146 SearchProvider::kDeletionURLFetcherID); |
| 4147 ASSERT_TRUE(fetcher); | 4147 ASSERT_TRUE(fetcher); |
| 4148 fetcher->set_response_code(500); | 4148 fetcher->set_response_code(500); |
| 4149 fetcher->delegate()->OnURLFetchComplete(fetcher); | 4149 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 4150 EXPECT_TRUE(provider_->deletion_handlers_.empty()); | 4150 EXPECT_TRUE(provider_->deletion_handlers_.empty()); |
| 4151 EXPECT_FALSE(provider_->is_success()); | 4151 EXPECT_FALSE(provider_->is_success()); |
| 4152 } | 4152 } |
| OLD | NEW |