Skip to content

Commit 4d040f3

Browse files
authored
Merge 4aca0f2 into 9e204e7
2 parents 9e204e7 + 4aca0f2 commit 4d040f3

File tree

3 files changed

+46
-36
lines changed

3 files changed

+46
-36
lines changed

.changeset/tough-rings-bake.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'firebase': patch
3+
'@firebase/messaging': patch
4+
---
5+
6+
Added support for `onMessage` so the internal callback can work with [Subscriber](https://rxjs.dev/api/index/class/Subscriber)

packages/messaging/src/controllers/window-controller.test.ts

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,25 @@
1+
import '../testing/setup';
2+
3+
import * as tokenManagementModule from '../core/token-management';
4+
5+
import {
6+
CONSOLE_CAMPAIGN_ANALYTICS_ENABLED,
7+
CONSOLE_CAMPAIGN_ID,
8+
CONSOLE_CAMPAIGN_NAME,
9+
CONSOLE_CAMPAIGN_TIME,
10+
DEFAULT_SW_PATH,
11+
DEFAULT_SW_SCOPE,
12+
DEFAULT_VAPID_KEY
13+
} from '../util/constants';
14+
import { InternalMessage, MessageType } from '../interfaces/internal-message';
15+
import { SinonFakeTimers, SinonSpy, spy, stub, useFakeTimers } from 'sinon';
16+
import { Spy, Stub } from '../testing/sinon-types';
17+
18+
import { ErrorCode } from '../util/errors';
19+
import { FakeServiceWorkerRegistration } from '../testing/fakes/service-worker';
20+
import { FirebaseAnalyticsInternal } from '@firebase/analytics-interop-types';
21+
import { FirebaseInternalDependencies } from '../interfaces/internal-dependencies';
22+
import { WindowController } from './window-controller';
123
/**
224
* @license
325
* Copyright 2017 Google LLC
@@ -15,27 +37,7 @@
1537
* limitations under the License.
1638
*/
1739
import { expect } from 'chai';
18-
import { stub, spy, SinonSpy, useFakeTimers, SinonFakeTimers } from 'sinon';
19-
20-
import { FirebaseAnalyticsInternal } from '@firebase/analytics-interop-types';
21-
import { WindowController } from './window-controller';
2240
import { getFakeFirebaseDependencies } from '../testing/fakes/firebase-dependencies';
23-
import { ErrorCode } from '../util/errors';
24-
import { FirebaseInternalDependencies } from '../interfaces/internal-dependencies';
25-
import * as tokenManagementModule from '../core/token-management';
26-
import {
27-
DEFAULT_VAPID_KEY,
28-
DEFAULT_SW_SCOPE,
29-
DEFAULT_SW_PATH,
30-
CONSOLE_CAMPAIGN_ANALYTICS_ENABLED,
31-
CONSOLE_CAMPAIGN_ID,
32-
CONSOLE_CAMPAIGN_NAME,
33-
CONSOLE_CAMPAIGN_TIME
34-
} from '../util/constants';
35-
import { Stub, Spy } from '../testing/sinon-types';
36-
import '../testing/setup';
37-
import { FakeServiceWorkerRegistration } from '../testing/fakes/service-worker';
38-
import { MessageType, InternalMessage } from '../interfaces/internal-message';
3941

4042
type MessageEventListener = (event: Event) => Promise<void>;
4143

packages/messaging/src/controllers/window-controller.ts

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,30 +15,31 @@
1515
* limitations under the License.
1616
*/
1717

18-
import { getToken, deleteToken } from '../core/token-management';
19-
import { FirebaseInternalDependencies } from '../interfaces/internal-dependencies';
20-
import { FirebaseMessaging } from '@firebase/messaging-types';
21-
import { ERROR_FACTORY, ErrorCode } from '../util/errors';
22-
import { NextFn, Observer, Unsubscribe } from '@firebase/util';
23-
import { InternalMessage, MessageType } from '../interfaces/internal-message';
2418
import {
25-
CONSOLE_CAMPAIGN_ID,
2619
CONSOLE_CAMPAIGN_ANALYTICS_ENABLED,
20+
CONSOLE_CAMPAIGN_ID,
2721
CONSOLE_CAMPAIGN_NAME,
2822
CONSOLE_CAMPAIGN_TIME,
2923
DEFAULT_SW_PATH,
3024
DEFAULT_SW_SCOPE,
3125
DEFAULT_VAPID_KEY
3226
} from '../util/constants';
33-
import { FirebaseApp } from '@firebase/app-types';
27+
import { ERROR_FACTORY, ErrorCode } from '../util/errors';
28+
import { InternalMessage, MessageType } from '../interfaces/internal-message';
29+
import { NextFn, Observer, Unsubscribe } from '@firebase/util';
30+
import { deleteToken, getToken } from '../core/token-management';
31+
3432
import { ConsoleMessageData } from '../interfaces/message-payload';
35-
import { isConsoleMessage } from '../helpers/is-console-message';
33+
import { FirebaseApp } from '@firebase/app-types';
34+
import { FirebaseInternalDependencies } from '../interfaces/internal-dependencies';
35+
import { FirebaseMessaging } from '@firebase/messaging-types';
3636
import { FirebaseService } from '@firebase/app-types/private';
37+
import { isConsoleMessage } from '../helpers/is-console-message';
3738

3839
export class WindowController implements FirebaseMessaging, FirebaseService {
3940
private vapidKey: string | null = null;
4041
private swRegistration?: ServiceWorkerRegistration;
41-
private onMessageCallback: NextFn<object> | null = null;
42+
private onMessageCallback: NextFn<object> | Observer<object> | null = null;
4243

4344
constructor(
4445
private readonly firebaseDependencies: FirebaseInternalDependencies
@@ -131,12 +132,8 @@ export class WindowController implements FirebaseMessaging, FirebaseService {
131132
* message.
132133
* @return The unsubscribe function for the observer.
133134
*/
134-
// TODO: Simplify this to only accept a function and not an Observer.
135135
onMessage(nextOrObserver: NextFn<object> | Observer<object>): Unsubscribe {
136-
this.onMessageCallback =
137-
typeof nextOrObserver === 'function'
138-
? nextOrObserver
139-
: nextOrObserver.next;
136+
this.onMessageCallback = nextOrObserver;
140137

141138
return () => {
142139
this.onMessageCallback = null;
@@ -193,8 +190,13 @@ export class WindowController implements FirebaseMessaging, FirebaseService {
193190

194191
const { type, payload } = (event.data as InternalMessage).firebaseMessaging;
195192

193+
// onMessageCallback is either a function or observer/subscriber.
196194
if (this.onMessageCallback && type === MessageType.PUSH_RECEIVED) {
197-
this.onMessageCallback(payload);
195+
if (typeof this.onMessageCallback === 'function') {
196+
this.onMessageCallback(payload);
197+
} else {
198+
this.onMessageCallback.next(payload);
199+
}
198200
}
199201

200202
const { data } = payload;

0 commit comments

Comments
 (0)