summaryrefslogtreecommitdiffstats
path: root/devtools/client/netmonitor/filter-predicates.js
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /devtools/client/netmonitor/filter-predicates.js
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'devtools/client/netmonitor/filter-predicates.js')
-rw-r--r--devtools/client/netmonitor/filter-predicates.js129
1 files changed, 129 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/filter-predicates.js b/devtools/client/netmonitor/filter-predicates.js
new file mode 100644
index 000000000..9c8e49c62
--- /dev/null
+++ b/devtools/client/netmonitor/filter-predicates.js
@@ -0,0 +1,129 @@
+"use strict";
+
+/**
+ * Predicates used when filtering items.
+ *
+ * @param object item
+ * The filtered item.
+ * @return boolean
+ * True if the item should be visible, false otherwise.
+ */
+function all() {
+ return true;
+}
+
+function isHtml({ mimeType }) {
+ return mimeType && mimeType.includes("/html");
+}
+
+function isCss({ mimeType }) {
+ return mimeType && mimeType.includes("/css");
+}
+
+function isJs({ mimeType }) {
+ return mimeType && (
+ mimeType.includes("/ecmascript") ||
+ mimeType.includes("/javascript") ||
+ mimeType.includes("/x-javascript"));
+}
+
+function isXHR(item) {
+ // Show the request it is XHR, except if the request is a WS upgrade
+ return item.isXHR && !isWS(item);
+}
+
+function isFont({ url, mimeType }) {
+ // Fonts are a mess.
+ return (mimeType && (
+ mimeType.includes("font/") ||
+ mimeType.includes("/font"))) ||
+ url.includes(".eot") ||
+ url.includes(".ttf") ||
+ url.includes(".otf") ||
+ url.includes(".woff");
+}
+
+function isImage({ mimeType }) {
+ return mimeType && mimeType.includes("image/");
+}
+
+function isMedia({ mimeType }) {
+ // Not including images.
+ return mimeType && (
+ mimeType.includes("audio/") ||
+ mimeType.includes("video/") ||
+ mimeType.includes("model/"));
+}
+
+function isFlash({ url, mimeType }) {
+ // Flash is a mess.
+ return (mimeType && (
+ mimeType.includes("/x-flv") ||
+ mimeType.includes("/x-shockwave-flash"))) ||
+ url.includes(".swf") ||
+ url.includes(".flv");
+}
+
+function isWS({ requestHeaders, responseHeaders }) {
+ // Detect a websocket upgrade if request has an Upgrade header with value 'websocket'
+ if (!requestHeaders || !Array.isArray(requestHeaders.headers)) {
+ return false;
+ }
+
+ // Find the 'upgrade' header.
+ let upgradeHeader = requestHeaders.headers.find(header => {
+ return (header.name == "Upgrade");
+ });
+
+ // If no header found on request, check response - mainly to get
+ // something we can unit test, as it is impossible to set
+ // the Upgrade header on outgoing XHR as per the spec.
+ if (!upgradeHeader && responseHeaders &&
+ Array.isArray(responseHeaders.headers)) {
+ upgradeHeader = responseHeaders.headers.find(header => {
+ return (header.name == "Upgrade");
+ });
+ }
+
+ // Return false if there is no such header or if its value isn't 'websocket'.
+ if (!upgradeHeader || upgradeHeader.value != "websocket") {
+ return false;
+ }
+
+ return true;
+}
+
+function isOther(item) {
+ let tests = [isHtml, isCss, isJs, isXHR, isFont, isImage, isMedia, isFlash, isWS];
+ return tests.every(is => !is(item));
+}
+
+function isFreetextMatch({ url }, text) {
+ let lowerCaseUrl = url.toLowerCase();
+ let lowerCaseText = text.toLowerCase();
+ let textLength = text.length;
+ // Support negative filtering
+ if (text.startsWith("-") && textLength > 1) {
+ lowerCaseText = lowerCaseText.substring(1, textLength);
+ return !lowerCaseUrl.includes(lowerCaseText);
+ }
+
+ // no text is a positive match
+ return !text || lowerCaseUrl.includes(lowerCaseText);
+}
+
+exports.Filters = {
+ all: all,
+ html: isHtml,
+ css: isCss,
+ js: isJs,
+ xhr: isXHR,
+ fonts: isFont,
+ images: isImage,
+ media: isMedia,
+ flash: isFlash,
+ ws: isWS,
+ other: isOther,
+};
+
+exports.isFreetextMatch = isFreetextMatch;