diff --git a/src/about.html b/src/about.html
index 13c40ced4..9e367503e 100644
--- a/src/about.html
+++ b/src/about.html
@@ -40,6 +40,11 @@
+
+
+
+
+
diff --git a/src/css/about.css b/src/css/about.css
index b32bcc811..181825873 100644
--- a/src/css/about.css
+++ b/src/css/about.css
@@ -9,3 +9,16 @@ body {
.entry {
margin: 0.5em 0;
}
+#dev {
+ align-items: flex-start;
+ display: none;
+ }
+#dev.enabled {
+ display: flex;
+ }
+#dev > * {
+ margin-inline-end: 1em;
+ }
+#dev > div {
+ white-space: pre;
+ }
diff --git a/src/js/about.js b/src/js/about.js
index e4405c90a..b2e3d98c4 100644
--- a/src/js/about.js
+++ b/src/js/about.js
@@ -36,5 +36,20 @@
const appData = await vAPI.messaging.send('dashboard', {
what: 'getAppData',
});
+
uDom('#aboutNameVer').text(appData.name + ' v' + appData.version);
+
+ if ( appData.canBenchmark !== true ) { return; }
+
+ document.getElementById('dev').classList.add('enabled');
+
+ const sfneBenchmark = async ( ) => {
+ const result = await vAPI.messaging.send('dashboard', {
+ what: 'sfneBenchmark',
+ });
+ document.getElementById('sfneBenchmarkResult').textContent = result;
+ };
+ document.getElementById('sfneBenchmark').addEventListener('click', ( ) => {
+ sfneBenchmark();
+ });
})();
diff --git a/src/js/cosmetic-filtering.js b/src/js/cosmetic-filtering.js
index 8156b9649..91155a627 100644
--- a/src/js/cosmetic-filtering.js
+++ b/src/js/cosmetic-filtering.js
@@ -1084,7 +1084,9 @@ FilterContainer.prototype.retrieveSpecificSelectors = function(
if ( injectedHideFilters.length !== 0 ) {
out.injectedHideFilters = injectedHideFilters.join(',\n');
details.code = out.injectedHideFilters + '\n{display:none!important;}';
- vAPI.tabs.insertCSS(request.tabId, details);
+ if ( options.dontInject !== true ) {
+ vAPI.tabs.insertCSS(request.tabId, details);
+ }
}
// CSS selectors for collapsible blocked elements
@@ -1093,7 +1095,9 @@ FilterContainer.prototype.retrieveSpecificSelectors = function(
cacheEntry.retrieve('net', networkFilters);
if ( networkFilters.length !== 0 ) {
details.code = networkFilters.join('\n') + '\n{display:none!important;}';
- vAPI.tabs.insertCSS(request.tabId, details);
+ if ( options.dontInject !== true ) {
+ vAPI.tabs.insertCSS(request.tabId, details);
+ }
}
}
@@ -1125,12 +1129,13 @@ FilterContainer.prototype.benchmark = async function() {
const options = {
noCosmeticFiltering: false,
noGenericCosmeticFiltering: false,
+ dontInject: true,
};
let count = 0;
const t0 = self.performance.now();
for ( let i = 0; i < requests.length; i++ ) {
const request = requests[i];
- if ( request.cpt !== 'document' ) { continue; }
+ if ( request.cpt !== 'main_frame' ) { continue; }
count += 1;
details.hostname = µb.URI.hostnameFromURI(request.url);
details.domain = µb.URI.domainFromHostname(details.hostname);
diff --git a/src/js/messaging.js b/src/js/messaging.js
index 806845c7c..f3c57fdd4 100644
--- a/src/js/messaging.js
+++ b/src/js/messaging.js
@@ -97,6 +97,12 @@ const onMessage = function(request, sender, callback) {
µb.scriptlets.inject(request.tabId, request.scriptlet, callback);
return;
+ case 'sfneBenchmark':
+ µb.staticNetFilteringEngine.benchmark().then(result => {
+ callback(result);
+ });
+ return;
+
default:
break;
}
@@ -127,7 +133,8 @@ const onMessage = function(request, sender, callback) {
case 'getAppData':
response = {
name: browser.runtime.getManifest().name,
- version: vAPI.app.version
+ version: vAPI.app.version,
+ canBenchmark: µb.hiddenSettings.benchmarkDatasetURL !== 'unset',
};
break;
diff --git a/src/js/scriptlet-filtering.js b/src/js/scriptlet-filtering.js
index 3edb53b42..c05341935 100644
--- a/src/js/scriptlet-filtering.js
+++ b/src/js/scriptlet-filtering.js
@@ -432,7 +432,7 @@
const t0 = self.performance.now();
for ( let i = 0; i < requests.length; i++ ) {
const request = requests[i];
- if ( request.cpt !== 'document' ) { continue; }
+ if ( request.cpt !== 'main_frame' ) { continue; }
count += 1;
details.url = request.url;
details.hostname = µb.URI.hostnameFromURI(request.url);
diff --git a/src/js/static-net-filtering.js b/src/js/static-net-filtering.js
index 57b97fad4..fe9211cd7 100644
--- a/src/js/static-net-filtering.js
+++ b/src/js/static-net-filtering.js
@@ -3544,12 +3544,14 @@ FilterContainer.prototype.benchmark = async function(action, target) {
}
const t0 = self.performance.now();
+ let matchCount = 0;
for ( let i = 0; i < requests.length; i++ ) {
const request = requests[i];
fctxt.setURL(request.url);
fctxt.setDocOriginFromURL(request.frameUrl);
fctxt.setType(request.cpt);
const r = this.matchString(fctxt);
+ matchCount += 1;
if ( recorded !== undefined ) { recorded.push(r); }
if ( expected !== undefined && r !== expected[i] ) {
print(`Mismatch with reference results at ${i}:`);
@@ -3558,22 +3560,35 @@ FilterContainer.prototype.benchmark = async function(action, target) {
print(`\turl=${fctxt.url}`);
print(`\tdocOrigin=${fctxt.getDocOrigin()}`);
}
+ if ( fctxt.type === 'main_frame' || fctxt.type === 'sub_frame' ) {
+ this.matchAndFetchData(fctxt, 'csp');
+ matchCount += 1;
+ }
}
const t1 = self.performance.now();
const dur = t1 - t0;
- print(`Evaluated ${requests.length} requests in ${dur.toFixed(0)} ms`);
- print(`\tAverage: ${(dur / requests.length).toFixed(3)} ms per request`);
- if ( expected !== undefined ) {
- print(`\tBlocked: ${expected.reduce((n,r)=>{return r===1?n+1:n;},0)}`);
- print(`\tExcepted: ${expected.reduce((n,r)=>{return r===2?n+1:n;},0)}`);
- }
if ( recorded !== undefined ) {
vAPI.localStorage.setItem(
'FilterContainer.benchmark.results',
JSON.stringify(recorded)
);
}
+
+ const output = [
+ 'Benchmarked static network filtering engine:',
+ `\tEvaluated ${matchCount} match calls in ${dur.toFixed(0)} ms`,
+ `\tAverage: ${(dur / matchCount).toFixed(3)} ms per request`,
+ ];
+ if ( expected !== undefined ) {
+ output.push(
+ `\tBlocked: ${expected.reduce((n,r)=>{return r===1?n+1:n;},0)}`,
+ `\tExcepted: ${expected.reduce((n,r)=>{return r===2?n+1:n;},0)}`,
+ );
+ }
+ const s = output.join('\n');
+ print(s);
+ return s;
};
/******************************************************************************/
diff --git a/src/js/utils.js b/src/js/utils.js
index 9bb0da4ac..83bc19e03 100644
--- a/src/js/utils.js
+++ b/src/js/utils.js
@@ -819,6 +819,11 @@
}
if ( request instanceof Object === false ) { continue; }
if ( !request.frameUrl || !request.url ) { continue; }
+ if ( request.cpt === 'document' ) {
+ request.cpt = 'main_frame';
+ } else if ( request.cpt === 'xhr' ) {
+ request.cpt = 'xmlhttprequest';
+ }
requests.push(request);
}
return requests;