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