[Pkg-mozext-commits] [adblock-plus] 46/74: Issue 2738 - Make RegExpFilter.matches() content type parameter a bit mask
David Prévot
taffit at moszumanska.debian.org
Tue Aug 11 12:07:09 UTC 2015
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository adblock-plus.
commit 7dce96a8b76c3d382452f05a3627720b4539110e
Author: Dave Barker <kzar at kzar.co.uk>
Date: Tue Jul 14 16:00:10 2015 +0200
Issue 2738 - Make RegExpFilter.matches() content type parameter a bit mask
---
chrome/content/ui/composer.js | 4 ++--
chrome/content/ui/sendReport.js | 4 ++--
chrome/content/ui/sidebar.js | 4 ++--
lib/contentPolicy.js | 19 ++++++++++++++-----
lib/filterClasses.js | 6 +++---
lib/matcher.js | 22 +++++++++++-----------
lib/notification.js | 4 ++--
7 files changed, 36 insertions(+), 27 deletions(-)
diff --git a/chrome/content/ui/composer.js b/chrome/content/ui/composer.js
index d4e1f16..26e4578 100644
--- a/chrome/content/ui/composer.js
+++ b/chrome/content/ui/composer.js
@@ -279,7 +279,7 @@ function updateFilter()
}
E("shortpatternWarning").hidden = !isSlow;
- E("matchWarning").hidden = compiledFilter instanceof RegExpFilter && compiledFilter.matches(item.location, item.typeDescr, item.docDomain, item.thirdParty);
+ E("matchWarning").hidden = compiledFilter instanceof RegExpFilter && compiledFilter.matches(item.location, RegExpFilter.typeMap[item.typeDescr], item.docDomain, item.thirdParty);
E("filter").value = filter;
}
@@ -318,7 +318,7 @@ function updatePatternSelection()
function testFilter(/**String*/ filter) /**Boolean*/
{
- return RegExpFilter.fromText(filter + "$" + item.typeDescr).matches(item.location, item.typeDescr, item.docDomain, item.thirdParty);
+ return RegExpFilter.fromText(filter + "$" + item.typeDescr).matches(item.location, RegExpFilter.typeMap[item.typeDescr], item.docDomain, item.thirdParty);
}
let anchorStartCheckbox = E("anchorStart");
diff --git a/chrome/content/ui/sendReport.js b/chrome/content/ui/sendReport.js
index ef3e8d1..1ed91ae 100644
--- a/chrome/content/ui/sendReport.js
+++ b/chrome/content/ui/sendReport.js
@@ -927,7 +927,7 @@ let issuesDataSource =
if (request.filter)
continue;
- let filter = disabledMatcher.matchesAny(request.location, request.typeDescr, request.docDomain, request.thirdParty);
+ let filter = disabledMatcher.matchesAny(request.location, RegExpFilter.typeMap[request.typeDescr], request.docDomain, request.thirdParty);
if (filter && !(filter.text in seenFilters))
{
this.disabledFilters.push(filter);
@@ -952,7 +952,7 @@ let issuesDataSource =
if (request.filter)
continue;
- let filter = disabledMatcher.matchesAny(request.location, request.typeDescr, request.docDomain, request.thirdParty);
+ let filter = disabledMatcher.matchesAny(request.location, RegExpFilter.typeMap[request.typeDescr], request.docDomain, request.thirdParty);
if (filter && !(subscription.url in seenSubscriptions))
{
this.disabledSubscriptions.push(subscription);
diff --git a/chrome/content/ui/sidebar.js b/chrome/content/ui/sidebar.js
index 580a267..e3c9994 100644
--- a/chrome/content/ui/sidebar.js
+++ b/chrome/content/ui/sidebar.js
@@ -1094,7 +1094,7 @@ var treeView = {
// Show disabled filters if no other filter applies
if (!item.filter)
- item.filter = disabledMatcher.matchesAny(item.location, item.typeDescr, item.docDomain, item.thirdParty);
+ item.filter = disabledMatcher.matchesAny(item.location, RegExpFilter.typeMap[item.typeDescr], item.docDomain, item.thirdParty);
if (!this.matchesFilter(item))
return;
@@ -1149,7 +1149,7 @@ var treeView = {
if (item.filter instanceof RegExpFilter && item.filter.disabled)
delete item.filter;
if (!item.filter)
- item.filter = disabledMatcher.matchesAny(item.location, item.typeDescr, item.docDomain, item.thirdParty);
+ item.filter = disabledMatcher.matchesAny(item.location, RegExpFilter.typeMap[item.typeDescr], item.docDomain, item.thirdParty);
}
this.refilter();
},
diff --git a/lib/contentPolicy.js b/lib/contentPolicy.js
index b1a49c1..b0498da 100644
--- a/lib/contentPolicy.js
+++ b/lib/contentPolicy.js
@@ -25,7 +25,7 @@ Cu.import("resource://gre/modules/Services.jsm");
let {Utils} = require("utils");
let {Prefs} = require("prefs");
let {FilterStorage} = require("filterStorage");
-let {BlockingFilter, WhitelistFilter} = require("filterClasses");
+let {BlockingFilter, WhitelistFilter, RegExpFilter} = require("filterClasses");
let {defaultMatcher} = require("matcher");
let {objectMouseEventHander} = require("objectTabs");
let {RequestNotifier} = require("requestNotifier");
@@ -67,6 +67,12 @@ let Policy = exports.Policy =
typeDescr: {},
/**
+ * Map of numerical content types with their corresponding masks
+ * @type Object
+ */
+ typeMask: {},
+
+ /**
* Map of localized content type names by their identifiers.
* @type Object
*/
@@ -99,16 +105,19 @@ let Policy = exports.Policy =
this.type[typeName] = id;
this.typeDescr[id] = typeName;
this.localizedDescr[id] = Utils.getString("type_label_" + typeName.toLowerCase());
+ this.typeMask[id] = RegExpFilter.typeMap[typeName];
}
}
this.type.ELEMHIDE = 0xFFFD;
this.typeDescr[0xFFFD] = "ELEMHIDE";
this.localizedDescr[0xFFFD] = Utils.getString("type_label_elemhide");
+ this.typeMask[0xFFFD] = RegExpFilter.typeMap.ELEMHIDE;
this.type.POPUP = 0xFFFE;
this.typeDescr[0xFFFE] = "POPUP";
this.localizedDescr[0xFFFE] = Utils.getString("type_label_popup");
+ this.typeMask[0xFFFE] = RegExpFilter.typeMap.POPUP;
for (let type of nonVisualTypes)
this.nonVisual[this.type[type]] = true;
@@ -199,7 +208,7 @@ let Policy = exports.Policy =
let testWndLocation = parentWndLocation;
parentWndLocation = (testWnd == testWnd.parent ? testWndLocation : getWindowLocation(testWnd.parent));
let parentDocDomain = getHostname(parentWndLocation);
- match = defaultMatcher.matchesAny(testWndLocation, "ELEMHIDE", parentDocDomain, false, sitekey);
+ match = defaultMatcher.matchesAny(testWndLocation, RegExpFilter.typeMap.ELEMHIDE, parentDocDomain, false, sitekey);
if (match instanceof WhitelistFilter)
{
FilterStorage.increaseHitCount(match, wnd);
@@ -231,9 +240,9 @@ let Policy = exports.Policy =
let thirdParty = (contentType == Policy.type.ELEMHIDE ? false : isThirdParty(location, docDomain));
- if (!match && Prefs.enabled)
+ if (!match && Prefs.enabled && contentType in Policy.typeMask)
{
- match = defaultMatcher.matchesAny(locationText, Policy.typeDescr[contentType] || "", docDomain, thirdParty, sitekey);
+ match = defaultMatcher.matchesAny(locationText, Policy.typeMask[contentType], docDomain, thirdParty, sitekey);
if (match instanceof BlockingFilter && node.ownerDocument && !(contentType in Policy.nonVisual))
{
let prefCollapse = (match.collapse != null ? match.collapse : !Prefs.fastcollapse);
@@ -292,7 +301,7 @@ let Policy = exports.Policy =
if (index >= 0)
url = url.substring(0, index);
- let result = defaultMatcher.matchesAny(url, "DOCUMENT", getHostname(parentUrl), false, sitekey);
+ let result = defaultMatcher.matchesAny(url, RegExpFilter.typeMap.DOCUMENT, getHostname(parentUrl), false, sitekey);
return (result instanceof WhitelistFilter ? result : null);
},
diff --git a/lib/filterClasses.js b/lib/filterClasses.js
index 6bc6f29..1932a68 100644
--- a/lib/filterClasses.js
+++ b/lib/filterClasses.js
@@ -625,15 +625,15 @@ RegExpFilter.prototype =
/**
* Tests whether the URL matches this filter
* @param {String} location URL to be tested
- * @param {String} contentType content type identifier of the URL
+ * @param {String} typeMask bitmask of content / request types to match
* @param {String} docDomain domain name of the document that loads the URL
* @param {Boolean} thirdParty should be true if the URL is a third-party request
* @param {String} sitekey public key provided by the document
* @return {Boolean} true in case of a match
*/
- matches: function(location, contentType, docDomain, thirdParty, sitekey)
+ matches: function(location, typeMask, docDomain, thirdParty, sitekey)
{
- if ((RegExpFilter.typeMap[contentType] & this.contentType) != 0 &&
+ if (this.contentType & typeMask &&
(this.thirdParty == null || this.thirdParty == thirdParty) &&
this.isActiveOnDomain(docDomain, sitekey) && this.regexp.test(location))
{
diff --git a/lib/matcher.js b/lib/matcher.js
index 8494b6e..3aedf9b 100644
--- a/lib/matcher.js
+++ b/lib/matcher.js
@@ -165,13 +165,13 @@ Matcher.prototype = {
/**
* Checks whether the entries for a particular keyword match a URL
*/
- _checkEntryMatch: function(keyword, location, contentType, docDomain, thirdParty, sitekey)
+ _checkEntryMatch: function(keyword, location, typeMask, docDomain, thirdParty, sitekey)
{
let list = this.filterByKeyword[keyword];
for (let i = 0; i < list.length; i++)
{
let filter = list[i];
- if (filter.matches(location, contentType, docDomain, thirdParty, sitekey))
+ if (filter.matches(location, typeMask, docDomain, thirdParty, sitekey))
return filter;
}
return null;
@@ -180,13 +180,13 @@ Matcher.prototype = {
/**
* Tests whether the URL matches any of the known filters
* @param {String} location URL to be tested
- * @param {String} contentType content type identifier of the URL
+ * @param {String} typeMask bitmask of content / request types to match
* @param {String} docDomain domain name of the document that loads the URL
* @param {Boolean} thirdParty should be true if the URL is a third-party request
* @param {String} sitekey public key provided by the document
* @return {RegExpFilter} matching filter or null
*/
- matchesAny: function(location, contentType, docDomain, thirdParty, sitekey)
+ matchesAny: function(location, typeMask, docDomain, thirdParty, sitekey)
{
let candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g);
if (candidates === null)
@@ -197,7 +197,7 @@ Matcher.prototype = {
let substr = candidates[i];
if (substr in this.filterByKeyword)
{
- let result = this._checkEntryMatch(substr, location, contentType, docDomain, thirdParty, sitekey);
+ let result = this._checkEntryMatch(substr, location, typeMask, docDomain, thirdParty, sitekey);
if (result)
return result;
}
@@ -347,7 +347,7 @@ CombinedMatcher.prototype =
* simultaneously. For parameters see Matcher.matchesAny().
* @see Matcher#matchesAny
*/
- matchesAnyInternal: function(location, contentType, docDomain, thirdParty, sitekey)
+ matchesAnyInternal: function(location, typeMask, docDomain, thirdParty, sitekey)
{
let candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g);
if (candidates === null)
@@ -360,12 +360,12 @@ CombinedMatcher.prototype =
let substr = candidates[i];
if (substr in this.whitelist.filterByKeyword)
{
- let result = this.whitelist._checkEntryMatch(substr, location, contentType, docDomain, thirdParty, sitekey);
+ let result = this.whitelist._checkEntryMatch(substr, location, typeMask, docDomain, thirdParty, sitekey);
if (result)
return result;
}
if (substr in this.blacklist.filterByKeyword && blacklistHit === null)
- blacklistHit = this.blacklist._checkEntryMatch(substr, location, contentType, docDomain, thirdParty, sitekey);
+ blacklistHit = this.blacklist._checkEntryMatch(substr, location, typeMask, docDomain, thirdParty, sitekey);
}
return blacklistHit;
},
@@ -373,13 +373,13 @@ CombinedMatcher.prototype =
/**
* @see Matcher#matchesAny
*/
- matchesAny: function(location, contentType, docDomain, thirdParty, sitekey)
+ matchesAny: function(location, typeMask, docDomain, thirdParty, sitekey)
{
- let key = location + " " + contentType + " " + docDomain + " " + thirdParty + " " + sitekey;
+ let key = location + " " + typeMask + " " + docDomain + " " + thirdParty + " " + sitekey;
if (key in this.resultCache)
return this.resultCache[key];
- let result = this.matchesAnyInternal(location, contentType, docDomain, thirdParty, sitekey);
+ let result = this.matchesAnyInternal(location, typeMask, docDomain, thirdParty, sitekey);
if (this.cacheEntries >= CombinedMatcher.maxCacheEntries)
{
diff --git a/lib/notification.js b/lib/notification.js
index 0c80f78..bcae075 100644
--- a/lib/notification.js
+++ b/lib/notification.js
@@ -25,7 +25,7 @@ let {Prefs} = require("prefs");
let {Downloader, Downloadable, MILLIS_IN_MINUTE, MILLIS_IN_HOUR, MILLIS_IN_DAY} = require("downloader");
let {Utils} = require("utils");
let {Matcher} = require("matcher");
-let {Filter} = require("filterClasses");
+let {Filter, RegExpFilter} = require("filterClasses");
let INITIAL_DELAY = 1 * MILLIS_IN_MINUTE;
let CHECK_INTERVAL = 1 * MILLIS_IN_HOUR;
@@ -222,7 +222,7 @@ let Notification = exports.Notification =
let matcher = new Matcher();
for (let urlFilter of notification.urlFilters)
matcher.add(Filter.fromText(urlFilter));
- if (!matcher.matchesAny(url, "DOCUMENT", url))
+ if (!matcher.matchesAny(url, RegExpFilter.typeMap.DOCUMENT, url))
continue;
}
else
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/adblock-plus.git
More information about the Pkg-mozext-commits
mailing list