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

Side by Side Diff: chrome/browser/android/contextualsearch/contextual_search_delegate.cc

Issue 2364703003: [TTS] Update Contextual Cards response decoding for v1. (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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/android/contextualsearch/contextual_search_delegate.h" 5 #include "chrome/browser/android/contextualsearch/contextual_search_delegate.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 27 matching lines...) Expand all
38 namespace { 38 namespace {
39 39
40 const char kContextualSearchResponseDisplayTextParam[] = "display_text"; 40 const char kContextualSearchResponseDisplayTextParam[] = "display_text";
41 const char kContextualSearchResponseSelectedTextParam[] = "selected_text"; 41 const char kContextualSearchResponseSelectedTextParam[] = "selected_text";
42 const char kContextualSearchResponseSearchTermParam[] = "search_term"; 42 const char kContextualSearchResponseSearchTermParam[] = "search_term";
43 const char kContextualSearchResponseLanguageParam[] = "lang"; 43 const char kContextualSearchResponseLanguageParam[] = "lang";
44 const char kContextualSearchResponseMidParam[] = "mid"; 44 const char kContextualSearchResponseMidParam[] = "mid";
45 const char kContextualSearchResponseResolvedTermParam[] = "resolved_term"; 45 const char kContextualSearchResponseResolvedTermParam[] = "resolved_term";
46 const char kContextualSearchPreventPreload[] = "prevent_preload"; 46 const char kContextualSearchPreventPreload[] = "prevent_preload";
47 const char kContextualSearchMentions[] = "mentions"; 47 const char kContextualSearchMentions[] = "mentions";
48 const char kContextualSearchCaption[] = "caption";
49 const char kContextualSearchThumbnail[] = "thumbnail";
48 const char kContextualSearchServerEndpoint[] = "_/contextualsearch?"; 50 const char kContextualSearchServerEndpoint[] = "_/contextualsearch?";
49 const int kContextualSearchRequestVersion = 2; 51 const int kContextualSearchRequestVersion = 2;
50 const int kContextualSearchMaxSelection = 100; 52 const int kContextualSearchMaxSelection = 100;
51 const char kXssiEscape[] = ")]}'\n"; 53 const char kXssiEscape[] = ")]}'\n";
52 const char kDiscourseContextHeaderPrefix[] = "X-Additional-Discourse-Context: "; 54 const char kDiscourseContextHeaderPrefix[] = "X-Additional-Discourse-Context: ";
53 const char kDoPreventPreloadValue[] = "1"; 55 const char kDoPreventPreloadValue[] = "1";
54 56
55 // The number of characters that should be shown after the selected expression. 57 // The number of characters that should be shown after the selected expression.
56 const int kSurroundingSizeForUI = 60; 58 const int kSurroundingSizeForUI = 60;
57 59
58 // Contextual Cards (aka Now on Tap) integration.
59 const char kContextualSearchContextualCards[] = "contextual_cards";
60 const char kContextualSearchCards[] = "cards";
61 const char kContextualSearchSingleCard[] = "singleCard";
62 const char kContextualSearchSubTitle[] = "subtitle";
63 const char kContextualSearchThumbnailUri[] = "thumbnail.uri";
64 // The version of the Now on Tap API that we want to invoke. 60 // The version of the Now on Tap API that we want to invoke.
65 const int kNowOnTapVersion = 1; 61 const int kNowOnTapVersion = 1;
66 62
67 } // namespace 63 } // namespace
68 64
69 // URLFetcher ID, only used for tests: we only have one kind of fetcher. 65 // URLFetcher ID, only used for tests: we only have one kind of fetcher.
70 const int ContextualSearchDelegate::kContextualSearchURLFetcherID = 1; 66 const int ContextualSearchDelegate::kContextualSearchURLFetcherID = 1;
71 67
72 // Handles tasks for the ContextualSearchManager in a separable, testable way. 68 // Handles tasks for the ContextualSearchManager in a separable, testable way.
73 ContextualSearchDelegate::ContextualSearchDelegate( 69 ContextualSearchDelegate::ContextualSearchDelegate(
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 *alternate_term = selected_text; 491 *alternate_term = selected_text;
496 } else { 492 } else {
497 std::string resolved_term; 493 std::string resolved_term;
498 dict->GetString(kContextualSearchResponseResolvedTermParam, &resolved_term); 494 dict->GetString(kContextualSearchResponseResolvedTermParam, &resolved_term);
499 if (resolved_term != *search_term) { 495 if (resolved_term != *search_term) {
500 *alternate_term = resolved_term; 496 *alternate_term = resolved_term;
501 } 497 }
502 } 498 }
503 499
504 if (field_trial_->IsNowOnTapBarIntegrationEnabled()) { 500 if (field_trial_->IsNowOnTapBarIntegrationEnabled()) {
505 DecodeContextualCardsResponse(*dict.get(), caption, thumbnail_url); 501 // Get the basic Bar data for Now on Tap integration directly from the root.
Theresa 2016/09/22 20:54:02 nit: s/Now on Tap/Contextual Cards I plan to go t
502 dict->GetString(kContextualSearchCaption, caption);
503 dict->GetString(kContextualSearchThumbnail, thumbnail_url);
506 } 504 }
507 } 505 }
508 506
509 // Extract the Start/End of the mentions in the surrounding text 507 // Extract the Start/End of the mentions in the surrounding text
510 // for selection-expansion. 508 // for selection-expansion.
511 void ContextualSearchDelegate::ExtractMentionsStartEnd( 509 void ContextualSearchDelegate::ExtractMentionsStartEnd(
512 const base::ListValue& mentions_list, 510 const base::ListValue& mentions_list,
513 int* startResult, 511 int* startResult,
514 int* endResult) { 512 int* endResult) {
515 int int_value; 513 int int_value;
(...skipping 23 matching lines...) Expand all
539 end_offset -= trim; 537 end_offset -= trim;
540 } 538 }
541 if (result_text.length() > end_offset + padding_each_side_pinned) { 539 if (result_text.length() > end_offset + padding_each_side_pinned) {
542 // Trim the end. 540 // Trim the end.
543 result_text = result_text.substr(0, end_offset + padding_each_side_pinned); 541 result_text = result_text.substr(0, end_offset + padding_each_side_pinned);
544 } 542 }
545 *start = start_offset; 543 *start = start_offset;
546 *end = end_offset; 544 *end = end_offset;
547 return result_text; 545 return result_text;
548 } 546 }
549
550 void ContextualSearchDelegate::DecodeContextualCardsResponse(
551 const base::DictionaryValue& dict,
552 std::string* subtitle,
553 std::string* thumbnail) {
554 const base::DictionaryValue* contextual_cards_dict = nullptr;
555 if (!dict.GetDictionary(kContextualSearchContextualCards,
556 &contextual_cards_dict))
557 return;
558
559 const base::ListValue* card_list = nullptr;
560 if (!contextual_cards_dict->GetList(kContextualSearchCards, &card_list))
561 return;
562
563 // TODO(donnd): remove these DCHECKS. They are not needed since we never
564 // dereference if the values are missing.
565 DCHECK(card_list);
566 for (const auto& card : *card_list) {
567 const base::DictionaryValue* card_dict = nullptr;
568 if (!card->GetAsDictionary(&card_dict))
569 continue;
570
571 DCHECK(card_dict);
572 const base::DictionaryValue* single_card = nullptr;
573 if (!card_dict->GetDictionary(kContextualSearchSingleCard, &single_card))
574 continue;
575
576 DCHECK(single_card);
577 single_card->GetString(kContextualSearchSubTitle, subtitle);
578 single_card->GetString(kContextualSearchThumbnailUri, thumbnail);
579 return;
580 }
581 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698