| Index: lib/matcher.js | 
| =================================================================== | 
| --- a/lib/matcher.js | 
| +++ b/lib/matcher.js | 
| @@ -417,16 +417,61 @@ | 
| result = candidate; | 
| resultCount = count; | 
| resultLength = candidate.length; | 
| } | 
| } | 
| return result; | 
| } | 
| + _matchFilterWithoutDomain(filter, location, typeMask, thirdParty, sitekey, | 
| + collection) | 
| + { | 
| + if (filter.matchesWithoutDomain(location, typeMask, thirdParty, sitekey)) | 
| + { | 
| + if (!collection) | 
| + return filter; | 
| + | 
| + collection.push(filter); | 
| + } | 
| + | 
| + return null; | 
| + } | 
| + | 
| + _matchFiltersByDomain(filtersByDomain, location, typeMask, docDomain, | 
| + thirdParty, sitekey, specificOnly, collection) | 
| + { | 
| + let excluded = new Set(); | 
| + | 
| + for (let suffix of domainSuffixes(docDomain ? | 
| + normalizeHostname(docDomain) : "", | 
| + !specificOnly)) | 
| + { | 
| + let filters = filtersByDomain.get(suffix); | 
| + if (filters) | 
| + { | 
| + for (let [filter, include] of filters.entries()) | 
| + { | 
| + if (!include) | 
| + { | 
| + excluded.add(filter); | 
| + } | 
| + else if ((excluded.size == 0 || !excluded.has(filter)) && | 
| + filter.matchesWithoutDomain(location, typeMask, thirdParty, | 
| + sitekey, collection)) | 
| + { | 
| + return filter; | 
| + } | 
| + } | 
| + } | 
| + } | 
| + | 
| + return null; | 
| + } | 
| + | 
| _checkEntryMatchSimple(keyword, location, typeMask, docDomain, thirdParty, | 
| sitekey, specificOnly, collection) | 
| { | 
| let filters = this._simpleFiltersByKeyword.get(keyword); | 
| if (filters) | 
| { | 
| let lowerCaseLocation = location.toLowerCase(); | 
| @@ -479,59 +524,28 @@ | 
| } | 
| _checkEntryMatchByDomain(keyword, location, typeMask, docDomain, thirdParty, | 
| sitekey, specificOnly, collection) | 
| { | 
| let filtersByDomain = this._filterDomainMapsByKeyword.get(keyword); | 
| if (filtersByDomain) | 
| { | 
| - // Because of the memory optimization in the add function, most of the | 
| - // time this will be a filter rather than a map. | 
| - if (!(filtersByDomain instanceof Map)) | 
| + if (filtersByDomain instanceof Map) | 
| { | 
| - if (filtersByDomain.matchesWithoutDomain(location, typeMask, | 
| - thirdParty, sitekey)) | 
| - { | 
| - if (!collection) | 
| - return filtersByDomain; | 
| - | 
| - collection.push(filtersByDomain); | 
| - } | 
| - | 
| - return null; | 
| + return this._matchFiltersByDomain(filtersByDomain, location, typeMask, | 
| + docDomain, thirdParty, sitekey, | 
| + specificOnly, collection); | 
| } | 
| - let excluded = new Set(); | 
| - | 
| - for (let suffix of domainSuffixes(docDomain ? | 
| - normalizeHostname(docDomain) : "", | 
| - !specificOnly)) | 
| - { | 
| - let filters = filtersByDomain.get(suffix); | 
| - if (filters) | 
| - { | 
| - for (let [filter, include] of filters.entries()) | 
| - { | 
| - if (!include) | 
| - { | 
| - excluded.add(filter); | 
| - } | 
| - else if ((excluded.size == 0 || !excluded.has(filter)) && | 
| - filter.matchesWithoutDomain(location, typeMask, | 
| - thirdParty, sitekey)) | 
| - { | 
| - if (!collection) | 
| - return filter; | 
| - | 
| - collection.push(filter); | 
| - } | 
| - } | 
| - } | 
| - } | 
| + // Because of the memory optimization in the add function, most of the | 
| + // time this will be a filter rather than a map. | 
| + return this._matchFilterWithoutDomain(filtersByDomain, location, | 
| + typeMask, thirdParty, sitekey, | 
| + collection); | 
| } | 
| return null; | 
| } | 
| /** | 
| * Checks whether the entries for a particular keyword match a URL | 
| * @param {string} keyword |