#include "chrome/browser/ui/webui/favicon_source.h"
+#include <cmath>
+
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/strings/string_number_conversions.h"
#include "chrome/browser/sync/profile_sync_service_factory.h"
#include "chrome/common/favicon/favicon_url_parser.h"
#include "chrome/common/url_constants.h"
-#include "grit/locale_settings.h"
-#include "grit/ui_resources.h"
+#include "chrome/grit/locale_settings.h"
#include "net/url_request/url_request.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/layout.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/base/webui/web_ui_util.h"
+#include "ui/resources/grit/ui_resources.h"
FaviconSource::IconRequest::IconRequest()
- : size_in_dip(gfx::kFaviconSize),
- scale_factor(ui::SCALE_FACTOR_NONE) {
+ : size_in_dip(gfx::kFaviconSize), device_scale_factor(1.0f) {
}
FaviconSource::IconRequest::IconRequest(
const content::URLDataSource::GotDataCallback& cb,
const GURL& path,
int size,
- ui::ScaleFactor scale)
+ float scale)
: callback(cb),
request_path(path),
size_in_dip(size),
- scale_factor(scale) {
+ device_scale_factor(scale) {
}
FaviconSource::IconRequest::~IconRequest() {
FaviconSource::FaviconSource(Profile* profile, IconType type)
: profile_(profile->GetOriginalProfile()),
- icon_types_(type == FAVICON ? chrome::FAVICON :
- chrome::TOUCH_PRECOMPOSED_ICON | chrome::TOUCH_ICON |
- chrome::FAVICON) {
-}
+ icon_types_(type == FAVICON ? favicon_base::FAVICON
+ : favicon_base::TOUCH_PRECOMPOSED_ICON |
+ favicon_base::TOUCH_ICON |
+ favicon_base::FAVICON) {}
FaviconSource::~FaviconSource() {
}
std::string FaviconSource::GetSource() const {
- return icon_types_ == chrome::FAVICON ?
- chrome::kChromeUIFaviconHost : chrome::kChromeUITouchIconHost;
+ return icon_types_ == favicon_base::FAVICON ? chrome::kChromeUIFaviconHost
+ : chrome::kChromeUITouchIconHost;
}
void FaviconSource::StartDataRequest(
}
GURL url(parsed.url);
+ int desired_size_in_pixel =
+ std::ceil(parsed.size_in_dip * parsed.device_scale_factor);
if (parsed.is_icon_url) {
// TODO(michaelbai): Change GetRawFavicon to support combination of
// IconType.
- favicon_service->GetRawFavicon(
+ favicon_service->GetRawFavicon(
url,
- chrome::FAVICON,
- parsed.size_in_dip,
- parsed.scale_factor,
- base::Bind(&FaviconSource::OnFaviconDataAvailable,
- base::Unretained(this),
- IconRequest(callback,
- url,
- parsed.size_in_dip,
- parsed.scale_factor)),
+ favicon_base::FAVICON,
+ desired_size_in_pixel,
+ base::Bind(
+ &FaviconSource::OnFaviconDataAvailable,
+ base::Unretained(this),
+ IconRequest(
+ callback, url, parsed.size_in_dip, parsed.device_scale_factor)),
&cancelable_task_tracker_);
} else {
// Intercept requests for prepopulated pages.
for (size_t i = 0; i < arraysize(history::kPrepopulatedPages); i++) {
if (url.spec() ==
l10n_util::GetStringUTF8(history::kPrepopulatedPages[i].url_id)) {
+ ui::ScaleFactor resource_scale_factor =
+ ui::GetSupportedScaleFactor(parsed.device_scale_factor);
callback.Run(
ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale(
history::kPrepopulatedPages[i].favicon_id,
- parsed.scale_factor));
+ resource_scale_factor));
return;
}
}
- favicon_service->GetRawFaviconForURL(
- FaviconService::FaviconForURLParams(url, icon_types_,
- parsed.size_in_dip),
- parsed.scale_factor,
- base::Bind(&FaviconSource::OnFaviconDataAvailable,
- base::Unretained(this),
- IconRequest(callback,
- url,
- parsed.size_in_dip,
- parsed.scale_factor)),
+ favicon_service->GetRawFaviconForPageURL(
+ url,
+ icon_types_,
+ desired_size_in_pixel,
+ base::Bind(
+ &FaviconSource::OnFaviconDataAvailable,
+ base::Unretained(this),
+ IconRequest(
+ callback, url, parsed.size_in_dip, parsed.device_scale_factor)),
&cancelable_task_tracker_);
}
}
void FaviconSource::OnFaviconDataAvailable(
const IconRequest& request,
- const chrome::FaviconBitmapResult& bitmap_result) {
+ const favicon_base::FaviconRawBitmapResult& bitmap_result) {
if (bitmap_result.is_valid()) {
// Forward the data along to the networking system.
request.callback.Run(bitmap_result.bitmap_data.get());
void FaviconSource::SendDefaultResponse(
const content::URLDataSource::GotDataCallback& callback) {
- SendDefaultResponse(
- IconRequest(callback, GURL(), 16, ui::SCALE_FACTOR_100P));
+ SendDefaultResponse(IconRequest(callback, GURL(), 16, 1.0f));
}
void FaviconSource::SendDefaultResponse(const IconRequest& icon_request) {
default_favicons_[favicon_index].get();
if (!default_favicon) {
- ui::ScaleFactor scale_factor = icon_request.scale_factor;
- default_favicon = ResourceBundle::GetSharedInstance()
- .LoadDataResourceBytesForScale(resource_id, scale_factor);
+ ui::ScaleFactor resource_scale_factor =
+ ui::GetSupportedScaleFactor(icon_request.device_scale_factor);
+ default_favicon =
+ ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale(
+ resource_id, resource_scale_factor);
default_favicons_[favicon_index] = default_favicon;
}