Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / webui / favicon_source.cc
index cef2344..281f8ca 100644 (file)
@@ -4,6 +4,8 @@
 
 #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() {
@@ -45,17 +46,17 @@ 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(
@@ -78,45 +79,46 @@ 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_);
   }
 }
@@ -158,7 +160,7 @@ bool FaviconSource::HandleMissingResource(const IconRequest& request) {
 
 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());
@@ -169,8 +171,7 @@ void FaviconSource::OnFaviconDataAvailable(
 
 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) {
@@ -194,9 +195,11 @@ 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;
   }