From c54c5e1e81771085b7be8bb047be9a24cbfb2aa1 Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Thu, 3 Nov 2011 15:10:37 +0000 Subject: [PATCH] Mac: Add file chooser support (issue #403). git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@354 5089003a-bbd8-11dd-ad1f-f1f9622dbc98 --- libcef/browser_webview_delegate_mac.mm | 47 ++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/libcef/browser_webview_delegate_mac.mm b/libcef/browser_webview_delegate_mac.mm index 052d88e65..107ed4e54 100644 --- a/libcef/browser_webview_delegate_mac.mm +++ b/libcef/browser_webview_delegate_mac.mm @@ -10,8 +10,10 @@ #import +#include "base/file_util.h" #include "base/mac/mac_util.h" #include "base/sys_string_conversions.h" +#include "base/threading/thread_restrictions.h" #include "skia/ext/skia_utils_mac.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebContextMenuData.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebCursorInfo.h" @@ -373,6 +375,47 @@ bool BrowserWebViewDelegate::ShowFileChooser(std::vector& file_names, const bool multi_select, const WebKit::WebString& title, const FilePath& default_file) { - NOTIMPLEMENTED(); - return false; + NSOpenPanel* dialog = [NSOpenPanel openPanel]; + if (!title.isNull()) + [dialog setTitle:base::SysUTF16ToNSString(title)]; + + NSString* default_dir = nil; + NSString* default_filename = nil; + if (!default_file.empty()) { + // The file dialog is going to do a ton of stats anyway. Not much + // point in eliminating this one. + base::ThreadRestrictions::ScopedAllowIO allow_io; + if (file_util::DirectoryExists(default_file)) { + default_dir = base::SysUTF8ToNSString(default_file.value()); + } else { + default_dir = base::SysUTF8ToNSString(default_file.DirName().value()); + default_filename = + base::SysUTF8ToNSString(default_file.BaseName().value()); + } + } + + if (default_dir != nil) { + [dialog setDirectoryURL:[NSURL fileURLWithPath:default_dir + isDirectory:true]]; + } + if (default_filename != nil) + [dialog setNameFieldStringValue:default_filename]; + + [dialog setAllowsOtherFileTypes:YES]; + [dialog setAllowsMultipleSelection:multi_select]; + [dialog setCanChooseFiles:YES]; + [dialog setCanChooseDirectories:NO]; + + if ([dialog runModal] == NSFileHandlingPanelCancelButton) + return false; + + NSArray *urls = [dialog URLs]; + int i, count = [urls count]; + for (i=0; i