From 7912e919b60a732c224b19f77428060f36bda2ae Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Thu, 26 Sep 2019 12:40:56 -0400 Subject: [PATCH] Code review of session filters commit Related commits: - https://github.com/gorhill/uBlock/commit/46d36cb0b065c5aa163b2ff2b416c982b765252b - https://github.com/gorhill/uBlock/commit/59c9a34d34a737f6bb48c4130c65f4fe0fa73806 --- src/js/cosmetic-filtering.js | 8 +++++++- src/js/html-filtering.js | 9 ++++++++- src/js/messaging.js | 7 ++----- src/js/scriptlet-filtering.js | 9 ++++++++- src/js/static-ext-filtering.js | 3 +++ 5 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/js/cosmetic-filtering.js b/src/js/cosmetic-filtering.js index f9c1a79a1..468cae28c 100644 --- a/src/js/cosmetic-filtering.js +++ b/src/js/cosmetic-filtering.js @@ -205,7 +205,13 @@ const FilterContainer = function() { this.specificFilters = new µb.staticExtFilteringEngine.HostnameBasedDB(2); // temporary filters - this.sessionFilterDB = new µb.staticExtFilteringEngine.SessionDB(); + this.sessionFilterDB = new ( + class extends µb.staticExtFilteringEngine.SessionDB { + compile(s) { + return µb.staticExtFilteringEngine.compileSelector(s); + } + } + )(); // low generic cosmetic filters, organized by id/class then simple/complex. this.lowlyGeneric = Object.create(null); diff --git a/src/js/html-filtering.js b/src/js/html-filtering.js index 338d5e18d..ba47229cd 100644 --- a/src/js/html-filtering.js +++ b/src/js/html-filtering.js @@ -29,7 +29,14 @@ const duplicates = new Set(); const filterDB = new µb.staticExtFilteringEngine.HostnameBasedDB(2); - const sessionFilterDB = new µb.staticExtFilteringEngine.SessionDB(); + const sessionFilterDB = new ( + class extends µb.staticExtFilteringEngine.SessionDB { + compile(s) { + return µb.staticExtFilteringEngine.compileSelector(s.slice(1)); + } + } + )(); + let acceptedCount = 0; let discardedCount = 0; let docRegister; diff --git a/src/js/messaging.js b/src/js/messaging.js index 9ddcd968d..cb70dcfef 100644 --- a/src/js/messaging.js +++ b/src/js/messaging.js @@ -1282,21 +1282,18 @@ const getURLFilteringData = function(details) { const compileTemporaryException = function(filter) { const match = /#@?#/.exec(filter); if ( match === null ) { return; } - let selector = filter.slice(match.index + match[0].length); + let selector = filter.slice(match.index + match[0].length).trim(); let session; if ( selector.startsWith('+js') ) { session = µb.scriptletFilteringEngine.getSession(); - selector = selector.slice(4, -1).trim(); } else { if ( selector.startsWith('^') ) { session = µb.htmlFilteringEngine.getSession(); - selector = selector.slice(1).trim(); } else { session = µb.cosmeticFilteringEngine.getSession(); } - selector = µb.staticExtFilteringEngine.compileSelector(selector); } - return { session, selector }; + return { session, selector: session.compile(selector) }; }; const toggleTemporaryException = function(details) { diff --git a/src/js/scriptlet-filtering.js b/src/js/scriptlet-filtering.js index 29a630dc5..56907f6ee 100644 --- a/src/js/scriptlet-filtering.js +++ b/src/js/scriptlet-filtering.js @@ -30,7 +30,14 @@ const reEscapeScriptArg = /[\\'"]/g; const scriptletDB = new µb.staticExtFilteringEngine.HostnameBasedDB(1); - const sessionScriptletDB = new µb.staticExtFilteringEngine.SessionDB(); + const sessionScriptletDB = new ( + class extends µb.staticExtFilteringEngine.SessionDB { + compile(s) { + return s.slice(4, -1).trim(); + } + } + )(); + let acceptedCount = 0; let discardedCount = 0; diff --git a/src/js/static-ext-filtering.js b/src/js/static-ext-filtering.js index 087f2da07..fb13a6488 100644 --- a/src/js/static-ext-filtering.js +++ b/src/js/static-ext-filtering.js @@ -643,6 +643,9 @@ constructor() { this.db = new Map(); } + compile(s) { + return s; + } add(bits, s) { const bucket = this.db.get(bits); if ( bucket === undefined ) {