OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_tiles/most_visited_sites.h" | 5 #include "components/ntp_tiles/most_visited_sites.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 std::unique_ptr<MostVisitedSitesSupervisor> supervisor) | 56 std::unique_ptr<MostVisitedSitesSupervisor> supervisor) |
57 : prefs_(prefs), | 57 : prefs_(prefs), |
58 top_sites_(top_sites), | 58 top_sites_(top_sites), |
59 suggestions_service_(suggestions), | 59 suggestions_service_(suggestions), |
60 popular_sites_(std::move(popular_sites)), | 60 popular_sites_(std::move(popular_sites)), |
61 icon_cacher_(std::move(icon_cacher)), | 61 icon_cacher_(std::move(icon_cacher)), |
62 supervisor_(std::move(supervisor)), | 62 supervisor_(std::move(supervisor)), |
63 observer_(nullptr), | 63 observer_(nullptr), |
64 num_sites_(0), | 64 num_sites_(0), |
65 top_sites_observer_(this), | 65 top_sites_observer_(this), |
66 mv_source_(NTPTileSource::TOP_SITES), | 66 mv_source_(TileSource::TOP_SITES), |
67 top_sites_weak_ptr_factory_(this) { | 67 top_sites_weak_ptr_factory_(this) { |
68 DCHECK(prefs_); | 68 DCHECK(prefs_); |
69 // top_sites_ can be null in tests. | 69 // top_sites_ can be null in tests. |
70 // TODO(sfiera): have iOS use a dummy TopSites in its tests. | 70 // TODO(sfiera): have iOS use a dummy TopSites in its tests. |
71 DCHECK(suggestions_service_); | 71 DCHECK(suggestions_service_); |
72 if (supervisor_) | 72 if (supervisor_) |
73 supervisor_->SetObserver(this); | 73 supervisor_->SetObserver(this); |
74 } | 74 } |
75 | 75 |
76 MostVisitedSites::~MostVisitedSites() { | 76 MostVisitedSites::~MostVisitedSites() { |
77 if (supervisor_) | 77 if (supervisor_) |
78 supervisor_->SetObserver(nullptr); | 78 supervisor_->SetObserver(nullptr); |
79 } | 79 } |
80 | 80 |
81 bool MostVisitedSites::DoesSourceExist(NTPTileSource source) const { | 81 bool MostVisitedSites::DoesSourceExist(TileSource source) const { |
82 switch (source) { | 82 switch (source) { |
83 case NTPTileSource::TOP_SITES: | 83 case TileSource::TOP_SITES: |
84 return top_sites_ != nullptr; | 84 return top_sites_ != nullptr; |
85 case NTPTileSource::SUGGESTIONS_SERVICE: | 85 case TileSource::SUGGESTIONS_SERVICE: |
86 return suggestions_service_ != nullptr; | 86 return suggestions_service_ != nullptr; |
87 case NTPTileSource::POPULAR: | 87 case TileSource::POPULAR: |
88 return popular_sites_ != nullptr; | 88 return popular_sites_ != nullptr; |
89 case NTPTileSource::WHITELIST: | 89 case TileSource::WHITELIST: |
90 return supervisor_ != nullptr; | 90 return supervisor_ != nullptr; |
91 } | 91 } |
92 NOTREACHED(); | 92 NOTREACHED(); |
93 return false; | 93 return false; |
94 } | 94 } |
95 | 95 |
96 void MostVisitedSites::SetMostVisitedURLsObserver(Observer* observer, | 96 void MostVisitedSites::SetMostVisitedURLsObserver(Observer* observer, |
97 int num_sites) { | 97 int num_sites) { |
98 DCHECK(observer); | 98 DCHECK(observer); |
99 observer_ = observer; | 99 observer_ = observer; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 bool add_url) { | 136 bool add_url) { |
137 if (top_sites_) { | 137 if (top_sites_) { |
138 // Always blacklist in the local TopSites. | 138 // Always blacklist in the local TopSites. |
139 if (add_url) | 139 if (add_url) |
140 top_sites_->AddBlacklistedURL(url); | 140 top_sites_->AddBlacklistedURL(url); |
141 else | 141 else |
142 top_sites_->RemoveBlacklistedURL(url); | 142 top_sites_->RemoveBlacklistedURL(url); |
143 } | 143 } |
144 | 144 |
145 // Only blacklist in the server-side suggestions service if it's active. | 145 // Only blacklist in the server-side suggestions service if it's active. |
146 if (mv_source_ == NTPTileSource::SUGGESTIONS_SERVICE) { | 146 if (mv_source_ == TileSource::SUGGESTIONS_SERVICE) { |
147 if (add_url) | 147 if (add_url) |
148 suggestions_service_->BlacklistURL(url); | 148 suggestions_service_->BlacklistURL(url); |
149 else | 149 else |
150 suggestions_service_->UndoBlacklistURL(url); | 150 suggestions_service_->UndoBlacklistURL(url); |
151 } | 151 } |
152 } | 152 } |
153 | 153 |
154 void MostVisitedSites::ClearBlacklistedUrls() { | 154 void MostVisitedSites::ClearBlacklistedUrls() { |
155 if (top_sites_) { | 155 if (top_sites_) { |
156 // Always update the blacklist in the local TopSites. | 156 // Always update the blacklist in the local TopSites. |
157 top_sites_->ClearBlacklistedURLs(); | 157 top_sites_->ClearBlacklistedURLs(); |
158 } | 158 } |
159 | 159 |
160 // Only update the server-side blacklist if it's active. | 160 // Only update the server-side blacklist if it's active. |
161 if (mv_source_ == NTPTileSource::SUGGESTIONS_SERVICE) { | 161 if (mv_source_ == TileSource::SUGGESTIONS_SERVICE) { |
162 suggestions_service_->ClearBlacklist(); | 162 suggestions_service_->ClearBlacklist(); |
163 } | 163 } |
164 } | 164 } |
165 | 165 |
166 void MostVisitedSites::OnBlockedSitesChanged() { | 166 void MostVisitedSites::OnBlockedSitesChanged() { |
167 BuildCurrentTiles(); | 167 BuildCurrentTiles(); |
168 } | 168 } |
169 | 169 |
170 // static | 170 // static |
171 void MostVisitedSites::RegisterProfilePrefs( | 171 void MostVisitedSites::RegisterProfilePrefs( |
(...skipping 19 matching lines...) Expand all Loading... |
191 return whitelist.large_icon_path; | 191 return whitelist.large_icon_path; |
192 } | 192 } |
193 } | 193 } |
194 return base::FilePath(); | 194 return base::FilePath(); |
195 } | 195 } |
196 | 196 |
197 void MostVisitedSites::OnMostVisitedURLsAvailable( | 197 void MostVisitedSites::OnMostVisitedURLsAvailable( |
198 const history::MostVisitedURLList& visited_list) { | 198 const history::MostVisitedURLList& visited_list) { |
199 // Ignore the event if tiles provided by the Suggestions Service, which take | 199 // Ignore the event if tiles provided by the Suggestions Service, which take |
200 // precedence. | 200 // precedence. |
201 if (mv_source_ == NTPTileSource::SUGGESTIONS_SERVICE) { | 201 if (mv_source_ == TileSource::SUGGESTIONS_SERVICE) { |
202 return; | 202 return; |
203 } | 203 } |
204 | 204 |
205 NTPTilesVector tiles; | 205 NTPTilesVector tiles; |
206 size_t num_tiles = | 206 size_t num_tiles = |
207 std::min(visited_list.size(), static_cast<size_t>(num_sites_)); | 207 std::min(visited_list.size(), static_cast<size_t>(num_sites_)); |
208 for (size_t i = 0; i < num_tiles; ++i) { | 208 for (size_t i = 0; i < num_tiles; ++i) { |
209 const history::MostVisitedURL& visited = visited_list[i]; | 209 const history::MostVisitedURL& visited = visited_list[i]; |
210 if (visited.url.is_empty()) | 210 if (visited.url.is_empty()) |
211 break; // This is the signal that there are no more real visited sites. | 211 break; // This is the signal that there are no more real visited sites. |
212 if (supervisor_ && supervisor_->IsBlocked(visited.url)) | 212 if (supervisor_ && supervisor_->IsBlocked(visited.url)) |
213 continue; | 213 continue; |
214 | 214 |
215 NTPTile tile; | 215 NTPTile tile; |
216 tile.title = visited.title; | 216 tile.title = visited.title; |
217 tile.url = visited.url; | 217 tile.url = visited.url; |
218 tile.source = NTPTileSource::TOP_SITES; | 218 tile.source = TileSource::TOP_SITES; |
219 tile.whitelist_icon_path = GetWhitelistLargeIconPath(visited.url); | 219 tile.whitelist_icon_path = GetWhitelistLargeIconPath(visited.url); |
220 | 220 |
221 tiles.push_back(std::move(tile)); | 221 tiles.push_back(std::move(tile)); |
222 } | 222 } |
223 | 223 |
224 mv_source_ = NTPTileSource::TOP_SITES; | 224 mv_source_ = TileSource::TOP_SITES; |
225 SaveNewTilesAndNotify(std::move(tiles)); | 225 SaveNewTilesAndNotify(std::move(tiles)); |
226 } | 226 } |
227 | 227 |
228 void MostVisitedSites::OnSuggestionsProfileChanged( | 228 void MostVisitedSites::OnSuggestionsProfileChanged( |
229 const SuggestionsProfile& suggestions_profile) { | 229 const SuggestionsProfile& suggestions_profile) { |
230 if (suggestions_profile.suggestions_size() == 0 && | 230 if (suggestions_profile.suggestions_size() == 0 && |
231 mv_source_ != NTPTileSource::SUGGESTIONS_SERVICE) { | 231 mv_source_ != TileSource::SUGGESTIONS_SERVICE) { |
232 return; | 232 return; |
233 } | 233 } |
234 | 234 |
235 BuildCurrentTilesGivenSuggestionsProfile(suggestions_profile); | 235 BuildCurrentTilesGivenSuggestionsProfile(suggestions_profile); |
236 } | 236 } |
237 | 237 |
238 void MostVisitedSites::BuildCurrentTiles() { | 238 void MostVisitedSites::BuildCurrentTiles() { |
239 BuildCurrentTilesGivenSuggestionsProfile( | 239 BuildCurrentTilesGivenSuggestionsProfile( |
240 suggestions_service_->GetSuggestionsDataFromCache().value_or( | 240 suggestions_service_->GetSuggestionsDataFromCache().value_or( |
241 SuggestionsProfile())); | 241 SuggestionsProfile())); |
242 } | 242 } |
243 | 243 |
244 void MostVisitedSites::BuildCurrentTilesGivenSuggestionsProfile( | 244 void MostVisitedSites::BuildCurrentTilesGivenSuggestionsProfile( |
245 const suggestions::SuggestionsProfile& suggestions_profile) { | 245 const suggestions::SuggestionsProfile& suggestions_profile) { |
246 int num_tiles = suggestions_profile.suggestions_size(); | 246 int num_tiles = suggestions_profile.suggestions_size(); |
247 // With no server suggestions, fall back to local TopSites. | 247 // With no server suggestions, fall back to local TopSites. |
248 if (num_tiles == 0 || | 248 if (num_tiles == 0 || |
249 !base::FeatureList::IsEnabled(kDisplaySuggestionsServiceTiles)) { | 249 !base::FeatureList::IsEnabled(kDisplaySuggestionsServiceTiles)) { |
250 mv_source_ = NTPTileSource::TOP_SITES; | 250 mv_source_ = TileSource::TOP_SITES; |
251 InitiateTopSitesQuery(); | 251 InitiateTopSitesQuery(); |
252 return; | 252 return; |
253 } | 253 } |
254 if (num_sites_ < num_tiles) | 254 if (num_sites_ < num_tiles) |
255 num_tiles = num_sites_; | 255 num_tiles = num_sites_; |
256 | 256 |
257 NTPTilesVector tiles; | 257 NTPTilesVector tiles; |
258 for (int i = 0; i < num_tiles; ++i) { | 258 for (int i = 0; i < num_tiles; ++i) { |
259 const ChromeSuggestion& suggestion_pb = suggestions_profile.suggestions(i); | 259 const ChromeSuggestion& suggestion_pb = suggestions_profile.suggestions(i); |
260 GURL url(suggestion_pb.url()); | 260 GURL url(suggestion_pb.url()); |
261 if (supervisor_ && supervisor_->IsBlocked(url)) | 261 if (supervisor_ && supervisor_->IsBlocked(url)) |
262 continue; | 262 continue; |
263 | 263 |
264 NTPTile tile; | 264 NTPTile tile; |
265 tile.title = base::UTF8ToUTF16(suggestion_pb.title()); | 265 tile.title = base::UTF8ToUTF16(suggestion_pb.title()); |
266 tile.url = url; | 266 tile.url = url; |
267 tile.source = NTPTileSource::SUGGESTIONS_SERVICE; | 267 tile.source = TileSource::SUGGESTIONS_SERVICE; |
268 tile.whitelist_icon_path = GetWhitelistLargeIconPath(url); | 268 tile.whitelist_icon_path = GetWhitelistLargeIconPath(url); |
269 tile.thumbnail_url = GURL(suggestion_pb.thumbnail()); | 269 tile.thumbnail_url = GURL(suggestion_pb.thumbnail()); |
270 tile.favicon_url = GURL(suggestion_pb.favicon_url()); | 270 tile.favicon_url = GURL(suggestion_pb.favicon_url()); |
271 | 271 |
272 tiles.push_back(std::move(tile)); | 272 tiles.push_back(std::move(tile)); |
273 } | 273 } |
274 | 274 |
275 mv_source_ = NTPTileSource::SUGGESTIONS_SERVICE; | 275 mv_source_ = TileSource::SUGGESTIONS_SERVICE; |
276 SaveNewTilesAndNotify(std::move(tiles)); | 276 SaveNewTilesAndNotify(std::move(tiles)); |
277 } | 277 } |
278 | 278 |
279 NTPTilesVector MostVisitedSites::CreateWhitelistEntryPointTiles( | 279 NTPTilesVector MostVisitedSites::CreateWhitelistEntryPointTiles( |
280 const NTPTilesVector& personal_tiles) { | 280 const NTPTilesVector& personal_tiles) { |
281 if (!supervisor_) { | 281 if (!supervisor_) { |
282 return NTPTilesVector(); | 282 return NTPTilesVector(); |
283 } | 283 } |
284 | 284 |
285 size_t num_personal_tiles = personal_tiles.size(); | 285 size_t num_personal_tiles = personal_tiles.size(); |
(...skipping 19 matching lines...) Expand all Loading... |
305 personal_hosts.end()) | 305 personal_hosts.end()) |
306 continue; | 306 continue; |
307 | 307 |
308 // Skip whitelist entry points that are manually blocked. | 308 // Skip whitelist entry points that are manually blocked. |
309 if (supervisor_->IsBlocked(whitelist.entry_point)) | 309 if (supervisor_->IsBlocked(whitelist.entry_point)) |
310 continue; | 310 continue; |
311 | 311 |
312 NTPTile tile; | 312 NTPTile tile; |
313 tile.title = whitelist.title; | 313 tile.title = whitelist.title; |
314 tile.url = whitelist.entry_point; | 314 tile.url = whitelist.entry_point; |
315 tile.source = NTPTileSource::WHITELIST; | 315 tile.source = TileSource::WHITELIST; |
316 tile.whitelist_icon_path = whitelist.large_icon_path; | 316 tile.whitelist_icon_path = whitelist.large_icon_path; |
317 whitelist_tiles.push_back(std::move(tile)); | 317 whitelist_tiles.push_back(std::move(tile)); |
318 } | 318 } |
319 | 319 |
320 return whitelist_tiles; | 320 return whitelist_tiles; |
321 } | 321 } |
322 | 322 |
323 NTPTilesVector MostVisitedSites::CreatePopularSitesTiles( | 323 NTPTilesVector MostVisitedSites::CreatePopularSitesTiles( |
324 const NTPTilesVector& personal_tiles, | 324 const NTPTilesVector& personal_tiles, |
325 const NTPTilesVector& whitelist_tiles) { | 325 const NTPTilesVector& whitelist_tiles) { |
(...skipping 21 matching lines...) Expand all Loading... |
347 if (top_sites_ && top_sites_->IsBlacklisted(popular_site.url)) | 347 if (top_sites_ && top_sites_->IsBlacklisted(popular_site.url)) |
348 continue; | 348 continue; |
349 std::string host = popular_site.url.host(); | 349 std::string host = popular_site.url.host(); |
350 // Skip tiles already present in personal or whitelists. | 350 // Skip tiles already present in personal or whitelists. |
351 if (hosts.find(host) != hosts.end()) | 351 if (hosts.find(host) != hosts.end()) |
352 continue; | 352 continue; |
353 | 353 |
354 NTPTile tile; | 354 NTPTile tile; |
355 tile.title = popular_site.title; | 355 tile.title = popular_site.title; |
356 tile.url = GURL(popular_site.url); | 356 tile.url = GURL(popular_site.url); |
357 tile.source = NTPTileSource::POPULAR; | 357 tile.source = TileSource::POPULAR; |
358 | 358 |
359 popular_sites_tiles.push_back(std::move(tile)); | 359 popular_sites_tiles.push_back(std::move(tile)); |
360 base::Closure icon_available = | 360 base::Closure icon_available = |
361 base::Bind(&MostVisitedSites::OnIconMadeAvailable, | 361 base::Bind(&MostVisitedSites::OnIconMadeAvailable, |
362 base::Unretained(this), popular_site.url); | 362 base::Unretained(this), popular_site.url); |
363 icon_cacher_->StartFetch(popular_site, icon_available, icon_available); | 363 icon_cacher_->StartFetch(popular_site, icon_available, icon_available); |
364 if (popular_sites_tiles.size() >= num_popular_sites_tiles) | 364 if (popular_sites_tiles.size() >= num_popular_sites_tiles) |
365 break; | 365 break; |
366 } | 366 } |
367 } | 367 } |
(...skipping 15 matching lines...) Expand all Loading... |
383 std::move(popular_sites_tiles)); | 383 std::move(popular_sites_tiles)); |
384 if (current_tiles_.has_value() && (*current_tiles_ == new_tiles)) { | 384 if (current_tiles_.has_value() && (*current_tiles_ == new_tiles)) { |
385 return; | 385 return; |
386 } | 386 } |
387 | 387 |
388 current_tiles_.emplace(std::move(new_tiles)); | 388 current_tiles_.emplace(std::move(new_tiles)); |
389 DCHECK_EQ(num_actual_tiles, current_tiles_->size()); | 389 DCHECK_EQ(num_actual_tiles, current_tiles_->size()); |
390 | 390 |
391 int num_personal_tiles = 0; | 391 int num_personal_tiles = 0; |
392 for (const auto& tile : *current_tiles_) { | 392 for (const auto& tile : *current_tiles_) { |
393 if (tile.source != NTPTileSource::POPULAR) | 393 if (tile.source != TileSource::POPULAR) |
394 num_personal_tiles++; | 394 num_personal_tiles++; |
395 } | 395 } |
396 prefs_->SetInteger(prefs::kNumPersonalTiles, num_personal_tiles); | 396 prefs_->SetInteger(prefs::kNumPersonalTiles, num_personal_tiles); |
397 | 397 |
398 if (!observer_) | 398 if (!observer_) |
399 return; | 399 return; |
400 observer_->OnMostVisitedURLsAvailable(*current_tiles_); | 400 observer_->OnMostVisitedURLsAvailable(*current_tiles_); |
401 } | 401 } |
402 | 402 |
403 // static | 403 // static |
(...skipping 23 matching lines...) Expand all Loading... |
427 } | 427 } |
428 | 428 |
429 void MostVisitedSites::OnIconMadeAvailable(const GURL& site_url) { | 429 void MostVisitedSites::OnIconMadeAvailable(const GURL& site_url) { |
430 observer_->OnIconMadeAvailable(site_url); | 430 observer_->OnIconMadeAvailable(site_url); |
431 } | 431 } |
432 | 432 |
433 void MostVisitedSites::TopSitesLoaded(TopSites* top_sites) {} | 433 void MostVisitedSites::TopSitesLoaded(TopSites* top_sites) {} |
434 | 434 |
435 void MostVisitedSites::TopSitesChanged(TopSites* top_sites, | 435 void MostVisitedSites::TopSitesChanged(TopSites* top_sites, |
436 ChangeReason change_reason) { | 436 ChangeReason change_reason) { |
437 if (mv_source_ == NTPTileSource::TOP_SITES) { | 437 if (mv_source_ == TileSource::TOP_SITES) { |
438 // The displayed tiles are invalidated. | 438 // The displayed tiles are invalidated. |
439 InitiateTopSitesQuery(); | 439 InitiateTopSitesQuery(); |
440 } | 440 } |
441 } | 441 } |
442 | 442 |
443 } // namespace ntp_tiles | 443 } // namespace ntp_tiles |
OLD | NEW |