Extract SIGPIPE ignoring code to a common place.
[chromium-blink-merge.git] / chrome / common / extensions / file_browser_handler.cc
blob772bb6fa52bb2ff7e1156d8e0990f41e1ef7ede8
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"
11 namespace {
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;
68 return false;
71 if (file_access_permission_flags_ == kPermissionsNotDefined)
72 file_access_permission_flags_ = kReadPermission | kWritePermission;
73 return true;
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;