summaryrefslogtreecommitdiffstats
path: root/webkit/fileapi/sandbox_mount_point_provider.h
diff options
context:
space:
mode:
authorericu@google.com <ericu@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-24 00:49:40 +0000
committerericu@google.com <ericu@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-24 00:49:40 +0000
commit073a04f0599beb27670d8a6738fcbbc22fa97bcf (patch)
treed7393b3cd3463dbfaf4bbdc02fdd0a4de0c83995 /webkit/fileapi/sandbox_mount_point_provider.h
parent6bcd5f36cd94649887eff0c87df4f4496001984a (diff)
downloadchromium_src-073a04f0599beb27670d8a6738fcbbc22fa97bcf.zip
chromium_src-073a04f0599beb27670d8a6738fcbbc22fa97bcf.tar.gz
chromium_src-073a04f0599beb27670d8a6738fcbbc22fa97bcf.tar.bz2
Stop returning the true root path of each filesystem from openFileSystem.
Instead, return the FileSystem URI of the root. This will make it easier to swap in different filesystem implementations. BUG=71635 TEST=Just a couple in FileSystemUtilTests, but a bunch of existing ones [this doesn't add much new functionality]. Review URL: http://codereview.chromium.org/6603034 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@79228 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/fileapi/sandbox_mount_point_provider.h')
-rw-r--r--webkit/fileapi/sandbox_mount_point_provider.h120
1 files changed, 120 insertions, 0 deletions
diff --git a/webkit/fileapi/sandbox_mount_point_provider.h b/webkit/fileapi/sandbox_mount_point_provider.h
new file mode 100644
index 0000000..d981cc8
--- /dev/null
+++ b/webkit/fileapi/sandbox_mount_point_provider.h
@@ -0,0 +1,120 @@
+// 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.
+
+#ifndef WEBKIT_FILEAPI_SANDBOX_MOUNT_POINT_PROVIDER_H_
+#define WEBKIT_FILEAPI_SANDBOX_MOUNT_POINT_PROVIDER_H_
+
+#include <string>
+
+#include "base/file_path.h"
+#include "googleurl/src/gurl.h"
+#include "webkit/fileapi/file_system_mount_point_provider.h"
+
+class GURL;
+
+namespace base {
+class MessageLoopProxy;
+}
+
+namespace fileapi {
+
+class SandboxMountPointProvider : public FileSystemMountPointProvider {
+ public:
+
+ SandboxMountPointProvider(
+ FileSystemPathManager* path_manager,
+ scoped_refptr<base::MessageLoopProxy> file_message_loop,
+ const FilePath& profile_path);
+
+ // Checks if mount point access is allowed from |origin_url|.
+ virtual bool IsAccessAllowed(const GURL& origin_url);
+
+ // Retrieves the root path for the given |origin_url| and |type|, and
+ // calls the given |callback| with the root path and name.
+ // If |create| is true this also creates the directory if it doesn't exist.
+ void GetFileSystemRootPath(
+ const GURL& origin_url,
+ FileSystemType type,
+ bool create,
+ FileSystemPathManager::GetRootPathCallback* callback);
+
+ // Like GetFileSystemRootPath, but synchronous, and can be called only while
+ // running on the file thread.
+ FilePath GetFileSystemRootPathOnFileThread(
+ const GURL& origin_url,
+ FileSystemType type,
+ bool create);
+
+ // The FileSystem directory name.
+ static const FilePath::CharType kFileSystemDirectory[];
+
+ static const char kPersistentName[];
+ static const char kTemporaryName[];
+
+ const FilePath& base_path() const {
+ return base_path_;
+ }
+
+ // Checks if a given |name| contains any restricted names/chars in it.
+ virtual bool IsRestrictedFileName(const FilePath& filename) const;
+
+ // Returns the origin identifier string, which is used as a part of the
+ // sandboxed path component, for the given |url|.
+ static std::string GetOriginIdentifierFromURL(const GURL& url);
+
+ // Gets a base directory path of the sandboxed filesystem that is
+ // specified by |origin_identifier| and |type|.
+ // |base_path| must be pointing the FileSystem's data directory
+ // under the profile directory, i.e. <profile_dir>/kFileSystemDirectory.
+ // Returns an empty path if any of the given parameters are invalid.
+ // Returned directory path does not contain 'unique' part, therefore
+ // it is not an actual root path for the filesystem.
+ static FilePath GetFileSystemBaseDirectoryForOriginAndType(
+ const FilePath& base_path,
+ const std::string& origin_identifier,
+ fileapi::FileSystemType type);
+
+ // Enumerates origins under the given |base_path|.
+ // This must be used on the FILE thread.
+ class OriginEnumerator {
+ public:
+ explicit OriginEnumerator(const FilePath& base_path);
+
+ // Returns the next origin identifier. Returns empty if there are no
+ // more origins.
+ std::string Next();
+
+ bool HasTemporary();
+ bool HasPersistent();
+ const FilePath& path() { return current_; }
+
+ private:
+ file_util::FileEnumerator enumerator_;
+ FilePath current_;
+ };
+
+ private:
+ bool GetOriginBasePathAndName(
+ const GURL& origin_url,
+ FilePath* base_path,
+ FileSystemType type,
+ std::string* name);
+
+ class GetFileSystemRootPathTask;
+
+ // The path_manager_ isn't owned by this instance; this instance is owned by
+ // the path_manager_, and they have the same lifetime.
+ FileSystemPathManager* path_manager_;
+
+ scoped_refptr<base::MessageLoopProxy> file_message_loop_;
+
+ const FilePath base_path_;
+
+ DISALLOW_COPY_AND_ASSIGN(SandboxMountPointProvider);
+};
+
+} // namespace fileapi
+
+#endif // WEBKIT_FILEAPI_SANDBOX_MOUNT_POINT_PROVIDER_H_
+