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..58961220381b4642914fd14dc01122ed56ec343d 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/permissions/api_permission.h" |
+#include "extensions/common/permissions/permissions_data.h" |
#include "extensions/common/url_pattern.h" |
#include "url/url_constants.h" |
@@ -115,11 +117,19 @@ bool FileBrowserHandler::HasCreateAccessPermission() const { |
// static |
FileBrowserHandler::List* |
FileBrowserHandler::GetHandlers(const extensions::Extension* extension) { |
- FileBrowserHandlerInfo* info = static_cast<FileBrowserHandlerInfo*>( |
+ // Manifest is parsed before permissions are loaded, so file browser handlers |
Yoyo Zhou
2015/03/25 20:37:09
I'm not sure I follow. The manifest gets deseriali
mtomasz
2015/03/26 01:11:45
Done per offline discussion.
|
+ // have to be loaded even though the permission is missing. Hence, check here |
+ // for the permission and prevent returning it, if it is missing. |
+ if (!extension->permissions_data()->HasAPIPermission( |
+ extensions::APIPermission::kFileBrowserHandler)) { |
+ return nullptr; |
+ } |
+ 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() { |