| Index: components/favicon/core/large_icon_service.cc
|
| diff --git a/components/favicon/core/large_icon_service.cc b/components/favicon/core/large_icon_service.cc
|
| index 0153ddf34304ffb213863c0486a01a34ff20a270..5817bfcfd582732158a922313c18e07c2f659297 100644
|
| --- a/components/favicon/core/large_icon_service.cc
|
| +++ b/components/favicon/core/large_icon_service.cc
|
| @@ -21,6 +21,7 @@
|
| #include "components/favicon_base/fallback_icon_style.h"
|
| #include "components/favicon_base/favicon_types.h"
|
| #include "components/favicon_base/favicon_util.h"
|
| +#include "components/image_fetcher/core/request_metadata.h"
|
| #include "skia/ext/image_operations.h"
|
| #include "ui/gfx/codec/png_codec.h"
|
| #include "ui/gfx/geometry/size.h"
|
| @@ -48,8 +49,8 @@ GURL TrimPageUrlForGoogleServer(const GURL& page_url) {
|
| return page_url.ReplaceComponents(replacements);
|
| }
|
|
|
| -GURL GetIconUrlForGoogleServerV2(const GURL& page_url,
|
| - int min_source_size_in_pixel) {
|
| +GURL GetRequestUrlForGoogleServerV2(const GURL& page_url,
|
| + int min_source_size_in_pixel) {
|
| return GURL(base::StringPrintf(
|
| kGoogleServerV2RequestFormat, kGoogleServerV2DesiredSizeInPixel,
|
| min_source_size_in_pixel, kGoogleServerV2MaxSizeInPixel,
|
| @@ -220,28 +221,30 @@ void OnFetchIconFromGoogleServerComplete(
|
| FaviconService* favicon_service,
|
| const GURL& page_url,
|
| const base::Callback<void(bool success)>& callback,
|
| - const std::string& icon_url,
|
| + const std::string& server_request_url,
|
| const gfx::Image& image,
|
| const image_fetcher::RequestMetadata& metadata) {
|
| if (image.IsEmpty()) {
|
| - DLOG(WARNING) << "large icon server fetch empty " << icon_url;
|
| - favicon_service->UnableToDownloadFavicon(GURL(icon_url));
|
| + DLOG(WARNING) << "large icon server fetch empty " << server_request_url;
|
| + favicon_service->UnableToDownloadFavicon(GURL(server_request_url));
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
|
| base::Bind(callback, false));
|
| return;
|
| }
|
|
|
| - // TODO(crbug.com/699542): Extract the original icon url from the response
|
| - // headers if available and use it instead of |icon_url|. Possibly the type
|
| - // too, because using TOUCH_ICON is a hacky way that allows us to not
|
| - // interfere with sync.
|
| + // If given, use the original favicon URL from Content-Location http header.
|
| + // Otherwise, use the request URL as fallback.
|
| + std::string original_icon_url = metadata.content_location_header;
|
| + if (original_icon_url.empty()) {
|
| + original_icon_url = server_request_url;
|
| + }
|
|
|
| // Write fetched icons to FaviconService's cache, but only if no icon was
|
| // available (clients are encouraged to do this in advance, but meanwhile
|
| // something else could've been written). By marking the icons initially
|
| // expired (out-of-date), they will be refetched when we visit the original
|
| // page any time in the future.
|
| - favicon_service->SetLastResortFavicons(page_url, GURL(icon_url),
|
| + favicon_service->SetLastResortFavicons(page_url, GURL(original_icon_url),
|
| favicon_base::IconType::TOUCH_ICON,
|
| image, callback);
|
| }
|
| @@ -295,13 +298,13 @@ void LargeIconService::
|
| DCHECK_LE(0, min_source_size_in_pixel);
|
|
|
| const GURL trimmed_page_url = TrimPageUrlForGoogleServer(page_url);
|
| - const GURL icon_url =
|
| - GetIconUrlForGoogleServerV2(trimmed_page_url, min_source_size_in_pixel);
|
| + const GURL server_request_url = GetRequestUrlForGoogleServerV2(
|
| + trimmed_page_url, min_source_size_in_pixel);
|
|
|
| // Do not download if the URL is invalid after trimming, or there is a
|
| - // previous cache miss recorded for |icon_url|.
|
| + // previous cache miss recorded for |server_request_url|.
|
| if (!trimmed_page_url.is_valid() || !image_fetcher_ ||
|
| - favicon_service_->WasUnableToDownloadFavicon(icon_url)) {
|
| + favicon_service_->WasUnableToDownloadFavicon(server_request_url)) {
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
|
| base::Bind(callback, false));
|
| return;
|
| @@ -310,7 +313,7 @@ void LargeIconService::
|
| image_fetcher_->SetDataUseServiceName(
|
| data_use_measurement::DataUseUserData::LARGE_ICON_SERVICE);
|
| image_fetcher_->StartOrQueueNetworkRequest(
|
| - icon_url.spec(), icon_url,
|
| + server_request_url.spec(), server_request_url,
|
| base::Bind(&OnFetchIconFromGoogleServerComplete, favicon_service_,
|
| page_url, callback));
|
| }
|
|
|