summaryrefslogtreecommitdiffstats
path: root/devtools/client/shared/source-map-loader/utils/network-request.js
blob: c5ef93a71f69a2834c21ec9f154309277efa41f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* 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";

function networkRequest(url, opts) {
  const supportedProtocols = ["http:", "https:", "data:"];

  // Add file, chrome or moz-extension iff 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))) {
    return Promise.reject(`unsupported protocol for sourcemap request ${url}`);
  }

  return fetch(url, {
    cache: opts.loadFromCache ? "default" : "no-cache",
  }).then(res => {
    if (res.status >= 200 && res.status < 300) {
      if (res.headers.get("Content-Type") === "application/wasm") {
        return res.arrayBuffer().then(buffer => ({
          content: buffer,
          isDwarf: true,
        }));
      }
      return res.text().then(text => ({ content: text }));
    }
    return Promise.reject(`request failed with status ${res.status}`);
  });
}

module.exports = { networkRequest };