diff options
Diffstat (limited to 'devtools/client/shared/source-map-loader/utils/network-request.js')
-rw-r--r-- | devtools/client/shared/source-map-loader/utils/network-request.js | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/devtools/client/shared/source-map-loader/utils/network-request.js b/devtools/client/shared/source-map-loader/utils/network-request.js new file mode 100644 index 0000000000..f331dc446e --- /dev/null +++ b/devtools/client/shared/source-map-loader/utils/network-request.js @@ -0,0 +1,43 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */ + +"use strict"; + +async function networkRequest(url, opts) { + const supportedProtocols = ["http:", "https:", "data:"]; + + // Add file, chrome or moz-extension if the initial source was served by the + // same protocol. + const ADDITIONAL_PROTOCOLS = ["chrome:", "file:", "moz-extension:"]; + for (const protocol of ADDITIONAL_PROTOCOLS) { + if (opts.sourceMapBaseURL?.startsWith(protocol)) { + supportedProtocols.push(protocol); + } + } + + if (supportedProtocols.every(protocol => !url.startsWith(protocol))) { + throw new Error(`unsupported protocol for sourcemap request ${url}`); + } + + const response = await fetch(url, { + cache: opts.loadFromCache ? "default" : "no-cache", + redirect: opts.allowRedirects ? "follow" : "error", + }); + + if (response.ok) { + if (response.headers.get("Content-Type") === "application/wasm") { + const buffer = await response.arrayBuffer(); + return { + content: buffer, + isDwarf: true, + }; + } + const text = await response.text(); + return { content: text }; + } + + throw new Error(`request failed with status ${response.status}`); +} + +module.exports = { networkRequest }; |