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

Side by Side Diff: components/ntp_snippets/ntp_snippet.cc

Issue 1922083004: Allow fetching personalized snippets from ChromeReader. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: After code review #2 Created 4 years, 7 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 "components/ntp_snippets/ntp_snippet.h" 5 #include "components/ntp_snippets/ntp_snippet.h"
6 6
7 #include "base/strings/string_number_conversions.h" 7 #include "base/strings/string_number_conversions.h"
8 #include "base/values.h" 8 #include "base/values.h"
9 9
10 namespace { 10 namespace {
11 11
12 const char kScore[] = "score";
13 const char kContentInfo[] = "contentInfo";
14
12 const char kUrl[] = "url"; 15 const char kUrl[] = "url";
13 const char kSiteTitle[] = "site_title"; 16 const char kSiteTitle[] = "site_title";
14 const char kTitle[] = "title"; 17 const char kTitle[] = "title";
15 const char kFaviconUrl[] = "favicon_url"; 18 const char kFaviconUrl[] = "favicon_url";
16 const char kSalientImageUrl[] = "thumbnailUrl"; 19 const char kSalientImageUrl[] = "thumbnailUrl";
17 const char kSnippet[] = "snippet"; 20 const char kSnippet[] = "snippet";
18 const char kPublishDate[] = "creationTimestampSec"; 21 const char kPublishDate[] = "creationTimestampSec";
19 const char kExpiryDate[] = "expiryTimestampSec"; 22 const char kExpiryDate[] = "expiryTimestampSec";
20 const char kSourceCorpusInfo[] = "sourceCorpusInfo"; 23 const char kSourceCorpusInfo[] = "sourceCorpusInfo";
21 const char kAmpUrl[] = "ampUrl"; 24 const char kAmpUrl[] = "ampUrl";
22 25
23 } // namespace 26 } // namespace
24 27
25 namespace ntp_snippets { 28 namespace ntp_snippets {
26 29
27 NTPSnippet::NTPSnippet(const GURL& url) : url_(url) { 30 NTPSnippet::NTPSnippet(const GURL& url) :
31 url_(url),
32 score_(0) {
28 DCHECK(url_.is_valid()); 33 DCHECK(url_.is_valid());
29 } 34 }
30 35
31 NTPSnippet::~NTPSnippet() {} 36 NTPSnippet::~NTPSnippet() {}
32 37
33 // static 38 // static
34 std::unique_ptr<NTPSnippet> NTPSnippet::CreateFromDictionary( 39 std::unique_ptr<NTPSnippet> NTPSnippet::CreateFromDictionary(
35 const base::DictionaryValue& dict) { 40 const base::DictionaryValue& dict) {
41 const base::DictionaryValue* content = nullptr;
42 if (!dict.GetDictionary(kContentInfo, &content))
43 return nullptr;
44
36 // Need at least the url. 45 // Need at least the url.
37 std::string url_str; 46 std::string url_str;
38 if (!dict.GetString("url", &url_str)) 47 if (!content->GetString("url", &url_str))
39 return nullptr; 48 return nullptr;
40 GURL url(url_str); 49 GURL url(url_str);
41 if (!url.is_valid()) 50 if (!url.is_valid())
42 return nullptr; 51 return nullptr;
43 52
44 std::unique_ptr<NTPSnippet> snippet(new NTPSnippet(url)); 53 std::unique_ptr<NTPSnippet> snippet(new NTPSnippet(url));
45 54
46 std::string site_title; 55 std::string site_title;
47 if (dict.GetString(kSiteTitle, &site_title)) 56 if (content->GetString(kSiteTitle, &site_title))
48 snippet->set_site_title(site_title); 57 snippet->set_site_title(site_title);
49 std::string title; 58 std::string title;
50 if (dict.GetString(kTitle, &title)) 59 if (content->GetString(kTitle, &title))
51 snippet->set_title(title); 60 snippet->set_title(title);
52 std::string favicon_url; 61 std::string favicon_url;
53 if (dict.GetString(kFaviconUrl, &favicon_url)) 62 if (content->GetString(kFaviconUrl, &favicon_url))
54 snippet->set_favicon_url(GURL(favicon_url)); 63 snippet->set_favicon_url(GURL(favicon_url));
55 std::string salient_image_url; 64 std::string salient_image_url;
56 if (dict.GetString(kSalientImageUrl, &salient_image_url)) 65 if (content->GetString(kSalientImageUrl, &salient_image_url))
57 snippet->set_salient_image_url(GURL(salient_image_url)); 66 snippet->set_salient_image_url(GURL(salient_image_url));
58 std::string snippet_str; 67 std::string snippet_str;
59 if (dict.GetString(kSnippet, &snippet_str)) 68 if (content->GetString(kSnippet, &snippet_str))
60 snippet->set_snippet(snippet_str); 69 snippet->set_snippet(snippet_str);
61 // The creation and expiry timestamps are uint64s which are stored as strings. 70 // The creation and expiry timestamps are uint64s which are stored as strings.
62 std::string creation_timestamp_str; 71 std::string creation_timestamp_str;
63 if (dict.GetString(kPublishDate, &creation_timestamp_str)) 72 if (content->GetString(kPublishDate, &creation_timestamp_str))
64 snippet->set_publish_date(TimeFromJsonString(creation_timestamp_str)); 73 snippet->set_publish_date(TimeFromJsonString(creation_timestamp_str));
65 std::string expiry_timestamp_str; 74 std::string expiry_timestamp_str;
66 if (dict.GetString(kExpiryDate, &expiry_timestamp_str)) 75 if (content->GetString(kExpiryDate, &expiry_timestamp_str))
67 snippet->set_expiry_date(TimeFromJsonString(expiry_timestamp_str)); 76 snippet->set_expiry_date(TimeFromJsonString(expiry_timestamp_str));
68 77
69 const base::ListValue* corpus_infos_list = nullptr; 78 const base::ListValue* corpus_infos_list = nullptr;
70 if (dict.GetList(kSourceCorpusInfo, &corpus_infos_list)) { 79 if (content->GetList(kSourceCorpusInfo, &corpus_infos_list)) {
71 for (base::Value* value : *corpus_infos_list) { 80 for (base::Value* value : *corpus_infos_list) {
72 const base::DictionaryValue* dict_value = nullptr; 81 const base::DictionaryValue* dict_value = nullptr;
73 if (value->GetAsDictionary(&dict_value)) { 82 if (value->GetAsDictionary(&dict_value)) {
74 std::string amp_url; 83 std::string amp_url;
75 if (dict_value->GetString(kAmpUrl, &amp_url)) { 84 if (dict_value->GetString(kAmpUrl, &amp_url)) {
76 snippet->set_amp_url(GURL(amp_url)); 85 snippet->set_amp_url(GURL(amp_url));
77 break; 86 break;
78 } 87 }
79 } 88 }
80 } 89 }
81 } 90 }
82 91
92 double score;
93 if (dict.GetDouble(kScore, &score))
94 snippet->set_score(score);
95
83 return snippet; 96 return snippet;
84 } 97 }
85 98
86 std::unique_ptr<base::DictionaryValue> NTPSnippet::ToDictionary() const { 99 std::unique_ptr<base::DictionaryValue> NTPSnippet::ToDictionary() const {
87 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue); 100 std::unique_ptr<base::DictionaryValue> content(new base::DictionaryValue);
88 101
89 dict->SetString(kUrl, url_.spec()); 102 content->SetString(kUrl, url_.spec());
90 if (!site_title_.empty()) 103 if (!site_title_.empty())
91 dict->SetString(kSiteTitle, site_title_); 104 content->SetString(kSiteTitle, site_title_);
92 if (!title_.empty()) 105 if (!title_.empty())
93 dict->SetString(kTitle, title_); 106 content->SetString(kTitle, title_);
94 if (favicon_url_.is_valid()) 107 if (favicon_url_.is_valid())
95 dict->SetString(kFaviconUrl, favicon_url_.spec()); 108 content->SetString(kFaviconUrl, favicon_url_.spec());
96 if (salient_image_url_.is_valid()) 109 if (salient_image_url_.is_valid())
97 dict->SetString(kSalientImageUrl, salient_image_url_.spec()); 110 content->SetString(kSalientImageUrl, salient_image_url_.spec());
98 if (!snippet_.empty()) 111 if (!snippet_.empty())
99 dict->SetString(kSnippet, snippet_); 112 content->SetString(kSnippet, snippet_);
100 if (!publish_date_.is_null()) 113 if (!publish_date_.is_null())
101 dict->SetString(kPublishDate, TimeToJsonString(publish_date_)); 114 content->SetString(kPublishDate, TimeToJsonString(publish_date_));
102 if (!expiry_date_.is_null()) 115 if (!expiry_date_.is_null())
103 dict->SetString(kExpiryDate, TimeToJsonString(expiry_date_)); 116 content->SetString(kExpiryDate, TimeToJsonString(expiry_date_));
104 if (amp_url_.is_valid()) { 117 if (amp_url_.is_valid()) {
105 std::unique_ptr<base::ListValue> corpus_infos_list(new base::ListValue); 118 std::unique_ptr<base::ListValue> corpus_infos_list(new base::ListValue);
106 std::unique_ptr<base::DictionaryValue> corpus_info_dict( 119 std::unique_ptr<base::DictionaryValue> corpus_info_dict(
107 new base::DictionaryValue); 120 new base::DictionaryValue);
108 corpus_info_dict->SetString(kAmpUrl, amp_url_.spec()); 121 corpus_info_dict->SetString(kAmpUrl, amp_url_.spec());
109 corpus_infos_list->Set(0, std::move(corpus_info_dict)); 122 corpus_infos_list->Set(0, std::move(corpus_info_dict));
110 dict->Set(kSourceCorpusInfo, std::move(corpus_infos_list)); 123 content->Set(kSourceCorpusInfo, std::move(corpus_infos_list));
111 } 124 }
125
126 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
127 dict->Set(kContentInfo, std::move(content));
128
129 dict->SetDouble(kScore, score_);
130
112 return dict; 131 return dict;
113 } 132 }
114 133
115 // static 134 // static
116 base::Time NTPSnippet::TimeFromJsonString(const std::string& timestamp_str) { 135 base::Time NTPSnippet::TimeFromJsonString(const std::string& timestamp_str) {
117 int64_t timestamp; 136 int64_t timestamp;
118 if (!base::StringToInt64(timestamp_str, &timestamp)) { 137 if (!base::StringToInt64(timestamp_str, &timestamp)) {
119 // Even if there's an error in the conversion, some garbage data may still 138 // Even if there's an error in the conversion, some garbage data may still
120 // be written to the output var, so reset it. 139 // be written to the output var, so reset it.
121 timestamp = 0; 140 timestamp = 0;
122 } 141 }
123 return base::Time::UnixEpoch() + base::TimeDelta::FromSeconds(timestamp); 142 return base::Time::UnixEpoch() + base::TimeDelta::FromSeconds(timestamp);
124 } 143 }
125 144
126 // static 145 // static
127 std::string NTPSnippet::TimeToJsonString(const base::Time& time) { 146 std::string NTPSnippet::TimeToJsonString(const base::Time& time) {
128 return base::Int64ToString((time - base::Time::UnixEpoch()).InSeconds()); 147 return base::Int64ToString((time - base::Time::UnixEpoch()).InSeconds());
129 } 148 }
130 149
131 } // namespace ntp_snippets 150 } // namespace ntp_snippets
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698