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

Side by Side Diff: chrome/browser/favicon/favicon_handler.cc

Issue 934693002: Reload favicon from HTTP cache on Ctrl+Refresh (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « chrome/browser/favicon/favicon_handler.h ('k') | chrome/browser/favicon/favicon_tab_helper.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "chrome/browser/favicon/favicon_handler.h" 5 #include "chrome/browser/favicon/favicon_handler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 const GURL& image_url, 377 const GURL& image_url,
378 const std::vector<SkBitmap>& bitmaps, 378 const std::vector<SkBitmap>& bitmaps,
379 const std::vector<gfx::Size>& original_bitmap_sizes) { 379 const std::vector<gfx::Size>& original_bitmap_sizes) {
380 DownloadRequests::iterator i = download_requests_.find(id); 380 DownloadRequests::iterator i = download_requests_.find(id);
381 if (i == download_requests_.end()) { 381 if (i == download_requests_.end()) {
382 // Currently WebContents notifies us of ANY downloads so that it is 382 // Currently WebContents notifies us of ANY downloads so that it is
383 // possible to get here. 383 // possible to get here.
384 return; 384 return;
385 } 385 }
386 386
387 DownloadRequest download_request = i->second;
pkotwicz 2015/02/19 21:29:57 I switched to erasing |download_requests_| immedia
388 download_requests_.erase(i);
389
387 if (current_candidate() && 390 if (current_candidate() &&
388 DoUrlAndIconMatch(*current_candidate(), image_url, i->second.icon_type)) { 391 DoUrlAndIconMatch(*current_candidate(),
392 image_url,
393 download_request.icon_type)) {
389 bool request_next_icon = true; 394 bool request_next_icon = true;
390 float score = 0.0f; 395 float score = 0.0f;
391 gfx::ImageSkia image_skia; 396 gfx::ImageSkia image_skia;
392 if (download_largest_icon_ && !bitmaps.empty()) { 397 if (download_largest_icon_ && !bitmaps.empty()) {
393 int index = -1; 398 int index = -1;
394 // Use the largest bitmap if FaviconURL doesn't have sizes attribute. 399 // Use the largest bitmap if FaviconURL doesn't have sizes attribute.
395 if (current_candidate()->icon_sizes.empty()) { 400 if (current_candidate()->icon_sizes.empty()) {
396 index = GetLargestSizeIndex(original_bitmap_sizes); 401 index = GetLargestSizeIndex(original_bitmap_sizes);
397 } else { 402 } else {
398 index = GetIndexBySize(original_bitmap_sizes, 403 index = GetIndexBySize(original_bitmap_sizes,
399 current_candidate()->icon_sizes[0]); 404 current_candidate()->icon_sizes[0]);
400 // Find largest bitmap if there is no one exactly matched. 405 // Find largest bitmap if there is no one exactly matched.
401 if (index == -1) 406 if (index == -1)
402 index = GetLargestSizeIndex(original_bitmap_sizes); 407 index = GetLargestSizeIndex(original_bitmap_sizes);
403 } 408 }
404 image_skia = gfx::ImageSkia(gfx::ImageSkiaRep(bitmaps[index], 1)); 409 image_skia = gfx::ImageSkia(gfx::ImageSkiaRep(bitmaps[index], 1));
405 } else { 410 } else {
406 image_skia = CreateFaviconImageSkia(bitmaps, 411 image_skia = CreateFaviconImageSkia(bitmaps,
407 original_bitmap_sizes, 412 original_bitmap_sizes,
408 preferred_icon_size(), 413 preferred_icon_size(),
409 &score); 414 &score);
410 } 415 }
411 416
412 if (!image_skia.isNull()) { 417 if (!image_skia.isNull()) {
413 gfx::Image image(image_skia); 418 gfx::Image image(image_skia);
414 // The downloaded icon is still valid when there is no FaviconURL update 419 // The downloaded icon is still valid when there is no FaviconURL update
415 // during the downloading. 420 // during the downloading.
416 if (!bitmaps.empty()) { 421 if (!bitmaps.empty()) {
417 request_next_icon = !UpdateFaviconCandidate( 422 request_next_icon = !UpdateFaviconCandidate(
418 i->second.url, image_url, image, score, i->second.icon_type); 423 download_request.url, image_url, image, score,
424 download_request.icon_type);
419 } 425 }
420 } 426 }
421 if (request_next_icon && !PageChangedSinceFaviconWasRequested() && 427 if (request_next_icon && !PageChangedSinceFaviconWasRequested() &&
422 image_urls_.size() > 1) { 428 image_urls_.size() > 1) {
423 // Remove the first member of image_urls_ and process the remaining. 429 // Remove the first member of image_urls_ and process the remaining.
424 image_urls_.erase(image_urls_.begin()); 430 image_urls_.erase(image_urls_.begin());
425 ProcessCurrentUrl(); 431 ProcessCurrentUrl();
426 } else if (best_favicon_candidate_.icon_type != 432 } else if (best_favicon_candidate_.icon_type !=
427 favicon_base::INVALID_ICON) { 433 favicon_base::INVALID_ICON) {
428 // No more icons to request, set the favicon from the candidate. 434 // No more icons to request, set the favicon from the candidate.
429 SetFavicon(best_favicon_candidate_.url, 435 SetFavicon(best_favicon_candidate_.url,
430 best_favicon_candidate_.image_url, 436 best_favicon_candidate_.image_url,
431 best_favicon_candidate_.image, 437 best_favicon_candidate_.image,
432 best_favicon_candidate_.icon_type); 438 best_favicon_candidate_.icon_type);
433 // Reset candidate. 439 // Reset candidate.
434 image_urls_.clear(); 440 image_urls_.clear();
441 download_requests_.clear();
435 best_favicon_candidate_ = FaviconCandidate(); 442 best_favicon_candidate_ = FaviconCandidate();
436 } 443 }
437 } 444 }
438 download_requests_.erase(i);
439 } 445 }
440 446
441 bool FaviconHandler::PageChangedSinceFaviconWasRequested() { 447 bool FaviconHandler::PageChangedSinceFaviconWasRequested() {
442 if (UrlMatches(driver_->GetActiveURL(), url_) && url_.is_valid()) { 448 if (UrlMatches(driver_->GetActiveURL(), url_) && url_.is_valid()) {
443 return false; 449 return false;
444 } 450 }
445 // If the URL has changed out from under us (as will happen with redirects) 451 // If the URL has changed out from under us (as will happen with redirects)
446 // return true. 452 // return true.
447 return true; 453 return true;
448 } 454 }
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 if (i->icon_sizes.empty()) 682 if (i->icon_sizes.empty())
677 continue; 683 continue;
678 684
679 gfx::Size largest = i->icon_sizes[GetLargestSizeIndex(i->icon_sizes)]; 685 gfx::Size largest = i->icon_sizes[GetLargestSizeIndex(i->icon_sizes)];
680 i->icon_sizes.clear(); 686 i->icon_sizes.clear();
681 i->icon_sizes.push_back(largest); 687 i->icon_sizes.push_back(largest);
682 } 688 }
683 std::stable_sort(image_urls_.begin(), image_urls_.end(), 689 std::stable_sort(image_urls_.begin(), image_urls_.end(),
684 CompareIconSize); 690 CompareIconSize);
685 } 691 }
OLDNEW
« no previous file with comments | « chrome/browser/favicon/favicon_handler.h ('k') | chrome/browser/favicon/favicon_tab_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698