diff options
author | tbarzic@chromium.org <tbarzic@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-03 06:07:57 +0000 |
---|---|---|
committer | tbarzic@chromium.org <tbarzic@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-03 06:07:57 +0000 |
commit | f037de8fe2596cfc4d1848a7f167ab7dc75e4c71 (patch) | |
tree | 74c10c983569c1f93c77120daf8f39ceef295f09 /webkit/chromeos | |
parent | bc091771a0ebd4eaedde7789a67f624b10e19b8c (diff) | |
download | chromium_src-f037de8fe2596cfc4d1848a7f167ab7dc75e4c71.zip chromium_src-f037de8fe2596cfc4d1848a7f167ab7dc75e4c71.tar.gz chromium_src-f037de8fe2596cfc4d1848a7f167ab7dc75e4c71.tar.bz2 |
Add oem mount point to cros_mount_provider.
The new mount point will be accessible will be accessible by file manager
extension, but it won't be shown in the UI.
The mount point will contain Timescapes-ChromeOS video which will be playable in
the media player.
BUG=152216
TEST=manual (tried playing video on oem mount point using media player)
Review URL: https://chromiumcodereview.appspot.com/10993066
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@159856 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/chromeos')
-rw-r--r-- | webkit/chromeos/fileapi/cros_mount_point_provider.cc | 39 | ||||
-rw-r--r-- | webkit/chromeos/fileapi/cros_mount_point_provider.h | 2 |
2 files changed, 37 insertions, 4 deletions
diff --git a/webkit/chromeos/fileapi/cros_mount_point_provider.cc b/webkit/chromeos/fileapi/cros_mount_point_provider.cc index 067b310..978eb11 100644 --- a/webkit/chromeos/fileapi/cros_mount_point_provider.cc +++ b/webkit/chromeos/fileapi/cros_mount_point_provider.cc @@ -42,6 +42,7 @@ bool CrosMountPointProvider::CanHandleURL(const fileapi::FileSystemURL& url) { if (!url.is_valid()) return false; return url.type() == fileapi::kFileSystemTypeNativeLocal || + url.type() == fileapi::kFileSystemTypeRestrictedNativeLocal || url.type() == fileapi::kFileSystemTypeDrive; } @@ -55,6 +56,7 @@ CrosMountPointProvider::CrosMountPointProvider( AddLocalMountPoint(home_path.AppendASCII("Downloads")); AddLocalMountPoint(FilePath(FILE_PATH_LITERAL("/media/archive"))); AddLocalMountPoint(FilePath(FILE_PATH_LITERAL("/media/removable"))); + AddRestrictedLocalMountPoint(FilePath(FILE_PATH_LITERAL("/usr/share/oem"))); } CrosMountPointProvider::~CrosMountPointProvider() { @@ -147,6 +149,18 @@ void CrosMountPointProvider::AddLocalMountPoint(const FilePath& mount_point) { local_to_virtual_map_[mount_point] = mount_point.BaseName(); } +void CrosMountPointProvider::AddRestrictedLocalMountPoint( + const FilePath& mount_point) { + std::string mount_name = mount_point.BaseName().AsUTF8Unsafe(); + isolated_context()->RevokeFileSystem(mount_name); + isolated_context()->RegisterExternalFileSystem( + mount_name, + fileapi::kFileSystemTypeRestrictedNativeLocal, + mount_point); + base::AutoLock locker(mount_point_map_lock_); + local_to_virtual_map_[mount_point] = mount_point.BaseName(); +} + void CrosMountPointProvider::AddRemoteMountPoint( const FilePath& mount_point, fileapi::RemoteFileSystemProxyInterface* remote_proxy) { @@ -177,8 +191,9 @@ void CrosMountPointProvider::GrantFullAccessToExtension( std::vector<fileapi::IsolatedContext::FileInfo> files = isolated_context()->GetExternalMountPoints(); for (size_t i = 0; i < files.size(); ++i) { - GrantFileAccessToExtension(extension_id, - FilePath::FromUTF8Unsafe(files[i].name)); + file_access_permissions_->GrantAccessPermission( + extension_id, + FilePath::FromUTF8Unsafe(files[i].name)); } } @@ -188,6 +203,17 @@ void CrosMountPointProvider::GrantFileAccessToExtension( DCHECK(special_storage_policy_->IsFileHandler(extension_id)); if (!special_storage_policy_->IsFileHandler(extension_id)) return; + + std::string id; + fileapi::FileSystemType type; + FilePath path; + isolated_context()->CrackIsolatedPath(virtual_path, &id, &type, &path); + + if (type == fileapi::kFileSystemTypeRestrictedNativeLocal) { + LOG(ERROR) << "Can't grant access for restricted mount point"; + return; + } + file_access_permissions_->GrantAccessPermission(extension_id, virtual_path); } @@ -207,7 +233,8 @@ std::vector<FilePath> CrosMountPointProvider::GetRootDirectories() const { fileapi::FileSystemFileUtil* CrosMountPointProvider::GetFileUtil( fileapi::FileSystemType type) { - DCHECK(type == fileapi::kFileSystemTypeNativeLocal); + DCHECK(type == fileapi::kFileSystemTypeNativeLocal || + type == fileapi::kFileSystemTypeRestrictedNativeLocal); return local_file_util_.get(); } @@ -232,7 +259,8 @@ fileapi::FileSystemOperation* CrosMountPointProvider::CreateFileSystemOperation( } } - DCHECK(url.type() == fileapi::kFileSystemTypeNativeLocal); + DCHECK(url.type() == fileapi::kFileSystemTypeNativeLocal || + url.type() == fileapi::kFileSystemTypeRestrictedNativeLocal); scoped_ptr<fileapi::FileSystemOperationContext> operation_context( new fileapi::FileSystemOperationContext(context)); return new fileapi::LocalFileSystemOperation(context, @@ -264,6 +292,9 @@ fileapi::FileStreamWriter* CrosMountPointProvider::CreateFileStreamWriter( return new fileapi::RemoteFileStreamWriter(found->second, url, offset); } + if (url.type() == fileapi::kFileSystemTypeRestrictedNativeLocal) + return NULL; + DCHECK(url.type() == fileapi::kFileSystemTypeNativeLocal); return new fileapi::LocalFileStreamWriter(url.path(), offset); } diff --git a/webkit/chromeos/fileapi/cros_mount_point_provider.h b/webkit/chromeos/fileapi/cros_mount_point_provider.h index 6678f84..8c76db0 100644 --- a/webkit/chromeos/fileapi/cros_mount_point_provider.h +++ b/webkit/chromeos/fileapi/cros_mount_point_provider.h @@ -89,6 +89,8 @@ class FILEAPI_EXPORT CrosMountPointProvider const std::string& extension_id) OVERRIDE; virtual bool HasMountPoint(const FilePath& mount_point) OVERRIDE; virtual void AddLocalMountPoint(const FilePath& mount_point) OVERRIDE; + virtual void AddRestrictedLocalMountPoint( + const FilePath& mount_point) OVERRIDE; virtual void AddRemoteMountPoint( const FilePath& mount_point, fileapi::RemoteFileSystemProxyInterface* remote_proxy) OVERRIDE; |