Chromium Code Reviews| Index: chrome/common/extensions/file_browser_handler.cc |
| diff --git a/chrome/common/extensions/file_browser_handler.cc b/chrome/common/extensions/file_browser_handler.cc |
| index 784c9907d9faf761c2ffae8814004df7d84dc585..6d37aef7e907133ff25157d55bc0eb59c91a53d8 100644 |
| --- a/chrome/common/extensions/file_browser_handler.cc |
| +++ b/chrome/common/extensions/file_browser_handler.cc |
| @@ -4,10 +4,37 @@ |
| #include "chrome/common/extensions/file_browser_handler.h" |
| +#include "base/logging.h" |
| #include "chrome/common/extensions/url_pattern.h" |
| #include "googleurl/src/gurl.h" |
| -FileBrowserHandler::FileBrowserHandler() { |
| +namespace { |
| + |
| +const char kReadAccessString[] = "read"; |
| +const char kReadWriteAccessString[] = "read-write"; |
| +const char kCreateAccessString[] = "create"; |
| + |
| +unsigned int kPermissionsNotDefined = 0; |
| +unsigned int kReadPermission = 1; |
| +unsigned int kWritePermission = 1 << 1; |
| +unsigned int kCreatePermission = 1 << 2; |
| +unsigned int kInvalidPermission = 1 << 3; |
| + |
| +unsigned int GetAccessPermissionFlagFromString(const std::string& access_str) { |
| + if (access_str == kReadAccessString) |
| + return kReadPermission; |
| + if (access_str == kReadWriteAccessString) |
| + return kReadPermission | kWritePermission; |
| + if (access_str == kCreateAccessString) |
| + return kCreatePermission; |
| + return kInvalidPermission; |
| +} |
| + |
| +} |
| + |
| + |
| +FileBrowserHandler::FileBrowserHandler() |
| + : file_access_permission_flags_(kPermissionsNotDefined) { |
| } |
| FileBrowserHandler::~FileBrowserHandler() { |
| @@ -24,3 +51,39 @@ void FileBrowserHandler::ClearPatterns() { |
| bool FileBrowserHandler::MatchesURL(const GURL& url) const { |
| return url_set_.MatchesURL(url); |
| } |
| + |
| +bool FileBrowserHandler::AddFileAccessPermission( |
| + const std::string& access) { |
| + file_access_permission_flags_ |= GetAccessPermissionFlagFromString(access); |
| + return (file_access_permission_flags_ & kInvalidPermission) != 0U; |
| +} |
| + |
| +bool FileBrowserHandler::InvalidateFileAccessPermissions() { |
| + bool is_invalid = (file_access_permission_flags_ & kInvalidPermission) != 0U; |
| + bool can_create = (file_access_permission_flags_ & kCreatePermission) != 0U; |
| + bool can_read_or_write = (file_access_permission_flags_ & |
| + (kReadPermission | kWritePermission)) != 0U; |
| + if (is_invalid || (can_create && can_read_or_write)) { |
| + file_access_permission_flags_ = kInvalidPermission; |
| + return false; |
| + } |
| + |
| + if (file_access_permission_flags_ == kPermissionsNotDefined) |
| + file_access_permission_flags_ = kReadPermission | kWritePermission; |
| + return true; |
| +} |
| + |
| +bool FileBrowserHandler::CanRead() const { |
| + DCHECK(!(file_access_permission_flags_ & kInvalidPermission)); |
| + return (file_access_permission_flags_ & kReadPermission) != 0; |
| +} |
| + |
| +bool FileBrowserHandler::CanWrite() const { |
| + DCHECK(!(file_access_permission_flags_ & kInvalidPermission)); |
| + return (file_access_permission_flags_ & kWritePermission) != 0; |
| +} |
| + |
| +bool FileBrowserHandler::CanCreate() const { |
|
Yoyo Zhou
2012/03/26 22:42:58
Does write access imply being able to create? Do y
tbarzic
2012/03/26 23:22:51
I plan to use this as check that the handler "has
Yoyo Zhou
2012/03/27 00:54:20
Yeah, my comment is along the lines of: the functi
tbarzic
2012/03/27 01:10:59
Done.
|
| + DCHECK(!(file_access_permission_flags_ & kInvalidPermission)); |
| + return (file_access_permission_flags_ & kCreatePermission) != 0; |
| +} |