Index: chrome/browser/extensions/extension_special_storage_policy.h |
=================================================================== |
--- chrome/browser/extensions/extension_special_storage_policy.h (revision 81212) |
+++ chrome/browser/extensions/extension_special_storage_policy.h (working copy) |
@@ -7,8 +7,10 @@ |
#pragma once |
#include <map> |
+#include <set> |
#include <string> |
+#include "base/file_path.h" |
#include "base/synchronization/lock.h" |
#include "googleurl/src/gurl.h" |
#include "webkit/quota/special_storage_policy.h" |
@@ -26,7 +28,10 @@ |
// data remover. These methods are safe to call on any thread. |
virtual bool IsStorageProtected(const GURL& origin); |
virtual bool IsStorageUnlimited(const GURL& origin); |
- virtual bool IsLocalFileSystemAccessAllowed(const GURL& origin); |
+ virtual bool IsLocalFileSystemAccessAllowed(const GURL& origin, |
+ const FilePath& virtual_path); |
+ virtual void GrantLocalFileSystemAccess(const GURL& origin, |
ericu
2011/04/13 20:12:46
Just looked at this again, and it doesn't look rig
zel
2011/04/13 20:38:55
The only reason I went with virtual part of the fi
ericu
2011/04/13 22:51:27
While I put the comment here, it's more of a big d
|
+ const FilePath& virtual_path); |
// Methods used by the ExtensionService to populate this class. |
void GrantRightsForExtension(const Extension* extension); |
@@ -37,26 +42,45 @@ |
class SpecialCollection { |
public: |
SpecialCollection(); |
- ~SpecialCollection(); |
+ virtual ~SpecialCollection(); |
bool Contains(const GURL& origin); |
void Add(const Extension* extension); |
- void Remove(const Extension* extension); |
- void Clear(); |
+ virtual void Remove(const Extension* extension); |
+ virtual void Clear(); |
- private: |
+ protected: |
typedef std::map<GURL, bool> CachedResults; |
typedef std::map<std::string, scoped_refptr<const Extension> > Extensions; |
Extensions extensions_; |
- CachedResults cached_resuts_; |
+ CachedResults cached_results_; |
}; |
+ class SpecialPathCollection : public SpecialCollection { |
+ public: |
+ SpecialPathCollection(); |
+ virtual ~SpecialPathCollection(); |
+ |
+ // SpecialCollection overrides. |
+ virtual void Remove(const Extension* extension); |
+ virtual void Clear(); |
+ |
+ void AddPath(const GURL& origin, const FilePath& path); |
+ bool ContainsPath(const GURL& origin, const FilePath& path); |
+ |
+ private: |
+ typedef std::set<FilePath> PathSet; |
+ typedef std::map<const Extension*, PathSet> PathAccessMap; |
+ scoped_refptr<const Extension> GetExtension(const GURL& origin); |
+ PathAccessMap path_map_; |
+ }; |
+ |
virtual ~ExtensionSpecialStoragePolicy(); |
base::Lock lock_; // Synchronize all access to the collections. |
SpecialCollection protected_apps_; |
SpecialCollection unlimited_extensions_; |
- SpecialCollection local_filesystem_extensions_; |
+ SpecialPathCollection local_filesystem_extensions_; |
}; |
#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SPECIAL_STORAGE_POLICY_H_ |