diff --git a/atom/browser/ui/file_dialog_mac.mm b/atom/browser/ui/file_dialog_mac.mm index 5248441fe7..e2cfd96fa6 100644 --- a/atom/browser/ui/file_dialog_mac.mm +++ b/atom/browser/ui/file_dialog_mac.mm @@ -286,7 +286,7 @@ bool ShowOpenDialog(const DialogSettings& settings, void OpenDialogCompletion(int chosen, NSOpenPanel* dialog, - const DialogSettings& settings, + bool security_scoped_bookmarks, const OpenDialogCallback& callback) { if (chosen == NSFileHandlingPanelCancelButton) { #if defined(MAS_BUILD) @@ -299,7 +299,7 @@ void OpenDialogCompletion(int chosen, std::vector paths; #if defined(MAS_BUILD) std::vector bookmarks; - if (settings.security_scoped_bookmarks) { + if (security_scoped_bookmarks) { ReadDialogPathsWithBookmarks(dialog, &paths, &bookmarks); } else { ReadDialogPaths(dialog, &paths); @@ -322,18 +322,22 @@ void ShowOpenDialog(const DialogSettings& settings, // Duplicate the callback object here since c is a reference and gcd would // only store the pointer, by duplication we can force gcd to store a copy. __block OpenDialogCallback callback = c; + // Capture the value of the security_scoped_bookmarks settings flag + // and pass it to the completion handler. + bool security_scoped_bookmarks = settings.security_scoped_bookmarks; if (!settings.parent_window || !settings.parent_window->GetNativeWindow() || settings.force_detached) { [dialog beginWithCompletionHandler:^(NSInteger chosen) { - OpenDialogCompletion(chosen, dialog, settings, callback); + OpenDialogCompletion(chosen, dialog, security_scoped_bookmarks, callback); }]; } else { NSWindow* window = settings.parent_window->GetNativeWindow().GetNativeNSWindow(); [dialog beginSheetModalForWindow:window completionHandler:^(NSInteger chosen) { - OpenDialogCompletion(chosen, dialog, settings, callback); + OpenDialogCompletion(chosen, dialog, + security_scoped_bookmarks, callback); }]; } } @@ -354,7 +358,7 @@ bool ShowSaveDialog(const DialogSettings& settings, base::FilePath* path) { void SaveDialogCompletion(int chosen, NSSavePanel* dialog, - const DialogSettings& settings, + bool security_scoped_bookmarks, const SaveDialogCallback& callback) { if (chosen == NSFileHandlingPanelCancelButton) { #if defined(MAS_BUILD) @@ -366,7 +370,7 @@ void SaveDialogCompletion(int chosen, std::string path = base::SysNSStringToUTF8([[dialog URL] path]); #if defined(MAS_BUILD) std::string bookmark; - if (settings.security_scoped_bookmarks) { + if (security_scoped_bookmarks) { bookmark = GetBookmarkDataFromNSURL([dialog URL]); } callback.Run(true, base::FilePath(path), bookmark); @@ -384,18 +388,20 @@ void ShowSaveDialog(const DialogSettings& settings, [dialog setCanSelectHiddenExtension:YES]; __block SaveDialogCallback callback = c; + bool security_scoped_bookmarks = settings.security_scoped_bookmarks; if (!settings.parent_window || !settings.parent_window->GetNativeWindow() || settings.force_detached) { [dialog beginWithCompletionHandler:^(NSInteger chosen) { - SaveDialogCompletion(chosen, dialog, settings, callback); + SaveDialogCompletion(chosen, dialog, security_scoped_bookmarks, callback); }]; } else { NSWindow* window = settings.parent_window->GetNativeWindow().GetNativeNSWindow(); [dialog beginSheetModalForWindow:window completionHandler:^(NSInteger chosen) { - SaveDialogCompletion(chosen, dialog, settings, callback); + SaveDialogCompletion(chosen, dialog, + security_scoped_bookmarks, callback); }]; } }