Skip to content

Commit 5d819bd

Browse files
Fix experimentalAutoDetectForceLongPolling and add logging
1 parent 6a154eb commit 5d819bd

File tree

6 files changed

+94
-41
lines changed

6 files changed

+94
-41
lines changed

packages/firestore/src/platform/browser/webchannel_connection.ts

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ import {
2222
WebChannel,
2323
WebChannelError,
2424
WebChannelOptions,
25-
XhrIo
25+
XhrIo,
26+
getStatEventTarget,
27+
EventTarget,
28+
StatEvent,
29+
Event,
30+
Stat
2631
} from '@firebase/webchannel-wrapper';
2732

2833
import {
@@ -164,6 +169,7 @@ export class WebChannelConnection extends RestConnection {
164169
'/channel'
165170
];
166171
const webchannelTransport = createWebChannelTransport();
172+
const requestStats = getStatEventTarget();
167173
const request: WebChannelOptions = {
168174
// Required for backend stickiness, routing behavior is based on this
169175
// parameter.
@@ -257,12 +263,13 @@ export class WebChannelConnection extends RestConnection {
257263
// Note that eventually this function could go away if we are confident
258264
// enough the code is exception free.
259265
const unguardedEventListen = <T>(
260-
type: string,
266+
target: EventTarget,
267+
type: string | number,
261268
fn: (param?: T) => void
262269
): void => {
263270
// TODO(dimond): closure typing seems broken because WebChannel does
264271
// not implement goog.events.Listenable
265-
channel.listen(type, (param: unknown) => {
272+
target.listen(type, (param: unknown) => {
266273
try {
267274
fn(param as T);
268275
} catch (e) {
@@ -273,21 +280,21 @@ export class WebChannelConnection extends RestConnection {
273280
});
274281
};
275282

276-
unguardedEventListen(WebChannel.EventType.OPEN, () => {
283+
unguardedEventListen(channel, WebChannel.EventType.OPEN, () => {
277284
if (!closed) {
278285
logDebug(LOG_TAG, 'WebChannel transport opened.');
279286
}
280287
});
281288

282-
unguardedEventListen(WebChannel.EventType.CLOSE, () => {
289+
unguardedEventListen(channel, WebChannel.EventType.CLOSE, () => {
283290
if (!closed) {
284291
closed = true;
285292
logDebug(LOG_TAG, 'WebChannel transport closed');
286293
streamBridge.callOnClose();
287294
}
288295
});
289296

290-
unguardedEventListen<Error>(WebChannel.EventType.ERROR, err => {
297+
unguardedEventListen<Error>(channel, WebChannel.EventType.ERROR, err => {
291298
if (!closed) {
292299
closed = true;
293300
logWarn(LOG_TAG, 'WebChannel transport errored:', err);
@@ -308,6 +315,7 @@ export class WebChannelConnection extends RestConnection {
308315
}
309316

310317
unguardedEventListen<WebChannelResponse>(
318+
channel,
311319
WebChannel.EventType.MESSAGE,
312320
msg => {
313321
if (!closed) {
@@ -348,6 +356,16 @@ export class WebChannelConnection extends RestConnection {
348356
}
349357
);
350358

359+
unguardedEventListen<StatEvent>(requestStats, Event.STAT_EVENT, event => {
360+
if (!event) return;
361+
362+
if (event.stat == Stat.PROXY) {
363+
logDebug(LOG_TAG, 'Detected buffering proxy');
364+
} else if (event.stat == Stat.NOPROXY) {
365+
logDebug(LOG_TAG, 'Detected no buffering proxy');
366+
}
367+
});
368+
351369
setTimeout(() => {
352370
// Technically we could/should wait for the WebChannel opened event,
353371
// but because we want to send the first message with the WebChannel

packages/webchannel-wrapper/externs/overrides.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,16 @@ goog.net.WebChannel.Options.internalChannelParams;
6464

6565
/** @type {boolean|undefined} */
6666
goog.net.WebChannel.Options.forceLongPolling;
67+
68+
/** @type {boolean|undefined} */
69+
goog.net.WebChannel.Options.detectBufferingProxy;
70+
71+
goog.labs.net.webChannel.requestStats.Event = {};
72+
goog.labs.net.webChannel.requestStats.Event.STAT_EVENT;
73+
74+
goog.labs.net.webChannel.requestStats.StatEvent = {};
75+
goog.labs.net.webChannel.requestStats.StatEvent.stat;
76+
77+
goog.labs.net.webChannel.requestStats.Stat = {};
78+
goog.labs.net.webChannel.requestStats.Stat.PROXY;
79+
goog.labs.net.webChannel.requestStats.Stat.NOPROXY;

packages/webchannel-wrapper/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
},
1717
"license": "Apache-2.0",
1818
"devDependencies": {
19-
"google-closure-compiler": "20200628.0.0",
20-
"google-closure-library": "20200830.0.0",
19+
"google-closure-compiler": "20201102.0.1",
20+
"google-closure-library": "20201006.0.0",
2121
"gulp": "4.0.2",
2222
"gulp-sourcemaps": "2.6.5",
2323
"rollup": "2.33.1",

packages/webchannel-wrapper/src/index.d.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,15 @@ export namespace WebChannel {
3131
};
3232
}
3333

34+
export var Event: {
35+
STAT_EVENT: string;
36+
};
37+
38+
export var Stat: {
39+
PROXY: number;
40+
NOPROXY: number;
41+
};
42+
3443
export var ErrorCode: {
3544
NO_ERROR: number;
3645
HTTP_ERROR: number;
@@ -100,15 +109,24 @@ export interface WebChannelOptions {
100109
requestRefreshThresholds?: { [key: string]: number };
101110
}
102111

103-
export interface WebChannel {
112+
export interface EventTarget {
113+
listen(type: string | number, cb: (param: unknown) => void): void;
114+
}
115+
116+
export interface WebChannel extends EventTarget {
104117
open(): void;
105118
close(): void;
106-
listen(type: string, cb: (param: unknown) => void): void;
107119
send(msg: unknown): void;
108120
}
109121

122+
export interface StatEvent {
123+
stat: number;
124+
}
125+
110126
export interface WebChannelTransport {
111127
createWebChannel(url: string, options: WebChannelOptions): WebChannel;
112128
}
113129

114130
export function createWebChannelTransport(): WebChannelTransport;
131+
132+
export function getStatEventTarget(): EventTarget;

packages/webchannel-wrapper/src/index.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ goog.provide('firebase.webchannel.wrapper');
2323

2424
// goog.net.WebChannelTransport
2525
goog.require('goog.net.createWebChannelTransport');
26+
goog.require('goog.labs.net.webChannel.requestStats');
2627
goog.require('goog.labs.net.webChannel.WebChannelBaseTransport');
28+
2729
/**
2830
* NOTE: The `createWebChannel` function takes an options object as a second param
2931
* whose properties are typically mangled. We override these in externs/overrides.js
@@ -60,7 +62,6 @@ goog.net.WebChannel.EventType['MESSAGE'] =
6062
goog.events.EventTarget.prototype['listen'] =
6163
goog.events.EventTarget.prototype.listen;
6264

63-
// goog.net.XhrIo
6465
goog.require('goog.net.XhrIo');
6566
goog.net.XhrIo.prototype['listenOnce'] = goog.net.XhrIo.prototype.listenOnce;
6667
goog.net.XhrIo.prototype['getLastError'] =
@@ -76,7 +77,11 @@ goog.net.XhrIo.prototype['send'] = goog.net.XhrIo.prototype.send;
7677

7778
module['exports']['createWebChannelTransport'] =
7879
goog.net.createWebChannelTransport;
80+
module['exports']['getStatEventTarget'] =
81+
goog.labs.net.webChannel.requestStats.getStatEventTarget;
7982
module['exports']['ErrorCode'] = goog.net.ErrorCode;
8083
module['exports']['EventType'] = goog.net.EventType;
84+
module['exports']['Event'] = goog.labs.net.webChannel.requestStats.Event;
85+
module['exports']['Stat'] = goog.labs.net.webChannel.requestStats.Stat;
8186
module['exports']['WebChannel'] = goog.net.WebChannel;
8287
module['exports']['XhrIo'] = goog.net.XhrIo;

yarn.lock

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8111,50 +8111,45 @@ google-closure-compiler-java@^20200112.0.0:
81118111
resolved "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20200112.0.0.tgz#2b99f5e2869a573a1b35558ff3b6e6bc054a116f"
81128112
integrity sha512-h/ExDCXAw88nOniQSbbK6et31kOwmaDxl6t52dnETCIzituQtGToPzy21vUel1o8o+FvWUybLoap+dEYBam1pA==
81138113

8114-
google-closure-compiler-java@^20200628.0.0:
8115-
version "20200628.0.0"
8116-
resolved "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20200628.0.0.tgz#cb9138001acd7fb6195b1d0c2d3c6205a85389d1"
8117-
integrity sha512-ikQEHiuaRR8d3w4QWsJqC2baDfoIyw/KqDW7LXyxbq6WpRiJ+ItTAtShVoqzQTyn3IXVL8viUMGb/AxkUv01RA==
8114+
google-closure-compiler-java@^20201102.0.1:
8115+
version "20201102.0.1"
8116+
resolved "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20201102.0.1.tgz#15fa3e0701ee1a756168fdaf3b53fe61425b1b64"
8117+
integrity sha512-pXJIlyqepHhih0HCbShkAZJyViIxdyd4V7MnCUZEXLIIlygw92e2dC+5XiONDQZgRlF93BPmWCy9jr7wYoW1hQ==
81188118

81198119
google-closure-compiler-js@^20200112.0.0:
81208120
version "20200112.0.0"
81218121
resolved "https://registry.npmjs.org/google-closure-compiler-js/-/google-closure-compiler-js-20200112.0.0.tgz#cb9fc1636671f3ce927e668e29db69b65cae6f2d"
81228122
integrity sha512-xW47rSuiRaql6q1YN7+b3FXIW74b1nCcENVwm9cigw1H5gWoBMBJOmpZiXnjMfmYC+MALjPQ8giMzvSeP+2X5A==
81238123

8124-
google-closure-compiler-js@^20200628.0.0:
8125-
version "20200628.0.0"
8126-
resolved "https://registry.npmjs.org/google-closure-compiler-js/-/google-closure-compiler-js-20200628.0.0.tgz#476d50d8b5155dd9d923a1394e0af76bcc8905ec"
8127-
integrity sha512-kGO/fvKDNOawBmzpWEzLW2EMb0ikTc0Y1hZEedLOex/cOm9zc5Cn8w2L0f963ydgFcj4fszzIgAtmZ9CRxqkfg==
8128-
81298124
google-closure-compiler-linux@^20200112.0.0:
81308125
version "20200112.0.0"
81318126
resolved "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20200112.0.0.tgz#e6c7943cc0114046dbe9fc685e4d7d4eb536c1dc"
81328127
integrity sha512-imTfdYP7BVTzzp3y7MuZP+98nEkbX7LZsZtxalNpl56vd+Ysc9/vOHXS14CdSoThaXIVlzX/lfjOlBRqPow+ew==
81338128

8134-
google-closure-compiler-linux@^20200628.0.0:
8135-
version "20200628.0.0"
8136-
resolved "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20200628.0.0.tgz#25de6807f13f066a0329384b39c605f5b03484f2"
8137-
integrity sha512-SSglqHEW+PtHCOXPwhZFxFzRVxXdvyunkfwP0y2FAO2b0xF6lRfrZSgs0/lgkwlcO2RHnJtIhU8y4bzYMn24QQ==
8129+
google-closure-compiler-linux@^20201102.0.1:
8130+
version "20201102.0.1"
8131+
resolved "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20201102.0.1.tgz#a66f18142866c5d3186d0d0c0809538d38f7b998"
8132+
integrity sha512-aRbyTGnQoFXchcpEFNrP1p/WIvYOgN3hYKI+MOHWkvwVJBY2P8gpb07hAigO8fj+QKD/SFCl+2pXP+JniWOEqw==
81388133

81398134
google-closure-compiler-osx@^20200112.0.0:
81408135
version "20200112.0.0"
81418136
resolved "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20200112.0.0.tgz#df7a22c0dc32702b47c8ac4521f79bbe439effad"
81428137
integrity sha512-E3S1KqZw4+Zov0VXCkjomPrYhyuuV6jH9InBchQ7cZfipFJjhQmSRf39u4Mu0sINW7GXfODZbzBwOXhEIquFQw==
81438138

8144-
google-closure-compiler-osx@^20200628.0.0:
8145-
version "20200628.0.0"
8146-
resolved "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20200628.0.0.tgz#d4e8c0a0cfea1fcf935f7af0db46cdcebeabe308"
8147-
integrity sha512-Ntd/kYqjYu7CScvne0yscZGqQV19y7BCu5PXxGtcs9G5KLe7Ep9RxPWznvFGZXky5vPc6Yq9p6E2uOhpA20cIg==
8139+
google-closure-compiler-osx@^20201102.0.1:
8140+
version "20201102.0.1"
8141+
resolved "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20201102.0.1.tgz#5099b29a7db553ded849e06cbbce194ecf9cd231"
8142+
integrity sha512-VguqEAOYI6XYZN6JcLMP8fpsoXk1Z9YuntMjv0IDVydkbZaHYOI4zE39FJhMuWiN7gOzSX2b/BBC6GsSh1F3fw==
81488143

81498144
google-closure-compiler-windows@^20200112.0.0:
81508145
version "20200112.0.0"
81518146
resolved "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20200112.0.0.tgz#8300d1e651f2c84ed565e729ccf40d6ed7e63771"
81528147
integrity sha512-+5+UJFKXH0LGnYEHSVJxWwhtvX/MI6uebkAQkhma0057QsKs8fOToWuHL8/UbJULB4WUPa3DlHy0+Izs5z6lCQ==
81538148

8154-
google-closure-compiler-windows@^20200628.0.0:
8155-
version "20200628.0.0"
8156-
resolved "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20200628.0.0.tgz#6b175fd2e432576c86575248b4634c8c58e738a3"
8157-
integrity sha512-Il4NIhzvemgEk2kC33tDj9HVpqXEU8SmS1f3AmkLMAUbSI5FdBBzTqjLRa8Y/ucEz4nTRqvpTvbOG3vhIVUUWw==
8149+
google-closure-compiler-windows@^20201102.0.1:
8150+
version "20201102.0.1"
8151+
resolved "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20201102.0.1.tgz#8b6c5c3f7050a738b71c59f9dd9863fb6cca282a"
8152+
integrity sha512-LlynipQi/iP76mjkOu6Rc1mCRuxTAhRvLjq10aGfVjKwpbCAF0Jq2a5k2ygr4xYiINNi2/L2qUw6ObPm9wQCOw==
81588153

81598154
81608155
version "20200112.0.0"
@@ -8172,27 +8167,31 @@ [email protected]:
81728167
google-closure-compiler-osx "^20200112.0.0"
81738168
google-closure-compiler-windows "^20200112.0.0"
81748169

8175-
google-closure-compiler@20200628.0.0:
8176-
version "20200628.0.0"
8177-
resolved "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20200628.0.0.tgz#939e8be9b27fb4504d051263ef0b96d75e444a57"
8178-
integrity sha512-ZMhFmlzNCWdL43UbTHzdFa4fgAfBR37TbAOKLSLUATT3RvCNu0AvX0rQBuJNzmI21ySsM9T3r5WXPBwiL0Hn4g==
8170+
google-closure-compiler@20201102.0.1:
8171+
version "20201102.0.1"
8172+
resolved "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20201102.0.1.tgz#372670b1b047969d12de663698593e31944ad1bf"
8173+
integrity sha512-Cz+1jOswH0MwMVPu1rRH1xD4KYuY5XW2ox5aXwqaAxevqmirhr36f8wgKPHuVRSovFejW640r6UFwyrOT6U0CA==
81798174
dependencies:
81808175
chalk "2.x"
8181-
google-closure-compiler-java "^20200628.0.0"
8182-
google-closure-compiler-js "^20200628.0.0"
8176+
google-closure-compiler-java "^20201102.0.1"
81838177
minimist "1.x"
81848178
vinyl "2.x"
81858179
vinyl-sourcemaps-apply "^0.2.0"
81868180
optionalDependencies:
8187-
google-closure-compiler-linux "^20200628.0.0"
8188-
google-closure-compiler-osx "^20200628.0.0"
8189-
google-closure-compiler-windows "^20200628.0.0"
8181+
google-closure-compiler-linux "^20201102.0.1"
8182+
google-closure-compiler-osx "^20201102.0.1"
8183+
google-closure-compiler-windows "^20201102.0.1"
81908184

81918185
81928186
version "20200830.0.0"
81938187
resolved "https://registry.npmjs.org/google-closure-library/-/google-closure-library-20200830.0.0.tgz#9f3807e5a4af55ebf2c8a22853d53b8da39a48e8"
81948188
integrity sha512-s4ma73K+FTeVywSMjVOxQ435t6kPfSlxEtIflq7Gabp2fxAnc9i8vUpvT8ZP/GH89LwSJReIaBGtrn72rfNC5Q==
81958189

8190+
8191+
version "20201006.0.0"
8192+
resolved "https://registry.npmjs.org/google-closure-library/-/google-closure-library-20201006.0.0.tgz#5b2f325309566a63b97e22e57c71263fa98f22b4"
8193+
integrity sha512-jYTKvUBUkTFCO+PJLcqJrh4BNMHlInzPYpijg8lty/HIF1rH+qutHchlFdiSNad8HBVKIlMf3UzXRPXvmujrIg==
8194+
81968195
google-gax@^1.14.2:
81978196
version "1.15.3"
81988197
resolved "https://registry.npmjs.org/google-gax/-/google-gax-1.15.3.tgz#e88cdcbbd19c7d88cc5fd7d7b932c4d1979a5aca"

0 commit comments

Comments
 (0)