OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 | 9 |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 // providers. | 237 // providers. |
238 DCHECK_GT(suggest_results_pending_, 0); | 238 DCHECK_GT(suggest_results_pending_, 0); |
239 } | 239 } |
240 | 240 |
241 void SearchProvider::Stop() { | 241 void SearchProvider::Stop() { |
242 StopSuggest(); | 242 StopSuggest(); |
243 done_ = true; | 243 done_ = true; |
244 default_provider_suggest_text_.clear(); | 244 default_provider_suggest_text_.clear(); |
245 } | 245 } |
246 | 246 |
247 void SearchProvider::OnURLFetchComplete(const URLFetcher* source) { | 247 void SearchProvider::OnURLFetchComplete(const content::URLFetcher* source) { |
248 DCHECK(!done_); | 248 DCHECK(!done_); |
249 suggest_results_pending_--; | 249 suggest_results_pending_--; |
250 DCHECK_GE(suggest_results_pending_, 0); // Should never go negative. | 250 DCHECK_GE(suggest_results_pending_, 0); // Should never go negative. |
251 const net::HttpResponseHeaders* const response_headers = | 251 const net::HttpResponseHeaders* const response_headers = |
252 source->response_headers(); | 252 source->GetResponseHeaders(); |
253 std::string json_data; | 253 std::string json_data; |
254 source->GetResponseAsString(&json_data); | 254 source->GetResponseAsString(&json_data); |
255 // JSON is supposed to be UTF-8, but some suggest service providers send JSON | 255 // JSON is supposed to be UTF-8, but some suggest service providers send JSON |
256 // files in non-UTF-8 encodings. The actual encoding is usually specified in | 256 // files in non-UTF-8 encodings. The actual encoding is usually specified in |
257 // the Content-Type header field. | 257 // the Content-Type header field. |
258 if (response_headers) { | 258 if (response_headers) { |
259 std::string charset; | 259 std::string charset; |
260 if (response_headers->GetCharset(&charset)) { | 260 if (response_headers->GetCharset(&charset)) { |
261 string16 data_16; | 261 string16 data_16; |
262 // TODO(jungshik): Switch to CodePageToUTF8 after it's added. | 262 // TODO(jungshik): Switch to CodePageToUTF8 after it's added. |
263 if (base::CodepageToUTF16(json_data, charset.c_str(), | 263 if (base::CodepageToUTF16(json_data, charset.c_str(), |
264 base::OnStringConversionError::FAIL, | 264 base::OnStringConversionError::FAIL, |
265 &data_16)) | 265 &data_16)) |
266 json_data = UTF16ToUTF8(data_16); | 266 json_data = UTF16ToUTF8(data_16); |
267 } | 267 } |
268 } | 268 } |
269 | 269 |
270 bool is_keyword_results = (source == keyword_fetcher_.get()); | 270 bool is_keyword_results = (source == keyword_fetcher_.get()); |
271 SuggestResults* suggest_results = is_keyword_results ? | 271 SuggestResults* suggest_results = is_keyword_results ? |
272 &keyword_suggest_results_ : &default_suggest_results_; | 272 &keyword_suggest_results_ : &default_suggest_results_; |
273 | 273 |
274 if (source->status().is_success() && source->response_code() == 200) { | 274 if (source->GetStatus().is_success() && source->GetResponseCode() == 200) { |
275 JSONStringValueSerializer deserializer(json_data); | 275 JSONStringValueSerializer deserializer(json_data); |
276 deserializer.set_allow_trailing_comma(true); | 276 deserializer.set_allow_trailing_comma(true); |
277 scoped_ptr<Value> root_val(deserializer.Deserialize(NULL, NULL)); | 277 scoped_ptr<Value> root_val(deserializer.Deserialize(NULL, NULL)); |
278 const string16& input_text = | 278 const string16& input_text = |
279 is_keyword_results ? keyword_input_text_ : input_.text(); | 279 is_keyword_results ? keyword_input_text_ : input_.text(); |
280 have_suggest_results_ = | 280 have_suggest_results_ = |
281 root_val.get() && | 281 root_val.get() && |
282 ParseSuggestResults(root_val.get(), is_keyword_results, input_text, | 282 ParseSuggestResults(root_val.get(), is_keyword_results, input_text, |
283 suggest_results); | 283 suggest_results); |
284 } | 284 } |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 // Stop any in-progress URL fetches. | 425 // Stop any in-progress URL fetches. |
426 keyword_fetcher_.reset(); | 426 keyword_fetcher_.reset(); |
427 default_fetcher_.reset(); | 427 default_fetcher_.reset(); |
428 keyword_suggest_results_.clear(); | 428 keyword_suggest_results_.clear(); |
429 default_suggest_results_.clear(); | 429 default_suggest_results_.clear(); |
430 keyword_navigation_results_.clear(); | 430 keyword_navigation_results_.clear(); |
431 default_navigation_results_.clear(); | 431 default_navigation_results_.clear(); |
432 have_suggest_results_ = false; | 432 have_suggest_results_ = false; |
433 } | 433 } |
434 | 434 |
435 URLFetcher* SearchProvider::CreateSuggestFetcher(int id, | 435 content::URLFetcher* SearchProvider::CreateSuggestFetcher( |
436 const TemplateURL& provider, | 436 int id, |
437 const string16& text) { | 437 const TemplateURL& provider, |
| 438 const string16& text) { |
438 const TemplateURLRef* const suggestions_url = provider.suggestions_url(); | 439 const TemplateURLRef* const suggestions_url = provider.suggestions_url(); |
439 DCHECK(suggestions_url->SupportsReplacement()); | 440 DCHECK(suggestions_url->SupportsReplacement()); |
440 URLFetcher* fetcher = URLFetcher::Create(id, | 441 URLFetcher* fetcher = URLFetcher::Create(id, |
441 GURL(suggestions_url->ReplaceSearchTermsUsingProfile(profile_, provider, | 442 GURL(suggestions_url->ReplaceSearchTermsUsingProfile(profile_, provider, |
442 text, TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())), | 443 text, TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())), |
443 URLFetcher::GET, this); | 444 URLFetcher::GET, this); |
444 fetcher->set_request_context(profile_->GetRequestContext()); | 445 fetcher->SetRequestContext(profile_->GetRequestContext()); |
445 fetcher->Start(); | 446 fetcher->Start(); |
446 return fetcher; | 447 return fetcher; |
447 } | 448 } |
448 | 449 |
449 bool SearchProvider::ParseSuggestResults(Value* root_val, | 450 bool SearchProvider::ParseSuggestResults(Value* root_val, |
450 bool is_keyword, | 451 bool is_keyword, |
451 const string16& input_text, | 452 const string16& input_text, |
452 SuggestResults* suggest_results) { | 453 SuggestResults* suggest_results) { |
453 if (!root_val->IsType(Value::TYPE_LIST)) | 454 if (!root_val->IsType(Value::TYPE_LIST)) |
454 return false; | 455 return false; |
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
939 | 940 |
940 return match; | 941 return match; |
941 } | 942 } |
942 | 943 |
943 void SearchProvider::UpdateDone() { | 944 void SearchProvider::UpdateDone() { |
944 // We're done when there are no more suggest queries pending (this is set to 1 | 945 // We're done when there are no more suggest queries pending (this is set to 1 |
945 // when the timer is started) and we're not waiting on instant. | 946 // when the timer is started) and we're not waiting on instant. |
946 done_ = ((suggest_results_pending_ == 0) && | 947 done_ = ((suggest_results_pending_ == 0) && |
947 (instant_finalized_ || !InstantController::IsEnabled(profile_))); | 948 (instant_finalized_ || !InstantController::IsEnabled(profile_))); |
948 } | 949 } |
OLD | NEW |