Skip to content

Commit dac1757

Browse files
author
Michael Lehenbauer
authored
Fix for #1491: Disable use of $httpHeaders in browser extensions too. (#2534)
1 parent 00e77c1 commit dac1757

File tree

3 files changed

+36
-2
lines changed

3 files changed

+36
-2
lines changed

packages/firestore/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
# Unreleased
2+
- [fixed] Fixed an issue where auth credentials were not respected in some
3+
Firefox or Chrome extensions. (#1491)
4+
5+
# 1.9.2
26
- [fixed] Fixed an issue where auth credentials were not respected in certain
37
browser environments (Electron 7, IE11 in trusted zone, UWP apps). (#1491)
48

packages/firestore/src/platform_browser/webchannel_connection.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,13 @@ import {
2525
XhrIo
2626
} from '@firebase/webchannel-wrapper';
2727

28-
import { isElectron, isIE, isReactNative, isUWP } from '@firebase/util';
28+
import {
29+
isBrowserExtension,
30+
isElectron,
31+
isIE,
32+
isReactNative,
33+
isUWP
34+
} from '@firebase/util';
2935

3036
import { Token } from '../api/credentials';
3137
import { DatabaseId, DatabaseInfo } from '../core/database_info';
@@ -268,7 +274,13 @@ export class WebChannelConnection implements Connection {
268274
// doesn't have an Origin header. So we have to exclude a few browser environments that are
269275
// known to (sometimes) not include an Origin. See
270276
// https://github.com/firebase/firebase-js-sdk/issues/1491.
271-
if (!isReactNative() && !isElectron() && !isIE() && !isUWP()) {
277+
if (
278+
!isReactNative() &&
279+
!isElectron() &&
280+
!isIE() &&
281+
!isUWP() &&
282+
!isBrowserExtension()
283+
) {
272284
request.httpHeadersOverwriteParam = '$httpHeaders';
273285
}
274286

packages/util/src/environment.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,24 @@ export function isBrowser(): boolean {
7272
return typeof self === 'object' && self.self === self;
7373
}
7474

75+
/**
76+
* Detect browser extensions (Chrome and Firefox at least).
77+
*/
78+
interface BrowserRuntime {
79+
id?: unknown;
80+
}
81+
declare const chrome: { runtime?: BrowserRuntime };
82+
declare const browser: { runtime?: BrowserRuntime };
83+
export function isBrowserExtension(): boolean {
84+
const runtime =
85+
typeof chrome === 'object'
86+
? chrome.runtime
87+
: typeof browser === 'object'
88+
? browser.runtime
89+
: undefined;
90+
return typeof runtime === 'object' && runtime.id !== undefined;
91+
}
92+
7593
/**
7694
* Detect React Native.
7795
*

0 commit comments

Comments
 (0)