From 57c684a59c26468d0d4aa21735ed7cec0c44ab30 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 7 Dec 2021 14:12:26 -0800
Subject: [PATCH] [release/6.0] Use window.document for React-Native (#38598)

* Use window.document for React-Native

* fb

* update

* isReactNative

* fb

Co-authored-by: Brennan <brecon@microsoft.com>
---
 .../clients/ts/signalr/src/HttpConnection.ts        |  2 +-
 src/SignalR/clients/ts/signalr/src/HubConnection.ts | 10 +++-------
 src/SignalR/clients/ts/signalr/src/Utils.ts         | 13 +++++++++++--
 3 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/src/SignalR/clients/ts/signalr/src/HttpConnection.ts b/src/SignalR/clients/ts/signalr/src/HttpConnection.ts
index aef719f33a4..91dcd153677 100644
--- a/src/SignalR/clients/ts/signalr/src/HttpConnection.ts
+++ b/src/SignalR/clients/ts/signalr/src/HttpConnection.ts
@@ -533,7 +533,7 @@ export class HttpConnection implements IConnection {
             return url;
         }
 
-        if (!Platform.isBrowser || !window.document) {
+        if (!Platform.isBrowser) {
             throw new Error(`Cannot resolve '${url}'.`);
         }
 
diff --git a/src/SignalR/clients/ts/signalr/src/HubConnection.ts b/src/SignalR/clients/ts/signalr/src/HubConnection.ts
index cd8071de489..3f1363374c7 100644
--- a/src/SignalR/clients/ts/signalr/src/HubConnection.ts
+++ b/src/SignalR/clients/ts/signalr/src/HubConnection.ts
@@ -180,10 +180,8 @@ export class HubConnection {
             await this._startInternal();
 
             if (Platform.isBrowser) {
-                if (document) {
-                    // Log when the browser freezes the tab so users know why their connection unexpectedly stopped working
-                    document.addEventListener("freeze", this._freezeEventListener);
-                }
+                // Log when the browser freezes the tab so users know why their connection unexpectedly stopped working
+                window.document.addEventListener("freeze", this._freezeEventListener);
             }
 
             this._connectionState = HubConnectionState.Connected;
@@ -734,9 +732,7 @@ export class HubConnection {
             this._connectionStarted = false;
 
             if (Platform.isBrowser) {
-                if (document) {
-                    document.removeEventListener("freeze", this._freezeEventListener);
-                }
+                window.document.removeEventListener("freeze", this._freezeEventListener);
             }
 
             try {
diff --git a/src/SignalR/clients/ts/signalr/src/Utils.ts b/src/SignalR/clients/ts/signalr/src/Utils.ts
index 389c3f67cf4..90eb0cc59ce 100644
--- a/src/SignalR/clients/ts/signalr/src/Utils.ts
+++ b/src/SignalR/clients/ts/signalr/src/Utils.ts
@@ -35,16 +35,25 @@ export class Arg {
 
 /** @private */
 export class Platform {
+    // react-native has a window but no document so we should check both
     public static get isBrowser(): boolean {
-        return typeof window === "object";
+        return typeof window === "object" && typeof window.document === "object";
     }
 
+    // WebWorkers don't have a window object so the isBrowser check would fail
     public static get isWebWorker(): boolean {
         return typeof self === "object" && "importScripts" in self;
     }
 
+    // react-native has a window but no document
+    static get isReactNative(): boolean {
+        return typeof window === "object" && typeof window.document === "undefined";
+    }
+
+    // Node apps shouldn't have a window object, but WebWorkers don't either
+    // so we need to check for both WebWorker and window
     public static get isNode(): boolean {
-        return !this.isBrowser && !this.isWebWorker;
+        return !this.isBrowser && !this.isWebWorker && !this.isReactNative;
     }
 }
 
-- 
GitLab