From 0f5a058bdd70517b8162189f279996da77f810b9 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 31 Oct 2014 19:27:01 +0800 Subject: [PATCH] Implement RunFileChooser --- atom/browser/web_dialog_helper.cc | 39 +++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/atom/browser/web_dialog_helper.cc b/atom/browser/web_dialog_helper.cc index 938cd71836a2..df600c37f149 100644 --- a/atom/browser/web_dialog_helper.cc +++ b/atom/browser/web_dialog_helper.cc @@ -9,8 +9,10 @@ #include "atom/browser/ui/file_dialog.h" #include "base/bind.h" #include "base/files/file_enumerator.h" +#include "base/strings/utf_string_conversions.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" +#include "ui/shell_dialogs/selected_file_info.h" namespace atom { @@ -24,6 +26,43 @@ WebDialogHelper::~WebDialogHelper() { void WebDialogHelper::RunFileChooser(content::WebContents* web_contents, const content::FileChooserParams& params) { + std::vector result; + if (params.mode == content::FileChooserParams::Save) { + base::FilePath path; + if (file_dialog::ShowSaveDialog(window_, + base::UTF16ToUTF8(params.title), + params.default_file_name, + file_dialog::Filters(), + &path)) + result.push_back(ui::SelectedFileInfo(path, path)); + } else { + int flags = file_dialog::FILE_DIALOG_CREATE_DIRECTORY; + switch (params.mode) { + case content::FileChooserParams::OpenMultiple: + flags |= file_dialog::FILE_DIALOG_MULTI_SELECTIONS; + case content::FileChooserParams::Open: + flags |= file_dialog::FILE_DIALOG_OPEN_FILE; + break; + case content::FileChooserParams::UploadFolder: + flags |= file_dialog::FILE_DIALOG_OPEN_DIRECTORY; + break; + default: + NOTREACHED(); + } + + std::vector paths; + if (file_dialog::ShowOpenDialog(window_, + base::UTF16ToUTF8(params.title), + params.default_file_name, + file_dialog::Filters(), + flags, + &paths)) + for (auto& path : paths) + result.push_back(ui::SelectedFileInfo(path, path)); + } + + web_contents->GetRenderViewHost()->FilesSelectedInChooser( + result, params.mode); } void WebDialogHelper::EnumerateDirectory(content::WebContents* web_contents,