diff --git a/browser/api/atom_api_dialog.cc b/browser/api/atom_api_dialog.cc index 5200a78a0975..f7da08fae702 100644 --- a/browser/api/atom_api_dialog.cc +++ b/browser/api/atom_api_dialog.cc @@ -180,7 +180,7 @@ v8::Handle ShowOpenDialog(const v8::Arguments &args) { title, default_path, properties, - base::Bind(&CallV8Function2>, + base::Bind(&CallV8Function2&>, callback)); return v8::Undefined(); } @@ -202,17 +202,33 @@ v8::Handle ShowSaveDialog(const v8::Arguments &args) { native_window = window->window(); } + v8::Persistent callback; + if (args[3]->IsFunction()) { + callback = v8::Persistent::New( + node_isolate, + v8::Local::Cast(args[3])); + } + std::string title(*v8::String::Utf8Value(args[0])); base::FilePath default_path(V8ValueToFilePath(args[1])); - base::FilePath path; - if (!file_dialog::ShowSaveDialog(native_window, - title, - default_path, - &path)) - return v8::Undefined(); + if (callback.IsEmpty()) { + base::FilePath path; + if (!file_dialog::ShowSaveDialog(native_window, + title, + default_path, + &path)) + return v8::Undefined(); - return scope.Close(ToV8Value(path)); + return scope.Close(ToV8Value(path)); + } else { + file_dialog::ShowSaveDialog( + native_window, + title, + default_path, + base::Bind(&CallV8Function2, callback)); + return v8::Undefined(); + } } } // namespace api