1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/common/extensions/file_browser_handler.h"
7 #include "base/logging.h"
8 #include "extensions/common/url_pattern.h"
9 #include "googleurl/src/gurl.h"
13 const char kReadAccessString
[] = "read";
14 const char kReadWriteAccessString
[] = "read-write";
15 const char kCreateAccessString
[] = "create";
17 unsigned int kPermissionsNotDefined
= 0;
18 unsigned int kReadPermission
= 1;
19 unsigned int kWritePermission
= 1 << 1;
20 unsigned int kCreatePermission
= 1 << 2;
21 unsigned int kInvalidPermission
= 1 << 3;
23 unsigned int GetAccessPermissionFlagFromString(const std::string
& access_str
) {
24 if (access_str
== kReadAccessString
)
25 return kReadPermission
;
26 if (access_str
== kReadWriteAccessString
)
27 return kReadPermission
| kWritePermission
;
28 if (access_str
== kCreateAccessString
)
29 return kCreatePermission
;
30 return kInvalidPermission
;
36 FileBrowserHandler::FileBrowserHandler()
37 : file_access_permission_flags_(kPermissionsNotDefined
) {
40 FileBrowserHandler::~FileBrowserHandler() {
43 void FileBrowserHandler::AddPattern(const URLPattern
& pattern
) {
44 url_set_
.AddPattern(pattern
);
47 void FileBrowserHandler::ClearPatterns() {
48 url_set_
.ClearPatterns();
51 bool FileBrowserHandler::MatchesURL(const GURL
& url
) const {
52 return url_set_
.MatchesURL(url
);
55 bool FileBrowserHandler::AddFileAccessPermission(
56 const std::string
& access
) {
57 file_access_permission_flags_
|= GetAccessPermissionFlagFromString(access
);
58 return (file_access_permission_flags_
& kInvalidPermission
) != 0U;
61 bool FileBrowserHandler::ValidateFileAccessPermissions() {
62 bool is_invalid
= (file_access_permission_flags_
& kInvalidPermission
) != 0U;
63 bool can_create
= (file_access_permission_flags_
& kCreatePermission
) != 0U;
64 bool can_read_or_write
= (file_access_permission_flags_
&
65 (kReadPermission
| kWritePermission
)) != 0U;
66 if (is_invalid
|| (can_create
&& can_read_or_write
)) {
67 file_access_permission_flags_
= kInvalidPermission
;
71 if (file_access_permission_flags_
== kPermissionsNotDefined
)
72 file_access_permission_flags_
= kReadPermission
| kWritePermission
;
76 bool FileBrowserHandler::CanRead() const {
77 DCHECK(!(file_access_permission_flags_
& kInvalidPermission
));
78 return (file_access_permission_flags_
& kReadPermission
) != 0;
81 bool FileBrowserHandler::CanWrite() const {
82 DCHECK(!(file_access_permission_flags_
& kInvalidPermission
));
83 return (file_access_permission_flags_
& kWritePermission
) != 0;
86 bool FileBrowserHandler::HasCreateAccessPermission() const {
87 DCHECK(!(file_access_permission_flags_
& kInvalidPermission
));
88 return (file_access_permission_flags_
& kCreatePermission
) != 0;