summaryrefslogtreecommitdiffstats
path: root/webkit/chromeos
diff options
context:
space:
mode:
authortbarzic@chromium.org <tbarzic@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-03 06:07:57 +0000
committertbarzic@chromium.org <tbarzic@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-03 06:07:57 +0000
commitf037de8fe2596cfc4d1848a7f167ab7dc75e4c71 (patch)
tree74c10c983569c1f93c77120daf8f39ceef295f09 /webkit/chromeos
parentbc091771a0ebd4eaedde7789a67f624b10e19b8c (diff)
downloadchromium_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.cc39
-rw-r--r--webkit/chromeos/fileapi/cros_mount_point_provider.h2
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;