| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/browser/chromeos/fileapi/file_system_backend.h" | 5 #include "chrome/browser/chromeos/fileapi/file_system_backend.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.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/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 namespace chromeos { | 27 namespace chromeos { |
| 28 | 28 |
| 29 // static | 29 // static |
| 30 bool FileSystemBackend::CanHandleURL(const storage::FileSystemURL& url) { | 30 bool FileSystemBackend::CanHandleURL(const storage::FileSystemURL& url) { |
| 31 if (!url.is_valid()) | 31 if (!url.is_valid()) |
| 32 return false; | 32 return false; |
| 33 return url.type() == storage::kFileSystemTypeNativeLocal || | 33 return url.type() == storage::kFileSystemTypeNativeLocal || |
| 34 url.type() == storage::kFileSystemTypeRestrictedNativeLocal || | 34 url.type() == storage::kFileSystemTypeRestrictedNativeLocal || |
| 35 url.type() == storage::kFileSystemTypeDrive || | 35 url.type() == storage::kFileSystemTypeDrive || |
| 36 url.type() == storage::kFileSystemTypeProvided || | 36 url.type() == storage::kFileSystemTypeProvided || |
| 37 url.type() == storage::kFileSystemTypePluginProvided || |
| 37 url.type() == storage::kFileSystemTypeDeviceMediaAsFileStorage; | 38 url.type() == storage::kFileSystemTypeDeviceMediaAsFileStorage; |
| 38 } | 39 } |
| 39 | 40 |
| 40 FileSystemBackend::FileSystemBackend( | 41 FileSystemBackend::FileSystemBackend( |
| 41 FileSystemBackendDelegate* drive_delegate, | 42 FileSystemBackendDelegate* drive_delegate, |
| 42 FileSystemBackendDelegate* file_system_provider_delegate, | 43 FileSystemBackendDelegate* file_system_provider_delegate, |
| 43 FileSystemBackendDelegate* mtp_delegate, | 44 FileSystemBackendDelegate* mtp_delegate, |
| 44 scoped_refptr<storage::ExternalMountPoints> mount_points, | 45 scoped_refptr<storage::ExternalMountPoints> mount_points, |
| 45 storage::ExternalMountPoints* system_mount_points) | 46 storage::ExternalMountPoints* system_mount_points) |
| 46 : file_access_permissions_(new FileAccessPermissions()), | 47 : file_access_permissions_(new FileAccessPermissions()), |
| (...skipping 30 matching lines...) Expand all Loading... |
| 77 | 78 |
| 78 bool FileSystemBackend::CanHandleType(storage::FileSystemType type) const { | 79 bool FileSystemBackend::CanHandleType(storage::FileSystemType type) const { |
| 79 switch (type) { | 80 switch (type) { |
| 80 case storage::kFileSystemTypeExternal: | 81 case storage::kFileSystemTypeExternal: |
| 81 case storage::kFileSystemTypeDrive: | 82 case storage::kFileSystemTypeDrive: |
| 82 case storage::kFileSystemTypeRestrictedNativeLocal: | 83 case storage::kFileSystemTypeRestrictedNativeLocal: |
| 83 case storage::kFileSystemTypeNativeLocal: | 84 case storage::kFileSystemTypeNativeLocal: |
| 84 case storage::kFileSystemTypeNativeForPlatformApp: | 85 case storage::kFileSystemTypeNativeForPlatformApp: |
| 85 case storage::kFileSystemTypeDeviceMediaAsFileStorage: | 86 case storage::kFileSystemTypeDeviceMediaAsFileStorage: |
| 86 case storage::kFileSystemTypeProvided: | 87 case storage::kFileSystemTypeProvided: |
| 88 case storage::kFileSystemTypePluginProvided: |
| 87 return true; | 89 return true; |
| 88 default: | 90 default: |
| 89 return false; | 91 return false; |
| 90 } | 92 } |
| 91 } | 93 } |
| 92 | 94 |
| 93 void FileSystemBackend::Initialize(storage::FileSystemContext* context) { | 95 void FileSystemBackend::Initialize(storage::FileSystemContext* context) { |
| 94 } | 96 } |
| 95 | 97 |
| 96 void FileSystemBackend::ResolveURL(const storage::FileSystemURL& url, | 98 void FileSystemBackend::ResolveURL(const storage::FileSystemURL& url, |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 root_dirs.push_back(mount_points[i].path); | 223 root_dirs.push_back(mount_points[i].path); |
| 222 return root_dirs; | 224 return root_dirs; |
| 223 } | 225 } |
| 224 | 226 |
| 225 storage::AsyncFileUtil* FileSystemBackend::GetAsyncFileUtil( | 227 storage::AsyncFileUtil* FileSystemBackend::GetAsyncFileUtil( |
| 226 storage::FileSystemType type) { | 228 storage::FileSystemType type) { |
| 227 switch (type) { | 229 switch (type) { |
| 228 case storage::kFileSystemTypeDrive: | 230 case storage::kFileSystemTypeDrive: |
| 229 return drive_delegate_->GetAsyncFileUtil(type); | 231 return drive_delegate_->GetAsyncFileUtil(type); |
| 230 case storage::kFileSystemTypeProvided: | 232 case storage::kFileSystemTypeProvided: |
| 233 case storage::kFileSystemTypePluginProvided: |
| 231 return file_system_provider_delegate_->GetAsyncFileUtil(type); | 234 return file_system_provider_delegate_->GetAsyncFileUtil(type); |
| 232 case storage::kFileSystemTypeNativeLocal: | 235 case storage::kFileSystemTypeNativeLocal: |
| 233 case storage::kFileSystemTypeRestrictedNativeLocal: | 236 case storage::kFileSystemTypeRestrictedNativeLocal: |
| 234 return local_file_util_.get(); | 237 return local_file_util_.get(); |
| 235 case storage::kFileSystemTypeDeviceMediaAsFileStorage: | 238 case storage::kFileSystemTypeDeviceMediaAsFileStorage: |
| 236 return mtp_delegate_->GetAsyncFileUtil(type); | 239 return mtp_delegate_->GetAsyncFileUtil(type); |
| 237 default: | 240 default: |
| 238 NOTREACHED(); | 241 NOTREACHED(); |
| 239 } | 242 } |
| 240 return NULL; | 243 return NULL; |
| 241 } | 244 } |
| 242 | 245 |
| 243 storage::WatcherManager* FileSystemBackend::GetWatcherManager( | 246 storage::WatcherManager* FileSystemBackend::GetWatcherManager( |
| 244 storage::FileSystemType type) { | 247 storage::FileSystemType type) { |
| 245 if (type == storage::kFileSystemTypeProvided) | 248 if (type == storage::kFileSystemTypeProvided || |
| 249 type == storage::kFileSystemTypePluginProvided) |
| 246 return file_system_provider_delegate_->GetWatcherManager(type); | 250 return file_system_provider_delegate_->GetWatcherManager(type); |
| 247 | 251 |
| 248 if (type == storage::kFileSystemTypeDeviceMediaAsFileStorage && | 252 if (type == storage::kFileSystemTypeDeviceMediaAsFileStorage && |
| 249 !base::CommandLine::ForCurrentProcess()->HasSwitch( | 253 !base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 250 chromeos::switches::kDisableMtpWriteSupport)) { | 254 chromeos::switches::kDisableMtpWriteSupport)) { |
| 251 return mtp_delegate_->GetWatcherManager(type); | 255 return mtp_delegate_->GetWatcherManager(type); |
| 252 } | 256 } |
| 253 | 257 |
| 254 // TODO(mtomasz): Add support for other backends. | 258 // TODO(mtomasz): Add support for other backends. |
| 255 return NULL; | 259 return NULL; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 280 return storage::FileSystemOperation::Create( | 284 return storage::FileSystemOperation::Create( |
| 281 url, | 285 url, |
| 282 context, | 286 context, |
| 283 make_scoped_ptr(new storage::FileSystemOperationContext( | 287 make_scoped_ptr(new storage::FileSystemOperationContext( |
| 284 context, MediaFileSystemBackend::MediaTaskRunner().get()))); | 288 context, MediaFileSystemBackend::MediaTaskRunner().get()))); |
| 285 } | 289 } |
| 286 | 290 |
| 287 DCHECK(url.type() == storage::kFileSystemTypeNativeLocal || | 291 DCHECK(url.type() == storage::kFileSystemTypeNativeLocal || |
| 288 url.type() == storage::kFileSystemTypeRestrictedNativeLocal || | 292 url.type() == storage::kFileSystemTypeRestrictedNativeLocal || |
| 289 url.type() == storage::kFileSystemTypeDrive || | 293 url.type() == storage::kFileSystemTypeDrive || |
| 290 url.type() == storage::kFileSystemTypeProvided); | 294 url.type() == storage::kFileSystemTypeProvided || |
| 295 url.type() == storage::kFileSystemTypePluginProvided); |
| 291 return storage::FileSystemOperation::Create( | 296 return storage::FileSystemOperation::Create( |
| 292 url, | 297 url, |
| 293 context, | 298 context, |
| 294 make_scoped_ptr(new storage::FileSystemOperationContext(context))); | 299 make_scoped_ptr(new storage::FileSystemOperationContext(context))); |
| 295 } | 300 } |
| 296 | 301 |
| 297 bool FileSystemBackend::SupportsStreaming( | 302 bool FileSystemBackend::SupportsStreaming( |
| 298 const storage::FileSystemURL& url) const { | 303 const storage::FileSystemURL& url) const { |
| 299 return url.type() == storage::kFileSystemTypeDrive || | 304 return url.type() == storage::kFileSystemTypeDrive || |
| 300 url.type() == storage::kFileSystemTypeProvided || | 305 url.type() == storage::kFileSystemTypeProvided || |
| 306 url.type() == storage::kFileSystemTypePluginProvided || |
| 301 url.type() == storage::kFileSystemTypeDeviceMediaAsFileStorage; | 307 url.type() == storage::kFileSystemTypeDeviceMediaAsFileStorage; |
| 302 } | 308 } |
| 303 | 309 |
| 304 bool FileSystemBackend::HasInplaceCopyImplementation( | 310 bool FileSystemBackend::HasInplaceCopyImplementation( |
| 305 storage::FileSystemType type) const { | 311 storage::FileSystemType type) const { |
| 306 switch (type) { | 312 switch (type) { |
| 307 case storage::kFileSystemTypeDrive: | 313 case storage::kFileSystemTypeDrive: |
| 308 case storage::kFileSystemTypeProvided: | 314 case storage::kFileSystemTypeProvided: |
| 315 case storage::kFileSystemTypePluginProvided: |
| 309 case storage::kFileSystemTypeDeviceMediaAsFileStorage: | 316 case storage::kFileSystemTypeDeviceMediaAsFileStorage: |
| 310 return true; | 317 return true; |
| 311 case storage::kFileSystemTypeNativeLocal: | 318 case storage::kFileSystemTypeNativeLocal: |
| 312 case storage::kFileSystemTypeRestrictedNativeLocal: | 319 case storage::kFileSystemTypeRestrictedNativeLocal: |
| 313 return false; | 320 return false; |
| 314 default: | 321 default: |
| 315 NOTREACHED(); | 322 NOTREACHED(); |
| 316 } | 323 } |
| 317 return true; | 324 return true; |
| 318 } | 325 } |
| 319 | 326 |
| 320 scoped_ptr<storage::FileStreamReader> FileSystemBackend::CreateFileStreamReader( | 327 scoped_ptr<storage::FileStreamReader> FileSystemBackend::CreateFileStreamReader( |
| 321 const storage::FileSystemURL& url, | 328 const storage::FileSystemURL& url, |
| 322 int64 offset, | 329 int64 offset, |
| 323 int64 max_bytes_to_read, | 330 int64 max_bytes_to_read, |
| 324 const base::Time& expected_modification_time, | 331 const base::Time& expected_modification_time, |
| 325 storage::FileSystemContext* context) const { | 332 storage::FileSystemContext* context) const { |
| 326 DCHECK(url.is_valid()); | 333 DCHECK(url.is_valid()); |
| 327 | 334 |
| 328 if (!IsAccessAllowed(url)) | 335 if (!IsAccessAllowed(url)) |
| 329 return scoped_ptr<storage::FileStreamReader>(); | 336 return scoped_ptr<storage::FileStreamReader>(); |
| 330 | 337 |
| 331 switch (url.type()) { | 338 switch (url.type()) { |
| 332 case storage::kFileSystemTypeDrive: | 339 case storage::kFileSystemTypeDrive: |
| 333 return drive_delegate_->CreateFileStreamReader( | 340 return drive_delegate_->CreateFileStreamReader( |
| 334 url, offset, max_bytes_to_read, expected_modification_time, context); | 341 url, offset, max_bytes_to_read, expected_modification_time, context); |
| 335 case storage::kFileSystemTypeProvided: | 342 case storage::kFileSystemTypeProvided: |
| 343 case storage::kFileSystemTypePluginProvided: |
| 336 return file_system_provider_delegate_->CreateFileStreamReader( | 344 return file_system_provider_delegate_->CreateFileStreamReader( |
| 337 url, offset, max_bytes_to_read, expected_modification_time, context); | 345 url, offset, max_bytes_to_read, expected_modification_time, context); |
| 338 case storage::kFileSystemTypeNativeLocal: | 346 case storage::kFileSystemTypeNativeLocal: |
| 339 case storage::kFileSystemTypeRestrictedNativeLocal: | 347 case storage::kFileSystemTypeRestrictedNativeLocal: |
| 340 return scoped_ptr<storage::FileStreamReader>( | 348 return scoped_ptr<storage::FileStreamReader>( |
| 341 storage::FileStreamReader::CreateForFileSystemFile( | 349 storage::FileStreamReader::CreateForFileSystemFile( |
| 342 context, url, offset, expected_modification_time)); | 350 context, url, offset, expected_modification_time)); |
| 343 case storage::kFileSystemTypeDeviceMediaAsFileStorage: | 351 case storage::kFileSystemTypeDeviceMediaAsFileStorage: |
| 344 return mtp_delegate_->CreateFileStreamReader( | 352 return mtp_delegate_->CreateFileStreamReader( |
| 345 url, offset, max_bytes_to_read, expected_modification_time, context); | 353 url, offset, max_bytes_to_read, expected_modification_time, context); |
| 346 default: | 354 default: |
| 347 NOTREACHED(); | 355 NOTREACHED(); |
| 348 } | 356 } |
| 349 return scoped_ptr<storage::FileStreamReader>(); | 357 return scoped_ptr<storage::FileStreamReader>(); |
| 350 } | 358 } |
| 351 | 359 |
| 352 scoped_ptr<storage::FileStreamWriter> FileSystemBackend::CreateFileStreamWriter( | 360 scoped_ptr<storage::FileStreamWriter> FileSystemBackend::CreateFileStreamWriter( |
| 353 const storage::FileSystemURL& url, | 361 const storage::FileSystemURL& url, |
| 354 int64 offset, | 362 int64 offset, |
| 355 storage::FileSystemContext* context) const { | 363 storage::FileSystemContext* context) const { |
| 356 DCHECK(url.is_valid()); | 364 DCHECK(url.is_valid()); |
| 357 | 365 |
| 358 if (!IsAccessAllowed(url)) | 366 if (!IsAccessAllowed(url)) |
| 359 return scoped_ptr<storage::FileStreamWriter>(); | 367 return scoped_ptr<storage::FileStreamWriter>(); |
| 360 | 368 |
| 361 switch (url.type()) { | 369 switch (url.type()) { |
| 362 case storage::kFileSystemTypeDrive: | 370 case storage::kFileSystemTypeDrive: |
| 363 return drive_delegate_->CreateFileStreamWriter(url, offset, context); | 371 return drive_delegate_->CreateFileStreamWriter(url, offset, context); |
| 364 case storage::kFileSystemTypeProvided: | 372 case storage::kFileSystemTypeProvided: |
| 373 case storage::kFileSystemTypePluginProvided: |
| 365 return file_system_provider_delegate_->CreateFileStreamWriter( | 374 return file_system_provider_delegate_->CreateFileStreamWriter( |
| 366 url, offset, context); | 375 url, offset, context); |
| 367 case storage::kFileSystemTypeNativeLocal: | 376 case storage::kFileSystemTypeNativeLocal: |
| 368 return scoped_ptr<storage::FileStreamWriter>( | 377 return scoped_ptr<storage::FileStreamWriter>( |
| 369 storage::FileStreamWriter::CreateForLocalFile( | 378 storage::FileStreamWriter::CreateForLocalFile( |
| 370 context->default_file_task_runner(), | 379 context->default_file_task_runner(), |
| 371 url.path(), | 380 url.path(), |
| 372 offset, | 381 offset, |
| 373 storage::FileStreamWriter::OPEN_EXISTING_FILE)); | 382 storage::FileStreamWriter::OPEN_EXISTING_FILE)); |
| 374 case storage::kFileSystemTypeRestrictedNativeLocal: | 383 case storage::kFileSystemTypeRestrictedNativeLocal: |
| (...skipping 19 matching lines...) Expand all Loading... |
| 394 DCHECK(url.is_valid()); | 403 DCHECK(url.is_valid()); |
| 395 | 404 |
| 396 if (!IsAccessAllowed(url)) | 405 if (!IsAccessAllowed(url)) |
| 397 return callback.Run(GURL()); | 406 return callback.Run(GURL()); |
| 398 | 407 |
| 399 switch (url.type()) { | 408 switch (url.type()) { |
| 400 case storage::kFileSystemTypeDrive: | 409 case storage::kFileSystemTypeDrive: |
| 401 drive_delegate_->GetRedirectURLForContents(url, callback); | 410 drive_delegate_->GetRedirectURLForContents(url, callback); |
| 402 return; | 411 return; |
| 403 case storage::kFileSystemTypeProvided: | 412 case storage::kFileSystemTypeProvided: |
| 413 case storage::kFileSystemTypePluginProvided: |
| 404 file_system_provider_delegate_->GetRedirectURLForContents(url, | 414 file_system_provider_delegate_->GetRedirectURLForContents(url, |
| 405 callback); | 415 callback); |
| 406 return; | 416 return; |
| 407 case storage::kFileSystemTypeDeviceMediaAsFileStorage: | 417 case storage::kFileSystemTypeDeviceMediaAsFileStorage: |
| 408 mtp_delegate_->GetRedirectURLForContents(url, callback); | 418 mtp_delegate_->GetRedirectURLForContents(url, callback); |
| 409 return; | 419 return; |
| 410 case storage::kFileSystemTypeNativeLocal: | 420 case storage::kFileSystemTypeNativeLocal: |
| 411 case storage::kFileSystemTypeRestrictedNativeLocal: | 421 case storage::kFileSystemTypeRestrictedNativeLocal: |
| 412 callback.Run(GURL()); | 422 callback.Run(GURL()); |
| 413 return; | 423 return; |
| 414 default: | 424 default: |
| 415 NOTREACHED(); | 425 NOTREACHED(); |
| 416 } | 426 } |
| 417 callback.Run(GURL()); | 427 callback.Run(GURL()); |
| 418 } | 428 } |
| 419 | 429 |
| 420 storage::FileSystemURL FileSystemBackend::CreateInternalURL( | 430 storage::FileSystemURL FileSystemBackend::CreateInternalURL( |
| 421 storage::FileSystemContext* context, | 431 storage::FileSystemContext* context, |
| 422 const base::FilePath& entry_path) const { | 432 const base::FilePath& entry_path) const { |
| 423 base::FilePath virtual_path; | 433 base::FilePath virtual_path; |
| 424 if (!GetVirtualPath(entry_path, &virtual_path)) | 434 if (!GetVirtualPath(entry_path, &virtual_path)) |
| 425 return storage::FileSystemURL(); | 435 return storage::FileSystemURL(); |
| 426 | 436 |
| 427 return context->CreateCrackedFileSystemURL( | 437 return context->CreateCrackedFileSystemURL( |
| 428 GURL() /* origin */, storage::kFileSystemTypeExternal, virtual_path); | 438 GURL() /* origin */, storage::kFileSystemTypeExternal, virtual_path); |
| 429 } | 439 } |
| 430 | 440 |
| 431 } // namespace chromeos | 441 } // namespace chromeos |
| OLD | NEW |