Index: test/filterClasses.js |
diff --git a/test/filterClasses.js b/test/filterClasses.js |
index a3726337fc282b3f6abdc87ddcd23d025a4fc988..b682efb0e94c2f333a8c88a4d2e542c2709b193f 100644 |
--- a/test/filterClasses.js |
+++ b/test/filterClasses.js |
@@ -44,7 +44,7 @@ exports.setUp = function(callback) |
ElemHideEmulationFilter} = sandboxedRequire("../lib/filterClasses") |
); |
t = RegExpFilter.typeMap; |
- defaultTypes = 0x7FFFFFFF & ~(t.ELEMHIDE | t.DOCUMENT | t.POPUP | |
+ defaultTypes = 0x7FFFFFFF & ~(t.CSP | t.ELEMHIDE | t.DOCUMENT | t.POPUP | |
t.GENERICHIDE | t.GENERICBLOCK); |
callback(); |
@@ -93,6 +93,7 @@ function serializeFilter(filter) |
{ |
result.push("type=filterlist"); |
result.push("collapse=" + filter.collapse); |
+ result.push("csp=" + filter.csp); |
} |
else if (filter instanceof WhitelistFilter) |
result.push("type=whitelist"); |
@@ -141,9 +142,7 @@ function addDefaults(expected) |
if (type == "whitelist" || type == "filterlist") |
{ |
addProperty("contentType", 0x7FFFFFFF & ~( |
- RegExpFilter.typeMap.DOCUMENT | RegExpFilter.typeMap.ELEMHIDE | |
- RegExpFilter.typeMap.POPUP | RegExpFilter.typeMap.GENERICHIDE | |
- RegExpFilter.typeMap.GENERICBLOCK |
+ t.CSP | t.DOCUMENT | t.ELEMHIDE | t.POPUP | t.GENERICHIDE | t.GENERICBLOCK |
)); |
addProperty("matchCase", "false"); |
addProperty("thirdParty", "null"); |
@@ -151,7 +150,10 @@ function addDefaults(expected) |
addProperty("sitekeys", ""); |
} |
if (type == "filterlist") |
+ { |
addProperty("collapse", "null"); |
+ addProperty("csp", "null"); |
+ } |
if (type == "elemhide" || type == "elemhideexception" || |
type == "elemhideemulation") |
{ |
@@ -284,8 +286,9 @@ exports.testSpecialCharacters = function(test) |
exports.testFilterOptions = function(test) |
{ |
- compareFilter(test, "bla$match-case,script,other,third-party,domain=foo.com,sitekey=foo", ["type=filterlist", "text=bla$match-case,script,other,third-party,domain=foo.com,sitekey=foo", "regexp=bla", "matchCase=true", "contentType=" + (t.SCRIPT | t.OTHER), "thirdParty=true", "domains=FOO.COM", "sitekeys=FOO"]); |
- compareFilter(test, "bla$~match-case,~script,~other,~third-party,domain=~bar.com", ["type=filterlist", "text=bla$~match-case,~script,~other,~third-party,domain=~bar.com", "regexp=bla", "contentType=" + (defaultTypes & ~(t.SCRIPT | t.OTHER)), "thirdParty=false", "domains=~BAR.COM"]); |
+ compareFilter(test, "bla$match-case,csp=first csp,script,other,third-party,domain=foo.com,sitekey=foo", ["type=filterlist", "text=bla$match-case,csp=first csp,script,other,third-party,domain=foo.com,sitekey=foo", "regexp=bla", "matchCase=true", "contentType=" + (t.SCRIPT | t.OTHER | t.CSP), "thirdParty=true", "domains=FOO.COM", "sitekeys=FOO", "csp=first csp"]); |
+ compareFilter(test, "bla$~match-case,~csp=csp,~script,~other,~third-party,domain=~bar.com", ["type=filterlist", "text=bla$~match-case,~csp=csp,~script,~other,~third-party,domain=~bar.com", "regexp=bla", "contentType=" + (defaultTypes & ~(t.SCRIPT | t.OTHER)), "thirdParty=false", "domains=~BAR.COM"]); |
+ compareFilter(test, "@@bla$match-case,script,other,third-party,domain=foo.com|bar.com|~bar.foo.com|~foo.bar.com,csp=c s p,sitekey=foo|bar", ["type=whitelist", "text=@@bla$match-case,script,other,third-party,domain=foo.com|bar.com|~bar.foo.com|~foo.bar.com,csp=c s p,sitekey=foo|bar", "regexp=bla", "matchCase=true", "contentType=" + (t.SCRIPT | t.OTHER | t.CSP), "thirdParty=true", "domains=BAR.COM|FOO.COM|~BAR.FOO.COM|~FOO.BAR.COM", "sitekeys=BAR|FOO"]); |
compareFilter(test, "@@bla$match-case,script,other,third-party,domain=foo.com|bar.com|~bar.foo.com|~foo.bar.com,sitekey=foo|bar", ["type=whitelist", "text=@@bla$match-case,script,other,third-party,domain=foo.com|bar.com|~bar.foo.com|~foo.bar.com,sitekey=foo|bar", "regexp=bla", "matchCase=true", "contentType=" + (t.SCRIPT | t.OTHER), "thirdParty=true", "domains=BAR.COM|FOO.COM|~BAR.FOO.COM|~FOO.BAR.COM", "sitekeys=BAR|FOO"]); |
// background and image should be the same for backwards compatibility |
@@ -311,6 +314,13 @@ exports.testFilterOptions = function(test) |
compareFilter(test, "@@bla$image,foobar", ["type=invalid", "text=@@bla$image,foobar", "reason=filter_unknown_option"]); |
compareFilter(test, "@@bla$foobar,image", ["type=invalid", "text=@@bla$foobar,image", "reason=filter_unknown_option"]); |
+ compareFilter(test, "bla$csp=report-uri", ["type=invalid", "text=bla$csp=report-uri", "reason=filter_invalid_csp"]); |
+ compareFilter(test, "bla$csp=foo,csp=report-to", ["type=invalid", "text=bla$csp=foo,csp=report-to", "reason=filter_invalid_csp"]); |
+ compareFilter(test, "bla$csp=foo,csp=referrer foo", ["type=invalid", "text=bla$csp=foo,csp=referrer foo", "reason=filter_invalid_csp"]); |
+ compareFilter(test, "bla$csp=foo,csp=base-uri", ["type=invalid", "text=bla$csp=foo,csp=base-uri", "reason=filter_invalid_csp"]); |
+ compareFilter(test, "bla$csp=foo,csp=upgrade-insecure-requests", ["type=invalid", "text=bla$csp=foo,csp=upgrade-insecure-requests", "reason=filter_invalid_csp"]); |
+ compareFilter(test, "bla$csp=foo,csp=ReFeRReR", ["type=invalid", "text=bla$csp=foo,csp=ReFeRReR", "reason=filter_invalid_csp"]); |
+ |
test.done(); |
}; |
@@ -406,3 +416,62 @@ exports.testElemHideRulesWithBraces = function(test) |
); |
test.done(); |
}; |
+ |
+exports.testFilterNormalization = function(test) |
+{ |
+ // Line breaks etc |
+ test.equal(Filter.normalize("\n\t\nad\ns"), |
+ "ads"); |
+ |
+ // Comment filters |
+ test.equal(Filter.normalize(" ! fo o## bar "), |
+ "! fo o## bar"); |
+ |
+ // Element hiding filters |
+ test.equal(Filter.normalize(" domain.c om## # sele ctor "), |
+ "domain.com### sele ctor"); |
+ |
+ // Regular filters |
+ let normalized = Filter.normalize( |
+ " b$l a$sitekey= foo ,domain= do main.com |foo .com,c sp= c s p " |
+ ); |
+ test.equal( |
+ normalized, |
+ "b$la$sitekey=foo,domain=domain.com|foo.com,csp=c s p" |
+ ); |
+ compareFilter( |
+ test, normalized, [ |
+ "type=filterlist", |
+ "text=" + normalized, |
+ "csp=c s p", |
+ "domains=DOMAIN.COM|FOO.COM", |
+ "sitekeys=FOO", |
+ "regexp=b\\$la", |
+ "contentType=" + t.CSP |
+ ] |
+ ); |
+ |
+ // Some $csp edge cases |
+ test.equal(Filter.normalize("$csp= c s p"), |
+ "$csp=c s p"); |
+ test.equal(Filter.normalize("$$csp= c s p"), |
+ "$$csp=c s p"); |
+ test.equal(Filter.normalize("$$$csp= c s p"), |
+ "$$$csp=c s p"); |
+ test.equal(Filter.normalize("foo?csp=b a r$csp=script-src 'self'"), |
+ "foo?csp=bar$csp=script-src 'self'"); |
+ test.equal(Filter.normalize("foo$bar=c s p = ba z,cs p = script-src 'self'"), |
+ "foo$bar=csp=baz,csp=script-src 'self'"); |
+ test.equal(Filter.normalize("foo$csp=c s p csp= ba z,cs p = script-src 'self'"), |
+ "foo$csp=c s p csp= ba z,csp=script-src 'self'"); |
+ test.equal(Filter.normalize("foo$csp=bar,$c sp=c s p"), |
+ "foo$csp=bar,$csp=c s p"); |
+ test.equal(Filter.normalize(" f o o $ bar $csp=ba r"), |
+ "foo$bar$csp=ba r"); |
+ test.equal(Filter.normalize("f $ o $ o $ csp=f o o "), |
+ "f$o$o$csp=f o o"); |
+ test.equal(Filter.normalize("/foo$/$ csp = script-src http://example.com/?$1=1&$2=2&$3=3"), |
+ "/foo$/$csp=script-src http://example.com/?$1=1&$2=2&$3=3"); |
+ |
+ test.done(); |
+}; |