Chromium Code Reviews| Index: chrome/browser/autocomplete/search_provider.cc |
| diff --git a/chrome/browser/autocomplete/search_provider.cc b/chrome/browser/autocomplete/search_provider.cc |
| index e4f35813feb91cacb699c4ff33e352afe0dd1845..9228751c8a799a16a1dfbe3d54d54a6c5a33a1ce 100644 |
| --- a/chrome/browser/autocomplete/search_provider.cc |
| +++ b/chrome/browser/autocomplete/search_provider.cc |
| @@ -653,24 +653,8 @@ void SearchProvider::OnURLFetchComplete(const net::URLFetcher* source) { |
| } |
| } |
| - // The JSON response should be an array. |
| - for (size_t response_start_index = json_data.find("["), i = 0; |
| - response_start_index != std::string::npos && i < 5; |
| - response_start_index = json_data.find("[", 1), i++) { |
| - // Remove any XSSI guards to allow for JSON parsing. |
| - if (response_start_index > 0) |
| - json_data.erase(0, response_start_index); |
| - |
| - JSONStringValueSerializer deserializer(json_data); |
| - deserializer.set_allow_trailing_comma(true); |
| - int error_code = 0; |
| - scoped_ptr<Value> data(deserializer.Deserialize(&error_code, NULL)); |
| - if (error_code == 0) { |
| - results_updated = data.get() && |
| - ParseSuggestResults(data.get(), is_keyword); |
| - break; |
| - } |
| - } |
| + scoped_ptr<Value> data(DeserializeJsonData(json_data)); |
| + results_updated = data.get() && ParseSuggestResults(data.get(), is_keyword); |
| } |
| UpdateMatches(); |
| @@ -1040,6 +1024,26 @@ net::URLFetcher* SearchProvider::CreateSuggestFetcher( |
| return fetcher; |
| } |
| +scoped_ptr<Value> SearchProvider::DeserializeJsonData(std::string json_data) { |
| + // The JSON response should be an array. |
| + for (size_t response_start_index = json_data.find("["), i = 0; |
| + response_start_index != std::string::npos && i < 5; |
| + response_start_index = json_data.find("[", 1), i++) { |
| + // Remove any XSSI guards to allow for JSON parsing. |
| + if (response_start_index > 0) |
| + json_data.erase(0, response_start_index); |
| + |
| + JSONStringValueSerializer deserializer(json_data); |
| + deserializer.set_allow_trailing_comma(true); |
| + int error_code = 0; |
| + scoped_ptr<Value> data(deserializer.Deserialize(&error_code, NULL)); |
| + if (error_code == 0) { |
| + return data.Pass(); |
| + } |
| + } |
| + return scoped_ptr<Value>(Value::CreateNullValue()); |
|
H Fung
2013/12/02 23:04:52
Are you depending on ParseSuggestResults to fail f
Maria
2013/12/02 23:24:29
I was actually expecting data.get() to return null
H Fung
2013/12/02 23:43:44
Thanks, it seems like Chrome's scoped_ptr is copya
|
| +} |
| + |
| bool SearchProvider::ParseSuggestResults(Value* root_val, bool is_keyword) { |
| string16 query; |
| ListValue* root_list = NULL; |