1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_EXTENSIONS_APP_ICON_LOADER_IMPL_H_ 6#define CHROME_BROWSER_EXTENSIONS_APP_ICON_LOADER_IMPL_H_ 7 8#include <map> 9#include <string> 10 11#include "chrome/browser/extensions/app_icon_loader.h" 12#include "extensions/browser/extension_icon_image.h" 13 14class Profile; 15 16namespace extensions { 17class Extension; 18 19// Default implementation of ash::AppIconLoader that interacts with the 20// ExtensionService and ImageLoader to load images. 21class AppIconLoaderImpl : public AppIconLoader, 22 public extensions::IconImage::Observer { 23 public: 24 AppIconLoaderImpl(Profile* profile, int icon_size, 25 AppIconLoader::Delegate* delegate); 26 virtual ~AppIconLoaderImpl(); 27 28 // AppIconLoader overrides: 29 virtual void FetchImage(const std::string& id) OVERRIDE; 30 virtual void ClearImage(const std::string& id) OVERRIDE; 31 virtual void UpdateImage(const std::string& id) OVERRIDE; 32 33 // extensions::IconImage::Observer overrides: 34 virtual void OnExtensionIconImageChanged( 35 extensions::IconImage* image) OVERRIDE; 36 37 private: 38 typedef std::map<extensions::IconImage*, std::string> ImageToExtensionIDMap; 39 40 // Builds image for given |id| and |icon|. 41 void BuildImage(const std::string& id, const gfx::ImageSkia& icon); 42 43 Profile* profile_; 44 45 // The delegate object which receives the icon images. No ownership. 46 AppIconLoader::Delegate* delegate_; 47 48 // Maps from IconImage pointer to the extension id. 49 ImageToExtensionIDMap map_; 50 51 const int icon_size_; 52 53 DISALLOW_COPY_AND_ASSIGN(AppIconLoaderImpl); 54}; 55 56} // namespace extensions 57 58#endif // CHROME_BROWSER_EXTENSIONS_APP_ICON_LOADER_IMPL_H_ 59