|  | // Copyright 2015 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. | 
|  |  | 
|  | #ifndef EXTENSIONS_BROWSER_EXTENSION_ICON_PLACEHOLDER_H_ | 
|  | #define EXTENSIONS_BROWSER_EXTENSION_ICON_PLACEHOLDER_H_ | 
|  |  | 
|  | #include <string> | 
|  |  | 
|  | #include "base/macros.h" | 
|  | #include "base/strings/string16.h" | 
|  | #include "extensions/common/constants.h" | 
|  | #include "ui/gfx/image/canvas_image_source.h" | 
|  | #include "ui/gfx/image/image.h" | 
|  |  | 
|  | namespace gfx { | 
|  | class Canvas; | 
|  | } | 
|  |  | 
|  | namespace extensions { | 
|  |  | 
|  | // An extension icon image with a gray background and the first letter of the | 
|  | // extension name, so that not all extensions without an icon look the same. | 
|  | class ExtensionIconPlaceholder : public gfx::CanvasImageSource { | 
|  | public: | 
|  | ExtensionIconPlaceholder(extension_misc::ExtensionIcons size, | 
|  | const std::string& name); | 
|  | ~ExtensionIconPlaceholder() override; | 
|  |  | 
|  | // Creates an image backed by an ImageSkia with the ExtensionIconPlaceholder | 
|  | // as its image source. | 
|  | static gfx::Image CreateImage(extension_misc::ExtensionIcons size, | 
|  | const std::string& name); | 
|  |  | 
|  | private: | 
|  | // gfx::CanvasImageSource: | 
|  | void Draw(gfx::Canvas* canvas) override; | 
|  |  | 
|  | // The size this placeholder is filling. | 
|  | extension_misc::ExtensionIcons icon_size_; | 
|  |  | 
|  | // The first letter of the extension's name. | 
|  | base::string16 letter_; | 
|  |  | 
|  | // The gray background image, on top of which the letter is drawn. | 
|  | gfx::Image base_image_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(ExtensionIconPlaceholder); | 
|  | }; | 
|  |  | 
|  | }  // namespace extensions | 
|  |  | 
|  | #endif  // EXTENSIONS_BROWSER_EXTENSION_ICON_PLACEHOLDER_H_ |