Merge pull request #10944 from electron/fix-notification-ref-crash

Close the previous notification on multiple calls to show
This commit is contained in:
Samuel Attard 2017-10-28 12:33:30 +13:00 committed by GitHub
commit dc8b583363
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 0 deletions

View file

@ -175,8 +175,16 @@ void Notification::NotificationClosed() {
Emit("close");
}
void Notification::Close() {
if (notification_) {
notification_->Dismiss();
notification_.reset();
}
}
// Showing notifications
void Notification::Show() {
Close();
if (presenter_) {
notification_ = presenter_->CreateNotification(this);
if (notification_) {
@ -207,6 +215,7 @@ void Notification::BuildPrototype(v8::Isolate* isolate,
mate::ObjectTemplateBuilder(isolate, prototype->PrototypeTemplate())
.MakeDestroyable()
.SetMethod("show", &Notification::Show)
.SetMethod("close", &Notification::Close)
.SetProperty("title", &Notification::GetTitle, &Notification::SetTitle)
.SetProperty("subtitle", &Notification::GetSubtitle,
&Notification::SetSubtitle)

View file

@ -45,6 +45,7 @@ class Notification : public mate::TrackableObject<Notification>,
~Notification() override;
void Show();
void Close();
// Prop Getters
base::string16 GetTitle() const;

View file

@ -104,6 +104,13 @@ HTML5 Notification implementation, simply instantiating a `new Notification` doe
not immediately show it to the user, you need to call this method before the OS
will display it.
If the notification has been shown before, this method will dismiss the previously
shown notification and create a new one with identical properties.
#### `notification.close()`
Dismisses the notification.
### Playing Sounds
On macOS, you can specify the name of the sound you'd like to play when the