[email protected] | 2a28133 | 2012-07-11 22:20:23 | [diff] [blame] | 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
[email protected] | 80cc3f7 | 2009-04-24 18:06:05 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. | ||||
4 | |||||
[email protected] | 1faee3f0 | 2010-06-21 07:01:34 | [diff] [blame] | 5 | #include "chrome/browser/resources_util.h" |
[email protected] | 80cc3f7 | 2009-04-24 18:06:05 | [diff] [blame] | 6 | |
avi | b896c71 | 2015-12-26 02:10:43 | [diff] [blame] | 7 | #include <stddef.h> |
8 | |||||
[email protected] | c521289 | 2010-09-08 06:30:33 | [diff] [blame] | 9 | #include <utility> |
10 | |||||
brettw | 84cff3f | 2017-06-29 18:26:50 | [diff] [blame] | 11 | #include "base/containers/flat_map.h" |
Lei Zhang | 2cfceac | 2018-11-14 19:36:33 | [diff] [blame] | 12 | #include "base/no_destructor.h" |
avi | b896c71 | 2015-12-26 02:10:43 | [diff] [blame] | 13 | #include "build/build_config.h" |
thestig | 4a9b0ef | 2016-08-29 08:22:12 | [diff] [blame] | 14 | #include "chrome/grit/theme_resources_map.h" |
15 | #include "components/grit/components_scaled_resources_map.h" | ||||
16 | #include "ui/resources/grit/ui_resources_map.h" | ||||
[email protected] | 80cc3f7 | 2009-04-24 18:06:05 | [diff] [blame] | 17 | |
[email protected] | cdd7bb8 | 2014-07-25 09:19:26 | [diff] [blame] | 18 | #if defined(OS_CHROMEOS) |
thestig | 4a9b0ef | 2016-08-29 08:22:12 | [diff] [blame] | 19 | #include "ui/chromeos/resources/grit/ui_chromeos_resources_map.h" |
[email protected] | cdd7bb8 | 2014-07-25 09:19:26 | [diff] [blame] | 20 | #endif |
21 | |||||
[email protected] | 80cc3f7 | 2009-04-24 18:06:05 | [diff] [blame] | 22 | namespace { |
23 | |||||
brettw | 84cff3f | 2017-06-29 18:26:50 | [diff] [blame] | 24 | // A wrapper class that holds a map between resource strings and resource |
Lei Zhang | 2cfceac | 2018-11-14 19:36:33 | [diff] [blame] | 25 | // ids. This is done so we can use base::NoDestructor which takes care of |
brettw | 84cff3f | 2017-06-29 18:26:50 | [diff] [blame] | 26 | // thread safety in initializing the map for us. |
[email protected] | 80cc3f7 | 2009-04-24 18:06:05 | [diff] [blame] | 27 | class ThemeMap { |
28 | public: | ||||
Lei Zhang | 2cfceac | 2018-11-14 19:36:33 | [diff] [blame] | 29 | using StringIntMap = base::flat_map<std::string, int>; |
[email protected] | 80cc3f7 | 2009-04-24 18:06:05 | [diff] [blame] | 30 | |
31 | ThemeMap() { | ||||
Lei Zhang | 2cfceac | 2018-11-14 19:36:33 | [diff] [blame] | 32 | size_t storage_size = |
33 | kComponentsScaledResourcesSize + kThemeResourcesSize + kUiResourcesSize; | ||||
34 | #if defined(OS_CHROMEOS) | ||||
35 | storage_size += kUiChromeosResourcesSize; | ||||
36 | #endif | ||||
37 | |||||
brettw | 84cff3f | 2017-06-29 18:26:50 | [diff] [blame] | 38 | // Construct in one-shot from a moved vector. |
39 | std::vector<StringIntMap::value_type> storage; | ||||
Lei Zhang | 2cfceac | 2018-11-14 19:36:33 | [diff] [blame] | 40 | storage.reserve(storage_size); |
brettw | 84cff3f | 2017-06-29 18:26:50 | [diff] [blame] | 41 | |
droger | 2a6ab54 | 2015-10-09 16:10:28 | [diff] [blame] | 42 | for (size_t i = 0; i < kComponentsScaledResourcesSize; ++i) { |
brettw | 84cff3f | 2017-06-29 18:26:50 | [diff] [blame] | 43 | storage.emplace_back(kComponentsScaledResources[i].name, |
44 | kComponentsScaledResources[i].value); | ||||
droger | 2a6ab54 | 2015-10-09 16:10:28 | [diff] [blame] | 45 | } |
brettw | 84cff3f | 2017-06-29 18:26:50 | [diff] [blame] | 46 | for (size_t i = 0; i < kThemeResourcesSize; ++i) { |
47 | storage.emplace_back(kThemeResources[i].name, kThemeResources[i].value); | ||||
48 | } | ||||
49 | for (size_t i = 0; i < kUiResourcesSize; ++i) { | ||||
50 | storage.emplace_back(kUiResources[i].name, kUiResources[i].value); | ||||
51 | } | ||||
[email protected] | cdd7bb8 | 2014-07-25 09:19:26 | [diff] [blame] | 52 | #if defined(OS_CHROMEOS) |
brettw | 84cff3f | 2017-06-29 18:26:50 | [diff] [blame] | 53 | for (size_t i = 0; i < kUiChromeosResourcesSize; ++i) { |
54 | storage.emplace_back(kUiChromeosResources[i].name, | ||||
55 | kUiChromeosResources[i].value); | ||||
56 | } | ||||
[email protected] | cdd7bb8 | 2014-07-25 09:19:26 | [diff] [blame] | 57 | #endif |
brettw | 84cff3f | 2017-06-29 18:26:50 | [diff] [blame] | 58 | |
Jan Wilken Dörrie | 5e5c02f | 2019-09-23 17:30:03 | [diff] [blame] | 59 | id_map_ = StringIntMap(std::move(storage)); |
[email protected] | 80cc3f7 | 2009-04-24 18:06:05 | [diff] [blame] | 60 | } |
61 | |||||
Lei Zhang | 2cfceac | 2018-11-14 19:36:33 | [diff] [blame] | 62 | int GetId(const std::string& resource_name) const { |
brettw | 84cff3f | 2017-06-29 18:26:50 | [diff] [blame] | 63 | auto it = id_map_.find(resource_name); |
Lei Zhang | 2cfceac | 2018-11-14 19:36:33 | [diff] [blame] | 64 | return it != id_map_.end() ? it->second : -1; |
[email protected] | 80cc3f7 | 2009-04-24 18:06:05 | [diff] [blame] | 65 | } |
66 | |||||
67 | private: | ||||
68 | StringIntMap id_map_; | ||||
69 | }; | ||||
70 | |||||
Lei Zhang | 2cfceac | 2018-11-14 19:36:33 | [diff] [blame] | 71 | ThemeMap& GetThemeIdsMap() { |
72 | static base::NoDestructor<ThemeMap> s; | ||||
73 | return *s; | ||||
74 | } | ||||
[email protected] | 80cc3f7 | 2009-04-24 18:06:05 | [diff] [blame] | 75 | |
76 | } // namespace | ||||
77 | |||||
[email protected] | 1faee3f0 | 2010-06-21 07:01:34 | [diff] [blame] | 78 | int ResourcesUtil::GetThemeResourceId(const std::string& resource_name) { |
Lei Zhang | 2cfceac | 2018-11-14 19:36:33 | [diff] [blame] | 79 | return GetThemeIdsMap().GetId(resource_name); |
[email protected] | 80cc3f7 | 2009-04-24 18:06:05 | [diff] [blame] | 80 | } |