1 // Copyright (c) 2010 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 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 CHECK(!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 CHECK(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 if (path.empty()) 54 return false; 55 56 CHECK(path[0] != '/') << 57 "ExtensionIconSet stores icon paths without leading slash."; 58 59 for (IconMap::const_iterator iter = map_.begin(); iter != map_.end(); 60 ++iter) { 61 if (iter->second == path) 62 return true; 63 } 64 65 return false; 66 } 67