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