[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