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

Side by Side Diff: chrome/browser/extensions/api/file_system/file_system_api.cc

Issue 13023002: Change chrome.filesystem to handle the Chrome OS Drive file entries directly. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: COmment. 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 "chrome/browser/extensions/api/file_system/file_system_api.h" 5 #include "chrome/browser/extensions/api/file_system/file_system_api.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/files/file_path.h" 9 #include "base/files/file_path.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 10 matching lines...) Expand all
21 #include "chrome/common/extensions/permissions/api_permission.h" 21 #include "chrome/common/extensions/permissions/api_permission.h"
22 #include "content/public/browser/child_process_security_policy.h" 22 #include "content/public/browser/child_process_security_policy.h"
23 #include "content/public/browser/render_process_host.h" 23 #include "content/public/browser/render_process_host.h"
24 #include "content/public/browser/render_view_host.h" 24 #include "content/public/browser/render_view_host.h"
25 #include "content/public/browser/web_contents.h" 25 #include "content/public/browser/web_contents.h"
26 #include "content/public/browser/web_contents_view.h" 26 #include "content/public/browser/web_contents_view.h"
27 #include "grit/generated_resources.h" 27 #include "grit/generated_resources.h"
28 #include "net/base/mime_util.h" 28 #include "net/base/mime_util.h"
29 #include "ui/base/l10n/l10n_util.h" 29 #include "ui/base/l10n/l10n_util.h"
30 #include "ui/shell_dialogs/select_file_dialog.h" 30 #include "ui/shell_dialogs/select_file_dialog.h"
31 #include "ui/shell_dialogs/selected_file_info.h"
32 #include "webkit/fileapi/external_mount_points.h"
31 #include "webkit/fileapi/file_system_types.h" 33 #include "webkit/fileapi/file_system_types.h"
32 #include "webkit/fileapi/file_system_util.h" 34 #include "webkit/fileapi/file_system_util.h"
33 #include "webkit/fileapi/isolated_context.h" 35 #include "webkit/fileapi/isolated_context.h"
34 36
35 #if defined(OS_MACOSX) 37 #if defined(OS_MACOSX)
36 #include <CoreFoundation/CoreFoundation.h> 38 #include <CoreFoundation/CoreFoundation.h>
37 #include "base/mac/foundation_util.h" 39 #include "base/mac/foundation_util.h"
38 #endif 40 #endif
39 41
40 using fileapi::IsolatedContext; 42 using fileapi::IsolatedContext;
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 entry_type_(entry_type), 384 entry_type_(entry_type),
383 function_(function) { 385 function_(function) {
384 select_file_dialog_ = ui::SelectFileDialog::Create( 386 select_file_dialog_ = ui::SelectFileDialog::Create(
385 this, new ChromeSelectFilePolicy(web_contents)); 387 this, new ChromeSelectFilePolicy(web_contents));
386 gfx::NativeWindow owning_window = web_contents ? 388 gfx::NativeWindow owning_window = web_contents ?
387 platform_util::GetTopLevel(web_contents->GetView()->GetNativeView()) : 389 platform_util::GetTopLevel(web_contents->GetView()->GetNativeView()) :
388 NULL; 390 NULL;
389 391
390 if (g_skip_picker_for_test) { 392 if (g_skip_picker_for_test) {
391 if (g_path_to_be_picked_for_test) { 393 if (g_path_to_be_picked_for_test) {
394 ui::SelectedFileInfo selected_path(*g_path_to_be_picked_for_test,
395 base::FilePath());
392 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, 396 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
393 base::Bind( 397 base::Bind(
394 &FileSystemChooseEntryFunction::FilePicker::FileSelected, 398 &FileSystemChooseEntryFunction::FilePicker::
395 base::Unretained(this), *g_path_to_be_picked_for_test, 1, 399 FileSelectedWithExtraInfo,
400 base::Unretained(this), selected_path, 1,
396 static_cast<void*>(NULL))); 401 static_cast<void*>(NULL)));
397 } else { 402 } else {
398 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, 403 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
399 base::Bind( 404 base::Bind(
400 &FileSystemChooseEntryFunction::FilePicker:: 405 &FileSystemChooseEntryFunction::FilePicker::
401 FileSelectionCanceled, 406 FileSelectionCanceled,
402 base::Unretained(this), static_cast<void*>(NULL))); 407 base::Unretained(this), static_cast<void*>(NULL)));
403 } 408 }
404 return; 409 return;
405 } 410 }
406 411
407 select_file_dialog_->SelectFile(picker_type, 412 select_file_dialog_->SelectFile(picker_type,
408 string16(), 413 string16(),
409 suggested_name, 414 suggested_name,
410 &file_type_info, 0, FILE_PATH_LITERAL(""), 415 &file_type_info, 0, FILE_PATH_LITERAL(""),
411 owning_window, NULL); 416 owning_window, NULL);
412 } 417 }
413 418
414 virtual ~FilePicker() {} 419 virtual ~FilePicker() {}
415 420
416 private: 421 private:
417 // ui::SelectFileDialog::Listener implementation. 422 // ui::SelectFileDialog::Listener implementation.
418 virtual void FileSelected(const base::FilePath& path, 423 virtual void FileSelected(const base::FilePath& path,
419 int index, 424 int index,
420 void* params) OVERRIDE { 425 void* params) OVERRIDE {
421 function_->FileSelected(path, entry_type_); 426 // The version taking ui::SelectedFileInfo should be used.
427 NOTREACHED();
428 }
429
430 virtual void FileSelectedWithExtraInfo(const ui::SelectedFileInfo& file,
431 int index,
432 void* params) OVERRIDE {
433 // Normally, file.local_path is used because it is a native path to the
434 // local read-only cached file in the case of remote file system like
435 // Chrome OS's Google Drive integration. Here, however, |file.file_path| is
436 // necessary because we need to create a FileEntry denoting the remote file,
437 // not its cache. On other platforms than Chrome OS, they are the same.
438 //
439 // TODO(kinaba): remove this, once after the file picker implements proper
440 // switch of the path treatment depending on the |support_drive| flag.
441 function_->FileSelected(file.file_path, entry_type_);
422 delete this; 442 delete this;
423 } 443 }
424 444
425 virtual void FileSelectionCanceled(void* params) OVERRIDE { 445 virtual void FileSelectionCanceled(void* params) OVERRIDE {
426 function_->FileSelectionCanceled(); 446 function_->FileSelectionCanceled();
427 delete this; 447 delete this;
428 } 448 }
429 449
430 base::FilePath suggested_name_; 450 base::FilePath suggested_name_;
431 451
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 void FileSystemChooseEntryFunction::SkipPickerAndAlwaysCancelForTest() { 491 void FileSystemChooseEntryFunction::SkipPickerAndAlwaysCancelForTest() {
472 g_skip_picker_for_test = true; 492 g_skip_picker_for_test = true;
473 g_path_to_be_picked_for_test = NULL; 493 g_path_to_be_picked_for_test = NULL;
474 } 494 }
475 495
476 // static 496 // static
477 void FileSystemChooseEntryFunction::StopSkippingPickerForTest() { 497 void FileSystemChooseEntryFunction::StopSkippingPickerForTest() {
478 g_skip_picker_for_test = false; 498 g_skip_picker_for_test = false;
479 } 499 }
480 500
501 // static
502 void FileSystemChooseEntryFunction::RegisterTempExternalFileSystemForTest(
503 const std::string& name, const base::FilePath& path) {
504 // For testing on Chrome OS, where to deal with remote and local paths
505 // smoothly, all accessed paths need to be registered in the list of
506 // external mount points.
507 fileapi::ExternalMountPoints::GetSystemInstance()->RegisterFileSystem(
508 name, fileapi::kFileSystemTypeNativeLocal, path);
509 }
510
481 void FileSystemChooseEntryFunction::FileSelected(const base::FilePath& path, 511 void FileSystemChooseEntryFunction::FileSelected(const base::FilePath& path,
482 EntryType entry_type) { 512 EntryType entry_type) {
483 if (entry_type == WRITABLE) { 513 if (entry_type == WRITABLE) {
484 content::BrowserThread::PostTask(content::BrowserThread::FILE, FROM_HERE, 514 content::BrowserThread::PostTask(content::BrowserThread::FILE, FROM_HERE,
485 base::Bind(&FileSystemChooseEntryFunction::CheckWritableFile, 515 base::Bind(&FileSystemChooseEntryFunction::CheckWritableFile,
486 this, path)); 516 this, path));
487 return; 517 return;
488 } 518 }
489 519
490 // Don't need to check the file, it's for reading. 520 // Don't need to check the file, it's for reading.
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 616
587 BuildFileTypeInfo(&file_type_info, suggested_extension, 617 BuildFileTypeInfo(&file_type_info, suggested_extension,
588 options->accepts.get(), options->accepts_all_types.get()); 618 options->accepts.get(), options->accepts_all_types.get());
589 } 619 }
590 620
591 if (entry_type == WRITABLE && !HasFileSystemWritePermission()) { 621 if (entry_type == WRITABLE && !HasFileSystemWritePermission()) {
592 error_ = kRequiresFileSystemWriteError; 622 error_ = kRequiresFileSystemWriteError;
593 return false; 623 return false;
594 } 624 }
595 625
626 if (entry_type != WRITABLE)
627 file_type_info.support_drive = true;
628
596 return ShowPicker(suggested_name, file_type_info, picker_type, entry_type); 629 return ShowPicker(suggested_name, file_type_info, picker_type, entry_type);
597 } 630 }
598 631
599 } // namespace extensions 632 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698