Chromium Code Reviews| Index: webkit/chromeos/fileapi/file_access_permissions.cc |
| =================================================================== |
| --- webkit/chromeos/fileapi/file_access_permissions.cc (revision 0) |
| +++ webkit/chromeos/fileapi/file_access_permissions.cc (revision 0) |
| @@ -0,0 +1,58 @@ |
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "webkit/chromeos/fileapi/file_access_permissions.h" |
| + |
| +#include "base/command_line.h" |
| +#include "base/logging.h" |
| + |
| +namespace chromeos { |
| + |
| +FileAccessPermissions::FileAccessPermissions() {} |
| + |
| +FileAccessPermissions::~FileAccessPermissions() {} |
| + |
| + |
| +void FileAccessPermissions::GrantAccessPermission( |
| + const std::string& extension_id, const FilePath& path) { |
| + base::AutoLock locker(lock_); |
| + PathAccessMap::iterator path_map_iter = path_map_.find(extension_id); |
| + if (path_map_iter == path_map_.end()) { |
| + PathSet path_set; |
| + path_set.insert(path); |
| + path_map_.insert(PathAccessMap::value_type(extension_id, path_set)); |
| + } else { |
| + if (path_map_iter->second.find(path) != path_map_iter->second.end()) |
| + return; |
| + path_map_iter->second.insert(path); |
| + } |
| +} |
| + |
| +bool FileAccessPermissions::HasAccessPermission( |
| + const std::string& extension_id, const FilePath& path) { |
| + base::AutoLock locker(lock_); |
| + PathAccessMap::const_iterator path_map_iter = path_map_.find(extension_id); |
| + if (path_map_iter == path_map_.end()) |
| + return false; |
| + |
| + // Check this file and walk up its directory tree to find if this extension |
| + // has access to it. |
|
ericu
2011/04/15 01:46:42
Don't you need to loop over the paths in the PathS
zel
2011/04/15 02:18:55
It actually traverses dir structure backward from
ericu
2011/04/15 02:31:05
Ah--I see--I was misreading the find as being in a
|
| + FilePath current_path = path.StripTrailingSeparators(); |
| + FilePath last_path; |
| + while (current_path != last_path) { |
| + if (path_map_iter->second.find(current_path) != path_map_iter->second.end()) |
| + return true; |
| + last_path = current_path; |
| + current_path = current_path.DirName(); |
| + } |
| + return false; |
| +} |
| + |
| +void FileAccessPermissions::RevokePermissions( |
| + const std::string& extension_id) { |
| + base::AutoLock locker(lock_); |
| + path_map_.erase(extension_id); |
| +} |
| + |
| +} |
| Property changes on: webkit/chromeos/fileapi/file_access_permissions.cc |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |