1 // Copyright 2014 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 "extensions/common/extension_icon_set.h" 6 7 #include "base/logging.h" 8 9 ExtensionIconSet::ExtensionIconSet() {} 10 11 ExtensionIconSet::~ExtensionIconSet() {} 12 13 void ExtensionIconSet::Clear() { 14 map_.clear(); 15 } 16 17 void ExtensionIconSet::Add(int size, const std::string& path) { 18 DCHECK(!path.empty() && path[0] != '/'); 19 map_[size] = path; 20 } 21 22 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 52 bool ExtensionIconSet::ContainsPath(const std::string& path) const { 53 return GetIconSizeFromPath(path) != 0; 54 } 55 56 int ExtensionIconSet::GetIconSizeFromPath(const std::string& path) const { 57 if (path.empty()) 58 return 0; 59 60 DCHECK_NE(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