Refactor ContentMetadata into ResponseMetaData.
This commit is contained in:
parent
0910566926
commit
580450b463
|
@ -47,8 +47,8 @@
|
|||
|
||||
var RequestUtil = {
|
||||
|
||||
getContentMetaData(request) {
|
||||
return request.content || (request.content = new ContentMetaData(request));
|
||||
getResponseMetaData(request) {
|
||||
return request.response || (request.response = new ResponseMetaData(request));
|
||||
},
|
||||
|
||||
async executeOnStart(request, details) {
|
||||
|
@ -63,12 +63,14 @@
|
|||
return;
|
||||
}
|
||||
}
|
||||
let content = this.getContentMetaData(request);
|
||||
if (content.disposition) {
|
||||
debug("Skipping execute on start of %s %o", url, content);
|
||||
|
||||
let response = this.getResponseMetaData(request);
|
||||
let {contentType, contentDisposition} = response;
|
||||
if (contentDisposition) {
|
||||
debug("Skipping execute on start of %s %o", url, response);
|
||||
return;
|
||||
}
|
||||
debug("Injecting script on start in %s (%o)", url, content);
|
||||
debug("Injecting script on start in %s (%o)", url, response);
|
||||
|
||||
let scripts = pendingRequests.get(requestId);
|
||||
let scriptKey = JSON.stringify(details);
|
||||
|
@ -80,12 +82,12 @@
|
|||
return;
|
||||
}
|
||||
|
||||
if (xmlFeedOrImage.test(content.type) && !/\/svg\b/i.test(content.type)) return;
|
||||
if (xmlFeedOrImage.test(contentType) && !/\/svg\b/i.test(contentType)) return;
|
||||
if (typeof brokenXMLOnLoad === "undefined") {
|
||||
brokenXMLOnLoad = await (async () => parseInt((await browser.runtime.getBrowserInfo()).version) < 61)();
|
||||
}
|
||||
|
||||
let mustCheckFeed = brokenXMLOnLoad && frameId === 0 && rawXml.test(content.type);
|
||||
let mustCheckFeed = brokenXMLOnLoad && frameId === 0 && rawXml.test(contentType);
|
||||
debug("mustCheckFeed = %s, brokenXMLOnLoad = %s", mustCheckFeed, brokenXMLOnLoad);
|
||||
let filter = browser.webRequest.filterResponseData(requestId);
|
||||
let buffer = [];
|
||||
|
|
|
@ -1,31 +0,0 @@
|
|||
class ContentMetaData {
|
||||
constructor(request, defaultCharset = "utf-8") {
|
||||
this.defaultCharset = defaultCharset;
|
||||
let {responseHeaders} = request;
|
||||
for (let h of responseHeaders) {
|
||||
if (/^\s*Content-(Type|Disposition)\s*$/i.test(h.name)) {
|
||||
this[RegExp.$1.toLowerCase()] = h.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
get charset() {
|
||||
let charset = this.defaultCharset;
|
||||
if (this.type) {
|
||||
let m = this.type.match(/;\s*charset\s*=\s*(\S+)/);
|
||||
if (m) {
|
||||
charset = m[1];
|
||||
}
|
||||
}
|
||||
Object.defineProperty(this, "charset", { value: charset, writable: false, configurable: true });
|
||||
return charset;
|
||||
}
|
||||
|
||||
createDecoder() {
|
||||
try {
|
||||
return new TextDecoder(this.charset);
|
||||
} catch (e) {
|
||||
return new TextDecoder(this.defaultCharset);
|
||||
}
|
||||
}
|
||||
};
|
|
@ -0,0 +1,54 @@
|
|||
class ResponseMetaData {
|
||||
constructor(request) {
|
||||
let {responseHeaders} = request;
|
||||
this.headers = {};
|
||||
this.contentType = this.contentDisposition = null;
|
||||
for (let h of responseHeaders) {
|
||||
if (/^\s*Content-(Type|Disposition)\s*$/i.test(h.name)) {
|
||||
let propertyName = RegExp.$1;
|
||||
propertyName = `content${propertyName.charAt(0).toUpperCase()}${propertyName.substring(1).toLowerCase()}`;
|
||||
this[propertyName] = h.value;
|
||||
this.headers[propertyName] = h;
|
||||
}
|
||||
}
|
||||
this.forcedUTF8 = false;
|
||||
}
|
||||
|
||||
get charset() {
|
||||
let charset = "";
|
||||
if (this.contentType) {
|
||||
let m = this.contentType.match(/;\s*charset\s*=\s*(\S+)/);
|
||||
if (m) {
|
||||
charset = m[1];
|
||||
}
|
||||
}
|
||||
Object.defineProperty(this, "charset", { value: charset, writable: false, configurable: true });
|
||||
return charset;
|
||||
}
|
||||
|
||||
get isUTF8() {
|
||||
return /^utf-8$/i.test(this.charset);
|
||||
}
|
||||
|
||||
forceUTF8() {
|
||||
if (!(this.forcedUTF8 || this.isUTF8)) {
|
||||
let h = this.headers.contentType;
|
||||
if (h) {
|
||||
h.value = h.value.replace(/;\s*charset\s*=.*|$/, "; charset=utf8");
|
||||
this.forcedUTF8 = true;
|
||||
} // if the header doesn't exist the browser should default to UTF-8 anyway
|
||||
}
|
||||
return this.forcedUTF8;
|
||||
}
|
||||
|
||||
createDecoder() {
|
||||
if (this.charset) {
|
||||
try {
|
||||
return new TextDecoder(this.charset);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
return new TextDecoder("utf-8");
|
||||
}
|
||||
};
|
|
@ -39,7 +39,7 @@
|
|||
"lib/include.js",
|
||||
"lib/punycode.js",
|
||||
"lib/tld.js",
|
||||
"lib/ContentMetaData.js",
|
||||
"lib/ResponseMetaData.js",
|
||||
"common/Policy.js",
|
||||
"common/locale.js",
|
||||
"common/Entities.js",
|
||||
|
|
Loading…
Reference in New Issue