@@ -66,7 +66,6 @@ var reIgnoreComment = /^\[|^!/;
6666var reHostnameRule = / ^ [ 0 - 9 a - z . - ] + [ 0 - 9 a - z ] $ / ;
6767var reHostnameToken = / ^ [ 0 - 9 a - z ] + / g;
6868var reGoodToken = / [ % 0 - 9 a - z ] { 2 , } / g;
69- var reAnyToken = / [ % 0 - 9 a - z ] + / g;
7069
7170var typeNameToTypeValue = {
7271 'stylesheet' : 2 << 11 ,
@@ -682,6 +681,8 @@ var FilterContainer = function() {
682681
683682 // Used during URL matching
684683 this . categoryBuckets = new Array ( 8 ) ;
684+ this . reAnyToken = / [ % 0 - 9 a - z ] + / g;
685+ this . reMatches ;
685686} ;
686687
687688/******************************************************************************/
@@ -1053,8 +1054,8 @@ FilterContainer.prototype.freeze = function() {
10531054
10541055FilterContainer . prototype . matchToken = function ( categoryBucket ) {
10551056 var url = this . url ;
1056- var beg = this . tokenBeg ;
1057- var end = this . tokenEnd ;
1057+ var beg = this . reMatches . index ;
1058+ var end = this . reAnyToken . lastIndex ;
10581059 var right = url . length - end ;
10591060 var f ;
10601061
@@ -1097,6 +1098,31 @@ FilterContainer.prototype.matchToken = function(categoryBucket) {
10971098
10981099/******************************************************************************/
10991100
1101+ FilterContainer . prototype . matchTokens = function ( ) {
1102+ var buckets = this . categoryBuckets ;
1103+ var url = this . url ;
1104+ var re = this . reAnyToken ;
1105+ var i , bucket , f ;
1106+
1107+ re . lastIndex = 0 ;
1108+ while ( this . reMatches = re . exec ( url ) ) {
1109+ i = 8 ;
1110+ while ( i -- ) {
1111+ bucket = buckets [ i ] ;
1112+ if ( bucket === undefined ) {
1113+ continue ;
1114+ }
1115+ f = this . matchToken ( bucket ) ;
1116+ if ( f !== false ) {
1117+ return f ;
1118+ }
1119+ }
1120+ }
1121+ return false ;
1122+ } ;
1123+
1124+ /******************************************************************************/
1125+
11001126FilterContainer . prototype . matchString = function ( pageStats , url , requestType , requestHostname ) {
11011127 // adbProfiler.countUrl();
11021128 // adbProfiler.testCounter(true);
@@ -1119,7 +1145,6 @@ FilterContainer.prototype.matchString = function(pageStats, url, requestType, re
11191145 // This helps performance compared to testing against both classes of
11201146 // filters in the same loop.
11211147
1122- var matches ;
11231148 var pageDomain = pageStats . pageDomain ;
11241149 var party = requestHostname . slice ( - pageDomain . length ) === pageDomain ?
11251150 FirstParty :
@@ -1132,7 +1157,6 @@ FilterContainer.prototype.matchString = function(pageStats, url, requestType, re
11321157
11331158 var categories = this . categories ;
11341159 var categoryBuckets = this . categoryBuckets ;
1135- var i , categoryBucket ;
11361160
11371161 // Test against block filters
11381162 categoryBuckets [ 7 ] = categories [ this . makeCategoryKey ( BlockAnyTypeAnyParty ) ] ;
@@ -1144,27 +1168,7 @@ FilterContainer.prototype.matchString = function(pageStats, url, requestType, re
11441168 categoryBuckets [ 1 ] = categories [ this . makeCategoryKey ( BlockOneParty | type | domainParty ) ] ;
11451169 categoryBuckets [ 0 ] = categories [ this . makeCategoryKey ( BlockOtherParties | type | domainParty ) ] ;
11461170
1147- var bf = false ;
1148-
1149- reAnyToken . lastIndex = 0 ;
1150- while ( matches = reAnyToken . exec ( url ) ) {
1151- this . tokenBeg = matches . index ;
1152- this . tokenEnd = reAnyToken . lastIndex ;
1153- i = 8 ;
1154- while ( i -- ) {
1155- categoryBucket = categoryBuckets [ i ] ;
1156- if ( categoryBucket === undefined ) {
1157- continue ;
1158- }
1159- bf = this . matchToken ( categoryBucket ) ;
1160- if ( bf !== false ) {
1161- break ;
1162- }
1163- }
1164- if ( bf !== false ) {
1165- break ;
1166- }
1167- }
1171+ var bf = this . matchTokens ( ) ;
11681172
11691173 // If there was no block filter, no need to test against allow filters
11701174 if ( bf === false ) {
@@ -1181,20 +1185,8 @@ FilterContainer.prototype.matchString = function(pageStats, url, requestType, re
11811185 categoryBuckets [ 1 ] = categories [ this . makeCategoryKey ( AllowOneParty | type | domainParty ) ] ;
11821186 categoryBuckets [ 0 ] = categories [ this . makeCategoryKey ( AllowOtherParties | type | domainParty ) ] ;
11831187
1184- reAnyToken . lastIndex = 0 ;
1185- while ( matches = reAnyToken . exec ( url ) ) {
1186- this . tokenBeg = matches . index ;
1187- this . tokenEnd = reAnyToken . lastIndex ;
1188- i = 8 ;
1189- while ( i -- ) {
1190- categoryBucket = categoryBuckets [ i ] ;
1191- if ( categoryBucket === undefined ) {
1192- continue ;
1193- }
1194- if ( this . matchToken ( categoryBucket ) !== false ) {
1195- return false ;
1196- }
1197- }
1188+ if ( this . matchTokens ( ) !== false ) {
1189+ return false ;
11981190 }
11991191
12001192 return bf ;
0 commit comments