// 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. 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); } }