Chromium Code Reviews| Index: chrome/browser/file_select_helper.cc |
| diff --git a/chrome/browser/file_select_helper.cc b/chrome/browser/file_select_helper.cc |
| index 4675d6481e20dc411008f4bbbce39e7134590cf8..85482a5299e9d9fe54795f1beb688a1d38ecc92c 100644 |
| --- a/chrome/browser/file_select_helper.cc |
| +++ b/chrome/browser/file_select_helper.cc |
| @@ -32,6 +32,11 @@ |
| #include "ui/base/l10n/l10n_util.h" |
| #include "ui/shell_dialogs/selected_file_info.h" |
| +#if defined(OS_CHROMEOS) |
| +#include "chrome/browser/chromeos/file_manager/fileapi_util.h" |
| +#include "content/public/browser/site_instance.h" |
| +#endif |
| + |
| using content::BrowserThread; |
| using content::FileChooserParams; |
| using content::RenderViewHost; |
| @@ -45,20 +50,6 @@ namespace { |
| // the renderer must start at 0 and increase. |
| const int kFileSelectEnumerationId = -1; |
| -void NotifyRenderViewHost( |
| - RenderViewHost* render_view_host, |
| - const std::vector<ui::SelectedFileInfo>& files, |
| - FileChooserParams::Mode dialog_mode) { |
| - std::vector<content::FileChooserFileInfo> chooser_files; |
| - for (size_t i = 0; i < files.size(); ++i) { |
| - content::FileChooserFileInfo chooser_file; |
| - chooser_file.file_path = files[i].local_path; |
| - chooser_file.display_name = files[i].display_name; |
| - chooser_files.push_back(chooser_file); |
| - } |
| - render_view_host->FilesSelectedInChooser(chooser_files, dialog_mode); |
| -} |
| - |
| // Converts a list of FilePaths to a list of ui::SelectedFileInfo. |
| std::vector<ui::SelectedFileInfo> FilePathListToSelectedFileInfoList( |
| const std::vector<base::FilePath>& paths) { |
| @@ -233,22 +224,62 @@ void FileSelectHelper::OnListDone(int id, int error) { |
| std::vector<ui::SelectedFileInfo> selected_files = |
| FilePathListToSelectedFileInfoList(entry->results_); |
| - if (id == kFileSelectEnumerationId) |
| - NotifyRenderViewHost(entry->rvh_, selected_files, dialog_mode_); |
| - else |
| + if (id == kFileSelectEnumerationId) { |
| + NotifyRenderViewHostAndEnd(selected_files); |
| + } else { |
| entry->rvh_->DirectoryEnumerationFinished(id, entry->results_); |
| - |
| - EnumerateDirectoryEnd(); |
| + EnumerateDirectoryEnd(); |
| + } |
| } |
| void FileSelectHelper::NotifyRenderViewHostAndEnd( |
| const std::vector<ui::SelectedFileInfo>& files) { |
| - if (render_view_host_) |
| - NotifyRenderViewHost(render_view_host_, files, dialog_mode_); |
| + std::vector<content::FileChooserFileInfo> chooser_files; |
| + |
| + if (!render_view_host_) { |
| + RunFileChooserEnd(); |
| + return; |
| + } |
| + |
| +#if defined(OS_CHROMEOS) |
| + if (!files.empty()) { |
| + // Converts |files| into FileChooserFileInfo with handling of non-native |
| + // files. |
| + file_manager::util::ConvertSelectedFileInfoListToFileChooserFileInfoList( |
| + file_manager::util::GetFileSystemContextForRenderViewHost( |
| + profile_, render_view_host_), |
| + web_contents_->GetSiteInstance()->GetSiteURL(), |
| + files, |
| + base::Bind( |
| + &FileSelectHelper::ProcessSelectedFilesChromeOSAfterConversion, |
| + this)); |
| + return; |
| + } |
| +#endif // defined(OS_CHROMEOS) |
| + |
| + for (size_t i = 0; i < files.size(); ++i) { |
| + chooser_files[i].file_path = files[i].local_path; |
| + chooser_files[i].display_name = files[i].display_name; |
|
Avi (use Gerrit)
2014/10/17 19:38:52
How does this work? chooser_files starts empty, an
hirono
2014/10/20 04:10:48
Yes, this was completely wrong...
Fixed.
|
| + } |
| + render_view_host_->FilesSelectedInChooser(chooser_files, dialog_mode_); |
| + |
| + // No members should be accessed from here on. |
| + RunFileChooserEnd(); |
| +} |
| + |
| +#if defined(OS_CHROMEOS) |
| +void FileSelectHelper::ProcessSelectedFilesChromeOSAfterConversion( |
| + scoped_ptr<std::vector<content::FileChooserFileInfo>> list) { |
| + if (render_view_host_) { |
| + render_view_host_->FilesSelectedInChooser( |
| + list ? *list : std::vector<content::FileChooserFileInfo>(), |
| + dialog_mode_); |
| + } |
| // No members should be accessed from here on. |
| RunFileChooserEnd(); |
| } |
| +#endif // defined(OS_CHROMEOS) |
| void FileSelectHelper::DeleteTemporaryFiles() { |
| BrowserThread::PostTask(BrowserThread::FILE, |