Bug 1925306 - Expand Push documentation in regard to GeckoView r=jonalmeida,jrconlin DONTBUILD
Differential Revision: https://phabricator.services.mozilla.com/D226024
This commit is contained in:
@@ -39,7 +39,9 @@ sequenceDiagram
|
|||||||
deactivate F
|
deactivate F
|
||||||
```
|
```
|
||||||
|
|
||||||
## Flow diagram for source code
|
## Firefox Desktop
|
||||||
|
|
||||||
|
### Flow diagram for source code
|
||||||
|
|
||||||
The source code for push is available under [`dom/push`](https://searchfox.org/mozilla-central/source/dom/push) in mozilla-central.
|
The source code for push is available under [`dom/push`](https://searchfox.org/mozilla-central/source/dom/push) in mozilla-central.
|
||||||
|
|
||||||
@@ -70,7 +72,7 @@ flowchart TD
|
|||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
## The Push Web Socket
|
### The Push Web Socket
|
||||||
Push in Firefox Desktop communicates with Autopush using a web socket connection.
|
Push in Firefox Desktop communicates with Autopush using a web socket connection.
|
||||||
|
|
||||||
The web socket connection is created as the browser initializes and is managed by the following state diagram.
|
The web socket connection is created as the browser initializes and is managed by the following state diagram.
|
||||||
@@ -99,7 +101,7 @@ Once the Push web socket is on the `Ready` state, it is ready to send new subscr
|
|||||||
Push uses an observer pattern to notify observers of any incoming push notifications. See the [high level architecture](#high-level-push-architecture) section.
|
Push uses an observer pattern to notify observers of any incoming push notifications. See the [high level architecture](#high-level-push-architecture) section.
|
||||||
|
|
||||||
|
|
||||||
## Push Storage
|
### Push Storage
|
||||||
Push uses IndexedDB to store subscriptions for the following reasons:
|
Push uses IndexedDB to store subscriptions for the following reasons:
|
||||||
1. In case the consumer attempts to re-subscribe, storage is used as a cache to serve the URL and the public key
|
1. In case the consumer attempts to re-subscribe, storage is used as a cache to serve the URL and the public key
|
||||||
1. In order to persist the private key, so that it can be used to decrypt any incoming push notifications
|
1. In order to persist the private key, so that it can be used to decrypt any incoming push notifications
|
||||||
@@ -116,3 +118,57 @@ erDiagram
|
|||||||
Object p256dhPrivateKey "Object representing the private key"
|
Object p256dhPrivateKey "Object representing the private key"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Firefox for Android
|
||||||
|
|
||||||
|
See also:
|
||||||
|
|
||||||
|
* [Rust Push Component](https://mozilla.github.io/application-services/book/rust-docs/push/index.html)
|
||||||
|
* [Push Service Bridge HTTP Interface](https://autopush.readthedocs.io/en/latest/http.html#push-service-bridge-http-interface)
|
||||||
|
* [Android Components: Push](https://github.com/mozilla/gecko-dev/blob/master/mobile/android/android-components/components/feature/push/README.md)
|
||||||
|
|
||||||
|
### Flow diagram for source code
|
||||||
|
|
||||||
|
The source code for push is available under the following paths in mozilla-central:
|
||||||
|
|
||||||
|
* [`dom/push/`](https://searchfox.org/mozilla-central/source/dom/push/)
|
||||||
|
* [`mobile/shared/components/geckoview/GeckoViewPush.sys.mjs`](mobile/shared/components/geckoview/GeckoViewPush.sys.mjs)
|
||||||
|
* [`mobile/android/geckoview/src/main/java/org/mozilla/geckoview/WebPush*.java`](https://searchfox.org/mozilla-central/source/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/)
|
||||||
|
* Under `mobile/android/android-components/components`:
|
||||||
|
* [`feature/push/src/main/java/mozilla/components/feature/push/`](https://searchfox.org/mozilla-central/source/mobile/android/android-components/components/feature/push/src/main/java/mozilla/components/feature/push/)
|
||||||
|
* [`browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/webpush/`](https://searchfox.org/mozilla-central/source/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/webpush/)
|
||||||
|
* [`concept/engine/src/main/java/mozilla/components/concept/engine/webpush`](https://searchfox.org/mozilla-central/source/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/webpush/)
|
||||||
|
* [Rust Push Component](https://github.com/mozilla/application-services/tree/main/components/push)
|
||||||
|
|
||||||
|
The following flow diagram describes how different modules interact with each other to provide the push API to consumers.
|
||||||
|
|
||||||
|
```{mermaid}
|
||||||
|
flowchart TD
|
||||||
|
subgraph Public API
|
||||||
|
|
||||||
|
W[Third party Web app]-->|imports| P[PushManager.webidl]
|
||||||
|
end
|
||||||
|
subgraph Browser Code
|
||||||
|
P-->|Implemented by| MM
|
||||||
|
MM{Main Thread?}-->|Yes| B[Push.sys.mjs]
|
||||||
|
MM -->|NO| A[PushManager.cpp]
|
||||||
|
B-->|subscribe,getSubscription| D[GeckoViewPush.sys.mjs]
|
||||||
|
A-->|subscribe,getSubscription| D
|
||||||
|
D-->|PushSubscribe,PushGetSubscription| WPC[WebPushController.java]
|
||||||
|
WPC-->|onSubscribe,onGetSubscription| WPEI[WebPushEngineIntegration.kt]
|
||||||
|
WPEI-->|subscribe,getSubscription| APF[AutoPushFeature.kt]
|
||||||
|
APF-->|start| PS[AbstractFirebasePushService.kt]
|
||||||
|
FCM[Firebase Cloud Messaging]-->|onNewToken| PS
|
||||||
|
PS-->|onNewToken| APF
|
||||||
|
APF-->|subscribe,getSubscription| PRS[push/src/lib.rs]
|
||||||
|
PRS-->|subscribe,get_subscription| PM[internal/push_manager.rs]
|
||||||
|
PM-->|Storage| S[internal/storage/db.rs]
|
||||||
|
PM-->|Network| N[internal/communications.rs]
|
||||||
|
end
|
||||||
|
subgraph Server
|
||||||
|
N-. bridge interface.-> O[Autopush]
|
||||||
|
end
|
||||||
|
subgraph Local Storage
|
||||||
|
S-->|Read,Write| SQL[(SQLite)]
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user