Index: chrome/common/extensions/api/file_browser_handlers/file_browser_handler.cc |
diff --git a/chrome/common/extensions/api/file_browser_handlers/file_browser_handler.cc b/chrome/common/extensions/api/file_browser_handlers/file_browser_handler.cc |
index 92124d282f94c0934ddf452f891eb0bbd32a7f37..f722b1f7acdb7af8933488c30be8b070c7042c4e 100644 |
--- a/chrome/common/extensions/api/file_browser_handlers/file_browser_handler.cc |
+++ b/chrome/common/extensions/api/file_browser_handlers/file_browser_handler.cc |
@@ -13,6 +13,8 @@ |
#include "extensions/common/error_utils.h" |
#include "extensions/common/manifest.h" |
#include "extensions/common/manifest_constants.h" |
+#include "extensions/common/manifest_handlers/permissions_parser.h" |
+#include "extensions/common/permissions/api_permission.h" |
#include "extensions/common/url_pattern.h" |
#include "url/url_constants.h" |
@@ -115,11 +117,12 @@ bool FileBrowserHandler::HasCreateAccessPermission() const { |
// static |
FileBrowserHandler::List* |
FileBrowserHandler::GetHandlers(const extensions::Extension* extension) { |
- FileBrowserHandlerInfo* info = static_cast<FileBrowserHandlerInfo*>( |
+ FileBrowserHandlerInfo* const info = static_cast<FileBrowserHandlerInfo*>( |
extension->GetManifestData(keys::kFileBrowserHandlers)); |
- if (info) |
- return &info->file_browser_handlers; |
- return NULL; |
+ if (!info) |
+ return nullptr; |
+ |
+ return &info->file_browser_handlers; |
} |
FileBrowserHandlerParser::FileBrowserHandlerParser() { |
@@ -268,12 +271,19 @@ bool LoadFileBrowserHandlers( |
bool FileBrowserHandlerParser::Parse(extensions::Extension* extension, |
base::string16* error) { |
+ // If the permission is missing, then skip parsing the list of handlers. |
+ if (!extensions::PermissionsParser::HasAPIPermission( |
+ extension, extensions::APIPermission::ID::kFileBrowserHandler)) { |
+ return true; |
+ } |
+ |
const base::ListValue* file_browser_handlers_value = NULL; |
if (!extension->manifest()->GetList(keys::kFileBrowserHandlers, |
&file_browser_handlers_value)) { |
*error = base::ASCIIToUTF16(errors::kInvalidFileBrowserHandler); |
return false; |
} |
+ |
scoped_ptr<FileBrowserHandlerInfo> info(new FileBrowserHandlerInfo); |
if (!LoadFileBrowserHandlers(extension->id(), |
file_browser_handlers_value, |