• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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 #include "chrome/common/extensions/extension_icon_set.h"
6 
7 #include "base/logging.h"
8 
ExtensionIconSet()9 ExtensionIconSet::ExtensionIconSet() {}
10 
~ExtensionIconSet()11 ExtensionIconSet::~ExtensionIconSet() {}
12 
Clear()13 void ExtensionIconSet::Clear() {
14   map_.clear();
15 }
16 
Add(int size,const std::string & path)17 void ExtensionIconSet::Add(int size, const std::string& path) {
18   DCHECK(!path.empty() && path[0] != '/');
19   map_[size] = path;
20 }
21 
Get(int size,MatchType match_type) const22 std::string ExtensionIconSet::Get(int size, MatchType match_type) const {
23   // The searches for MATCH_BIGGER and MATCH_SMALLER below rely on the fact that
24   // std::map is sorted. This is per the spec, so it should be safe to rely on.
25   if (match_type == MATCH_EXACTLY) {
26     IconMap::const_iterator result = map_.find(size);
27     return result == map_.end() ? std::string() : result->second;
28   } else if (match_type == MATCH_SMALLER) {
29     IconMap::const_reverse_iterator result = map_.rend();
30     for (IconMap::const_reverse_iterator iter = map_.rbegin();
31          iter != map_.rend(); ++iter) {
32       if (iter->first <= size) {
33         result = iter;
34         break;
35       }
36     }
37     return result == map_.rend() ? std::string() : result->second;
38   } else {
39     DCHECK(match_type == MATCH_BIGGER);
40     IconMap::const_iterator result = map_.end();
41     for (IconMap::const_iterator iter = map_.begin(); iter != map_.end();
42          ++iter) {
43       if (iter->first >= size) {
44         result = iter;
45         break;
46       }
47     }
48     return result == map_.end() ? std::string() : result->second;
49   }
50 }
51 
ContainsPath(const std::string & path) const52 bool ExtensionIconSet::ContainsPath(const std::string& path) const {
53   return GetIconSizeFromPath(path) != 0;
54 }
55 
GetIconSizeFromPath(const std::string & path) const56 int ExtensionIconSet::GetIconSizeFromPath(const std::string& path) const {
57   if (path.empty())
58     return 0;
59 
60   DCHECK(path[0] != '/') <<
61       "ExtensionIconSet stores icon paths without leading slash.";
62 
63   for (IconMap::const_iterator iter = map_.begin(); iter != map_.end();
64        ++iter) {
65     if (iter->second == path)
66       return iter->first;
67   }
68 
69   return 0;
70 }
71