Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3040)

Unified Diff: chrome/browser/android/contextualsearch/contextual_search_delegate.cc

Issue 2351283002: [TTS] Decode Now on Tap results for v1 integration. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 ed8c9f70227b1b5134d783bc938f0b1247449987..e06cf8e975f86eae05df989cfeb3ccb3215d162a 100644
--- a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
+++ b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
@@ -9,8 +9,10 @@
#include "base/base64.h"
#include "base/command_line.h"
#include "base/json/json_string_value_serializer.h"
+#include "base/json/string_escape.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/android/contextualsearch/contextual_search_field_trial.h"
#include "chrome/browser/android/contextualsearch/resolved_search_term.h"
@@ -55,6 +57,12 @@ const char kDoPreventPreloadValue[] = "1";
// The number of characters that should be shown after the selected expression.
const int kSurroundingSizeForUI = 60;
+// Contextual Cards (aka Now on Tap) integration.
+const char kContextualSearchContextualCards[] = "contextual_cards";
+const char kContextualSearchCards[] = "cards";
+const char kContextualSearchSingleCard[] = "singleCard";
+const char kContextualSearchSubTitle[] = "subtitle";
+const char kContextualSearchThumbnailUri[] = "thumbnail.uri";
// The version of the Now on Tap API that we want to invoke.
const int kNowOnTapVersion = 1;
@@ -71,14 +79,14 @@ ContextualSearchDelegate::ContextualSearchDelegate(
search_term_callback,
const ContextualSearchDelegate::SurroundingTextCallback&
surrounding_callback,
- const ContextualSearchDelegate::IcingCallback& icing_callback)
+ const ContextualSearchDelegate::IcingCallback& icing_callback,
+ std::unique_ptr<ContextualSearchFieldTrial> field_trial)
: url_request_context_(url_request_context),
template_url_service_(template_url_service),
search_term_callback_(search_term_callback),
surrounding_callback_(surrounding_callback),
- icing_callback_(icing_callback) {
- field_trial_.reset(new ContextualSearchFieldTrial());
-}
+ icing_callback_(icing_callback),
+ field_trial_(std::move(field_trial)) {}
ContextualSearchDelegate::~ContextualSearchDelegate() {
}
@@ -457,7 +465,7 @@ void ContextualSearchDelegate::DecodeSearchTermFromJsonResponse(
JSONStringValueDeserializer deserializer(proper_json);
std::unique_ptr<base::Value> root =
deserializer.Deserialize(nullptr, nullptr);
- std::unique_ptr<base::DictionaryValue> dict =
+ const std::unique_ptr<base::DictionaryValue> dict =
base::DictionaryValue::From(std::move(root));
if (!dict)
return;
@@ -496,7 +504,7 @@ void ContextualSearchDelegate::DecodeSearchTermFromJsonResponse(
}
if (field_trial_->IsNowOnTapBarIntegrationEnabled()) {
- // TODO(donnd): extract thumbnail_url and caption.
+ DecodeNowOnTapResponse(*dict.get(), caption, thumbnail_url);
Theresa 2016/09/20 19:51:39 nit: I think it makes sense to change "caption" to
Donn Denman 2016/09/20 21:16:36 Mostly done. The ContextualSearchContext knows of
}
}
@@ -540,3 +548,35 @@ base::string16 ContextualSearchDelegate::SurroundingTextForIcing(
*end = end_offset;
return result_text;
}
+
+void ContextualSearchDelegate::DecodeNowOnTapResponse(
+ const base::DictionaryValue& dict,
+ std::string* subtitle,
+ std::string* thumbnail) {
+ const base::DictionaryValue* contextual_cards_dict = nullptr;
+ if (!dict.GetDictionary(kContextualSearchContextualCards,
+ &contextual_cards_dict))
+ return;
+
+ DCHECK(contextual_cards_dict);
Theresa 2016/09/20 19:51:40 I don't think this DCHECK is necessary since we re
Donn Denman 2016/09/20 21:16:37 In that case we should remove all of these DCHECKS
+ const base::ListValue* card_list = nullptr;
+ if (!contextual_cards_dict->GetList(kContextualSearchCards, &card_list))
+ return;
+
+ DCHECK(card_list);
+ for (const auto& card : *card_list) {
+ const base::DictionaryValue* card_dict = nullptr;
+ if (!card->GetAsDictionary(&card_dict))
+ continue;
+
+ DCHECK(card_dict);
+ const base::DictionaryValue* single_card = nullptr;
+ if (!card_dict->GetDictionary(kContextualSearchSingleCard, &single_card))
+ continue;
+
+ DCHECK(single_card);
+ single_card->GetString(kContextualSearchSubTitle, subtitle);
+ single_card->GetString(kContextualSearchThumbnailUri, thumbnail);
+ return;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698