Index: lib/contentPolicy.js |
diff --git a/lib/contentPolicy.js b/lib/contentPolicy.js |
index b0498da6ec3bf66b35e35d8d8114e99ad3477707..e88ba5f15786c6cbf575d9dcb4a42650ac497a47 100644 |
--- a/lib/contentPolicy.js |
+++ b/lib/contentPolicy.js |
@@ -162,6 +162,9 @@ let Policy = exports.Policy = |
let docDomain = getHostname(wndLocation); |
let match = null; |
let [sitekey, sitekeyWnd] = getSitekey(wnd); |
+ let genericblock = null; |
+ let generichide = null; |
Wladimir Palant
2015/09/03 13:09:42
It's either a blocking rule or hiding rule - so at
kzar
2015/09/05 14:39:58
Done.
|
+ |
if (!match && Prefs.enabled) |
{ |
let testWnd = wnd; |
@@ -181,6 +184,24 @@ let Policy = exports.Policy = |
return true; |
} |
+ if (contentType != Policy.type.ELEMHIDE) |
+ { |
+ let parentDocDomain = getHostname(parentWndLocation); |
+ let genericblockMatch = defaultMatcher.matchesAny( |
+ testWndLocation, RegExpFilter.typeMap.GENERICBLOCK, |
+ parentDocDomain, false, testSitekey |
+ ); |
+ if (genericblockMatch instanceof WhitelistFilter) |
+ { |
+ genericblock = { |
+ match: genericblockMatch, |
+ parentDocDomain: parentDocDomain, |
+ testWnd: testWnd, |
+ testWndLocation: testWndLocation |
+ }; |
+ } |
+ } |
+ |
if (testWnd.parent == testWnd) |
break; |
@@ -208,7 +229,9 @@ let Policy = exports.Policy = |
let testWndLocation = parentWndLocation; |
parentWndLocation = (testWnd == testWnd.parent ? testWndLocation : getWindowLocation(testWnd.parent)); |
let parentDocDomain = getHostname(parentWndLocation); |
+ |
match = defaultMatcher.matchesAny(testWndLocation, RegExpFilter.typeMap.ELEMHIDE, parentDocDomain, false, sitekey); |
+ |
if (match instanceof WhitelistFilter) |
{ |
FilterStorage.increaseHitCount(match, wnd); |
@@ -216,6 +239,20 @@ let Policy = exports.Policy = |
return true; |
} |
+ let generichideMatch = defaultMatcher.matchesAny( |
+ testWndLocation, RegExpFilter.typeMap.GENERICHIDE, |
+ parentDocDomain, false, sitekey |
+ ); |
+ if (generichideMatch instanceof WhitelistFilter) |
+ { |
+ generichide = { |
+ match: generichideMatch, |
+ parentDocDomain: parentDocDomain, |
+ testWnd: testWnd, |
+ testWndLocation: testWndLocation |
+ }; |
+ } |
Wladimir Palant
2015/09/03 13:09:42
This is simply duplicating the logic from above. I
kzar
2015/09/05 14:39:58
Done.
|
+ |
if (testWnd.parent == testWnd) |
break; |
else |
@@ -236,6 +273,19 @@ let Policy = exports.Policy = |
RequestNotifier.addNodeData(node, topWnd, contentType, docDomain, false, locationText, exception); |
return true; |
} |
+ |
+ if (generichide && match && match.isGeneric()) |
+ { |
+ FilterStorage.increaseHitCount(generichide.match, wnd); |
+ RequestNotifier.addNodeData( |
+ generichide.testWnd.document, |
+ topWnd, contentType, |
+ generichide.parentDocDomain, |
+ false, generichide.testWndLocation, |
+ generichide.match |
+ ); |
+ return true; |
+ } |
} |
let thirdParty = (contentType == Policy.type.ELEMHIDE ? false : isThirdParty(location, docDomain)); |
@@ -243,11 +293,27 @@ let Policy = exports.Policy = |
if (!match && Prefs.enabled && contentType in Policy.typeMask) |
{ |
match = defaultMatcher.matchesAny(locationText, Policy.typeMask[contentType], docDomain, thirdParty, sitekey); |
- if (match instanceof BlockingFilter && node.ownerDocument && !(contentType in Policy.nonVisual)) |
+ if (match instanceof BlockingFilter) |
{ |
- let prefCollapse = (match.collapse != null ? match.collapse : !Prefs.fastcollapse); |
- if (collapse || prefCollapse) |
- schedulePostProcess(node); |
+ if (genericblock && match.isGeneric()) |
Wladimir Palant
2015/09/03 13:09:43
What if there are multiple filters potentially mat
kzar
2015/09/04 15:49:10
Hmm good point, any suggestions? In the other revi
Wladimir Palant
2015/09/04 16:16:23
Why another search? Just pass specificOnly and be
kzar
2015/09/05 14:39:58
Oh, of course! Done.
|
+ { |
+ FilterStorage.increaseHitCount(genericblock.match, wnd); |
+ RequestNotifier.addNodeData( |
+ genericblock.testWnd.document, |
+ topWnd, contentType, |
+ genericblock.parentDocDomain, |
+ false, genericblock.testWndLocation, |
+ genericblock.match |
+ ); |
+ return true; |
+ } |
+ |
+ if (node.ownerDocument && !(contentType in Policy.nonVisual)) |
+ { |
+ let prefCollapse = (match.collapse != null ? match.collapse : !Prefs.fastcollapse); |
+ if (collapse || prefCollapse) |
+ schedulePostProcess(node); |
+ } |
} |
// Track mouse events for objects |