Skip to content

Commit 0ad5f95

Browse files
committed
Fixed dynamic script injection breaking images shown as frame content.
1 parent 093b9d7 commit 0ad5f95

2 files changed

Lines changed: 17 additions & 15 deletions

File tree

src/bg/RequestGuard.js

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,6 @@ var RequestGuard = (() => {
9090

9191
if (what === "noscriptFrame") {
9292
let nsf = records.noscriptFrames;
93-
if (frameId in nsf) {
94-
return null;
95-
}
9693
nsf[frameId] = optValue;
9794
what = optValue ? "blocked" : "allowed";
9895
if (frameId === 0) {
@@ -278,18 +275,20 @@ var RequestGuard = (() => {
278275
};
279276
if (tabId < 0) return;
280277
if (pending) request.initialUrl = pending.initialUrl;
281-
try {
282-
browser.tabs.sendMessage(
283-
tabId,
284-
{type: "seen", request, allowed, policyType, ownFrame: true},
285-
{frameId}
286-
);
287-
} catch (e) {
288-
debug(`Couldn't deliver "seen" message for ${type}@${url} ${allowed ? "A" : "F" } to document ${documentUrl} (${frameId}/${tabId}`, e);
278+
if (type !== "sub_frame") { // we couldn't deliver it to frameId, since it's generally not loaded yet
279+
try {
280+
await browser.tabs.sendMessage(
281+
tabId,
282+
{type: "seen", request, allowed, policyType, ownFrame: true},
283+
{frameId}
284+
);
285+
} catch (e) {
286+
debug(`Couldn't deliver "seen" message for ${type}@${url} ${allowed ? "A" : "F" } to document ${documentUrl} (${frameId}/${tabId})`, e);
287+
}
289288
}
290289
if (frameId === 0) return;
291290
try {
292-
browser.tabs.sendMessage(
291+
await browser.tabs.sendMessage(
293292
tabId,
294293
{type: "seen", request, allowed, policyType},
295294
{frameId: 0}

src/bg/RequestUtil.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22
{
33
let NULL = new Uint8Array();
4+
let brokenOnLoad = (async () => parseInt(await browser.runtime.getBrowserInfo().version) < 61);
45
let pendingRequests = new Map();
56

67
let cleanup = r => {
@@ -59,7 +60,7 @@
5960

6061
let content = this.getContentMetaData(request);
6162
debug(request.url, content.type);
62-
if (/\bxml\b/.test(content.type) && !/\bhtml\b/.test(content.type)) return;
63+
if (/^[\w/+-]*\b(xml|image)\b/i.test(content.type) && !/\bhtml\b/i.test(content.type)) return;
6364
let filter = browser.webRequest.filterResponseData(requestId);
6465
let buffer = [];
6566

@@ -76,8 +77,10 @@
7677
}
7778
};
7879

79-
filter.onstart = event => {
80-
filter.write(NULL);
80+
if (brokenOnLoad) {
81+
filter.onstart = event => {
82+
filter.write(NULL);
83+
}
8184
}
8285

8386
filter.ondata = event => {

0 commit comments

Comments
 (0)