### 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.

### Problem Description
Today, it's not possible to receive contextual data from notifications originating from sandboxed macOS apps.

This is because Electron's `systemPreferences.subscribeNotification` accepts a callback that receives the `event` and `userInfo` properties from the macOS notification but **not** the `object` property. This is problematic because sandboxed apps cannot use the `userInfo` property, and can only transmit contextual data via the `object` of a notification. [Apple's docs](https://developer.apple.com/documentation/foundation/nsdistributednotificationcenter/1418360-postnotificationname?language=objc) clearly note this restriction.

As such, Electron cannot read contextual data sent from notifications that originate from sandboxed apps. So, for example, a Finder extension can notify an Electron app that *some* file has been right-clicked, but **cannot** indicate *which file* has been right-clicked.

### Proposed Solution
I'm proposing a change similar to #5582, which enhanced `systemPreferences.subscribeNotification` to pass the `userInfo` from the macOS notification to the callback. Here, we need to further enhance `systemPreferences.subscribeNotification` to also pass the `object` from the macOS notification.

To preserve backwards-compatibility, the callback should accept the new `object` argument as its third parameter. As such, the new version of the documentation [here](https://electronjs.org/docs/api/system-preferences#systempreferencessubscribenotificationevent-callback-macos) would read:

```diff
systemPreferences.subscribeNotification(event, callback) [macOS]

* event String
* callback Function
    * event String
    * userInfo Object
+   * object String

Returns Number - The ID of this subscription

Subscribes to native notifications of macOS, callback will be called with `callback(event, userInfo)` when the corresponding event happens. The `userInfo` is an Object that contains the user information dictionary sent along with the notification.
+The `object` is a String that contains additional data sent along with the notification.
```

### Alternatives Considered
I think the only reasonable alternative is to update the documentation [here](https://electronjs.org/docs/api/system-preferences#systempreferencessubscribenotificationevent-callback-macos) to note that sandbox apps cannot send any contextual data to Electron apps.

### Additional Information
There is a precedent for this kind of change in Electron. See #5543 which was fixed under #5582.

For macOS developers running into this issue, a possible workaround is to have your sandboxed app communicate with a non-sandboxed app and then relay notifications on to your Electron app. The sandbox to non-sandbox communication must use `object` to hold contextual data, and the non-sandbox to Electron communication must use `userInfo` to hold contextual data. (However, AFAIK, using a non-sandboxed app prevents publishing your app in the Mac App Store).

shell/browser/api/atom_api_system_preferences.h
}
namespace electron {
namespace api {
#if defined(OS_MACOSX)
enum NotificationCenterKind {
  kNSDistributedNotificationCenter = 0,
  kNSNotificationCenter,
  kNSWorkspaceNotificationCenter,
};
#endif
class SystemPreferences : public mate::EventEmitter<SystemPreferences>
#if defined(OS_WIN)
    ,
                          public BrowserObserver,
                          public gfx::SysColorChangeListener
#endif
{
 public:
  static mate::Handle<SystemPreferences> Create(v8::Isolate* isolate);
  static void BuildPrototype(v8::Isolate* isolate,
                             v8::Local<v8::FunctionTemplate> prototype);
#if defined(OS_WIN) || defined(OS_MACOSX)
  std::string GetAccentColor();
  std::string GetColor(const std::string& color, mate::Arguments* args);
#endif
#if defined(OS_WIN)
  bool IsAeroGlassEnabled();
  void InitializeWindow();