| Index: components/favicon/core/favicon_handler.cc
|
| diff --git a/components/favicon/core/favicon_handler.cc b/components/favicon/core/favicon_handler.cc
|
| index 3befa3491828e4e127d74984f61048540b62d2a7..efe5ed8409451118328636bf00bf355ca4e5e504 100644
|
| --- a/components/favicon/core/favicon_handler.cc
|
| +++ b/components/favicon/core/favicon_handler.cc
|
| @@ -54,16 +54,6 @@ bool DoUrlsAndIconsMatch(
|
| return true;
|
| }
|
|
|
| -std::string UrlWithoutFragment(const GURL& gurl) {
|
| - GURL::Replacements replacements;
|
| - replacements.ClearRef();
|
| - return gurl.ReplaceComponents(replacements).spec();
|
| -}
|
| -
|
| -bool UrlMatches(const GURL& gurl_a, const GURL& gurl_b) {
|
| - return UrlWithoutFragment(gurl_a) == UrlWithoutFragment(gurl_b);
|
| -}
|
| -
|
| // Return true if |bitmap_result| is expired.
|
| bool IsExpired(const favicon_base::FaviconRawBitmapResult& bitmap_result) {
|
| return bitmap_result.expired;
|
| @@ -173,10 +163,9 @@ FaviconHandler::DownloadRequest::~DownloadRequest() {
|
| }
|
|
|
| FaviconHandler::DownloadRequest::DownloadRequest(
|
| - const GURL& url,
|
| const GURL& image_url,
|
| favicon_base::IconType icon_type)
|
| - : url(url), image_url(image_url), icon_type(icon_type) {
|
| + : image_url(image_url), icon_type(icon_type) {
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -189,13 +178,11 @@ FaviconHandler::FaviconCandidate::~FaviconCandidate() {
|
| }
|
|
|
| FaviconHandler::FaviconCandidate::FaviconCandidate(
|
| - const GURL& url,
|
| const GURL& image_url,
|
| const gfx::Image& image,
|
| float score,
|
| favicon_base::IconType icon_type)
|
| - : url(url),
|
| - image_url(image_url),
|
| + : image_url(image_url),
|
| image(image),
|
| score(score),
|
| icon_type(icon_type) {}
|
| @@ -255,8 +242,7 @@ void FaviconHandler::FetchFavicon(const GURL& url) {
|
| &cancelable_task_tracker_);
|
| }
|
|
|
| -bool FaviconHandler::UpdateFaviconCandidate(const GURL& url,
|
| - const GURL& image_url,
|
| +bool FaviconHandler::UpdateFaviconCandidate(const GURL& image_url,
|
| const gfx::Image& image,
|
| float score,
|
| favicon_base::IconType icon_type) {
|
| @@ -293,18 +279,17 @@ bool FaviconHandler::UpdateFaviconCandidate(const GURL& url,
|
| score > best_favicon_candidate_.score;
|
| }
|
| if (replace_best_favicon_candidate) {
|
| - best_favicon_candidate_ = FaviconCandidate(
|
| - url, image_url, image, score, icon_type);
|
| + best_favicon_candidate_ =
|
| + FaviconCandidate(image_url, image, score, icon_type);
|
| }
|
| return exact_match;
|
| }
|
|
|
| -void FaviconHandler::SetFavicon(const GURL& url,
|
| - const GURL& icon_url,
|
| +void FaviconHandler::SetFavicon(const GURL& icon_url,
|
| const gfx::Image& image,
|
| favicon_base::IconType icon_type) {
|
| - if (ShouldSaveFavicon(url))
|
| - SetHistoryFavicons(url, icon_url, icon_type, image);
|
| + if (ShouldSaveFavicon())
|
| + SetHistoryFavicons(url_, icon_url, icon_type, image);
|
|
|
| NotifyFaviconAvailable(icon_url, image);
|
| }
|
| @@ -360,7 +345,7 @@ void FaviconHandler::ProcessCurrentUrl() {
|
|
|
| // current_candidate() may return NULL if download_largest_icon_ is true and
|
| // all the sizes are larger than the max.
|
| - if (PageChangedSinceFaviconWasRequested() || !current_candidate())
|
| + if (!current_candidate())
|
| return;
|
|
|
| if (current_candidate()->icon_type == favicon_base::FAVICON &&
|
| @@ -378,8 +363,7 @@ void FaviconHandler::ProcessCurrentUrl() {
|
| }
|
|
|
| if (got_favicon_from_history_)
|
| - DownloadFaviconOrAskFaviconService(driver_->GetActiveURL(),
|
| - current_candidate()->icon_url,
|
| + DownloadFaviconOrAskFaviconService(current_candidate()->icon_url,
|
| current_candidate()->icon_type);
|
| }
|
|
|
| @@ -398,8 +382,7 @@ void FaviconHandler::OnDidDownloadFavicon(
|
| DownloadRequest download_request = i->second;
|
| download_requests_.erase(i);
|
|
|
| - if (PageChangedSinceFaviconWasRequested() ||
|
| - !current_candidate() ||
|
| + if (!current_candidate() ||
|
| !DoUrlAndIconMatch(*current_candidate(),
|
| image_url,
|
| download_request.icon_type)) {
|
| @@ -434,9 +417,8 @@ void FaviconHandler::OnDidDownloadFavicon(
|
| gfx::Image image(image_skia);
|
| // The downloaded icon is still valid when there is no FaviconURL update
|
| // during the downloading.
|
| - request_next_icon = !UpdateFaviconCandidate(
|
| - download_request.url, image_url, image, score,
|
| - download_request.icon_type);
|
| + request_next_icon = !UpdateFaviconCandidate(image_url, image, score,
|
| + download_request.icon_type);
|
| }
|
| }
|
|
|
| @@ -448,7 +430,7 @@ void FaviconHandler::OnDidDownloadFavicon(
|
| // We have either found the ideal candidate or run out of candidates.
|
| if (best_favicon_candidate_.icon_type != favicon_base::INVALID_ICON) {
|
| // No more icons to request, set the favicon from the candidate.
|
| - SetFavicon(best_favicon_candidate_.url, best_favicon_candidate_.image_url,
|
| + SetFavicon(best_favicon_candidate_.image_url,
|
| best_favicon_candidate_.image,
|
| best_favicon_candidate_.icon_type);
|
| }
|
| @@ -464,15 +446,6 @@ bool FaviconHandler::HasPendingTasksForTest() {
|
| cancelable_task_tracker_.HasTrackedTasks();
|
| }
|
|
|
| -bool FaviconHandler::PageChangedSinceFaviconWasRequested() {
|
| - if (UrlMatches(driver_->GetActiveURL(), url_) && url_.is_valid()) {
|
| - return false;
|
| - }
|
| - // If the URL has changed out from under us (as will happen with redirects)
|
| - // return true.
|
| - return true;
|
| -}
|
| -
|
| int FaviconHandler::DownloadFavicon(const GURL& image_url,
|
| int max_bitmap_size) {
|
| if (!image_url.is_valid()) {
|
| @@ -527,16 +500,16 @@ void FaviconHandler::SetHistoryFavicons(const GURL& page_url,
|
| const gfx::Image& image) {
|
| // TODO(huangs): Get the following to garbage collect if handler_type_ == ALL.
|
| if (service_) {
|
| - service_->SetFavicons(page_url, icon_url, icon_type, image);
|
| + service_->SetFavicons(url_, icon_url, icon_type, image);
|
| }
|
| }
|
|
|
| -bool FaviconHandler::ShouldSaveFavicon(const GURL& url) {
|
| +bool FaviconHandler::ShouldSaveFavicon() {
|
| if (!driver_->IsOffTheRecord())
|
| return true;
|
|
|
| // Always save favicon if the page is bookmarked.
|
| - return driver_->IsBookmarked(url);
|
| + return driver_->IsBookmarked(url_);
|
| }
|
|
|
| int FaviconHandler::GetMaximalIconSize(favicon_base::IconType icon_type) {
|
| @@ -560,8 +533,6 @@ int FaviconHandler::GetMaximalIconSize(favicon_base::IconType icon_type) {
|
| void FaviconHandler::OnFaviconDataForInitialURLFromFaviconService(
|
| const std::vector<favicon_base::FaviconRawBitmapResult>&
|
| favicon_bitmap_results) {
|
| - if (PageChangedSinceFaviconWasRequested())
|
| - return;
|
| got_favicon_from_history_ = true;
|
| history_results_ = favicon_bitmap_results;
|
| bool has_results = !favicon_bitmap_results.empty();
|
| @@ -592,16 +563,14 @@ void FaviconHandler::OnFaviconDataForInitialURLFromFaviconService(
|
| // Mapping in the database is wrong. DownloadFavIconOrAskHistory will
|
| // update the mapping for this url and download the favicon if we don't
|
| // already have it.
|
| - DownloadFaviconOrAskFaviconService(driver_->GetActiveURL(),
|
| - current_candidate()->icon_url,
|
| + DownloadFaviconOrAskFaviconService(current_candidate()->icon_url,
|
| current_candidate()->icon_type);
|
| }
|
| } else if (current_candidate()) {
|
| // We know the official url for the favicon, but either don't have the
|
| // favicon or it's expired. Continue on to DownloadFaviconOrAskHistory to
|
| // either download or check history again.
|
| - DownloadFaviconOrAskFaviconService(driver_->GetActiveURL(),
|
| - current_candidate()->icon_url,
|
| + DownloadFaviconOrAskFaviconService(current_candidate()->icon_url,
|
| current_candidate()->icon_type);
|
| }
|
| // else we haven't got the icon url. When we get it we'll ask the
|
| @@ -612,12 +581,11 @@ void FaviconHandler::OnFaviconDataForInitialURLFromFaviconService(
|
| }
|
|
|
| void FaviconHandler::DownloadFaviconOrAskFaviconService(
|
| - const GURL& page_url,
|
| const GURL& icon_url,
|
| favicon_base::IconType icon_type) {
|
| if (favicon_expired_or_incomplete_) {
|
| // We have the mapping, but the favicon is out of date. Download it now.
|
| - ScheduleDownload(page_url, icon_url, icon_type);
|
| + ScheduleDownload(icon_url, icon_type);
|
| } else {
|
| // We don't know the favicon, but we may have previously downloaded the
|
| // favicon for another page that shares the same favicon. Ask for the
|
| @@ -634,7 +602,7 @@ void FaviconHandler::DownloadFaviconOrAskFaviconService(
|
| // include the mapping between the page url and the favicon url.
|
| // This is asynchronous. The history service will call back when done.
|
| UpdateFaviconMappingAndFetch(
|
| - page_url, icon_url, icon_type,
|
| + url_, icon_url, icon_type,
|
| base::Bind(&FaviconHandler::OnFaviconData, base::Unretained(this)),
|
| &cancelable_task_tracker_);
|
| }
|
| @@ -643,9 +611,6 @@ void FaviconHandler::DownloadFaviconOrAskFaviconService(
|
|
|
| void FaviconHandler::OnFaviconData(const std::vector<
|
| favicon_base::FaviconRawBitmapResult>& favicon_bitmap_results) {
|
| - if (PageChangedSinceFaviconWasRequested())
|
| - return;
|
| -
|
| bool has_results = !favicon_bitmap_results.empty();
|
| bool has_expired_or_incomplete_result = HasExpiredOrIncompleteResult(
|
| preferred_icon_size(), favicon_bitmap_results);
|
| @@ -668,15 +633,13 @@ void FaviconHandler::OnFaviconData(const std::vector<
|
| }
|
|
|
| if (!has_results || has_expired_or_incomplete_result) {
|
| - ScheduleDownload(driver_->GetActiveURL(),
|
| - current_candidate()->icon_url,
|
| + ScheduleDownload(current_candidate()->icon_url,
|
| current_candidate()->icon_type);
|
| }
|
| }
|
|
|
| -void FaviconHandler::ScheduleDownload(const GURL& url,
|
| - const GURL& image_url,
|
| - favicon_base::IconType icon_type) {
|
| +void FaviconHandler::ScheduleDownload(const GURL& image_url,
|
| + favicon_base::IconType icon_type) {
|
| // A max bitmap size is specified to avoid receiving huge bitmaps in
|
| // OnDidDownloadFavicon(). See FaviconDriver::StartDownload()
|
| // for more details about the max bitmap size.
|
| @@ -685,7 +648,7 @@ void FaviconHandler::ScheduleDownload(const GURL& url,
|
|
|
| // Download ids should be unique.
|
| DCHECK(download_requests_.find(download_id) == download_requests_.end());
|
| - download_requests_[download_id] = DownloadRequest(url, image_url, icon_type);
|
| + download_requests_[download_id] = DownloadRequest(image_url, icon_type);
|
|
|
| if (download_id == 0) {
|
| // If DownloadFavicon() did not start a download, it returns a download id
|
|
|