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(); |