| // 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_ |