Skip to content

Commit 580450b

Browse files
committed
Refactor ContentMetadata into ResponseMetaData.
1 parent 0910566 commit 580450b

4 files changed

Lines changed: 65 additions & 40 deletions

File tree

src/bg/RequestUtil.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@
4747

4848
var RequestUtil = {
4949

50-
getContentMetaData(request) {
51-
return request.content || (request.content = new ContentMetaData(request));
50+
getResponseMetaData(request) {
51+
return request.response || (request.response = new ResponseMetaData(request));
5252
},
5353

5454
async executeOnStart(request, details) {
@@ -63,12 +63,14 @@
6363
return;
6464
}
6565
}
66-
let content = this.getContentMetaData(request);
67-
if (content.disposition) {
68-
debug("Skipping execute on start of %s %o", url, content);
66+
67+
let response = this.getResponseMetaData(request);
68+
let {contentType, contentDisposition} = response;
69+
if (contentDisposition) {
70+
debug("Skipping execute on start of %s %o", url, response);
6971
return;
7072
}
71-
debug("Injecting script on start in %s (%o)", url, content);
73+
debug("Injecting script on start in %s (%o)", url, response);
7274

7375
let scripts = pendingRequests.get(requestId);
7476
let scriptKey = JSON.stringify(details);
@@ -80,12 +82,12 @@
8082
return;
8183
}
8284

83-
if (xmlFeedOrImage.test(content.type) && !/\/svg\b/i.test(content.type)) return;
85+
if (xmlFeedOrImage.test(contentType) && !/\/svg\b/i.test(contentType)) return;
8486
if (typeof brokenXMLOnLoad === "undefined") {
8587
brokenXMLOnLoad = await (async () => parseInt((await browser.runtime.getBrowserInfo()).version) < 61)();
8688
}
8789

88-
let mustCheckFeed = brokenXMLOnLoad && frameId === 0 && rawXml.test(content.type);
90+
let mustCheckFeed = brokenXMLOnLoad && frameId === 0 && rawXml.test(contentType);
8991
debug("mustCheckFeed = %s, brokenXMLOnLoad = %s", mustCheckFeed, brokenXMLOnLoad);
9092
let filter = browser.webRequest.filterResponseData(requestId);
9193
let buffer = [];

src/lib/ContentMetaData.js

Lines changed: 0 additions & 31 deletions
This file was deleted.

src/lib/ResponseMetaData.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
class ResponseMetaData {
2+
constructor(request) {
3+
let {responseHeaders} = request;
4+
this.headers = {};
5+
this.contentType = this.contentDisposition = null;
6+
for (let h of responseHeaders) {
7+
if (/^\s*Content-(Type|Disposition)\s*$/i.test(h.name)) {
8+
let propertyName = RegExp.$1;
9+
propertyName = `content${propertyName.charAt(0).toUpperCase()}${propertyName.substring(1).toLowerCase()}`;
10+
this[propertyName] = h.value;
11+
this.headers[propertyName] = h;
12+
}
13+
}
14+
this.forcedUTF8 = false;
15+
}
16+
17+
get charset() {
18+
let charset = "";
19+
if (this.contentType) {
20+
let m = this.contentType.match(/;\s*charset\s*=\s*(\S+)/);
21+
if (m) {
22+
charset = m[1];
23+
}
24+
}
25+
Object.defineProperty(this, "charset", { value: charset, writable: false, configurable: true });
26+
return charset;
27+
}
28+
29+
get isUTF8() {
30+
return /^utf-8$/i.test(this.charset);
31+
}
32+
33+
forceUTF8() {
34+
if (!(this.forcedUTF8 || this.isUTF8)) {
35+
let h = this.headers.contentType;
36+
if (h) {
37+
h.value = h.value.replace(/;\s*charset\s*=.*|$/, "; charset=utf8");
38+
this.forcedUTF8 = true;
39+
} // if the header doesn't exist the browser should default to UTF-8 anyway
40+
}
41+
return this.forcedUTF8;
42+
}
43+
44+
createDecoder() {
45+
if (this.charset) {
46+
try {
47+
return new TextDecoder(this.charset);
48+
} catch (e) {
49+
console.error(e);
50+
}
51+
}
52+
return new TextDecoder("utf-8");
53+
}
54+
};

src/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"lib/include.js",
4040
"lib/punycode.js",
4141
"lib/tld.js",
42-
"lib/ContentMetaData.js",
42+
"lib/ResponseMetaData.js",
4343
"common/Policy.js",
4444
"common/locale.js",
4545
"common/Entities.js",

0 commit comments

Comments
 (0)