| Index: chrome/browser/android/contextualsearch/contextual_search_delegate.cc
|
| diff --git a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
|
| index c4048e61a0eb6442a3c39abee759e2c4e72cce84..7c1d27a3030bf79bcc8f5e5618463d8504d597e7 100644
|
| --- a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
|
| +++ b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
|
| @@ -427,43 +427,48 @@ void ContextualSearchDelegate::DecodeSearchTermFromJsonResponse(
|
| int* mention_start,
|
| int* mention_end,
|
| std::string* lang) {
|
| - bool contains_xssi_escape = response.find(kXssiEscape) == 0;
|
| + bool contains_xssi_escape =
|
| + base::StartsWith(response, kXssiEscape, base::CompareCase::SENSITIVE);
|
| const std::string& proper_json =
|
| - contains_xssi_escape ? response.substr(strlen(kXssiEscape)) : response;
|
| + contains_xssi_escape ? response.substr(sizeof(kXssiEscape) - 1)
|
| + : response;
|
| JSONStringValueDeserializer deserializer(proper_json);
|
| - std::unique_ptr<base::Value> root = deserializer.Deserialize(NULL, NULL);
|
| -
|
| - if (root.get() != NULL && root->IsType(base::Value::TYPE_DICTIONARY)) {
|
| - base::DictionaryValue* dict =
|
| - static_cast<base::DictionaryValue*>(root.get());
|
| - dict->GetString(kContextualSearchPreventPreload, prevent_preload);
|
| - dict->GetString(kContextualSearchResponseSearchTermParam, search_term);
|
| - dict->GetString(kContextualSearchResponseLanguageParam, lang);
|
| - // For the display_text, if not present fall back to the "search_term".
|
| - if (!dict->GetString(kContextualSearchResponseDisplayTextParam,
|
| - display_text)) {
|
| - *display_text = *search_term;
|
| - }
|
| - // Extract mentions for selection expansion.
|
| - if (!field_trial_->IsDecodeMentionsDisabled()) {
|
| - base::ListValue* mentions_list = NULL;
|
| - dict->GetList(kContextualSearchMentions, &mentions_list);
|
| - if (mentions_list != NULL && mentions_list->GetSize() >= 2)
|
| - ExtractMentionsStartEnd(*mentions_list, mention_start, mention_end);
|
| - }
|
| - // If either the selected text or the resolved term is not the search term,
|
| - // use it as the alternate term.
|
| - std::string selected_text;
|
| - dict->GetString(kContextualSearchResponseSelectedTextParam, &selected_text);
|
| - if (selected_text != *search_term) {
|
| - *alternate_term = selected_text;
|
| - } else {
|
| - std::string resolved_term;
|
| - dict->GetString(kContextualSearchResponseResolvedTermParam,
|
| - &resolved_term);
|
| - if (resolved_term != *search_term) {
|
| - *alternate_term = resolved_term;
|
| - }
|
| + std::unique_ptr<base::Value> root =
|
| + deserializer.Deserialize(nullptr, nullptr);
|
| + std::unique_ptr<base::DictionaryValue> dict =
|
| + base::DictionaryValue::From(std::move(root));
|
| + if (!dict)
|
| + return;
|
| +
|
| + dict->GetString(kContextualSearchPreventPreload, prevent_preload);
|
| + dict->GetString(kContextualSearchResponseSearchTermParam, search_term);
|
| + dict->GetString(kContextualSearchResponseLanguageParam, lang);
|
| +
|
| + // For the display_text, if not present fall back to the "search_term".
|
| + if (!dict->GetString(kContextualSearchResponseDisplayTextParam,
|
| + display_text)) {
|
| + *display_text = *search_term;
|
| + }
|
| +
|
| + // Extract mentions for selection expansion.
|
| + if (!field_trial_->IsDecodeMentionsDisabled()) {
|
| + base::ListValue* mentions_list = nullptr;
|
| + dict->GetList(kContextualSearchMentions, &mentions_list);
|
| + if (mentions_list && mentions_list->GetSize() >= 2)
|
| + ExtractMentionsStartEnd(*mentions_list, mention_start, mention_end);
|
| + }
|
| +
|
| + // If either the selected text or the resolved term is not the search term,
|
| + // use it as the alternate term.
|
| + std::string selected_text;
|
| + dict->GetString(kContextualSearchResponseSelectedTextParam, &selected_text);
|
| + if (selected_text != *search_term) {
|
| + *alternate_term = selected_text;
|
| + } else {
|
| + std::string resolved_term;
|
| + dict->GetString(kContextualSearchResponseResolvedTermParam, &resolved_term);
|
| + if (resolved_term != *search_term) {
|
| + *alternate_term = resolved_term;
|
| }
|
| }
|
| }
|
|
|