15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/resources_util.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utility> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/containers/hash_tables.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/lazy_instance.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources_map.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "grit/ui_resources_map.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_CHROMEOS) 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "grit/ui_chromeos_resources_map.h" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A wrapper class that holds a hash_map between resource strings and resource 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ids. This is done so we can use base::LazyInstance which takes care of 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// thread safety in initializing the hash_map for us. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ThemeMap { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::hash_map<std::string, int> StringIntMap; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThemeMap() { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < kThemeResourcesSize; ++i) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) id_map_[kThemeResources[i].name] = kThemeResources[i].value; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < kUiResourcesSize; ++i) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id_map_[kUiResources[i].name] = kUiResources[i].value; 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_CHROMEOS) 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < kUiChromeosResourcesSize; ++i) 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) id_map_[kUiChromeosResources[i].name] = kUiChromeosResources[i].value; 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int GetId(const std::string& resource_name) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StringIntMap::const_iterator it = id_map_.find(resource_name); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (it == id_map_.end()) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return -1; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return it->second; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StringIntMap id_map_; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static base::LazyInstance<ThemeMap> g_theme_ids = LAZY_INSTANCE_INITIALIZER; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ResourcesUtil::GetThemeResourceId(const std::string& resource_name) { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_theme_ids.Get().GetId(resource_name); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 56