| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/extensions/extension_file_util.h" | 5 #include "chrome/browser/extensions/extension_file_util.h" |
| 6 | 6 |
| 7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
| 8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/scoped_temp_dir.h" | 10 #include "base/scoped_temp_dir.h" |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 if (!ValidateExtension(extension.get(), error)) | 130 if (!ValidateExtension(extension.get(), error)) |
| 131 return NULL; | 131 return NULL; |
| 132 | 132 |
| 133 return extension.release(); | 133 return extension.release(); |
| 134 } | 134 } |
| 135 | 135 |
| 136 bool ValidateExtension(Extension* extension, std::string* error) { | 136 bool ValidateExtension(Extension* extension, std::string* error) { |
| 137 // Validate icons exist. | 137 // Validate icons exist. |
| 138 for (std::map<int, std::string>::const_iterator iter = | 138 for (std::map<int, std::string>::const_iterator iter = |
| 139 extension->icons().begin(); iter != extension->icons().end(); ++iter) { | 139 extension->icons().begin(); iter != extension->icons().end(); ++iter) { |
| 140 if (!file_util::PathExists(extension->GetResourcePath(iter->second))) { | 140 if (extension->GetResource(iter->second).GetFilePath().empty()) { |
| 141 *error = StringPrintf("Could not load extension icon '%s'.", | 141 *error = StringPrintf("Could not load extension icon '%s'.", |
| 142 iter->second.c_str()); | 142 iter->second.c_str()); |
| 143 return false; | 143 return false; |
| 144 } | 144 } |
| 145 } | 145 } |
| 146 | 146 |
| 147 // Theme resource validation. | 147 // Theme resource validation. |
| 148 if (extension->IsTheme()) { | 148 if (extension->IsTheme()) { |
| 149 DictionaryValue* images_value = extension->GetThemeImages(); | 149 DictionaryValue* images_value = extension->GetThemeImages(); |
| 150 if (images_value) { | 150 if (images_value) { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 165 | 165 |
| 166 // Themes cannot contain other extension types. | 166 // Themes cannot contain other extension types. |
| 167 return true; | 167 return true; |
| 168 } | 168 } |
| 169 | 169 |
| 170 // Validate that claimed script resources actually exist. | 170 // Validate that claimed script resources actually exist. |
| 171 for (size_t i = 0; i < extension->content_scripts().size(); ++i) { | 171 for (size_t i = 0; i < extension->content_scripts().size(); ++i) { |
| 172 const UserScript& script = extension->content_scripts()[i]; | 172 const UserScript& script = extension->content_scripts()[i]; |
| 173 | 173 |
| 174 for (size_t j = 0; j < script.js_scripts().size(); j++) { | 174 for (size_t j = 0; j < script.js_scripts().size(); j++) { |
| 175 const FilePath& path = script.js_scripts()[j].path(); | 175 const FilePath& path = |
| 176 if (!file_util::PathExists(path)) { | 176 script.js_scripts()[j].resource().GetFilePath(); |
| 177 if (path.empty()) { |
| 177 *error = StringPrintf("Could not load '%s' for content script.", | 178 *error = StringPrintf("Could not load '%s' for content script.", |
| 178 WideToUTF8(path.ToWStringHack()).c_str()); | 179 WideToUTF8(path.ToWStringHack()).c_str()); |
| 179 return false; | 180 return false; |
| 180 } | 181 } |
| 181 } | 182 } |
| 182 | 183 |
| 183 for (size_t j = 0; j < script.css_scripts().size(); j++) { | 184 for (size_t j = 0; j < script.css_scripts().size(); j++) { |
| 184 const FilePath& path = script.css_scripts()[j].path(); | 185 const FilePath& path = |
| 185 if (!file_util::PathExists(path)) { | 186 script.css_scripts()[j].resource().GetFilePath(); |
| 187 if (path.empty()) { |
| 186 *error = StringPrintf("Could not load '%s' for content script.", | 188 *error = StringPrintf("Could not load '%s' for content script.", |
| 187 WideToUTF8(path.ToWStringHack()).c_str()); | 189 WideToUTF8(path.ToWStringHack()).c_str()); |
| 188 return false; | 190 return false; |
| 189 } | 191 } |
| 190 } | 192 } |
| 191 } | 193 } |
| 192 | 194 |
| 193 // Validate claimed plugin paths. | 195 // Validate claimed plugin paths. |
| 194 for (size_t i = 0; i < extension->plugins().size(); ++i) { | 196 for (size_t i = 0; i < extension->plugins().size(); ++i) { |
| 195 const Extension::PluginInfo& plugin = extension->plugins()[i]; | 197 const Extension::PluginInfo& plugin = extension->plugins()[i]; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 212 } | 214 } |
| 213 | 215 |
| 214 // Validate icon location for page actions. | 216 // Validate icon location for page actions. |
| 215 const ExtensionActionMap& page_actions = extension->page_actions(); | 217 const ExtensionActionMap& page_actions = extension->page_actions(); |
| 216 for (ExtensionActionMap::const_iterator i(page_actions.begin()); | 218 for (ExtensionActionMap::const_iterator i(page_actions.begin()); |
| 217 i != page_actions.end(); ++i) { | 219 i != page_actions.end(); ++i) { |
| 218 ExtensionAction* page_action = i->second; | 220 ExtensionAction* page_action = i->second; |
| 219 const std::vector<std::string>& icon_paths = page_action->icon_paths(); | 221 const std::vector<std::string>& icon_paths = page_action->icon_paths(); |
| 220 for (std::vector<std::string>::const_iterator iter = icon_paths.begin(); | 222 for (std::vector<std::string>::const_iterator iter = icon_paths.begin(); |
| 221 iter != icon_paths.end(); ++iter) { | 223 iter != icon_paths.end(); ++iter) { |
| 222 if (!file_util::PathExists(extension->GetResourcePath(*iter))) { | 224 if (extension->GetResource(*iter).GetFilePath().empty()) { |
| 223 *error = StringPrintf("Could not load icon '%s' for page action.", | 225 *error = StringPrintf("Could not load icon '%s' for page action.", |
| 224 iter->c_str()); | 226 iter->c_str()); |
| 225 return false; | 227 return false; |
| 226 } | 228 } |
| 227 } | 229 } |
| 228 } | 230 } |
| 229 | 231 |
| 230 // Validate icon location for browser actions. | 232 // Validate icon location for browser actions. |
| 231 const ExtensionAction* browser_action = extension->browser_action(); | 233 const ExtensionAction* browser_action = extension->browser_action(); |
| 232 if (browser_action) { | 234 if (browser_action) { |
| 233 const std::vector<std::string>& icon_paths = browser_action->icon_paths(); | 235 const std::vector<std::string>& icon_paths = browser_action->icon_paths(); |
| 234 for (std::vector<std::string>::const_iterator iter = icon_paths.begin(); | 236 for (std::vector<std::string>::const_iterator iter = icon_paths.begin(); |
| 235 iter != icon_paths.end(); ++iter) { | 237 iter != icon_paths.end(); ++iter) { |
| 236 if (!file_util::PathExists(extension->GetResourcePath(*iter))) { | 238 if (extension->GetResource(*iter).GetFilePath().empty()) { |
| 237 *error = StringPrintf("Could not load icon '%s' for browser action.", | 239 *error = StringPrintf("Could not load icon '%s' for browser action.", |
| 238 iter->c_str()); | 240 iter->c_str()); |
| 239 return false; | 241 return false; |
| 240 } | 242 } |
| 241 } | 243 } |
| 242 } | 244 } |
| 243 | 245 |
| 244 // Check children of extension root to see if any of them start with _ and is | 246 // Check children of extension root to see if any of them start with _ and is |
| 245 // not on the reserved list. | 247 // not on the reserved list. |
| 246 if (!CheckForIllegalFilenames(extension->path(), error)) { | 248 if (!CheckForIllegalFilenames(extension->path(), error)) { |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 384 "Filenames starting with \"_\" are reserved for use by the system.", | 386 "Filenames starting with \"_\" are reserved for use by the system.", |
| 385 filename.c_str()); | 387 filename.c_str()); |
| 386 return false; | 388 return false; |
| 387 } | 389 } |
| 388 } | 390 } |
| 389 | 391 |
| 390 return true; | 392 return true; |
| 391 } | 393 } |
| 392 | 394 |
| 393 } // extension_file_util | 395 } // extension_file_util |
| OLD | NEW |