| Index: chrome/browser/chromeos/fileapi/file_access_permissions.cc
 | 
| diff --git a/chrome/browser/chromeos/fileapi/file_access_permissions.cc b/chrome/browser/chromeos/fileapi/file_access_permissions.cc
 | 
| index dba65b340ee44e662b886b795e0347ea36961644..bfa1c539c861f7622a84cf9f2d03679b9cd3da46 100644
 | 
| --- a/chrome/browser/chromeos/fileapi/file_access_permissions.cc
 | 
| +++ b/chrome/browser/chromeos/fileapi/file_access_permissions.cc
 | 
| @@ -4,29 +4,32 @@
 | 
|  
 | 
|  #include "chrome/browser/chromeos/fileapi/file_access_permissions.h"
 | 
|  
 | 
| -#include "base/command_line.h"
 | 
|  #include "base/logging.h"
 | 
|  
 | 
|  namespace chromeos {
 | 
|  
 | 
| +namespace {
 | 
| +
 | 
| +// Empty path is prefix of any other paths, hence it represents full permission.
 | 
| +base::FilePath FullPermission() { return base::FilePath(); }
 | 
| +
 | 
| +}  // namespace
 | 
| +
 | 
|  FileAccessPermissions::FileAccessPermissions() {}
 | 
|  
 | 
|  FileAccessPermissions::~FileAccessPermissions() {}
 | 
|  
 | 
| +void FileAccessPermissions::GrantFullAccessPermission(
 | 
| +    const std::string& extension_id) {
 | 
| +  base::AutoLock locker(lock_);
 | 
| +  path_map_[extension_id].insert(FullPermission());
 | 
| +}
 | 
|  
 | 
|  void FileAccessPermissions::GrantAccessPermission(
 | 
|      const std::string& extension_id, const base::FilePath& path) {
 | 
| +  DCHECK(!path.empty());
 | 
|    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);
 | 
| -  }
 | 
| +  path_map_[extension_id].insert(path);
 | 
|  }
 | 
|  
 | 
|  bool FileAccessPermissions::HasAccessPermission(
 | 
| @@ -35,13 +38,17 @@ bool FileAccessPermissions::HasAccessPermission(
 | 
|    PathAccessMap::const_iterator path_map_iter = path_map_.find(extension_id);
 | 
|    if (path_map_iter == path_map_.end())
 | 
|      return false;
 | 
| +  const PathSet& path_set = path_map_iter->second;
 | 
| +
 | 
| +  if (path_set.find(FullPermission()) != path_set.end())
 | 
| +    return true;
 | 
|  
 | 
|    // Check this file and walk up its directory tree to find if this extension
 | 
|    // has access to it.
 | 
|    base::FilePath current_path = path.StripTrailingSeparators();
 | 
|    base::FilePath last_path;
 | 
|    while (current_path != last_path) {
 | 
| -    if (path_map_iter->second.find(current_path) != path_map_iter->second.end())
 | 
| +    if (path_set.find(current_path) != path_set.end())
 | 
|        return true;
 | 
|      last_path = current_path;
 | 
|      current_path = current_path.DirName();
 | 
| 
 |