### Preflight Checklist

* [x] I have read the [Contributing Guidelines](https://github.com/electron/electron/blob/master/CONTRIBUTING.md) for this project.
* [x] I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/master/CODE_OF_CONDUCT.md) that this project adheres to.
* [x] I have searched the issue tracker for a feature request that matches the one I want to file, ~~without success~~.

> This was previously requested in #4384, but that issue was closed for reasons that seem to relate to making context menus appear on mouse-down (which is not what I'm requesting here), and it also is a few years old so I'm hoping this might now be a valid time to request it again.

### Problem Description

There are no `mouse-down` and `mouse-up` events on the Tray icon API.

It has a handful of mouse events (`mouse-enter`, `mouse-leave`, `mouse-move`, and `click`, as well as various `drag-*` events), but `mouse-down` and `mouse-up` are missing. This makes it impossible to implement certain UI patterns that other, non-Electron apps use regularly.

### Proposed Solution

Add `mouse-down` and `mouse-up` events. (At least for macOS.)

### Alternatives Considered

None.

### Additional Information

I think these events should be added for the sake of completeness. Other non-Electron Mac menubar apps make use of these events, so Electron apps should be able to do this too.

Here's a couple of specific use cases:

- Updating/animating the tray icon with a new image for an 'active' state (while the mouse button is pressed).
- Showing an application window on `mouse-down`. Other Mac menubar apps such as Dropbox and 1Password do exactly this, and it makes a real difference to perceived performance.
  - This is particularly important for menubar apps that show an ephemeral, menu-like window when activated – when a native context menu isn't flexible enough for the desired GUI, but you still want it to feel like an ephemeral pop-out menu, i.e. it should appear instantly on mousedown, positioned as if emerging from the menubar icon itself, and disappear when it loses focus. This UI pattern feels really laggy when implemented with a click event.
- An app that lets the user enable some temporary state while they hold their mouse button down on a menubar icon, such as enabling microphone input briefly, or muting an audio track briefly. Currently this pattern is impossible with Electron.
shell/browser/api/atom_api_tray.h
void OnDragEntered() override;
  void OnDragExited() override;
  void OnDragEnded() override;
  void OnMouseEntered(const gfx::Point& location, int modifiers) override;
  void OnMouseExited(const gfx::Point& location, int modifiers) override;
  void OnMouseMoved(const gfx::Point& location, int modifiers) override;
  void SetImage(v8::Isolate* isolate, gin::Handle<NativeImage> image);
  void SetPressedImage(v8::Isolate* isolate, gin::Handle<NativeImage> image);
  void SetToolTip(const std::string& tool_tip);
  void SetTitle(const std::string& title);
  std::string GetTitle();
  void SetIgnoreDoubleClickEvents(bool ignore);
  bool GetIgnoreDoubleClickEvents();
  void DisplayBalloon(gin_helper::ErrorThrower thrower,
                      const gin_helper::Dictionary& options);
  void RemoveBalloon();
  void Focus();
  void PopUpContextMenu(gin_helper::Arguments* args);
  void SetContextMenu(gin_helper::ErrorThrower thrower,
                      v8::Local<v8::Value> arg);
  gfx::Rect GetBounds();
 private:
  v8::Global<v8::Value> menu_;
  std::unique_ptr<TrayIcon> tray_icon_;
  DISALLOW_COPY_AND_ASSIGN(Tray);
};
}  
}  
#endif