Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: webkit/chromeos/fileapi/cros_mount_point_provider.cc

Issue 12258021: Fix filesystem API file_handlers to work for drive on ChromeOS. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "webkit/chromeos/fileapi/cros_mount_point_provider.h" 5 #include "webkit/chromeos/fileapi/cros_mount_point_provider.h"
6 6
7 #include "base/chromeos/chromeos_version.h" 7 #include "base/chromeos/chromeos_version.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
(...skipping 12 matching lines...) Expand all
23 #include "webkit/fileapi/file_system_file_stream_reader.h" 23 #include "webkit/fileapi/file_system_file_stream_reader.h"
24 #include "webkit/fileapi/file_system_operation_context.h" 24 #include "webkit/fileapi/file_system_operation_context.h"
25 #include "webkit/fileapi/file_system_url.h" 25 #include "webkit/fileapi/file_system_url.h"
26 #include "webkit/fileapi/file_system_util.h" 26 #include "webkit/fileapi/file_system_util.h"
27 #include "webkit/fileapi/isolated_context.h" 27 #include "webkit/fileapi/isolated_context.h"
28 #include "webkit/fileapi/isolated_file_util.h" 28 #include "webkit/fileapi/isolated_file_util.h"
29 #include "webkit/fileapi/local_file_stream_writer.h" 29 #include "webkit/fileapi/local_file_stream_writer.h"
30 #include "webkit/fileapi/local_file_system_operation.h" 30 #include "webkit/fileapi/local_file_system_operation.h"
31 #include "webkit/glue/webkit_glue.h" 31 #include "webkit/glue/webkit_glue.h"
32 32
33 using fileapi::FileSystemURL;
34
33 namespace { 35 namespace {
34 36
35 const char kChromeUIScheme[] = "chrome"; 37 const char kChromeUIScheme[] = "chrome";
36 38
37 } // namespace 39 } // namespace
38 40
39 namespace chromeos { 41 namespace chromeos {
40 42
41 // static 43 // static
42 bool CrosMountPointProvider::CanHandleURL(const fileapi::FileSystemURL& url) { 44 bool CrosMountPointProvider::CanHandleURL(const FileSystemURL& url) {
43 if (!url.is_valid()) 45 if (!url.is_valid())
44 return false; 46 return false;
45 return url.type() == fileapi::kFileSystemTypeNativeLocal || 47 return url.type() == fileapi::kFileSystemTypeNativeLocal ||
46 url.type() == fileapi::kFileSystemTypeRestrictedNativeLocal || 48 url.type() == fileapi::kFileSystemTypeRestrictedNativeLocal ||
47 url.type() == fileapi::kFileSystemTypeDrive; 49 url.type() == fileapi::kFileSystemTypeDrive;
48 } 50 }
49 51
50 CrosMountPointProvider::CrosMountPointProvider( 52 CrosMountPointProvider::CrosMountPointProvider(
51 scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy, 53 scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy,
52 scoped_refptr<fileapi::ExternalMountPoints> mount_points, 54 scoped_refptr<fileapi::ExternalMountPoints> mount_points,
(...skipping 13 matching lines...) Expand all
66 const GURL& origin_url, 68 const GURL& origin_url,
67 fileapi::FileSystemType type, 69 fileapi::FileSystemType type,
68 bool create, 70 bool create,
69 const ValidateFileSystemCallback& callback) { 71 const ValidateFileSystemCallback& callback) {
70 DCHECK(fileapi::IsolatedContext::IsIsolatedType(type)); 72 DCHECK(fileapi::IsolatedContext::IsIsolatedType(type));
71 // Nothing to validate for external filesystem. 73 // Nothing to validate for external filesystem.
72 callback.Run(base::PLATFORM_FILE_OK); 74 callback.Run(base::PLATFORM_FILE_OK);
73 } 75 }
74 76
75 base::FilePath CrosMountPointProvider::GetFileSystemRootPathOnFileThread( 77 base::FilePath CrosMountPointProvider::GetFileSystemRootPathOnFileThread(
76 const fileapi::FileSystemURL& url, 78 const FileSystemURL& url,
77 bool create) { 79 bool create) {
78 DCHECK(fileapi::IsolatedContext::IsIsolatedType(url.mount_type())); 80 DCHECK(fileapi::IsolatedContext::IsIsolatedType(url.mount_type()));
79 if (!url.is_valid()) 81 if (!url.is_valid())
80 return base::FilePath(); 82 return base::FilePath();
81 83
82 base::FilePath root_path; 84 base::FilePath root_path;
83 std::string mount_name = url.filesystem_id(); 85 std::string mount_name = url.filesystem_id();
84 if (!mount_points_->GetRegisteredPath(mount_name, &root_path) && 86 if (!mount_points_->GetRegisteredPath(mount_name, &root_path) &&
85 !system_mount_points_->GetRegisteredPath(mount_name, &root_path)) { 87 !system_mount_points_->GetRegisteredPath(mount_name, &root_path)) {
86 return base::FilePath(); 88 return base::FilePath();
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 // Permissions in isolated filesystems should be examined with 222 // Permissions in isolated filesystems should be examined with
221 // FileSystem permission. 223 // FileSystem permission.
222 return fileapi::FILE_PERMISSION_USE_FILESYSTEM_PERMISSION; 224 return fileapi::FILE_PERMISSION_USE_FILESYSTEM_PERMISSION;
223 } 225 }
224 226
225 // Also apply system's file permission by default. 227 // Also apply system's file permission by default.
226 return fileapi::FILE_PERMISSION_USE_FILE_PERMISSION; 228 return fileapi::FILE_PERMISSION_USE_FILE_PERMISSION;
227 } 229 }
228 230
229 fileapi::FileSystemOperation* CrosMountPointProvider::CreateFileSystemOperation( 231 fileapi::FileSystemOperation* CrosMountPointProvider::CreateFileSystemOperation(
230 const fileapi::FileSystemURL& url, 232 const FileSystemURL& url,
231 fileapi::FileSystemContext* context, 233 fileapi::FileSystemContext* context,
232 base::PlatformFileError* error_code) const { 234 base::PlatformFileError* error_code) const {
233 DCHECK(url.is_valid()); 235 DCHECK(url.is_valid());
234 236
235 if (url.type() == fileapi::kFileSystemTypeDrive) { 237 fileapi::RemoteFileSystemProxyInterface* remote_proxy = GetRemoteProxy(url);
236 fileapi::RemoteFileSystemProxyInterface* remote_proxy = 238 if (remote_proxy)
237 GetRemoteProxy(url.filesystem_id());
238 if (!remote_proxy) {
239 *error_code = base::PLATFORM_FILE_ERROR_NOT_FOUND;
240 return NULL;
241 }
242 return new chromeos::RemoteFileSystemOperation(remote_proxy); 239 return new chromeos::RemoteFileSystemOperation(remote_proxy);
243 }
244 240
245 DCHECK(url.type() == fileapi::kFileSystemTypeNativeLocal || 241 DCHECK(url.type() == fileapi::kFileSystemTypeNativeLocal ||
246 url.type() == fileapi::kFileSystemTypeRestrictedNativeLocal); 242 url.type() == fileapi::kFileSystemTypeRestrictedNativeLocal);
247 scoped_ptr<fileapi::FileSystemOperationContext> operation_context( 243 scoped_ptr<fileapi::FileSystemOperationContext> operation_context(
248 new fileapi::FileSystemOperationContext(context)); 244 new fileapi::FileSystemOperationContext(context));
249 return new fileapi::LocalFileSystemOperation(context, 245 return new fileapi::LocalFileSystemOperation(context,
250 operation_context.Pass()); 246 operation_context.Pass());
251 } 247 }
252 248
253 webkit_blob::FileStreamReader* CrosMountPointProvider::CreateFileStreamReader( 249 webkit_blob::FileStreamReader* CrosMountPointProvider::CreateFileStreamReader(
254 const fileapi::FileSystemURL& url, 250 const FileSystemURL& url,
255 int64 offset, 251 int64 offset,
256 const base::Time& expected_modification_time, 252 const base::Time& expected_modification_time,
257 fileapi::FileSystemContext* context) const { 253 fileapi::FileSystemContext* context) const {
258 // For now we return a generic Reader implementation which utilizes 254 // For now we return a generic Reader implementation which utilizes
259 // CreateSnapshotFile internally (i.e. will download everything first). 255 // CreateSnapshotFile internally (i.e. will download everything first).
260 // TODO(satorux,zel): implement more efficient reader for remote cases. 256 // TODO(satorux,zel): implement more efficient reader for remote cases.
261 return new fileapi::FileSystemFileStreamReader( 257 return new fileapi::FileSystemFileStreamReader(
262 context, url, offset, expected_modification_time); 258 context, url, offset, expected_modification_time);
263 } 259 }
264 260
265 fileapi::FileStreamWriter* CrosMountPointProvider::CreateFileStreamWriter( 261 fileapi::FileStreamWriter* CrosMountPointProvider::CreateFileStreamWriter(
266 const fileapi::FileSystemURL& url, 262 const FileSystemURL& url,
267 int64 offset, 263 int64 offset,
268 fileapi::FileSystemContext* context) const { 264 fileapi::FileSystemContext* context) const {
269 DCHECK(url.is_valid()); 265 DCHECK(url.is_valid());
270 266
271 if (url.type() == fileapi::kFileSystemTypeDrive) { 267 fileapi::RemoteFileSystemProxyInterface* remote_proxy = GetRemoteProxy(url);
272 fileapi::RemoteFileSystemProxyInterface* remote_proxy = 268 if (remote_proxy)
273 GetRemoteProxy(url.filesystem_id());
274 if (!remote_proxy)
275 return NULL;
276 return new fileapi::RemoteFileStreamWriter(remote_proxy, url, offset); 269 return new fileapi::RemoteFileStreamWriter(remote_proxy, url, offset);
277 }
278 270
279 if (url.type() == fileapi::kFileSystemTypeRestrictedNativeLocal) 271 if (url.type() == fileapi::kFileSystemTypeRestrictedNativeLocal)
280 return NULL; 272 return NULL;
281 273
282 DCHECK(url.type() == fileapi::kFileSystemTypeNativeLocal); 274 DCHECK(url.type() == fileapi::kFileSystemTypeNativeLocal);
283 return new fileapi::LocalFileStreamWriter(url.path(), offset); 275 return new fileapi::LocalFileStreamWriter(url.path(), offset);
284 } 276 }
285 277
286 bool CrosMountPointProvider::GetVirtualPath( 278 bool CrosMountPointProvider::GetVirtualPath(
287 const base::FilePath& filesystem_path, 279 const base::FilePath& filesystem_path,
288 base::FilePath* virtual_path) { 280 base::FilePath* virtual_path) const {
289 return mount_points_->GetVirtualPath(filesystem_path, virtual_path) || 281 return mount_points_->GetVirtualPath(filesystem_path, virtual_path) ||
290 system_mount_points_->GetVirtualPath(filesystem_path, virtual_path); 282 system_mount_points_->GetVirtualPath(filesystem_path, virtual_path);
291 } 283 }
292 284
293 fileapi::RemoteFileSystemProxyInterface* CrosMountPointProvider::GetRemoteProxy( 285 fileapi::RemoteFileSystemProxyInterface* CrosMountPointProvider::GetRemoteProxy(
294 const std::string& mount_name) const { 286 const fileapi::FileSystemURL& url) const {
295 fileapi::RemoteFileSystemProxyInterface* proxy = 287 fileapi::RemoteFileSystemProxyInterface* proxy =
296 mount_points_->GetRemoteFileSystemProxy(mount_name); 288 mount_points_->GetRemoteFileSystemProxyForPath(url.path());
297 if (proxy) 289 if (proxy)
298 return proxy; 290 return proxy;
299 return system_mount_points_->GetRemoteFileSystemProxy(mount_name); 291 return system_mount_points_->GetRemoteFileSystemProxyForPath(url.path());
300 } 292 }
301 293
302 } // namespace chromeos 294 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698