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

Side by Side Diff: components/favicon/core/favicon_handler.cc

Issue 2891333002: Introduce dedicated enum value for icons from Web Manifests (Closed)
Patch Set: Created 3 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/favicon/core/favicon_handler.h" 5 #include "components/favicon/core/favicon_handler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 } 198 }
199 199
200 // static 200 // static
201 int FaviconHandler::GetIconTypesFromHandlerType( 201 int FaviconHandler::GetIconTypesFromHandlerType(
202 FaviconDriverObserver::NotificationIconType handler_type) { 202 FaviconDriverObserver::NotificationIconType handler_type) {
203 switch (handler_type) { 203 switch (handler_type) {
204 case FaviconDriverObserver::NON_TOUCH_16_DIP: 204 case FaviconDriverObserver::NON_TOUCH_16_DIP:
205 case FaviconDriverObserver::NON_TOUCH_LARGEST: 205 case FaviconDriverObserver::NON_TOUCH_LARGEST:
206 return favicon_base::FAVICON; 206 return favicon_base::FAVICON;
207 case FaviconDriverObserver::TOUCH_LARGEST: 207 case FaviconDriverObserver::TOUCH_LARGEST:
208 return favicon_base::TOUCH_ICON | favicon_base::TOUCH_PRECOMPOSED_ICON; 208 return favicon_base::TOUCH_ICON | favicon_base::TOUCH_PRECOMPOSED_ICON |
209 favicon_base::WEB_MANIFEST_ICON;
209 } 210 }
210 return 0; 211 return 0;
211 } 212 }
212 213
213 void FaviconHandler::FetchFavicon(const GURL& url) { 214 void FaviconHandler::FetchFavicon(const GURL& url) {
214 cancelable_task_tracker_for_page_url_.TryCancelAll(); 215 cancelable_task_tracker_for_page_url_.TryCancelAll();
215 cancelable_task_tracker_for_candidates_.TryCancelAll(); 216 cancelable_task_tracker_for_candidates_.TryCancelAll();
216 217
217 url_ = url; 218 url_ = url;
218 219
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 350
350 // If no manifest available, proceed with the regular candidates only. 351 // If no manifest available, proceed with the regular candidates only.
351 if (manifest_url_.is_empty()) { 352 if (manifest_url_.is_empty()) {
352 OnGotFinalIconURLCandidates(candidates); 353 OnGotFinalIconURLCandidates(candidates);
353 return; 354 return;
354 } 355 }
355 356
356 // See if there is a cached favicon for the manifest. This will update the DB 357 // See if there is a cached favicon for the manifest. This will update the DB
357 // mappings only if the manifest URL is cached. 358 // mappings only if the manifest URL is cached.
358 GetFaviconAndUpdateMappingsUnlessIncognito( 359 GetFaviconAndUpdateMappingsUnlessIncognito(
359 /*icon_url=*/manifest_url_, favicon_base::FAVICON, 360 /*icon_url=*/manifest_url_, favicon_base::WEB_MANIFEST_ICON,
360 base::Bind(&FaviconHandler::OnFaviconDataForManifestFromFaviconService, 361 base::Bind(&FaviconHandler::OnFaviconDataForManifestFromFaviconService,
361 base::Unretained(this))); 362 base::Unretained(this)));
362 } 363 }
363 364
364 void FaviconHandler::OnFaviconDataForManifestFromFaviconService( 365 void FaviconHandler::OnFaviconDataForManifestFromFaviconService(
365 const std::vector<favicon_base::FaviconRawBitmapResult>& 366 const std::vector<favicon_base::FaviconRawBitmapResult>&
366 favicon_bitmap_results) { 367 favicon_bitmap_results) {
367 // The database lookup for the page URL is guaranteed to be completed because 368 // The database lookup for the page URL is guaranteed to be completed because
368 // the HistoryBackend uses a SequencedTaskRunner, and we also know that 369 // the HistoryBackend uses a SequencedTaskRunner, and we also know that
369 // FetchFavicon() was called before OnUpdateCandidates(). 370 // FetchFavicon() was called before OnUpdateCandidates().
370 DCHECK(got_favicon_from_history_); 371 DCHECK(got_favicon_from_history_);
371 372
372 bool has_valid_result = HasValidResult(favicon_bitmap_results); 373 bool has_valid_result = HasValidResult(favicon_bitmap_results);
373 bool has_expired_or_incomplete_result = 374 bool has_expired_or_incomplete_result =
374 !has_valid_result || HasExpiredOrIncompleteResult(preferred_icon_size(), 375 !has_valid_result || HasExpiredOrIncompleteResult(preferred_icon_size(),
375 favicon_bitmap_results); 376 favicon_bitmap_results);
376 377
377 if (has_valid_result && (notification_icon_url_ != manifest_url_ || 378 if (has_valid_result &&
378 notification_icon_type_ != favicon_base::FAVICON)) { 379 (notification_icon_url_ != manifest_url_ ||
380 notification_icon_type_ != favicon_base::WEB_MANIFEST_ICON)) {
379 // There is a valid favicon. Notify any observers. It is useful to notify 381 // There is a valid favicon. Notify any observers. It is useful to notify
380 // the observers even if the favicon is expired or incomplete (incorrect 382 // the observers even if the favicon is expired or incomplete (incorrect
381 // size) because temporarily showing the user an expired favicon or 383 // size) because temporarily showing the user an expired favicon or
382 // streched favicon is preferable to showing the user the default favicon. 384 // streched favicon is preferable to showing the user the default favicon.
383 NotifyFaviconUpdated(favicon_bitmap_results); 385 NotifyFaviconUpdated(favicon_bitmap_results);
384 } 386 }
385 387
386 if (has_expired_or_incomplete_result) { 388 if (has_expired_or_incomplete_result) {
387 manifest_download_request_.Reset(base::Bind( 389 manifest_download_request_.Reset(base::Bind(
388 &FaviconHandler::OnDidDownloadManifest, base::Unretained(this))); 390 &FaviconHandler::OnDidDownloadManifest, base::Unretained(this)));
389 delegate_->DownloadManifest(manifest_url_, 391 delegate_->DownloadManifest(manifest_url_,
390 manifest_download_request_.callback()); 392 manifest_download_request_.callback());
391 } 393 }
392 } 394 }
393 395
394 void FaviconHandler::OnDidDownloadManifest( 396 void FaviconHandler::OnDidDownloadManifest(
395 const std::vector<FaviconURL>& candidates) { 397 const std::vector<FaviconURL>& candidates) {
pkotwicz 2017/05/24 14:27:44 Shouldn't |candidates| be of type favicon_base::WE
mastiz 2017/05/25 11:14:16 Done, changed. It's certainly cleaner this way, al
396 // Mark manifest download as finished. 398 // Mark manifest download as finished.
397 manifest_download_request_.Cancel(); 399 manifest_download_request_.Cancel();
398 400
399 if (!candidates.empty()) { 401 if (!candidates.empty()) {
400 OnGotFinalIconURLCandidates(candidates); 402 OnGotFinalIconURLCandidates(candidates);
401 return; 403 return;
402 } 404 }
403 405
404 // If either the downloading of the manifest failed, OR the manifest contains 406 // If either the downloading of the manifest failed, OR the manifest contains
405 // no icons, proceed with the list of icons listed in the HTML. 407 // no icons, proceed with the list of icons listed in the HTML.
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 // OnDidDownloadFavicon() can only be called after requesting a download, so 521 // OnDidDownloadFavicon() can only be called after requesting a download, so
520 // |num_image_download_requests_| can never be 0. 522 // |num_image_download_requests_| can never be 0.
521 RecordDownloadAttemptsForHandlerType(handler_type_, 523 RecordDownloadAttemptsForHandlerType(handler_type_,
522 num_image_download_requests_); 524 num_image_download_requests_);
523 // We have either found the ideal candidate or run out of candidates. 525 // We have either found the ideal candidate or run out of candidates.
524 if (best_favicon_.candidate.icon_type != favicon_base::INVALID_ICON) { 526 if (best_favicon_.candidate.icon_type != favicon_base::INVALID_ICON) {
525 // No more icons to request, set the favicon from the candidate. The 527 // No more icons to request, set the favicon from the candidate. The
526 // manifest URL, if available, is used instead of the icon URL. 528 // manifest URL, if available, is used instead of the icon URL.
527 SetFavicon(manifest_url_.is_empty() ? best_favicon_.candidate.icon_url 529 SetFavicon(manifest_url_.is_empty() ? best_favicon_.candidate.icon_url
528 : manifest_url_, 530 : manifest_url_,
529 best_favicon_.image, best_favicon_.candidate.icon_type); 531 best_favicon_.image,
532 manifest_url_.is_empty() ? best_favicon_.candidate.icon_type
533 : favicon_base::WEB_MANIFEST_ICON);
pkotwicz 2017/05/24 14:27:44 You need to update HistoryBackend::SetFaviconMappi
mastiz 2017/05/25 11:14:16 Done.
530 } 534 }
531 // Clear download related state. 535 // Clear download related state.
532 current_candidate_index_ = candidates_.size(); 536 current_candidate_index_ = candidates_.size();
533 num_image_download_requests_ = 0; 537 num_image_download_requests_ = 0;
534 best_favicon_ = DownloadedFavicon(); 538 best_favicon_ = DownloadedFavicon();
535 } 539 }
536 } 540 }
537 541
538 const std::vector<GURL> FaviconHandler::GetIconURLs() const { 542 const std::vector<GURL> FaviconHandler::GetIconURLs() const {
539 std::vector<GURL> icon_urls; 543 std::vector<GURL> icon_urls;
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 // A max bitmap size is specified to avoid receiving huge bitmaps in 667 // A max bitmap size is specified to avoid receiving huge bitmaps in
664 // OnDidDownloadFavicon(). See FaviconDriver::StartDownload() 668 // OnDidDownloadFavicon(). See FaviconDriver::StartDownload()
665 // for more details about the max bitmap size. 669 // for more details about the max bitmap size.
666 const int download_id = 670 const int download_id =
667 delegate_->DownloadImage(image_url, GetMaximalIconSize(handler_type_), 671 delegate_->DownloadImage(image_url, GetMaximalIconSize(handler_type_),
668 image_download_request_.callback()); 672 image_download_request_.callback());
669 DCHECK_NE(download_id, 0); 673 DCHECK_NE(download_id, 0);
670 } 674 }
671 675
672 } // namespace favicon 676 } // namespace favicon
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698