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

Side by Side Diff: chrome/browser/chromeos/fileapi/file_system_backend.cc

Issue 1093383002: [WIP] Provided file system from NACL. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved several modules to chromeos folder. Created 5 years, 5 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
OLDNEW
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/fileapi/external_file_url_util.cc ('k') | chrome/chrome_browser_chromeos.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698