| OLD | NEW |
| 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 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 entry_type_(entry_type), | 410 entry_type_(entry_type), |
| 411 function_(function) { | 411 function_(function) { |
| 412 select_file_dialog_ = ui::SelectFileDialog::Create( | 412 select_file_dialog_ = ui::SelectFileDialog::Create( |
| 413 this, new ChromeSelectFilePolicy(web_contents)); | 413 this, new ChromeSelectFilePolicy(web_contents)); |
| 414 gfx::NativeWindow owning_window = web_contents ? | 414 gfx::NativeWindow owning_window = web_contents ? |
| 415 platform_util::GetTopLevel(web_contents->GetView()->GetNativeView()) : | 415 platform_util::GetTopLevel(web_contents->GetView()->GetNativeView()) : |
| 416 NULL; | 416 NULL; |
| 417 | 417 |
| 418 if (g_skip_picker_for_test) { | 418 if (g_skip_picker_for_test) { |
| 419 if (g_path_to_be_picked_for_test) { | 419 if (g_path_to_be_picked_for_test) { |
| 420 ui::SelectedFileInfo selected_path(*g_path_to_be_picked_for_test, | |
| 421 base::FilePath()); | |
| 422 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, | 420 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, |
| 423 base::Bind( | 421 base::Bind( |
| 424 &FileSystemChooseEntryFunction::FilePicker:: | 422 &FileSystemChooseEntryFunction::FilePicker::FileSelected, |
| 425 FileSelectedWithExtraInfo, | 423 base::Unretained(this), *g_path_to_be_picked_for_test, 1, |
| 426 base::Unretained(this), selected_path, 1, | |
| 427 static_cast<void*>(NULL))); | 424 static_cast<void*>(NULL))); |
| 428 } else { | 425 } else { |
| 429 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, | 426 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, |
| 430 base::Bind( | 427 base::Bind( |
| 431 &FileSystemChooseEntryFunction::FilePicker:: | 428 &FileSystemChooseEntryFunction::FilePicker:: |
| 432 FileSelectionCanceled, | 429 FileSelectionCanceled, |
| 433 base::Unretained(this), static_cast<void*>(NULL))); | 430 base::Unretained(this), static_cast<void*>(NULL))); |
| 434 } | 431 } |
| 435 return; | 432 return; |
| 436 } | 433 } |
| 437 | 434 |
| 438 select_file_dialog_->SelectFile(picker_type, | 435 select_file_dialog_->SelectFile(picker_type, |
| 439 string16(), | 436 string16(), |
| 440 suggested_name, | 437 suggested_name, |
| 441 &file_type_info, 0, FILE_PATH_LITERAL(""), | 438 &file_type_info, 0, FILE_PATH_LITERAL(""), |
| 442 owning_window, NULL); | 439 owning_window, NULL); |
| 443 } | 440 } |
| 444 | 441 |
| 445 virtual ~FilePicker() {} | 442 virtual ~FilePicker() {} |
| 446 | 443 |
| 447 private: | 444 private: |
| 448 // ui::SelectFileDialog::Listener implementation. | 445 // ui::SelectFileDialog::Listener implementation. |
| 449 virtual void FileSelected(const base::FilePath& path, | 446 virtual void FileSelected(const base::FilePath& path, |
| 450 int index, | 447 int index, |
| 451 void* params) OVERRIDE { | 448 void* params) OVERRIDE { |
| 452 // The version taking ui::SelectedFileInfo should be used. | 449 function_->FileSelected(path, entry_type_); |
| 453 NOTREACHED(); | 450 delete this; |
| 454 } | 451 } |
| 455 | 452 |
| 456 virtual void FileSelectedWithExtraInfo(const ui::SelectedFileInfo& file, | 453 virtual void FileSelectedWithExtraInfo(const ui::SelectedFileInfo& file, |
| 457 int index, | 454 int index, |
| 458 void* params) OVERRIDE { | 455 void* params) OVERRIDE { |
| 459 // Normally, file.local_path is used because it is a native path to the | 456 // Normally, file.local_path is used because it is a native path to the |
| 460 // local read-only cached file in the case of remote file system like | 457 // local read-only cached file in the case of remote file system like |
| 461 // Chrome OS's Google Drive integration. Here, however, |file.file_path| is | 458 // Chrome OS's Google Drive integration. Here, however, |file.file_path| is |
| 462 // necessary because we need to create a FileEntry denoting the remote file, | 459 // necessary because we need to create a FileEntry denoting the remote file, |
| 463 // not its cache. On other platforms than Chrome OS, they are the same. | 460 // not its cache. On other platforms than Chrome OS, they are the same. |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 645 if (entry_type == WRITABLE && !HasFileSystemWritePermission()) { | 642 if (entry_type == WRITABLE && !HasFileSystemWritePermission()) { |
| 646 error_ = kRequiresFileSystemWriteError; | 643 error_ = kRequiresFileSystemWriteError; |
| 647 return false; | 644 return false; |
| 648 } | 645 } |
| 649 | 646 |
| 650 file_type_info.support_drive = true; | 647 file_type_info.support_drive = true; |
| 651 return ShowPicker(suggested_name, file_type_info, picker_type, entry_type); | 648 return ShowPicker(suggested_name, file_type_info, picker_type, entry_type); |
| 652 } | 649 } |
| 653 | 650 |
| 654 } // namespace extensions | 651 } // namespace extensions |
| OLD | NEW |