This commit exposes the Permissions API to DOM Workers. It achieves this goal
by introducing a thread-safe bridge between `PermissionStatus` and the
`PermissionObserver`: the `PermissionStatusSink` object.
Actors:
- The `PermissionObserver` is a main-thread-only singleton that monitors
permission change events and propagates the notification to the right sink
objects.
- The `PermissionStatus` is the DOM object exposed to the global. It's not
thread-safe.
- The `PermissionStatusSink` is the new bridge introduced by this commit.
The `PermissionStatusSink` lifetime:
- This object is kept alive on the current thread by the `PermissionStatus` and
on the main thread by the `PermissionObserver`.
- The `PermissionStatus` creates the object on its creation thread. When
`PermissionStatus` object is released (or disconnected from the owner, it
disentangles itself from the `PermissionStatusSink`. The disentangle
operation triggers the un-registration procedure from the
`PermissionObserver` on the main thread.
- A weak `WorkerRef` is used to monitor the worker's lifetime.
Permission change notification:
- When the `PermissionObserver` is notified for a permission-change event, it
notifies all the `PermissionStatusSink`. This happens on the main thread (see
`MaybeUpdatedByOnMainThread` and `MaybeUpdatedByNotifyOnlyOnMainThread`).
- Using `MozPromise`, the `PermissionStatusSink` computes the permission action
(`PermissionChangedOnMainThread`) on the main thread, then informs the
parent `PermissionStatus` object on its creation thread.
- The `PermissionStatus` object converts the action to the DOM
`PermissionState` and dispatches an event.
Differential Revision: https://phabricator.services.mozilla.com/D224594
This commit exposes the Permissions API to DOM Workers. It achieves this goal
by introducing a thread-safe bridge between `PermissionStatus` and the
`PermissionObserver`: the `PermissionStatusSink` object.
Actors:
- The `PermissionObserver` is a main-thread-only singleton that monitors
permission change events and propagates the notification to the right sink
objects.
- The `PermissionStatus` is the DOM object exposed to the global. It's not
thread-safe.
- The `PermissionStatusSink` is the new bridge introduced by this commit.
The `PermissionStatusSink` lifetime:
- This object is kept alive on the current thread by the `PermissionStatus` and
on the main thread by the `PermissionObserver`.
- The `PermissionStatus` creates the object on its creation thread. When
`PermissionStatus` object is released (or disconnected from the owner, it
disentangles itself from the `PermissionStatusSink`. The disentangle
operation triggers the un-registration procedure from the
`PermissionObserver` on the main thread.
- A weak `WorkerRef` is used to monitor the worker's lifetime.
Permission change notification:
- When the `PermissionObserver` is notified for a permission-change event, it
notifies all the `PermissionStatusSink`. This happens on the main thread (see
`MaybeUpdatedByOnMainThread` and `MaybeUpdatedByNotifyOnlyOnMainThread`).
- Using `MozPromise`, the `PermissionStatusSink` computes the permission action
(`PermissionChangedOnMainThread`) on the main thread, then informs the
parent `PermissionStatus` object on its creation thread.
- The `PermissionStatus` object converts the action to the DOM
`PermissionState` and dispatches an event.
Differential Revision: https://phabricator.services.mozilla.com/D224594
This commit exposes the Permissions API to DOM Workers. It achieves this goal
by introducing a thread-safe bridge between `PermissionStatus` and the
`PermissionObserver`: the `PermissionStatusSink` object.
Actors:
- The `PermissionObserver` is a main-thread-only singleton that monitors
permission change events and propagates the notification to the right sink
objects.
- The `PermissionStatus` is the DOM object exposed to the global. It's not
thread-safe.
- The `PermissionStatusSink` is the new bridge introduced by this commit.
The `PermissionStatusSink` lifetime:
- This object is kept alive on the current thread by the `PermissionStatus` and
on the main thread by the `PermissionObserver`.
- The `PermissionStatus` creates the object on its creation thread. When
`PermissionStatus` object is released (or disconnected from the owner, it
disentangles itself from the `PermissionStatusSink`. The disentangle
operation triggers the un-registration procedure from the
`PermissionObserver` on the main thread.
- A weak `WorkerRef` is used to monitor the worker's lifetime.
Permission change notification:
- When the `PermissionObserver` is notified for a permission-change event, it
notifies all the `PermissionStatusSink`. This happens on the main thread (see
`MaybeUpdatedByOnMainThread` and `MaybeUpdatedByNotifyOnlyOnMainThread`).
- Using `MozPromise`, the `PermissionStatusSink` computes the permission action
(`PermissionChangedOnMainThread`) on the main thread, then informs the
parent `PermissionStatus` object on its creation thread.
- The `PermissionStatus` object converts the action to the DOM
`PermissionState` and dispatches an event.
Differential Revision: https://phabricator.services.mozilla.com/D224594
- Renames deleteDataFromBaseDomain to deleteDataFromSite.
- Cleans up terminology for (schemeless site) to better align with standards.
- deleteDataFromSite requires a schemeless site to be passed in. We will no longer
implicitly convert the host to a site.
- Removes the host fallback for SiteDataManager and ForgetAboutSite. The new schemeless site
helper Services.eTLD.getSchemelessSiteFromHost accounts for this.
Differential Revision: https://phabricator.services.mozilla.com/D220605
- Renames deleteDataFromBaseDomain to deleteDataFromSite.
- Cleans up terminology for (schemeless site) to better align with standards.
- deleteDataFromSite requires a schemeless site to be passed in. We will no longer
implicitly convert the host to a site.
- Removes the host fallback for SiteDataManager and ForgetAboutSite. The new schemeless site
helper Services.eTLD.getSchemelessSiteFromHost accounts for this.
Differential Revision: https://phabricator.services.mozilla.com/D220605
- Renames deleteDataFromBaseDomain to deleteDataFromSite.
- Cleans up terminology for (schemeless site) to better align with standards.
- deleteDataFromSite requires a schemeless site to be passed in. We will no longer
implicitly convert the host to a site.
- Removes the host fallback for SiteDataManager and ForgetAboutSite. The new schemeless site
helper Services.eTLD.getSchemelessSiteFromHost accounts for this.
Differential Revision: https://phabricator.services.mozilla.com/D220605
- Renames deleteDataFromBaseDomain to deleteDataFromSite.
- Cleans up terminology for (schemeless site) to better align with standards.
- deleteDataFromSite requires a schemeless site to be passed in. We will no longer
implicitly convert the host to a site.
- Removes the host fallback for SiteDataManager and ForgetAboutSite. The new schemeless site
helper Services.eTLD.getSchemelessSiteFromHost accounts for this.
Differential Revision: https://phabricator.services.mozilla.com/D220605