Skip to content

Commit

Permalink
fix: update for promise becoming move-only
Browse files Browse the repository at this point in the history
  • Loading branch information
codebytere committed Feb 25, 2019
1 parent 39f71f0 commit 088fae3
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 46 deletions.
20 changes: 11 additions & 9 deletions atom/browser/api/atom_api_dialog.cc
Expand Up @@ -67,18 +67,20 @@ void ShowOpenDialog(const file_dialog::DialogSettings& settings,
}

void ShowSaveDialogSync(const file_dialog::DialogSettings& settings,
mate::Arguments* args) {
mate::Arguments* args) {
base::FilePath path;
if (file_dialog::ShowSaveDialogSync(settings, &path))
args->Return(path);
if (file_dialog::ShowSaveDialogSync(settings, &path))
args->Return(path);
}

v8::Local<v8::Promise> ShowSaveDialog(const file_dialog::DialogSettings& settings,
mate::Arguments* args) {
scoped_refptr<atom::util::Promise> promise =
new atom::util::Promise(args->isolate());
file_dialog::ShowSaveDialog(settings, promise);
return promise->GetHandle();
v8::Local<v8::Promise> ShowSaveDialog(
const file_dialog::DialogSettings& settings,
mate::Arguments* args) {
atom::util::Promise promise(args->isolate());
v8::Local<v8::Promise> handle = promise.GetHandle();

file_dialog::ShowSaveDialog(settings, std::move(promise));
return handle;
}

void Initialize(v8::Local<v8::Object> exports,
Expand Down
7 changes: 3 additions & 4 deletions atom/browser/atom_download_manager_delegate.cc
Expand Up @@ -121,14 +121,13 @@ void AtomDownloadManagerDelegate::OnDownloadPathGenerated(
settings.force_detached = offscreen;

v8::Isolate* isolate = v8::Isolate::GetCurrent();
scoped_refptr<atom::util::Promise> dialog_promise =
new atom::util::Promise(isolate);
atom::util::Promise dialog_promise(isolate);
auto dialog_callback =
base::Bind(&AtomDownloadManagerDelegate::OnDownloadSaveDialogDone,
base::Unretained(this), download_id, callback);

file_dialog::ShowSaveDialog(settings, dialog_promise);
ignore_result(dialog_promise->Then(dialog_callback));
file_dialog::ShowSaveDialog(settings, std::move(dialog_promise));
ignore_result(dialog_promise.Then(dialog_callback));
} else {
callback.Run(path, download::DownloadItem::TARGET_DISPOSITION_PROMPT,
download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, path,
Expand Down
2 changes: 1 addition & 1 deletion atom/browser/ui/file_dialog.h
Expand Up @@ -74,7 +74,7 @@ void ShowOpenDialog(const DialogSettings& settings,
bool ShowSaveDialogSync(const DialogSettings& settings, base::FilePath* path);

void ShowSaveDialog(const DialogSettings& settings,
scoped_refptr<atom::util::Promise> promise);
atom::util::Promise promise);

} // namespace file_dialog

Expand Down
10 changes: 5 additions & 5 deletions atom/browser/ui/file_dialog_gtk.cc
Expand Up @@ -126,7 +126,7 @@ class FileChooserDialog {
gtk_window_present_with_time(GTK_WINDOW(dialog_), time);
}

void RunSaveAsynchronous(scoped_refptr<atom::util::Promise> promise) {
void RunSaveAsynchronous(atom::util::Promise promise) {
save_promise_ = promise;
RunAsynchronous();
}
Expand Down Expand Up @@ -173,7 +173,7 @@ class FileChooserDialog {
GtkWidget* preview_;

Filters filters_;
scoped_refptr<atom::util::Promise> promise save_promise_;
atom::util::Promise save_promise_;
OpenDialogCallback open_callback_;

// Callback for when we update the preview for the selection.
Expand All @@ -186,15 +186,15 @@ void FileChooserDialog::OnFileDialogResponse(GtkWidget* widget, int response) {
gtk_widget_hide(dialog_);
if (!save_promise_.is_null()) {
mate::Dictionary dict =
mate::Dictionary::CreateEmpty(save_promise_->isolate());
mate::Dictionary::CreateEmpty(save_promise_.isolate());
if (response == GTK_RESPONSE_ACCEPT) {
dict.Set("canceled", false);
dict.Set("filename", GetFileName());
} else {
dict.Set("canceled", true);
dict.Set("filename", base::FilePath();
}
save_promise_->Resolve(dict.GetHandle());
save_promise_.Resolve(dict.GetHandle());
} else if (!open_callback_.is_null()) {
if (response == GTK_RESPONSE_ACCEPT)
open_callback_.Run(true, GetFileNames());
Expand Down Expand Up @@ -297,7 +297,7 @@ bool ShowSaveDialogSync(const DialogSettings& settings, base::FilePath* path) {
}

void ShowSaveDialog(const DialogSettings& settings,
scoped_refptr<atom::util::Promise> promise) {
atom::util::Promise promise) {
FileChooserDialog* save_dialog =
new FileChooserDialog(GTK_FILE_CHOOSER_ACTION_SAVE, settings);
save_dialog->RunSaveAsynchronous(promise);
Expand Down
21 changes: 11 additions & 10 deletions atom/browser/ui/file_dialog_mac.mm
Expand Up @@ -355,8 +355,8 @@ bool ShowSaveDialogSync(const DialogSettings& settings, base::FilePath* path) {
void SaveDialogCompletion(int chosen,
NSSavePanel* dialog,
const DialogSettings& settings,
scoped_refptr<atom::util::Promise> promise) {
mate::Dictionary dict = mate::Dictionary::CreateEmpty(promise->isolate());
atom::util::Promise promise) {
mate::Dictionary dict = mate::Dictionary::CreateEmpty(promise.isolate());
if (chosen == NSFileHandlingPanelCancelButton) {
dict.Set("canceled", true);
#if defined(MAS_BUILD)
Expand All @@ -376,30 +376,31 @@ void SaveDialogCompletion(int chosen,
dict.Set("bookmark", bookmark);
#endif
}
promise->Resolve(dict.GetHandle());
promise.Resolve(dict.GetHandle());
}

void ShowSaveDialog(const DialogSettings& settings,
scoped_refptr<atom::util::Promise> p) {
atom::util::Promise promise) {
NSSavePanel* dialog = [NSSavePanel savePanel];

SetupDialog(dialog, settings);
[dialog setCanSelectHiddenExtension:YES];

__block scoped_refptr<atom::util::Promise> promise = p;
__block atom::util::Promise p = std::move(promise);

if (!settings.parent_window || !settings.parent_window->GetNativeWindow() ||
settings.force_detached) {
[dialog beginWithCompletionHandler:^(NSInteger chosen) {
SaveDialogCompletion(chosen, dialog, settings, promise);
SaveDialogCompletion(chosen, dialog, settings, std::move(p));
}];
} else {
NSWindow* window =
settings.parent_window->GetNativeWindow().GetNativeNSWindow();
[dialog beginSheetModalForWindow:window
completionHandler:^(NSInteger chosen) {
SaveDialogCompletion(chosen, dialog, settings, promise);
}];
[dialog
beginSheetModalForWindow:window
completionHandler:^(NSInteger chosen) {
SaveDialogCompletion(chosen, dialog, settings, std::move(p));
}];
}
}

Expand Down
27 changes: 14 additions & 13 deletions atom/browser/ui/file_dialog_win.cc
Expand Up @@ -91,22 +91,23 @@ void RunOpenDialogInNewThread(const RunState& run_state,
run_state.ui_task_runner->DeleteSoon(FROM_HERE, run_state.dialog_thread);
}

void OnSaveDialogDone(scoped_refptr<atom::util::Promise> promise,
bool canceled,
const base::FilePath path) {
mate::Dictionary dict = mate::Dictionary::CreateEmpty(promise->isolate());
void OnSaveDialogDone(atom::util::Promise promise,
bool canceled,
const base::FilePath path) {
mate::Dictionary dict = mate::Dictionary::CreateEmpty(promise.isolate());
dict.Set("canceled", canceled);
dict.Set("filename", path);
promise->Resolve(dict.GetHandle());
promise.Resolve(dict.GetHandle());
}

void RunSaveDialogInNewThread(const RunState& run_state,
const DialogSettings& settings,
scoped_refptr<atom::util::Promise> promise) {
atom::util::Promise promise) {
base::FilePath path;
bool result = ShowSaveDialogSync(settings, &path);
run_state.ui_task_runner->PostTask(FROM_HERE,
base::Bind(&OnSaveDialogDone, promise, result, path));
run_state.ui_task_runner->PostTask(
FROM_HERE,
base::Bind(&OnSaveDialogDone, std::move(promise), result, path));
run_state.ui_task_runner->DeleteSoon(FROM_HERE, run_state.dialog_thread);
}

Expand Down Expand Up @@ -303,17 +304,17 @@ bool ShowSaveDialogSync(const DialogSettings& settings, base::FilePath* path) {
}

void ShowSaveDialog(const DialogSettings& settings,
scoped_refptr<atom::util::Promise> promise) {
atom::util::Promise promise) {
RunState run_state;
if (!CreateDialogThread(&run_state)) {
mate::Dictionary dict = mate::Dictionary::CreateEmpty(promise->isolate());
mate::Dictionary dict = mate::Dictionary::CreateEmpty(promise.isolate());
dict.Set("canceled", false);
dict.Set("filename", base::FilePath());
promise->Resolve(dict.GetHandle());
promise.Resolve(dict.GetHandle());
} else {
run_state.dialog_thread->task_runner()->PostTask(
FROM_HERE,
base::Bind(&RunSaveDialogInNewThread, run_state, settings, promise));
FROM_HERE, base::Bind(&RunSaveDialogInNewThread, run_state, settings,
std::move(promise)));
}
}

Expand Down
8 changes: 4 additions & 4 deletions atom/browser/web_dialog_helper.cc
Expand Up @@ -54,11 +54,11 @@ class FileSelectHelper : public base::RefCounted<FileSelectHelper>,
void ShowSaveDialog(const file_dialog::DialogSettings& settings) {
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::Local<v8::Context> context = isolate->GetCurrentContext();
scoped_refptr<atom::util::Promise> promise =
new atom::util::Promise(isolate);
atom::util::Promise promise(isolate);
v8::Local<v8::Promise> handle = promise.GetHandle();

file_dialog::ShowSaveDialog(settings, promise);
ignore_result(promise->GetHandle()->Then(
file_dialog::ShowSaveDialog(settings, std::move(promise));
ignore_result(handle->Then(
context,
v8::Local<v8::Function>::Cast(mate::ConvertToV8(
isolate, base::Bind(&FileSelectHelper::OnSaveDialogDone, this)))));
Expand Down

0 comments on commit 088fae3

Please sign in to comment.