Browse Source

fix: tray garbage collection (#33075)

Co-authored-by: Shelley Vohr <[email protected]>
trop[bot] 3 years ago
parent
commit
8608b785db
2 changed files with 7 additions and 2 deletions
  1. 5 2
      shell/browser/api/electron_api_tray.cc
  2. 2 0
      shell/browser/api/electron_api_tray.h

+ 5 - 2
shell/browser/api/electron_api_tray.cc

@@ -89,8 +89,10 @@ gin::Handle<Tray> Tray::New(gin_helper::ErrorThrower thrower,
   }
 #endif
 
-  return gin::CreateHandle(thrower.isolate(),
-                           new Tray(args->isolate(), image, guid));
+  auto handle = gin::CreateHandle(args->isolate(),
+                                  new Tray(args->isolate(), image, guid));
+  handle->Pin(args->isolate());
+  return handle;
 }
 
 void Tray::OnClicked(const gfx::Rect& bounds,
@@ -180,6 +182,7 @@ void Tray::OnDragEnded() {
 }
 
 void Tray::Destroy() {
+  Unpin();
   menu_.Reset();
   tray_icon_.reset();
 }

+ 2 - 0
shell/browser/api/electron_api_tray.h

@@ -19,6 +19,7 @@
 #include "shell/common/gin_helper/cleaned_up_at_exit.h"
 #include "shell/common/gin_helper/constructible.h"
 #include "shell/common/gin_helper/error_thrower.h"
+#include "shell/common/gin_helper/pinnable.h"
 
 namespace gfx {
 class Image;
@@ -38,6 +39,7 @@ class Tray : public gin::Wrappable<Tray>,
              public gin_helper::EventEmitterMixin<Tray>,
              public gin_helper::Constructible<Tray>,
              public gin_helper::CleanedUpAtExit,
+             public gin_helper::Pinnable<Tray>,
              public TrayIconObserver {
  public:
   // gin_helper::Constructible