Skip to content

Commit b835b4c

Browse files
authored
isSupported fixes (#5506)
* isSupported fixes * Changesets * firebase/util changelog * indexedDb check was bad on AppCheck, dry up * Changelog, fix in compat too * Check for window on messaging-compat * Missed a messaging cookie use, split changelog a bit
1 parent 4d2a54f commit b835b4c

File tree

10 files changed

+53
-24
lines changed

10 files changed

+53
-24
lines changed

.changeset/angry-moons-change.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@firebase/app-check': patch
3+
'@firebase/app-check-compat': patch
4+
---
5+
6+
AppCheck could encounter runtime errors when initialized in Node

.changeset/lazy-bulldogs-tickle.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@firebase/performance': patch
3+
'@firebase/performance-compat': patch
4+
---
5+
6+
Performance could encounter runtime errors when initialized in certain environments

.changeset/ninety-lions-report.md

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
'@firebase/messaging': patch
3+
'@firebase/analytics': patch
4+
'@firebase/messaging-compat': patch
5+
'@firebase/analytics-compat': patch
6+
---
7+
8+
checking isSupported led to runtime errors in certain environments

.changeset/sixty-flowers-melt.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@firebase/util': patch
3+
---
4+
5+
areCookiesEnabled could encounter runtime errors in certain enviornments

packages/firestore/src/local/simple_db.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* limitations under the License.
1616
*/
1717

18-
import { getUA } from '@firebase/util';
18+
import { getUA, isIndexedDBAvailable } from '@firebase/util';
1919

2020
import { debugAssert } from '../util/assert';
2121
import { Code, FirestoreError } from '../util/error';
@@ -158,7 +158,7 @@ export class SimpleDb {
158158

159159
/** Returns true if IndexedDB is available in the current environment. */
160160
static isAvailable(): boolean {
161-
if (typeof indexedDB === 'undefined') {
161+
if (!isIndexedDBAvailable()) {
162162
return false;
163163
}
164164

packages/firestore/test/integration/util/helpers.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717

1818
import * as firestore from '@firebase/firestore-types';
19+
import { isIndexedDBAvailable } from '@firebase/util';
1920

2021
import * as firebaseExport from './firebase_export';
2122
import {
@@ -44,7 +45,7 @@ function isIeOrEdge(): boolean {
4445
export function isPersistenceAvailable(): boolean {
4546
return (
4647
typeof window === 'object' &&
47-
typeof window.indexedDB === 'object' &&
48+
isIndexedDBAvailable() &&
4849
!isIeOrEdge() &&
4950
(typeof process === 'undefined' ||
5051
process.env?.INCLUDE_FIRESTORE_PERSISTENCE !== 'false')

packages/messaging-compat/src/messaging-compat.ts

+11-6
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,13 @@ import {
2626
getToken,
2727
onMessage
2828
} from '@firebase/messaging';
29-
import { NextFn, Observer, Unsubscribe } from '@firebase/util';
29+
import {
30+
areCookiesEnabled,
31+
isIndexedDBAvailable,
32+
NextFn,
33+
Observer,
34+
Unsubscribe
35+
} from '@firebase/util';
3036

3137
import { onBackgroundMessage } from '@firebase/messaging/sw';
3238

@@ -62,9 +68,9 @@ export function isSupported(): boolean {
6268
*/
6369
function isWindowSupported(): boolean {
6470
return (
65-
'indexedDB' in window &&
66-
indexedDB !== null &&
67-
navigator.cookieEnabled &&
71+
typeof window !== 'undefined' &&
72+
isIndexedDBAvailable() &&
73+
areCookiesEnabled() &&
6874
'serviceWorker' in navigator &&
6975
'PushManager' in window &&
7076
'Notification' in window &&
@@ -79,8 +85,7 @@ function isWindowSupported(): boolean {
7985
*/
8086
function isSwSupported(): boolean {
8187
return (
82-
'indexedDB' in self &&
83-
indexedDB !== null &&
88+
isIndexedDBAvailable() &&
8489
'PushManager' in self &&
8590
'Notification' in self &&
8691
ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&

packages/messaging/src/api/isSupported.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@
1515
* limitations under the License.
1616
*/
1717

18-
import { validateIndexedDBOpenable } from '@firebase/util';
18+
import {
19+
areCookiesEnabled,
20+
isIndexedDBAvailable,
21+
validateIndexedDBOpenable
22+
} from '@firebase/util';
1923

2024
/**
2125
* Checks if all required APIs exist in the browser.
@@ -28,10 +32,10 @@ export async function isWindowSupported(): Promise<boolean> {
2832
// might be prohibited to run. In these contexts, an error would be thrown during the messaging
2933
// instantiating phase, informing the developers to import/call isSupported for special handling.
3034
return (
35+
typeof window !== 'undefined' &&
36+
isIndexedDBAvailable() &&
3137
(await validateIndexedDBOpenable()) &&
32-
'indexedDB' in window &&
33-
indexedDB !== null &&
34-
navigator.cookieEnabled &&
38+
areCookiesEnabled() &&
3539
'serviceWorker' in navigator &&
3640
'PushManager' in window &&
3741
'Notification' in window &&
@@ -52,9 +56,8 @@ export async function isSwSupported(): Promise<boolean> {
5256
// might be prohibited to run. In these contexts, an error would be thrown during the messaging
5357
// instantiating phase, informing the developers to import/call isSupported for special handling.
5458
return (
59+
isIndexedDBAvailable() &&
5560
(await validateIndexedDBOpenable()) &&
56-
'indexedDB' in self &&
57-
indexedDB !== null &&
5861
'PushManager' in self &&
5962
'Notification' in self &&
6063
ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&

packages/performance/src/services/api_service.ts

+2-7
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717

1818
import { ERROR_FACTORY, ErrorCode } from '../utils/errors';
19-
import { isIndexedDBAvailable } from '@firebase/util';
19+
import { isIndexedDBAvailable, areCookiesEnabled } from '@firebase/util';
2020
import { consoleLogger } from '../utils/console_logger';
2121

2222
declare global {
@@ -112,12 +112,7 @@ export class Api {
112112
}
113113

114114
requiredApisAvailable(): boolean {
115-
if (
116-
!fetch ||
117-
!Promise ||
118-
!this.navigator ||
119-
!this.navigator.cookieEnabled
120-
) {
115+
if (!fetch || !Promise || !areCookiesEnabled()) {
121116
consoleLogger.info(
122117
'Firebase Performance cannot start if browser does not support fetch and Promise or cookie is disabled.'
123118
);

packages/util/src/environment.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ export function isSafari(): boolean {
140140
* @return true if indexedDB is supported by current browser/service worker context
141141
*/
142142
export function isIndexedDBAvailable(): boolean {
143-
return 'indexedDB' in self && indexedDB != null;
143+
return typeof indexedDB === 'object';
144144
}
145145

146146
/**
@@ -184,7 +184,7 @@ export function validateIndexedDBOpenable(): Promise<boolean> {
184184
* @return true if cookie is enabled within current browser
185185
*/
186186
export function areCookiesEnabled(): boolean {
187-
if (!navigator || !navigator.cookieEnabled) {
187+
if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {
188188
return false;
189189
}
190190
return true;

0 commit comments

Comments
 (0)