fix: release NSAlert properly (#26100)

Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
This commit is contained in:
trop[bot]
2020-10-22 13:25:09 -07:00
committed by GitHub
parent 1d383c0613
commit ce178d4b9d

View File

@@ -12,6 +12,7 @@
#include "base/callback.h"
#include "base/mac/mac_util.h"
#include "base/mac/scoped_nsobject.h"
#include "base/strings/sys_string_conversions.h"
#include "shell/browser/native_window.h"
#include "skia/ext/skia_utils_mac.h"
@@ -94,14 +95,14 @@ NSAlert* CreateNSAlert(const MessageBoxSettings& settings) {
} // namespace
int ShowMessageBoxSync(const MessageBoxSettings& settings) {
NSAlert* alert = CreateNSAlert(settings);
base::scoped_nsobject<NSAlert> alert(CreateNSAlert(settings));
// Use runModal for synchronous alert without parent, since we don't have a
// window to wait for. Also use it when window is provided but it is not
// shown as it would be impossible to dismiss the alert if it is connected
// to invisible window (see #22671).
if (!settings.parent_window || !settings.parent_window->IsVisible())
return [[alert autorelease] runModal];
return [alert runModal];
__block int ret_code = -1;
@@ -140,6 +141,7 @@ void ShowMessageBox(const MessageBoxSettings& settings,
completionHandler:^(NSModalResponse response) {
std::move(callback_).Run(
response, alert.suppressionButton.state == NSOnState);
[alert release];
}];
}
}