Skip to content

Commit 46dc628

Browse files
committed
[TabGuard] Better request lifecycle management.
1 parent 4f9c27a commit 46dc628

2 files changed

Lines changed: 18 additions & 3 deletions

File tree

src/bg/RequestGuard.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -655,6 +655,7 @@ var RequestGuard = (() => {
655655
let {requestId, url, tabId, frameId, type} = request;
656656
if (type === "main_frame") {
657657
TabStatus.initTab(tabId);
658+
TabGuard.postCheck(request);
658659
}
659660
let scriptBlocked = request.responseHeaders.some(
660661
h => csp.isMine(h) && csp.blocks(h.value, "script")
@@ -687,9 +688,11 @@ var RequestGuard = (() => {
687688
}
688689
}
689690
}
691+
TabGuard.postCheck(request);
690692
},
691693
onErrorOccurred(request) {
692694
pendingRequests.delete(request.requestId);
695+
TabGuard.postCheck(request);
693696
}
694697
};
695698
function fakeRequestFromCSP(report, request) {

src/bg/TabGuard.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ var TabGuard = (() => {
4444
return flat;
4545
}
4646

47+
let cutRequestIds = new Set();
48+
4749
return {
4850
forget,
4951
check(request) {
@@ -62,9 +64,12 @@ var TabGuard = (() => {
6264
if (mainFrame) {
6365
let headers = flattenHeaders(requestHeaders);
6466
if (headers["sec-fetch-user"] === "?1" && /^(?:same-(?:site|origin)|none)$/i.test(headers["sec-fetch-site"])) {
65-
debug("[TabGuard] User-typed, bookmark, reload or user-activated same-site navigation: cutting tab ties.", request);
66-
TabTies.cut(tabId);
67+
debug("[TabGuard] User-typed, bookmark, reload or user-activated same-site navigation: scheduling tab ties cut.", tabId, request);
68+
cutRequestIds.add(tabId);
6769
return;
70+
} else {
71+
debug("[TabGuard] Automatic or cross-site navigation, keeping tab ties.", tabId, request);
72+
cutRequestIds.delete(tabId);
6873
}
6974
}
7075

@@ -122,6 +127,13 @@ var TabGuard = (() => {
122127
}
123128
let mustFilter = mainFrame || quietDomains && [...otherDomains].some(d => quietDomains.has(d))
124129
return mustFilter ? filterAuth() : null;
125-
}
130+
},
131+
postCheck(request) {
132+
let {requestId, tabId} = request;
133+
if (cutRequestIds.has(requestId)) {
134+
cutRequestIds.remove(requestId);
135+
TabTies.cut(tabId);
136+
}
137+
},
126138
}
127139
})();

0 commit comments

Comments
 (0)