Skip to content

Commit ce9fc5d

Browse files
committedOct 12, 2024
Add support to urlskip= media resources
Related feedback: uBlockOrigin/uBlock-issues#3206 (comment)
1 parent 2c60bb3 commit ce9fc5d

File tree

4 files changed

+42
-26
lines changed

4 files changed

+42
-26
lines changed
 

‎src/js/benchmarks.js

+12-8
Original file line numberDiff line numberDiff line change
@@ -166,11 +166,11 @@ export async function benchmarkStaticNetFiltering(options = {}) {
166166
let allowCount = 0;
167167
let redirectCount = 0;
168168
let removeparamCount = 0;
169+
let urlskipCount = 0;
169170
let cspCount = 0;
170171
let permissionsCount = 0;
171172
let replaceCount = 0;
172-
for ( let i = 0; i < requests.length; i++ ) {
173-
const request = requests[i];
173+
for ( const request of requests ) {
174174
fctxt.setURL(request.url);
175175
if ( fctxt.getIPAddress() === '' ) {
176176
fctxt.setIPAddress('93.184.215.14\n2606:2800:21f:cb07:6820:80da:af6b:8b2c');
@@ -186,12 +186,15 @@ export async function benchmarkStaticNetFiltering(options = {}) {
186186
if ( sfne.transformRequest(fctxt) ) {
187187
redirectCount += 1;
188188
}
189-
if ( fctxt.redirectURL !== undefined && sfne.hasQuery(fctxt) ) {
190-
if ( sfne.filterQuery(fctxt, 'removeparam') ) {
189+
if ( sfne.hasQuery(fctxt) ) {
190+
if ( sfne.filterQuery(fctxt) ) {
191191
removeparamCount += 1;
192192
}
193193
}
194-
if ( fctxt.type === 'main_frame' || fctxt.type === 'sub_frame' ) {
194+
if ( sfne.urlSkip(fctxt) ) {
195+
urlskipCount += 1;
196+
}
197+
if ( fctxt.isDocument() ) {
195198
if ( sfne.matchAndFetchModifiers(fctxt, 'csp') ) {
196199
cspCount += 1;
197200
}
@@ -207,9 +210,9 @@ export async function benchmarkStaticNetFiltering(options = {}) {
207210
if ( sfne.redirectRequest(redirectEngine, fctxt) ) {
208211
redirectCount += 1;
209212
}
210-
}
211-
if ( fctxt.type === 'main_frame' ) {
212-
sfne.matchAndFetchModifiers(fctxt, 'urlskip');
213+
if ( fctxt.isRootDocument() && sfne.urlSkip(fctxt) ) {
214+
urlskipCount += 1;
215+
}
213216
}
214217
}
215218
const t1 = performance.now();
@@ -224,6 +227,7 @@ export async function benchmarkStaticNetFiltering(options = {}) {
224227
`\tUnblocked: ${allowCount}`,
225228
`\tredirect=: ${redirectCount}`,
226229
`\tremoveparam=: ${removeparamCount}`,
230+
`\turlskip=: ${urlskipCount}`,
227231
`\tcsp=: ${cspCount}`,
228232
`\tpermissions=: ${permissionsCount}`,
229233
`\treplace=: ${replaceCount}`,

‎src/js/pagestore.js

+26-15
Original file line numberDiff line numberDiff line change
@@ -942,6 +942,9 @@ const PageStore = class {
942942
if ( staticNetFilteringEngine.hasQuery(fctxt) ) {
943943
staticNetFilteringEngine.filterQuery(fctxt, directives);
944944
}
945+
if ( this.urlSkippableResources.has(fctxt.itype) ) {
946+
staticNetFilteringEngine.urlSkip(fctxt, directives);
947+
}
945948
if ( directives.length === 0 ) { return; }
946949
if ( logger.enabled !== true ) { return; }
947950
fctxt.pushFilters(directives.map(a => a.logData()));
@@ -1132,22 +1135,30 @@ const PageStore = class {
11321135
response.blockedResources =
11331136
this.netFilteringCache.lookupAllBlocked(fctxt.getDocHostname());
11341137
}
1135-
};
1136-
1137-
PageStore.prototype.cacheableResults = new Set([
1138-
µb.FilteringContext.SUB_FRAME,
1139-
]);
11401138

1141-
PageStore.prototype.collapsibleResources = new Set([
1142-
µb.FilteringContext.IMAGE,
1143-
µb.FilteringContext.MEDIA,
1144-
µb.FilteringContext.OBJECT,
1145-
µb.FilteringContext.SUB_FRAME,
1146-
]);
1147-
1148-
// To mitigate memory churning
1149-
PageStore.junkyard = [];
1150-
PageStore.junkyardMax = 10;
1139+
cacheableResults = new Set([
1140+
µb.FilteringContext.SUB_FRAME
1141+
]);
1142+
1143+
collapsibleResources = new Set([
1144+
µb.FilteringContext.IMAGE,
1145+
µb.FilteringContext.MEDIA,
1146+
µb.FilteringContext.OBJECT,
1147+
µb.FilteringContext.SUB_FRAME,
1148+
]);
1149+
1150+
urlSkippableResources = new Set([
1151+
µb.FilteringContext.IMAGE,
1152+
µb.FilteringContext.MAIN_FRAME,
1153+
µb.FilteringContext.MEDIA,
1154+
µb.FilteringContext.OBJECT,
1155+
µb.FilteringContext.SUB_FRAME,
1156+
]);
1157+
1158+
// To mitigate memory churning
1159+
static junkyard = [];
1160+
static junkyardMax = 10;
1161+
};
11511162

11521163
/******************************************************************************/
11531164

‎src/js/static-net-filtering.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -5449,9 +5449,9 @@ StaticNetFilteringEngine.prototype.urlSkip = function(fctxt, out = []) {
54495449
return out;
54505450
};
54515451

5452-
function urlSkip(directive, urlin, steps) {
5452+
function urlSkip(directive, url, steps) {
54535453
try {
5454-
let urlout = urlin;
5454+
let urlout = url;
54555455
for ( const step of steps ) {
54565456
const urlin = urlout;
54575457
const c0 = step.charCodeAt(0);

‎src/js/traffic.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,9 @@ const onBeforeRootFrameRequest = function(fctxt) {
196196
if ( trusted === false && pageStore !== null ) {
197197
if ( result !== 1 ) {
198198
pageStore.redirectNonBlockedRequest(fctxt);
199+
} else {
200+
pageStore.skipMainDocument(fctxt);
199201
}
200-
pageStore.skipMainDocument(fctxt);
201202
}
202203

203204
if ( logger.enabled ) {

0 commit comments

Comments
 (0)