summaryrefslogtreecommitdiffstats
path: root/devtools/client/netmonitor/src/utils/doc-utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/netmonitor/src/utils/doc-utils.js')
-rw-r--r--devtools/client/netmonitor/src/utils/doc-utils.js224
1 files changed, 224 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/src/utils/doc-utils.js b/devtools/client/netmonitor/src/utils/doc-utils.js
new file mode 100644
index 0000000000..c08d96c453
--- /dev/null
+++ b/devtools/client/netmonitor/src/utils/doc-utils.js
@@ -0,0 +1,224 @@
+/* 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";
+
+const {
+ SUPPORTED_HTTP_CODES,
+} = require("resource://devtools/client/netmonitor/src/constants.js");
+
+/**
+ * A mapping of header names to external documentation. Any header included
+ * here will show a MDN link alongside it.
+ */
+const SUPPORTED_HEADERS = [
+ "Accept",
+ "Accept-Charset",
+ "Accept-Encoding",
+ "Accept-Language",
+ "Accept-Ranges",
+ "Access-Control-Allow-Credentials",
+ "Access-Control-Allow-Headers",
+ "Access-Control-Allow-Methods",
+ "Access-Control-Allow-Origin",
+ "Access-Control-Expose-Headers",
+ "Access-Control-Max-Age",
+ "Access-Control-Request-Headers",
+ "Access-Control-Request-Method",
+ "Age",
+ "Allow",
+ "Authorization",
+ "Cache-Control",
+ "Clear-Site-Data",
+ "Connection",
+ "Content-Disposition",
+ "Content-Encoding",
+ "Content-Language",
+ "Content-Length",
+ "Content-Location",
+ "Content-Range",
+ "Content-Security-Policy",
+ "Content-Security-Policy-Report-Only",
+ "Content-Type",
+ "Cookie",
+ "Cookie2",
+ "DNT",
+ "Date",
+ "ETag",
+ "Early-Data",
+ "Expect",
+ "Expect-CT",
+ "Expires",
+ "Feature-Policy",
+ "Forwarded",
+ "From",
+ "Host",
+ "If-Match",
+ "If-Modified-Since",
+ "If-None-Match",
+ "If-Range",
+ "If-Unmodified-Since",
+ "Keep-Alive",
+ "Last-Modified",
+ "Location",
+ "Origin",
+ "Pragma",
+ "Proxy-Authenticate",
+ "Proxy-Authorization",
+ "Public-Key-Pins",
+ "Public-Key-Pins-Report-Only",
+ "Range",
+ "Referer",
+ "Referrer-Policy",
+ "Retry-After",
+ "Save-Data",
+ "Sec-Fetch-Dest",
+ "Sec-Fetch-Mode",
+ "Sec-Fetch-Site",
+ "Sec-Fetch-User",
+ "Sec-GPC",
+ "Server",
+ "Server-Timing",
+ "Set-Cookie",
+ "Set-Cookie2",
+ "SourceMap",
+ "Strict-Transport-Security",
+ "TE",
+ "Timing-Allow-Origin",
+ "Tk",
+ "Trailer",
+ "Transfer-Encoding",
+ "Upgrade-Insecure-Requests",
+ "User-Agent",
+ "Vary",
+ "Via",
+ "WWW-Authenticate",
+ "Warning",
+ "X-Content-Type-Options",
+ "X-DNS-Prefetch-Control",
+ "X-Forwarded-For",
+ "X-Forwarded-Host",
+ "X-Forwarded-Proto",
+ "X-Frame-Options",
+ "X-XSS-Protection",
+];
+
+const MDN_URL = "https://developer.mozilla.org/docs/";
+const MDN_STATUS_CODES_LIST_URL = `${MDN_URL}Web/HTTP/Status`;
+const getGAParams = (panelId = "netmonitor") => {
+ return `?utm_source=mozilla&utm_medium=devtools-${panelId}&utm_campaign=default`;
+};
+
+// Base URL to DevTools user docs
+const USER_DOC_URL = "https://firefox-source-docs.mozilla.org/devtools-user/";
+
+/**
+ * Get the MDN URL for the specified header.
+ *
+ * @param {string} header Name of the header for the baseURL to use.
+ *
+ * @return {string} The MDN URL for the header, or null if not available.
+ */
+function getHeadersURL(header) {
+ const lowerCaseHeader = header.toLowerCase();
+ const idx = SUPPORTED_HEADERS.findIndex(
+ item => item.toLowerCase() === lowerCaseHeader
+ );
+ return idx > -1
+ ? `${MDN_URL}Web/HTTP/Headers/${SUPPORTED_HEADERS[idx] + getGAParams()}`
+ : null;
+}
+
+/**
+ * Get the MDN URL for the specified HTTP status code.
+ *
+ * @param {string} HTTP status code for the baseURL to use.
+ *
+ * @return {string} The MDN URL for the HTTP status code, or null if not available.
+ */
+function getHTTPStatusCodeURL(statusCode, panelId) {
+ return (
+ (SUPPORTED_HTTP_CODES.includes(statusCode)
+ ? `${MDN_URL}Web/HTTP/Status/${statusCode}`
+ : MDN_STATUS_CODES_LIST_URL) + getGAParams(panelId)
+ );
+}
+
+/**
+ * Get the URL of the Timings tag for Network Monitor.
+ *
+ * @return {string} the URL of the Timings tag for Network Monitor.
+ */
+function getNetMonitorTimingsURL() {
+ return `${USER_DOC_URL}network_monitor/request_details/#network-monitor-request-details-timings-tab`;
+}
+
+/**
+ * Get the URL for Performance Analysis
+ *
+ * @return {string} The URL for the documentation of Performance Analysis.
+ */
+function getPerformanceAnalysisURL() {
+ return `${USER_DOC_URL}network_monitor/performance_analysis/`;
+}
+
+/**
+ * Get the URL for Filter box
+ *
+ * @return {string} The URL for the documentation of Filter box.
+ */
+function getFilterBoxURL() {
+ return `${USER_DOC_URL}network_monitor/request_list/#filtering-by-properties`;
+}
+
+/**
+ * Get the MDN URL for Tracking Protection
+ *
+ * @return {string} The MDN URL for the documentation of Tracking Protection.
+ */
+function getTrackingProtectionURL() {
+ return `${MDN_URL}Mozilla/Firefox/Privacy/Tracking_Protection${getGAParams()}`;
+}
+
+/**
+ * Get the MDN URL for CORS error reason, falls back to generic cors error page
+ * if reason is not understood.
+ *
+ * @param {int} reason: Blocked Reason message from `netmonitor/src/constants.js`
+ *
+ * @returns {string} the MDN URL for the documentation of CORS errors
+ */
+function getCORSErrorURL(reason) {
+ // Map from blocked reasons from netmonitor/src/constants.js to the correct
+ // URL fragment to append to MDN_URL
+ const reasonMap = new Map([
+ [1001, "CORSDisabled"],
+ [1002, "CORSDidNotSucceed"],
+ [1003, "CORSRequestNotHttp"],
+ [1004, "CORSMultipleAllowOriginNotAllowed"],
+ [1005, "CORSMissingAllowOrigin"],
+ [1006, "CORSNotSupportingCredentials"],
+ [1007, "CORSAllowOriginNotMatchingOrigin"],
+ [1008, "CORSMIssingAllowCredentials"],
+ [1009, "CORSOriginHeaderNotAdded"],
+ [1010, "CORSExternalRedirectNotAllowed"],
+ [1011, "CORSPreflightDidNotSucceed"],
+ [1012, "CORSInvalidAllowMethod"],
+ [1013, "CORSMethodNotFound"],
+ [1014, "CORSInvalidAllowHeader"],
+ [1015, "CORSMissingAllowHeaderFromPreflight"],
+ ]);
+ const urlFrag = reasonMap.get(reason) || "";
+ return `${MDN_URL}Web/HTTP/CORS/Errors/${urlFrag}`;
+}
+
+module.exports = {
+ getHeadersURL,
+ getHTTPStatusCodeURL,
+ getNetMonitorTimingsURL,
+ getPerformanceAnalysisURL,
+ getFilterBoxURL,
+ getTrackingProtectionURL,
+ getCORSErrorURL,
+};