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

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

Issue 2377663002: [NTP Snippets] Introduce ContentSuggestion::ID (Closed)
Patch Set: rebase Created 4 years, 2 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/content_suggestions_service.h" 5 #include "components/ntp_snippets/content_suggestions_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <iterator> 8 #include <iterator>
9 #include <set> 9 #include <set>
10 #include <utility> 10 #include <utility>
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 65
66 const std::vector<ContentSuggestion>& 66 const std::vector<ContentSuggestion>&
67 ContentSuggestionsService::GetSuggestionsForCategory(Category category) const { 67 ContentSuggestionsService::GetSuggestionsForCategory(Category category) const {
68 auto iterator = suggestions_by_category_.find(category); 68 auto iterator = suggestions_by_category_.find(category);
69 if (iterator == suggestions_by_category_.end()) 69 if (iterator == suggestions_by_category_.end())
70 return no_suggestions_; 70 return no_suggestions_;
71 return iterator->second; 71 return iterator->second;
72 } 72 }
73 73
74 void ContentSuggestionsService::FetchSuggestionImage( 74 void ContentSuggestionsService::FetchSuggestionImage(
75 const std::string& suggestion_id, 75 const ContentSuggestion::ID& suggestion_id,
76 const ImageFetchedCallback& callback) { 76 const ImageFetchedCallback& callback) {
77 Category category = category_factory_.GetCategoryFromUniqueID(suggestion_id); 77 if (!providers_by_category_.count(suggestion_id.category())) {
78 if (!providers_by_category_.count(category)) {
79 LOG(WARNING) << "Requested image for suggestion " << suggestion_id 78 LOG(WARNING) << "Requested image for suggestion " << suggestion_id
80 << " for unavailable category " << category; 79 << " for unavailable category " << suggestion_id.category();
81 base::ThreadTaskRunnerHandle::Get()->PostTask( 80 base::ThreadTaskRunnerHandle::Get()->PostTask(
82 FROM_HERE, base::Bind(callback, gfx::Image())); 81 FROM_HERE, base::Bind(callback, gfx::Image()));
83 return; 82 return;
84 } 83 }
85 providers_by_category_[category]->FetchSuggestionImage(suggestion_id, 84 providers_by_category_[suggestion_id.category()]->FetchSuggestionImage(
86 callback); 85 suggestion_id, callback);
87 } 86 }
88 87
89 void ContentSuggestionsService::ClearHistory( 88 void ContentSuggestionsService::ClearHistory(
90 base::Time begin, 89 base::Time begin,
91 base::Time end, 90 base::Time end,
92 const base::Callback<bool(const GURL& url)>& filter) { 91 const base::Callback<bool(const GURL& url)>& filter) {
93 for (const auto& provider : providers_) { 92 for (const auto& provider : providers_) {
94 provider->ClearHistory(begin, end, filter); 93 provider->ClearHistory(begin, end, filter);
95 } 94 }
96 } 95 }
(...skipping 26 matching lines...) Expand all
123 } 122 }
124 123
125 void ContentSuggestionsService::ClearDismissedSuggestionsForDebugging( 124 void ContentSuggestionsService::ClearDismissedSuggestionsForDebugging(
126 Category category) { 125 Category category) {
127 auto iterator = providers_by_category_.find(category); 126 auto iterator = providers_by_category_.find(category);
128 if (iterator != providers_by_category_.end()) 127 if (iterator != providers_by_category_.end())
129 iterator->second->ClearDismissedSuggestionsForDebugging(category); 128 iterator->second->ClearDismissedSuggestionsForDebugging(category);
130 } 129 }
131 130
132 void ContentSuggestionsService::DismissSuggestion( 131 void ContentSuggestionsService::DismissSuggestion(
133 const std::string& suggestion_id) { 132 const ContentSuggestion::ID& suggestion_id) {
134 Category category = category_factory_.GetCategoryFromUniqueID(suggestion_id); 133 if (!providers_by_category_.count(suggestion_id.category())) {
135 if (!providers_by_category_.count(category)) {
136 LOG(WARNING) << "Dismissed suggestion " << suggestion_id 134 LOG(WARNING) << "Dismissed suggestion " << suggestion_id
137 << " for unavailable category " << category; 135 << " for unavailable category " << suggestion_id.category();
138 return; 136 return;
139 } 137 }
140 providers_by_category_[category]->DismissSuggestion(suggestion_id); 138 providers_by_category_[suggestion_id.category()]->DismissSuggestion(
139 suggestion_id);
141 140
142 // Remove the suggestion locally. 141 // Remove the suggestion locally.
143 bool removed = RemoveSuggestionByID(category, suggestion_id); 142 bool removed = RemoveSuggestionByID(suggestion_id);
144 DCHECK(removed) << "The dismissed suggestion " << suggestion_id 143 DCHECK(removed) << "The dismissed suggestion " << suggestion_id
145 << " has already been removed. Providers must not call" 144 << " has already been removed. Providers must not call"
146 << " OnNewSuggestions in response to DismissSuggestion."; 145 << " OnNewSuggestions in response to DismissSuggestion.";
147 } 146 }
148 147
149 void ContentSuggestionsService::DismissCategory(Category category) { 148 void ContentSuggestionsService::DismissCategory(Category category) {
150 auto providers_it = providers_by_category_.find(category); 149 auto providers_it = providers_by_category_.find(category);
151 if (providers_it == providers_by_category_.end()) 150 if (providers_it == providers_by_category_.end())
152 return; 151 return;
153 152
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 DismissCategory(category); 206 DismissCategory(category);
208 } else { 207 } else {
209 RegisterCategoryIfRequired(provider, category); 208 RegisterCategoryIfRequired(provider, category);
210 DCHECK_EQ(new_status, provider->GetCategoryStatus(category)); 209 DCHECK_EQ(new_status, provider->GetCategoryStatus(category));
211 } 210 }
212 NotifyCategoryStatusChanged(category); 211 NotifyCategoryStatusChanged(category);
213 } 212 }
214 213
215 void ContentSuggestionsService::OnSuggestionInvalidated( 214 void ContentSuggestionsService::OnSuggestionInvalidated(
216 ContentSuggestionsProvider* provider, 215 ContentSuggestionsProvider* provider,
217 Category category, 216 const ContentSuggestion::ID& suggestion_id) {
218 const std::string& suggestion_id) { 217 RemoveSuggestionByID(suggestion_id);
219 RemoveSuggestionByID(category, suggestion_id);
220 FOR_EACH_OBSERVER(Observer, observers_, 218 FOR_EACH_OBSERVER(Observer, observers_,
221 OnSuggestionInvalidated(category, suggestion_id)); 219 OnSuggestionInvalidated(suggestion_id));
222 } 220 }
223 221
224 // history::HistoryServiceObserver implementation. 222 // history::HistoryServiceObserver implementation.
225 void ContentSuggestionsService::OnURLsDeleted( 223 void ContentSuggestionsService::OnURLsDeleted(
226 history::HistoryService* history_service, 224 history::HistoryService* history_service,
227 bool all_history, 225 bool all_history,
228 bool expired, 226 bool expired,
229 const history::URLRows& deleted_rows, 227 const history::URLRows& deleted_rows,
230 const std::set<GURL>& favicon_urls) { 228 const std::set<GURL>& favicon_urls) {
231 // We don't care about expired entries. 229 // We don't care about expired entries.
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 categories_.push_back(category); 278 categories_.push_back(category);
281 SortCategories(); 279 SortCategories();
282 if (IsCategoryStatusAvailable(provider->GetCategoryStatus(category))) { 280 if (IsCategoryStatusAvailable(provider->GetCategoryStatus(category))) {
283 suggestions_by_category_.insert( 281 suggestions_by_category_.insert(
284 std::make_pair(category, std::vector<ContentSuggestion>())); 282 std::make_pair(category, std::vector<ContentSuggestion>()));
285 } 283 }
286 return true; 284 return true;
287 } 285 }
288 286
289 bool ContentSuggestionsService::RemoveSuggestionByID( 287 bool ContentSuggestionsService::RemoveSuggestionByID(
290 Category category, 288 const ContentSuggestion::ID& suggestion_id) {
291 const std::string& suggestion_id) {
292 std::vector<ContentSuggestion>* suggestions = 289 std::vector<ContentSuggestion>* suggestions =
293 &suggestions_by_category_[category]; 290 &suggestions_by_category_[suggestion_id.category()];
294 auto position = 291 auto position =
295 std::find_if(suggestions->begin(), suggestions->end(), 292 std::find_if(suggestions->begin(), suggestions->end(),
296 [&suggestion_id](const ContentSuggestion& suggestion) { 293 [&suggestion_id](const ContentSuggestion& suggestion) {
297 return suggestion_id == suggestion.id(); 294 return suggestion_id == suggestion.id();
298 }); 295 });
299 if (position == suggestions->end()) 296 if (position == suggestions->end())
300 return false; 297 return false;
301 suggestions->erase(position); 298 suggestions->erase(position);
302 299
303 // The positioning of the bookmarks category depends on whether it's empty. 300 // The positioning of the bookmarks category depends on whether it's empty.
304 // TODO(treib): Remove this temporary hack, crbug.com/640568. 301 // TODO(treib): Remove this temporary hack, crbug.com/640568.
305 if (category.IsKnownCategory(KnownCategories::BOOKMARKS)) 302 if (suggestion_id.category().IsKnownCategory(KnownCategories::BOOKMARKS))
306 SortCategories(); 303 SortCategories();
307 304
308 return true; 305 return true;
309 } 306 }
310 307
311 void ContentSuggestionsService::NotifyCategoryStatusChanged(Category category) { 308 void ContentSuggestionsService::NotifyCategoryStatusChanged(Category category) {
312 FOR_EACH_OBSERVER( 309 FOR_EACH_OBSERVER(
313 Observer, observers_, 310 Observer, observers_,
314 OnCategoryStatusChanged(category, GetCategoryStatus(category))); 311 OnCategoryStatusChanged(category, GetCategoryStatus(category)));
315 } 312 }
(...skipping 12 matching lines...) Expand all
328 if (left.IsKnownCategory(KnownCategories::BOOKMARKS)) 325 if (left.IsKnownCategory(KnownCategories::BOOKMARKS))
329 return false; 326 return false;
330 if (right.IsKnownCategory(KnownCategories::BOOKMARKS)) 327 if (right.IsKnownCategory(KnownCategories::BOOKMARKS))
331 return true; 328 return true;
332 } 329 }
333 return category_factory_.CompareCategories(left, right); 330 return category_factory_.CompareCategories(left, right);
334 }); 331 });
335 } 332 }
336 333
337 } // namespace ntp_snippets 334 } // namespace ntp_snippets
OLDNEW
« no previous file with comments | « components/ntp_snippets/content_suggestions_service.h ('k') | components/ntp_snippets/content_suggestions_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698