 Chromium Code Reviews
 Chromium Code Reviews Issue 2896803002:
  [LargeIconService] Make check_seen param optional for fetching  (Closed)
    
  
    Issue 2896803002:
  [LargeIconService] Make check_seen param optional for fetching  (Closed) 
  | 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 |