• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "chrome/browser/extensions/chrome_component_extension_resource_manager.h"
6 
7 #include "base/logging.h"
8 #include "base/path_service.h"
9 #include "chrome/common/chrome_paths.h"
10 #include "grit/chrome_unscaled_resources.h"
11 #include "grit/component_extension_resources_map.h"
12 #include "grit/theme_resources.h"
13 
14 #if defined(OS_CHROMEOS)
15 #include "ui/file_manager/file_manager_resource_util.h"
16 #endif
17 
18 #if defined(USE_AURA)
19 #include "ui/keyboard/keyboard_util.h"
20 #endif
21 
22 namespace extensions {
23 
24 ChromeComponentExtensionResourceManager::
ChromeComponentExtensionResourceManager()25 ChromeComponentExtensionResourceManager() {
26   static const GritResourceMap kExtraComponentExtensionResources[] = {
27     {"web_store/webstore_icon_128.png", IDR_WEBSTORE_ICON},
28     {"web_store/webstore_icon_16.png", IDR_WEBSTORE_ICON_16},
29     {"chrome_app/product_logo_128.png", IDR_PRODUCT_LOGO_128},
30     {"chrome_app/product_logo_16.png", IDR_PRODUCT_LOGO_16},
31 #if defined(ENABLE_SETTINGS_APP)
32     {"settings_app/settings_app_icon_128.png", IDR_SETTINGS_APP_ICON_128},
33     {"settings_app/settings_app_icon_16.png", IDR_SETTINGS_APP_ICON_16},
34     {"settings_app/settings_app_icon_32.png", IDR_SETTINGS_APP_ICON_32},
35     {"settings_app/settings_app_icon_48.png", IDR_SETTINGS_APP_ICON_48},
36 #endif
37   };
38 
39   AddComponentResourceEntries(
40       kComponentExtensionResources,
41       kComponentExtensionResourcesSize);
42   AddComponentResourceEntries(
43       kExtraComponentExtensionResources,
44       arraysize(kExtraComponentExtensionResources));
45 #if defined(OS_CHROMEOS)
46   size_t file_manager_resource_size;
47   const GritResourceMap* file_manager_resources =
48       file_manager::GetFileManagerResources(&file_manager_resource_size);
49   AddComponentResourceEntries(
50       file_manager_resources,
51       file_manager_resource_size);
52 
53   size_t keyboard_resource_size;
54   const GritResourceMap* keyboard_resources =
55       keyboard::GetKeyboardExtensionResources(&keyboard_resource_size);
56   AddComponentResourceEntries(
57       keyboard_resources,
58       keyboard_resource_size);
59 #endif
60 }
61 
62 ChromeComponentExtensionResourceManager::
~ChromeComponentExtensionResourceManager()63 ~ChromeComponentExtensionResourceManager() {}
64 
IsComponentExtensionResource(const base::FilePath & extension_path,const base::FilePath & resource_path,int * resource_id)65 bool ChromeComponentExtensionResourceManager::IsComponentExtensionResource(
66     const base::FilePath& extension_path,
67     const base::FilePath& resource_path,
68     int* resource_id) {
69   base::FilePath directory_path = extension_path;
70   base::FilePath resources_dir;
71   base::FilePath relative_path;
72   if (!PathService::Get(chrome::DIR_RESOURCES, &resources_dir) ||
73       !resources_dir.AppendRelativePath(directory_path, &relative_path)) {
74     return false;
75   }
76   relative_path = relative_path.Append(resource_path);
77   relative_path = relative_path.NormalizePathSeparators();
78 
79   std::map<base::FilePath, int>::const_iterator entry =
80       path_to_resource_id_.find(relative_path);
81   if (entry != path_to_resource_id_.end())
82     *resource_id = entry->second;
83 
84   return entry != path_to_resource_id_.end();
85 }
86 
AddComponentResourceEntries(const GritResourceMap * entries,size_t size)87 void ChromeComponentExtensionResourceManager::AddComponentResourceEntries(
88     const GritResourceMap* entries,
89     size_t size) {
90   for (size_t i = 0; i < size; ++i) {
91     base::FilePath resource_path = base::FilePath().AppendASCII(
92         entries[i].name);
93     resource_path = resource_path.NormalizePathSeparators();
94 
95     DCHECK(path_to_resource_id_.find(resource_path) ==
96         path_to_resource_id_.end());
97     path_to_resource_id_[resource_path] = entries[i].value;
98   }
99 }
100 
101 }  // namespace extensions
102