From 58ff9702c2870f4d0cf8945c7aa7d7281f338956 Mon Sep 17 00:00:00 2001 From: Shawn Presser Date: Wed, 26 Jun 2019 10:23:18 -0500 Subject: [PATCH 1/2] Set User-Agent header to GlobalContext.userAgent --- src/DOM.js | 2 +- src/Navigator.js | 4 ++-- src/Window.js | 1 + src/WindowBase.js | 4 ++-- src/Worker.js | 2 +- src/core.js | 2 +- src/fetch.js | 13 +++++++++++++ src/request.js | 2 +- 8 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 src/fetch.js diff --git a/src/DOM.js b/src/DOM.js index 044d370676..b36bd078a6 100644 --- a/src/DOM.js +++ b/src/DOM.js @@ -12,7 +12,7 @@ const he = require('he'); const parse5 = require('parse5'); const parseIntStrict = require('parse-int'); const selector = require('window-selector'); -const fetch = require('window-fetch'); +const fetch = require('./fetch'); const {Blob} = fetch; const htmlUnescape = require('unescape'); diff --git a/src/Navigator.js b/src/Navigator.js index 89ed6d3ca5..b18dd48b0f 100644 --- a/src/Navigator.js +++ b/src/Navigator.js @@ -70,7 +70,7 @@ module.exports.Clipboard = Clipboard; class Navigator { constructor() { - this.userAgent = `Mozilla/5.0 (OS) AppleWebKit/999.0 (KHTML, like Gecko) Chrome/999.0.0.0 Safari/999.0 Exokit/${GlobalContext.version}`; + this.userAgent = GlobalContext.userAgent; this.vendor = 'Exokit'; this.platform = os.platform(); this.hardwareConcurrency = os.cpus().length; @@ -89,4 +89,4 @@ class Navigator { return getGamepads(); } } -module.exports.Navigator = Navigator; \ No newline at end of file +module.exports.Navigator = Navigator; diff --git a/src/Window.js b/src/Window.js index f373596aa9..5bc1777be8 100644 --- a/src/Window.js +++ b/src/Window.js @@ -102,6 +102,7 @@ const { GlobalContext.id = id; GlobalContext.args = args; GlobalContext.version = version; +GlobalContext.userAgent = `Mozilla/5.0 (OS) AppleWebKit/999.0 (KHTML, like Gecko) Chrome/999.0.0.0 Safari/999.0 Exokit/${GlobalContext.version}`; const {_parseDocument, _parseDocumentAst, getBoundDocumentElements, DocumentType, DOMImplementation, initDocument} = require('./Document'); const { diff --git a/src/WindowBase.js b/src/WindowBase.js index f9a47cdc5a..76c1e7c358 100644 --- a/src/WindowBase.js +++ b/src/WindowBase.js @@ -23,7 +23,7 @@ const {CustomEvent, DragEvent, ErrorEvent, Event, EventTarget, KeyboardEvent, Me const {MediaDevices, Clipboard, Navigator} = require('./Navigator'); const {FileReader} = require('./File'); const {XMLHttpRequest, FormData} = require('window-xhr'); -const fetch = require('window-fetch'); +const fetch = require('./fetch'); const {Request, Response, Headers, Blob} = fetch; const WebSocket = require('ws/lib/websocket'); @@ -396,4 +396,4 @@ if (onbeforeload) { if (!args.require) { global.require = undefined; } -global.process = undefined; \ No newline at end of file +global.process = undefined; diff --git a/src/Worker.js b/src/Worker.js index 56b908af46..9fce9d3919 100644 --- a/src/Worker.js +++ b/src/Worker.js @@ -10,7 +10,7 @@ const { } = require('worker_threads'); const {createImageBitmap} = require('./DOM.js'); -const fetch = require('window-fetch'); +const fetch = require('./fetch'); const {XMLHttpRequest} = require('window-xhr'); const WebSocket = require('ws/lib/websocket'); const {FileReader} = require('./File.js'); diff --git a/src/core.js b/src/core.js index d561b4182b..e3d74dd218 100644 --- a/src/core.js +++ b/src/core.js @@ -1,7 +1,7 @@ const url = require('url'); const {URL} = url; -const fetch = require('window-fetch'); +const fetch = require('./fetch'); const GlobalContext = require('./GlobalContext'); const symbols = require('./symbols'); const {_getBaseUrl} = require('./utils'); diff --git a/src/fetch.js b/src/fetch.js new file mode 100644 index 0000000000..9e5558b469 --- /dev/null +++ b/src/fetch.js @@ -0,0 +1,13 @@ +const GlobalContext = require('./GlobalContext'); +const fetch = require('window-fetch'); + +Object.assign(module.exports, fetch); + +module.exports = (u, options) => { + const o = Object.assign({}, options || {}); + const h = (o.headers instanceof fetch.Headers) ? o.headers : new fetch.Headers(o.headers); + h.set('User-Agent', GlobalContext.userAgent); + o.headers = h; + return fetch(u, o); +}; + diff --git a/src/request.js b/src/request.js index be37c72e7a..062251d185 100644 --- a/src/request.js +++ b/src/request.js @@ -17,7 +17,7 @@ consoleStream._writev = (chunks, callback) => { }; global.console = new Console(consoleStream); -const fetch = require('window-fetch'); +const fetch = require('./fetch'); const {workerData, parentPort} = require('worker_threads'); const {url, int32Array} = workerData; From ba37a405ac3cf422bc1c3094f2cb729a586fbfe8 Mon Sep 17 00:00:00 2001 From: Shawn Presser Date: Wed, 26 Jun 2019 11:22:14 -0500 Subject: [PATCH 2/2] Define and use Navigator.userAgent --- src/Navigator.js | 5 ++++- src/Window.js | 1 - src/fetch.js | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Navigator.js b/src/Navigator.js index b18dd48b0f..a05a951c27 100644 --- a/src/Navigator.js +++ b/src/Navigator.js @@ -70,7 +70,7 @@ module.exports.Clipboard = Clipboard; class Navigator { constructor() { - this.userAgent = GlobalContext.userAgent; + this.userAgent = Navigator.userAgent; this.vendor = 'Exokit'; this.platform = os.platform(); this.hardwareConcurrency = os.cpus().length; @@ -82,6 +82,9 @@ class Navigator { this.clipboard = new Clipboard(); this.webkitGetUserMedia = getUserMedia; // for feature detection } + static get userAgent() { + return `Mozilla/5.0 (OS) AppleWebKit/999.0 (KHTML, like Gecko) Chrome/999.0.0.0 Safari/999.0 Exokit/${GlobalContext.version}` + } getVRDisplaysSync() { return getHMDType() ? [window[symbols.mrDisplaysSymbol].vrDisplay] : []; } diff --git a/src/Window.js b/src/Window.js index 5bc1777be8..f373596aa9 100644 --- a/src/Window.js +++ b/src/Window.js @@ -102,7 +102,6 @@ const { GlobalContext.id = id; GlobalContext.args = args; GlobalContext.version = version; -GlobalContext.userAgent = `Mozilla/5.0 (OS) AppleWebKit/999.0 (KHTML, like Gecko) Chrome/999.0.0.0 Safari/999.0 Exokit/${GlobalContext.version}`; const {_parseDocument, _parseDocumentAst, getBoundDocumentElements, DocumentType, DOMImplementation, initDocument} = require('./Document'); const { diff --git a/src/fetch.js b/src/fetch.js index 9e5558b469..b27ef86a88 100644 --- a/src/fetch.js +++ b/src/fetch.js @@ -1,4 +1,4 @@ -const GlobalContext = require('./GlobalContext'); +const { Navigator } = require('./Navigator'); const fetch = require('window-fetch'); Object.assign(module.exports, fetch); @@ -6,7 +6,7 @@ Object.assign(module.exports, fetch); module.exports = (u, options) => { const o = Object.assign({}, options || {}); const h = (o.headers instanceof fetch.Headers) ? o.headers : new fetch.Headers(o.headers); - h.set('User-Agent', GlobalContext.userAgent); + h.set('User-Agent', Navigator.userAgent); o.headers = h; return fetch(u, o); };