Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: lib/matcher.js

Issue 9046035: Removed Do-Not-Track handling (Closed)
Patch Set: Created Dec. 18, 2012, 2:06 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/contentPolicy.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of the Adblock Plus, 2 * This file is part of the Adblock Plus,
3 * Copyright (C) 2006-2012 Eyeo GmbH 3 * Copyright (C) 2006-2012 Eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 delete this.keywordByFilter[filter.text]; 101 delete this.keywordByFilter[filter.text];
102 }, 102 },
103 103
104 /** 104 /**
105 * Chooses a keyword to be associated with the filter 105 * Chooses a keyword to be associated with the filter
106 * @param {String} text text representation of the filter 106 * @param {String} text text representation of the filter
107 * @return {String} keyword (might be empty string) 107 * @return {String} keyword (might be empty string)
108 */ 108 */
109 findKeyword: function(filter) 109 findKeyword: function(filter)
110 { 110 {
111 // For donottrack filters use "donottrack" as keyword if nothing else matche s 111 let result = "";
112 let defaultResult = (filter.contentType & RegExpFilter.typeMap.DONOTTRACK ? "donottrack" : "");
113
114 let text = filter.text; 112 let text = filter.text;
115 if (Filter.regexpRegExp.test(text)) 113 if (Filter.regexpRegExp.test(text))
116 return defaultResult; 114 return result;
117 115
118 // Remove options 116 // Remove options
119 let match = Filter.optionsRegExp.exec(text); 117 let match = Filter.optionsRegExp.exec(text);
120 if (match) 118 if (match)
121 text = match.input.substr(0, match.index); 119 text = match.input.substr(0, match.index);
122 120
123 // Remove whitelist marker 121 // Remove whitelist marker
124 if (text.substr(0, 2) == "@@") 122 if (text.substr(0, 2) == "@@")
125 text = text.substr(2); 123 text = text.substr(2);
126 124
127 let candidates = text.toLowerCase().match(/[^a-z0-9%*][a-z0-9%]{3,}(?=[^a-z0 -9%*])/g); 125 let candidates = text.toLowerCase().match(/[^a-z0-9%*][a-z0-9%]{3,}(?=[^a-z0 -9%*])/g);
128 if (!candidates) 126 if (!candidates)
129 return defaultResult; 127 return result;
130 128
131 let hash = this.filterByKeyword; 129 let hash = this.filterByKeyword;
132 let result = defaultResult;
133 let resultCount = 0xFFFFFF; 130 let resultCount = 0xFFFFFF;
134 let resultLength = 0; 131 let resultLength = 0;
135 for (let i = 0, l = candidates.length; i < l; i++) 132 for (let i = 0, l = candidates.length; i < l; i++)
136 { 133 {
137 let candidate = candidates[i].substr(1); 134 let candidate = candidates[i].substr(1);
138 let count = (candidate in hash ? hash[candidate].length : 0); 135 let count = (candidate in hash ? hash[candidate].length : 0);
139 if (count < resultCount || (count == resultCount && candidate.length > res ultLength)) 136 if (count < resultCount || (count == resultCount && candidate.length > res ultLength))
140 { 137 {
141 result = candidate; 138 result = candidate;
142 resultCount = count; 139 resultCount = count;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 * @param {String} contentType content type identifier of the URL 183 * @param {String} contentType content type identifier of the URL
187 * @param {String} docDomain domain name of the document that loads the URL 184 * @param {String} docDomain domain name of the document that loads the URL
188 * @param {Boolean} thirdParty should be true if the URL is a third-party requ est 185 * @param {Boolean} thirdParty should be true if the URL is a third-party requ est
189 * @return {RegExpFilter} matching filter or null 186 * @return {RegExpFilter} matching filter or null
190 */ 187 */
191 matchesAny: function(location, contentType, docDomain, thirdParty) 188 matchesAny: function(location, contentType, docDomain, thirdParty)
192 { 189 {
193 let candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g); 190 let candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g);
194 if (candidates === null) 191 if (candidates === null)
195 candidates = []; 192 candidates = [];
196 if (contentType == "DONOTTRACK") 193 candidates.push("");
197 candidates.unshift("donottrack");
198 else
199 candidates.push("");
200 for (let i = 0, l = candidates.length; i < l; i++) 194 for (let i = 0, l = candidates.length; i < l; i++)
201 { 195 {
202 let substr = candidates[i]; 196 let substr = candidates[i];
203 if (substr in this.filterByKeyword) 197 if (substr in this.filterByKeyword)
204 { 198 {
205 let result = this._checkEntryMatch(substr, location, contentType, docDom ain, thirdParty); 199 let result = this._checkEntryMatch(substr, location, contentType, docDom ain, thirdParty);
206 if (result) 200 if (result)
207 return result; 201 return result;
208 } 202 }
209 } 203 }
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 /** 368 /**
375 * Optimized filter matching testing both whitelist and blacklist matchers 369 * Optimized filter matching testing both whitelist and blacklist matchers
376 * simultaneously. For parameters see Matcher.matchesAny(). 370 * simultaneously. For parameters see Matcher.matchesAny().
377 * @see Matcher#matchesAny 371 * @see Matcher#matchesAny
378 */ 372 */
379 matchesAnyInternal: function(location, contentType, docDomain, thirdParty) 373 matchesAnyInternal: function(location, contentType, docDomain, thirdParty)
380 { 374 {
381 let candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g); 375 let candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g);
382 if (candidates === null) 376 if (candidates === null)
383 candidates = []; 377 candidates = [];
384 if (contentType == "DONOTTRACK") 378 candidates.push("");
385 candidates.unshift("donottrack");
386 else
387 candidates.push("");
388 379
389 let blacklistHit = null; 380 let blacklistHit = null;
390 for (let i = 0, l = candidates.length; i < l; i++) 381 for (let i = 0, l = candidates.length; i < l; i++)
391 { 382 {
392 let substr = candidates[i]; 383 let substr = candidates[i];
393 if (substr in this.whitelist.filterByKeyword) 384 if (substr in this.whitelist.filterByKeyword)
394 { 385 {
395 let result = this.whitelist._checkEntryMatch(substr, location, contentTy pe, docDomain, thirdParty); 386 let result = this.whitelist._checkEntryMatch(substr, location, contentTy pe, docDomain, thirdParty);
396 if (result) 387 if (result)
397 return result; 388 return result;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 else 433 else
443 return null; 434 return null;
444 } 435 }
445 } 436 }
446 437
447 /** 438 /**
448 * Shared CombinedMatcher instance that should usually be used. 439 * Shared CombinedMatcher instance that should usually be used.
449 * @type CombinedMatcher 440 * @type CombinedMatcher
450 */ 441 */
451 let defaultMatcher = exports.defaultMatcher = new CombinedMatcher(); 442 let defaultMatcher = exports.defaultMatcher = new CombinedMatcher();
OLDNEW
« no previous file with comments | « lib/contentPolicy.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld