| 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..0c21201122b0d6bdf88bdfd453ab51f3731330bf 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) {
|
| @@ -152,9 +143,11 @@ void FileSelectHelper::FileSelectedWithExtraInfo(
|
| content::BrowserThread::FILE_USER_BLOCKING,
|
| FROM_HERE,
|
| base::Bind(&FileSelectHelper::ProcessSelectedFilesMac, this, files));
|
| +#elif defined(OS_CHROMEOS)
|
| + ProcessSelectedFilesChromeOS(files);
|
| #else
|
| - NotifyRenderViewHostAndEnd(files);
|
| -#endif // defined(OS_MACOSX) && !defined(OS_IOS)
|
| + ProcessSelectedFiles(files);
|
| +#endif
|
| }
|
|
|
| void FileSelectHelper::MultiFilesSelected(
|
| @@ -177,13 +170,15 @@ void FileSelectHelper::MultiFilesSelectedWithExtraInfo(
|
| content::BrowserThread::FILE_USER_BLOCKING,
|
| FROM_HERE,
|
| base::Bind(&FileSelectHelper::ProcessSelectedFilesMac, this, files));
|
| +#elif defined(OS_CHROMEOS)
|
| + ProcessSelectedFilesChromeOS(files);
|
| #else
|
| - NotifyRenderViewHostAndEnd(files);
|
| -#endif // defined(OS_MACOSX) && !defined(OS_IOS)
|
| + ProcessSelectedFiles(files);
|
| +#endif
|
| }
|
|
|
| void FileSelectHelper::FileSelectionCanceled(void* params) {
|
| - NotifyRenderViewHostAndEnd(std::vector<ui::SelectedFileInfo>());
|
| + ProcessSelectedFiles(std::vector<ui::SelectedFileInfo>());
|
| }
|
|
|
| void FileSelectHelper::StartNewEnumeration(const base::FilePath& path,
|
| @@ -233,18 +228,56 @@ 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) {
|
| +#if defined(OS_CHROMEOS)
|
| + ProcessSelectedFilesChromeOS(selected_files);
|
| +#else
|
| + ProcessSelectedFiles(selected_files);
|
| +#endif // defined(OS_CHROMEOS)
|
| + } else {
|
| entry->rvh_->DirectoryEnumerationFinished(id, entry->results_);
|
| + EnumerateDirectoryEnd();
|
| + }
|
| +}
|
|
|
| - EnumerateDirectoryEnd();
|
| +#if defined(OS_CHROMEOS)
|
| +void FileSelectHelper::ProcessSelectedFilesChromeOS(
|
| + const std::vector<ui::SelectedFileInfo>& files) {
|
| + if (!render_view_host_) {
|
| + RunFileChooserEnd();
|
| + return;
|
| + }
|
| +
|
| + file_manager::util::ConvertSelectedFileInfoListToFileChooserFileInfoList(
|
| + file_manager::util::GetFileSystemContextForRenderViewHost(
|
| + profile_, render_view_host_),
|
| + web_contents_->GetSiteInstance()->GetSiteURL(),
|
| + files,
|
| + base::Bind(&FileSelectHelper::ProcessSelectedFilesChromeOSAfterConvresion,
|
| + this));
|
| }
|
|
|
| -void FileSelectHelper::NotifyRenderViewHostAndEnd(
|
| +void FileSelectHelper::ProcessSelectedFilesChromeOSAfterConvresion(
|
| + scoped_ptr<std::vector<content::FileChooserFileInfo>> list) {
|
| + NotifyRenderViewHostAndEnd(
|
| + list ? *list : std::vector<content::FileChooserFileInfo>());
|
| +}
|
| +#endif // defined(OS_CHROMEOS)
|
| +
|
| +void FileSelectHelper::ProcessSelectedFiles(
|
| const std::vector<ui::SelectedFileInfo>& files) {
|
| + std::vector<content::FileChooserFileInfo> chooser_files;
|
| + 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;
|
| + }
|
| + NotifyRenderViewHostAndEnd(chooser_files);
|
| +}
|
| +
|
| +void FileSelectHelper::NotifyRenderViewHostAndEnd(
|
| + const std::vector<content::FileChooserFileInfo>& files) {
|
| if (render_view_host_)
|
| - NotifyRenderViewHost(render_view_host_, files, dialog_mode_);
|
| + render_view_host_->FilesSelectedInChooser(files, dialog_mode_);
|
|
|
| // No members should be accessed from here on.
|
| RunFileChooserEnd();
|
|
|