Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/large_icon_service.h" | 5 #include "components/favicon/core/large_icon_service.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/feature_list.h" | 10 #include "base/feature_list.h" |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 33 namespace favicon { | 33 namespace favicon { |
| 34 namespace { | 34 namespace { |
| 35 | 35 |
| 36 // This feature is only used for accessing field trial parameters, not for | 36 // This feature is only used for accessing field trial parameters, not for |
| 37 // switching on/off the code. | 37 // switching on/off the code. |
| 38 const base::Feature kLargeIconServiceFetchingFeature{ | 38 const base::Feature kLargeIconServiceFetchingFeature{ |
| 39 "LargeIconServiceFetching", base::FEATURE_ENABLED_BY_DEFAULT}; | 39 "LargeIconServiceFetching", base::FEATURE_ENABLED_BY_DEFAULT}; |
| 40 | 40 |
| 41 const char kGoogleServerV2RequestFormat[] = | 41 const char kGoogleServerV2RequestFormat[] = |
| 42 "https://t0.gstatic.com/faviconV2?" | 42 "https://t0.gstatic.com/faviconV2?" |
| 43 "client=chrome&drop_404_icon=true&check_seen=true&" | 43 "client=chrome&drop_404_icon=true&%s" |
| 44 "size=%d&min_size=%d&max_size=%d&fallback_opts=TYPE,SIZE,URL&url=%s"; | 44 "size=%d&min_size=%d&max_size=%d&fallback_opts=TYPE,SIZE,URL&url=%s"; |
| 45 const char kGoogleServerV2RequestFormatParam[] = "request_format"; | 45 const char kGoogleServerV2RequestFormatParam[] = "request_format"; |
| 46 | 46 |
| 47 const char kCheckSeenParam[] = "check_seen=true&"; | |
|
pkotwicz
2017/05/24 05:02:25
Random question: Does "check_seen=false" work?
jkrcal
2017/05/24 08:54:48
Yes. Any non-"true" value of check_seen is equival
| |
| 48 | |
| 47 const int kGoogleServerV2EnforcedMinSizeInPixel = 32; | 49 const int kGoogleServerV2EnforcedMinSizeInPixel = 32; |
| 48 const char kGoogleServerV2EnforcedMinSizeInPixelParam[] = | 50 const char kGoogleServerV2EnforcedMinSizeInPixelParam[] = |
| 49 "enforced_min_size_in_pixel"; | 51 "enforced_min_size_in_pixel"; |
| 50 | 52 |
| 51 const double kGoogleServerV2DesiredToMaxSizeFactor = 2.0; | 53 const double kGoogleServerV2DesiredToMaxSizeFactor = 2.0; |
| 52 const char kGoogleServerV2DesiredToMaxSizeFactorParam[] = | 54 const char kGoogleServerV2DesiredToMaxSizeFactorParam[] = |
| 53 "desired_to_max_size_factor"; | 55 "desired_to_max_size_factor"; |
| 54 | 56 |
| 55 GURL TrimPageUrlForGoogleServer(const GURL& page_url) { | 57 GURL TrimPageUrlForGoogleServer(const GURL& page_url) { |
| 56 if (!page_url.SchemeIsHTTPOrHTTPS() || page_url.HostIsIPAddress()) | 58 if (!page_url.SchemeIsHTTPOrHTTPS() || page_url.HostIsIPAddress()) |
| 57 return GURL(); | 59 return GURL(); |
| 58 | 60 |
| 59 url::Replacements<char> replacements; | 61 url::Replacements<char> replacements; |
| 60 replacements.ClearUsername(); | 62 replacements.ClearUsername(); |
| 61 replacements.ClearPassword(); | 63 replacements.ClearPassword(); |
| 62 replacements.ClearQuery(); | 64 replacements.ClearQuery(); |
| 63 replacements.ClearRef(); | 65 replacements.ClearRef(); |
| 64 return page_url.ReplaceComponents(replacements); | 66 return page_url.ReplaceComponents(replacements); |
| 65 } | 67 } |
| 66 | 68 |
| 67 GURL GetRequestUrlForGoogleServerV2(const GURL& page_url, | 69 GURL GetRequestUrlForGoogleServerV2(const GURL& page_url, |
| 68 int min_source_size_in_pixel, | 70 int min_source_size_in_pixel, |
| 69 int desired_size_in_pixel) { | 71 int desired_size_in_pixel, |
| 72 bool may_page_url_be_private) { | |
| 70 std::string url_format = base::GetFieldTrialParamValueByFeature( | 73 std::string url_format = base::GetFieldTrialParamValueByFeature( |
| 71 kLargeIconServiceFetchingFeature, kGoogleServerV2RequestFormatParam); | 74 kLargeIconServiceFetchingFeature, kGoogleServerV2RequestFormatParam); |
| 72 double desired_to_max_size_factor = base::GetFieldTrialParamByFeatureAsDouble( | 75 double desired_to_max_size_factor = base::GetFieldTrialParamByFeatureAsDouble( |
| 73 kLargeIconServiceFetchingFeature, | 76 kLargeIconServiceFetchingFeature, |
| 74 kGoogleServerV2DesiredToMaxSizeFactorParam, | 77 kGoogleServerV2DesiredToMaxSizeFactorParam, |
| 75 kGoogleServerV2DesiredToMaxSizeFactor); | 78 kGoogleServerV2DesiredToMaxSizeFactor); |
| 76 | 79 |
| 77 min_source_size_in_pixel = std::max( | 80 min_source_size_in_pixel = std::max( |
| 78 min_source_size_in_pixel, base::GetFieldTrialParamByFeatureAsInt( | 81 min_source_size_in_pixel, base::GetFieldTrialParamByFeatureAsInt( |
| 79 kLargeIconServiceFetchingFeature, | 82 kLargeIconServiceFetchingFeature, |
| 80 kGoogleServerV2EnforcedMinSizeInPixelParam, | 83 kGoogleServerV2EnforcedMinSizeInPixelParam, |
| 81 kGoogleServerV2EnforcedMinSizeInPixel)); | 84 kGoogleServerV2EnforcedMinSizeInPixel)); |
| 82 desired_size_in_pixel = | 85 desired_size_in_pixel = |
| 83 std::max(desired_size_in_pixel, min_source_size_in_pixel); | 86 std::max(desired_size_in_pixel, min_source_size_in_pixel); |
| 84 int max_size_in_pixel = | 87 int max_size_in_pixel = |
| 85 static_cast<int>(desired_size_in_pixel * desired_to_max_size_factor); | 88 static_cast<int>(desired_size_in_pixel * desired_to_max_size_factor); |
| 86 | 89 |
| 87 return GURL(base::StringPrintf( | 90 return GURL(base::StringPrintf( |
| 88 url_format.empty() ? kGoogleServerV2RequestFormat : url_format.c_str(), | 91 url_format.empty() ? kGoogleServerV2RequestFormat : url_format.c_str(), |
| 89 desired_size_in_pixel, min_source_size_in_pixel, max_size_in_pixel, | 92 may_page_url_be_private ? kCheckSeenParam : "", desired_size_in_pixel, |
| 90 page_url.spec().c_str())); | 93 min_source_size_in_pixel, max_size_in_pixel, page_url.spec().c_str())); |
| 91 } | 94 } |
| 92 | 95 |
| 93 bool IsDbResultAdequate(const favicon_base::FaviconRawBitmapResult& db_result, | 96 bool IsDbResultAdequate(const favicon_base::FaviconRawBitmapResult& db_result, |
| 94 int min_source_size) { | 97 int min_source_size) { |
| 95 return db_result.is_valid() && | 98 return db_result.is_valid() && |
| 96 db_result.pixel_size.width() == db_result.pixel_size.height() && | 99 db_result.pixel_size.width() == db_result.pixel_size.height() && |
| 97 db_result.pixel_size.width() >= min_source_size; | 100 db_result.pixel_size.width() >= min_source_size; |
| 98 } | 101 } |
| 99 | 102 |
| 100 // Wraps the PNG data in |db_result| in a gfx::Image. If |desired_size| is not | 103 // Wraps the PNG data in |db_result| in a gfx::Image. If |desired_size| is not |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 338 return GetLargeIconOrFallbackStyleImpl( | 341 return GetLargeIconOrFallbackStyleImpl( |
| 339 page_url, min_source_size_in_pixel, desired_size_in_pixel, | 342 page_url, min_source_size_in_pixel, desired_size_in_pixel, |
| 340 favicon_base::LargeIconCallback(), image_callback, tracker); | 343 favicon_base::LargeIconCallback(), image_callback, tracker); |
| 341 } | 344 } |
| 342 | 345 |
| 343 void LargeIconService:: | 346 void LargeIconService:: |
| 344 GetLargeIconOrFallbackStyleFromGoogleServerSkippingLocalCache( | 347 GetLargeIconOrFallbackStyleFromGoogleServerSkippingLocalCache( |
| 345 const GURL& page_url, | 348 const GURL& page_url, |
| 346 int min_source_size_in_pixel, | 349 int min_source_size_in_pixel, |
| 347 int desired_size_in_pixel, | 350 int desired_size_in_pixel, |
| 351 bool may_page_url_be_private, | |
| 348 const base::Callback<void(bool success)>& callback) { | 352 const base::Callback<void(bool success)>& callback) { |
| 349 DCHECK_LE(0, min_source_size_in_pixel); | 353 DCHECK_LE(0, min_source_size_in_pixel); |
| 350 | 354 |
| 351 const GURL trimmed_page_url = TrimPageUrlForGoogleServer(page_url); | 355 const GURL trimmed_page_url = TrimPageUrlForGoogleServer(page_url); |
| 352 const GURL server_request_url = GetRequestUrlForGoogleServerV2( | 356 const GURL server_request_url = GetRequestUrlForGoogleServerV2( |
| 353 trimmed_page_url, min_source_size_in_pixel, desired_size_in_pixel); | 357 trimmed_page_url, min_source_size_in_pixel, desired_size_in_pixel, |
| 358 may_page_url_be_private); | |
| 354 | 359 |
| 355 // Do not download if the URL is invalid after trimming, or there is a | 360 // Do not download if the URL is invalid after trimming, or there is a |
| 356 // previous cache miss recorded for |server_request_url|. | 361 // previous cache miss recorded for |server_request_url|. |
| 357 if (!server_request_url.is_valid() || !trimmed_page_url.is_valid() || | 362 if (!server_request_url.is_valid() || !trimmed_page_url.is_valid() || |
| 358 !image_fetcher_ || | 363 !image_fetcher_ || |
| 359 favicon_service_->WasUnableToDownloadFavicon(server_request_url)) { | 364 favicon_service_->WasUnableToDownloadFavicon(server_request_url)) { |
| 360 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, | 365 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, |
| 361 base::Bind(callback, false)); | 366 base::Bind(callback, false)); |
| 362 return; | 367 return; |
| 363 } | 368 } |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 412 // TODO(beaudoin): For now this is just a wrapper around | 417 // TODO(beaudoin): For now this is just a wrapper around |
| 413 // GetLargestRawFaviconForPageURL. Add the logic required to select the best | 418 // GetLargestRawFaviconForPageURL. Add the logic required to select the best |
| 414 // possible large icon. Also add logic to fetch-on-demand when the URL of | 419 // possible large icon. Also add logic to fetch-on-demand when the URL of |
| 415 // a large icon is known but its bitmap is not available. | 420 // a large icon is known but its bitmap is not available. |
| 416 return favicon_service_->GetLargestRawFaviconForPageURL( | 421 return favicon_service_->GetLargestRawFaviconForPageURL( |
| 417 page_url, large_icon_types_, min_source_size_in_pixel, | 422 page_url, large_icon_types_, min_source_size_in_pixel, |
| 418 base::Bind(&LargeIconWorker::OnIconLookupComplete, worker), tracker); | 423 base::Bind(&LargeIconWorker::OnIconLookupComplete, worker), tracker); |
| 419 } | 424 } |
| 420 | 425 |
| 421 } // namespace favicon | 426 } // namespace favicon |
| OLD | NEW |