| Index: chrome/browser/ui/webui/ntp/favicon_webui_handler.cc
|
| diff --git a/chrome/browser/ui/webui/ntp/favicon_webui_handler.cc b/chrome/browser/ui/webui/ntp/favicon_webui_handler.cc
|
| deleted file mode 100644
|
| index c5bf81b4c6e3bdc8acce941db75958637e387b6a..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/webui/ntp/favicon_webui_handler.cc
|
| +++ /dev/null
|
| @@ -1,174 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/ui/webui/ntp/favicon_webui_handler.h"
|
| -
|
| -#include <stddef.h>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/bind_helpers.h"
|
| -#include "base/strings/string_split.h"
|
| -#include "base/strings/string_util.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "base/values.h"
|
| -#include "chrome/browser/extensions/extension_icon_manager.h"
|
| -#include "chrome/browser/favicon/favicon_service_factory.h"
|
| -#include "chrome/browser/history/top_sites_factory.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/common/url_constants.h"
|
| -#include "components/favicon/core/favicon_service.h"
|
| -#include "components/history/core/browser/top_sites.h"
|
| -#include "content/public/browser/web_ui.h"
|
| -#include "extensions/browser/extension_registry.h"
|
| -#include "third_party/skia/include/core/SkBitmap.h"
|
| -#include "ui/gfx/codec/png_codec.h"
|
| -#include "ui/gfx/color_analysis.h"
|
| -#include "ui/gfx/favicon_size.h"
|
| -
|
| -namespace {
|
| -
|
| -base::StringValue* SkColorToCss(SkColor color) {
|
| - return new base::StringValue(base::StringPrintf("rgb(%d, %d, %d)",
|
| - SkColorGetR(color),
|
| - SkColorGetG(color),
|
| - SkColorGetB(color)));
|
| -}
|
| -
|
| -base::StringValue* GetDominantColorCssString(
|
| - scoped_refptr<base::RefCountedMemory> png) {
|
| - color_utils::GridSampler sampler;
|
| - SkColor color = color_utils::CalculateKMeanColorOfPNG(png);
|
| - return SkColorToCss(color);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// Thin inheritance-dependent trampoline to forward notification of app
|
| -// icon loads to the FaviconWebUIHandler. Base class does caching of icons.
|
| -class ExtensionIconColorManager : public ExtensionIconManager {
|
| - public:
|
| - explicit ExtensionIconColorManager(FaviconWebUIHandler* handler)
|
| - : ExtensionIconManager(),
|
| - handler_(handler) {}
|
| - ~ExtensionIconColorManager() override {}
|
| -
|
| - void OnImageLoaded(const std::string& extension_id,
|
| - const gfx::Image& image) override {
|
| - ExtensionIconManager::OnImageLoaded(extension_id, image);
|
| - handler_->NotifyAppIconReady(extension_id);
|
| - }
|
| -
|
| - private:
|
| - FaviconWebUIHandler* handler_;
|
| -};
|
| -
|
| -FaviconWebUIHandler::FaviconWebUIHandler()
|
| - : id_(0),
|
| - app_icon_color_manager_(new ExtensionIconColorManager(this)) {
|
| -}
|
| -
|
| -FaviconWebUIHandler::~FaviconWebUIHandler() {
|
| -}
|
| -
|
| -void FaviconWebUIHandler::RegisterMessages() {
|
| - web_ui()->RegisterMessageCallback("getFaviconDominantColor",
|
| - base::Bind(&FaviconWebUIHandler::HandleGetFaviconDominantColor,
|
| - base::Unretained(this)));
|
| - web_ui()->RegisterMessageCallback("getAppIconDominantColor",
|
| - base::Bind(&FaviconWebUIHandler::HandleGetAppIconDominantColor,
|
| - base::Unretained(this)));
|
| -}
|
| -
|
| -void FaviconWebUIHandler::HandleGetFaviconDominantColor(
|
| - const base::ListValue* args) {
|
| - std::string path;
|
| - CHECK(args->GetString(0, &path));
|
| - std::string prefix = "chrome://favicon/size/";
|
| - DCHECK(base::StartsWith(path, prefix, base::CompareCase::INSENSITIVE_ASCII))
|
| - << "path is " << path;
|
| - size_t slash = path.find("/", prefix.length());
|
| - path = path.substr(slash + 1);
|
| -
|
| - std::string dom_id;
|
| - CHECK(args->GetString(1, &dom_id));
|
| -
|
| - favicon::FaviconService* favicon_service =
|
| - FaviconServiceFactory::GetForProfile(Profile::FromWebUI(web_ui()),
|
| - ServiceAccessType::EXPLICIT_ACCESS);
|
| - if (!favicon_service || path.empty())
|
| - return;
|
| -
|
| - GURL url(path);
|
| - // Intercept requests for prepopulated pages if TopSites exists.
|
| - scoped_refptr<history::TopSites> top_sites =
|
| - TopSitesFactory::GetForProfile(Profile::FromWebUI(web_ui()));
|
| - if (top_sites) {
|
| - for (const auto& prepopulated_page : top_sites->GetPrepopulatedPages()) {
|
| - if (url == prepopulated_page.most_visited.url) {
|
| - base::StringValue dom_id_value(dom_id);
|
| - std::unique_ptr<base::StringValue> color(
|
| - SkColorToCss(prepopulated_page.color));
|
| - web_ui()->CallJavascriptFunctionUnsafe("ntp.setFaviconDominantColor",
|
| - dom_id_value, *color);
|
| - return;
|
| - }
|
| - }
|
| - }
|
| -
|
| - dom_id_map_[id_] = dom_id;
|
| - favicon_service->GetRawFaviconForPageURL(
|
| - url,
|
| - favicon_base::FAVICON,
|
| - gfx::kFaviconSize,
|
| - base::Bind(&FaviconWebUIHandler::OnFaviconDataAvailable,
|
| - base::Unretained(this),
|
| - id_++),
|
| - &cancelable_task_tracker_);
|
| -}
|
| -
|
| -void FaviconWebUIHandler::OnFaviconDataAvailable(
|
| - int id,
|
| - const favicon_base::FaviconRawBitmapResult& bitmap_result) {
|
| - std::unique_ptr<base::StringValue> color_value;
|
| -
|
| - if (bitmap_result.is_valid())
|
| - color_value.reset(GetDominantColorCssString(bitmap_result.bitmap_data));
|
| - else
|
| - color_value.reset(new base::StringValue("#919191"));
|
| -
|
| - base::StringValue dom_id(dom_id_map_[id]);
|
| - web_ui()->CallJavascriptFunctionUnsafe("ntp.setFaviconDominantColor", dom_id,
|
| - *color_value);
|
| - dom_id_map_.erase(id);
|
| -}
|
| -
|
| -void FaviconWebUIHandler::HandleGetAppIconDominantColor(
|
| - const base::ListValue* args) {
|
| - std::string extension_id;
|
| - CHECK(args->GetString(0, &extension_id));
|
| -
|
| - Profile* profile = Profile::FromWebUI(web_ui());
|
| - extensions::ExtensionRegistry* extension_registry =
|
| - extensions::ExtensionRegistry::Get(profile);
|
| - const extensions::Extension* extension =
|
| - extension_registry->enabled_extensions().GetByID(extension_id);
|
| - if (!extension)
|
| - return;
|
| - app_icon_color_manager_->LoadIcon(profile, extension);
|
| -}
|
| -
|
| -void FaviconWebUIHandler::NotifyAppIconReady(const std::string& extension_id) {
|
| - const SkBitmap& bitmap = app_icon_color_manager_->GetIcon(extension_id);
|
| - // TODO(estade): would be nice to avoid a round trip through png encoding.
|
| - std::vector<unsigned char> bits;
|
| - if (!gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, true, &bits))
|
| - return;
|
| - scoped_refptr<base::RefCountedStaticMemory> bits_mem(
|
| - new base::RefCountedStaticMemory(&bits.front(), bits.size()));
|
| - std::unique_ptr<base::StringValue> color_value(
|
| - GetDominantColorCssString(bits_mem));
|
| - base::StringValue id(extension_id);
|
| - web_ui()->CallJavascriptFunctionUnsafe("ntp.setFaviconDominantColor", id,
|
| - *color_value);
|
| -}
|
|
|