15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_ICON_MANAGER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_EXTENSION_ICON_MANAGER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/weak_ptr.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/insets.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace content { 181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class BrowserContext; 191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Extension; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace gfx { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Image; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ExtensionIconManager { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionIconManager(); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ExtensionIconManager(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start loading the icon for the given extension. 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void LoadIcon(content::BrowserContext* context, 361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const extensions::Extension* extension); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This returns a bitmap of width/height kFaviconSize, loaded either from an 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // entry specified in the extension's 'icon' section of the manifest, or a 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // default extension icon. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SkBitmap& GetIcon(const std::string& extension_id); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removes the extension's icon from memory. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveIcon(const std::string& extension_id); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_monochrome(bool value) { monochrome_ = value; } 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_padding(const gfx::Insets& value) { padding_ = value; } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnImageLoaded(const std::string& extension_id, 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Image& image); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Makes sure we've done one-time initialization of the default extension icon 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // default_icon_. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EnsureDefaultIcon(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper function to return a copy of |src| with the proper scaling and 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // coloring. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkBitmap ApplyTransforms(const SkBitmap& src); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Maps extension id to an SkBitmap with the icon for that extension. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<std::string, SkBitmap> icons_; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set of extension IDs waiting for icons to load. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> pending_icons_; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The default icon we'll use if an extension doesn't have one. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkBitmap default_icon_; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If true, we will desaturate the icons to make them monochromatic. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool monochrome_; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Specifies the amount of empty padding to place around the icon. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Insets padding_; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::WeakPtrFactory<ExtensionIconManager> weak_ptr_factory_; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ExtensionIconManager); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_ICON_MANAGER_H_ 83