diff options
Diffstat (limited to 'devtools/client/netmonitor/src/utils/doc-utils.js')
-rw-r--r-- | devtools/client/netmonitor/src/utils/doc-utils.js | 224 |
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, +}; |