diff options
author | ericu@google.com <ericu@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-24 00:49:40 +0000 |
---|---|---|
committer | ericu@google.com <ericu@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-24 00:49:40 +0000 |
commit | 073a04f0599beb27670d8a6738fcbbc22fa97bcf (patch) | |
tree | d7393b3cd3463dbfaf4bbdc02fdd0a4de0c83995 /webkit/fileapi/sandbox_mount_point_provider.h | |
parent | 6bcd5f36cd94649887eff0c87df4f4496001984a (diff) | |
download | chromium_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.h | 120 |
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_ + |