| 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..634afb455c860909cb95e932d2a8ead77556332a 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::ValidateFileAccessPermissions() {
|
| + 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::HasCreateAccessPermission() const {
|
| + DCHECK(!(file_access_permission_flags_ & kInvalidPermission));
|
| + return (file_access_permission_flags_ & kCreatePermission) != 0;
|
| +}
|
|
|