summaryrefslogtreecommitdiff
path: root/chromium/extensions/common/extension_icon_set.h
blob: 98db2288038247418132f168bf005c226fc45cfb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// Copyright 2014 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_COMMON_EXTENSION_ICON_SET_H_
#define EXTENSIONS_COMMON_EXTENSION_ICON_SET_H_

#include <map>
#include <set>
#include <string>

#include "base/strings/string_piece.h"

namespace base {
class FilePath;
}

// Represents the set of icons for an extension.
class ExtensionIconSet {
 public:
  // Get an icon from the set, optionally falling back to a smaller or bigger
  // size. MatchType is exclusive (do not OR them together).
  enum MatchType {
    MATCH_EXACTLY,
    MATCH_BIGGER,
    MATCH_SMALLER
  };

  // Access to the underlying map from icon size->{path, bitmap}.
  typedef std::map<int, std::string> IconMap;

  ExtensionIconSet();
  ExtensionIconSet(const ExtensionIconSet& other);
  ~ExtensionIconSet();

  const IconMap& map() const { return map_; }
  bool empty() const { return map_.empty(); }

  // Remove all icons from the set.
  void Clear();

  // Add an icon path to the set. If a path for the specified size_in_px is
  // already present, it is overwritten.
  void Add(int size_in_px, const std::string& path);

  // Gets path value of the icon found when searching for |size_in_px| using
  // |match_type|.
  const std::string& Get(int size_in_px, MatchType match_type) const;

  // Returns true iff the set contains the specified path.
  bool ContainsPath(base::StringPiece path) const;

  // Returns icon size (in pixels) if the set contains the specified path or 0
  // if not found.
  int GetIconSizeFromPath(base::StringPiece path) const;

  // Add the paths of all icons in this set into |paths|, handling the
  // conversion of (string) -> (base::FilePath). Note that these paths are not
  // validated in any way, so they may be invalid paths or reference
  // nonexistent files.
  void GetPaths(std::set<base::FilePath>* paths) const;

 private:
  IconMap map_;
};

#endif  // EXTENSIONS_COMMON_EXTENSION_ICON_SET_H_