diff options
Diffstat (limited to 'toolkit/modules/tests/xpcshell/test_MatchURLFilters.js')
-rw-r--r-- | toolkit/modules/tests/xpcshell/test_MatchURLFilters.js | 396 |
1 files changed, 0 insertions, 396 deletions
diff --git a/toolkit/modules/tests/xpcshell/test_MatchURLFilters.js b/toolkit/modules/tests/xpcshell/test_MatchURLFilters.js deleted file mode 100644 index 52e03a6cc..000000000 --- a/toolkit/modules/tests/xpcshell/test_MatchURLFilters.js +++ /dev/null @@ -1,396 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; - -Components.utils.import("resource://gre/modules/MatchPattern.jsm"); -Components.utils.import("resource://gre/modules/Services.jsm"); - -function createTestFilter({url, filters}) { - let m = new MatchURLFilters(filters); - return m.matches(url); -} - -function expectPass({url, filters}) { - ok(createTestFilter({url, filters}), - `Expected match: ${JSON.stringify(filters)}, ${url}`); -} - -function expectFail({url, filters}) { - ok(!createTestFilter({url, filters}), - `Expected no match: ${JSON.stringify(filters)}, ${url}`); -} - -function expectThrow({url, filters, exceptionMessageContains}) { - let logData = {filters, url}; - - Assert.throws( - () => { - createTestFilter({url, filters}); - }, - exceptionMessageContains, - `Check received exception for expected message: ${JSON.stringify(logData)}` - ); -} - -add_task(function* test_match_url_filters() { - const shouldPass = true; - const shouldFail = true; - const shouldThrow = true; - - var testCases = [ - // Empty, undefined and null filters. - {shouldThrow, exceptionMessageContains: "filters array should not be empty", - filters: [], url: "http://mozilla.org", }, - {shouldThrow, exceptionMessageContains: "filters should be an array", - filters: undefined, url: "http://mozilla.org"}, - {shouldThrow, exceptionMessageContains: "filters should be an array", - filters: null, url: "http://mozilla.org"}, - - // Wrong formats (in a real webextension this will be blocked by the schema validation). - {shouldThrow, exceptionMessageContains: "filters should be an array", filters: {}, - url: "http://mozilla.org"}, - {shouldThrow, exceptionMessageContains: "filters should be an array", - filters: {nonExistentCriteria: true}, url: "http://mozilla.org", }, - {shouldPass, filters: [{nonExistentCriteria: true}], url: "http://mozilla.org"}, - - // Schemes filter over various url schemes. - {shouldPass, filters: [{schemes: ["http"]}], url: "http://mozilla.org"}, - {shouldPass, filters: [{schemes: ["https"]}], url: "https://mozilla.org"}, - {shouldPass, filters: [{schemes: ["ftp"]}], url: "ftp://fake/ftp/url"}, - {shouldPass, filters: [{schemes: ["about"]}], url: "about:blank"}, - {shouldPass, filters: [{schemes: ["data"]}], url: "data:,testDataURL"}, - {shouldFail, filters: [{schemes: ["http"]}], url: "ftp://fake/ftp/url"}, - - // Multiple schemes: pass when at least one scheme matches. - {shouldPass, filters: [{schemes: ["https", "about"]}], url: "https://mozilla.org"}, - {shouldPass, filters: [{schemes: ["about", "https"]}], url: "https://mozilla.org"}, - {shouldFail, filters: [{schemes: ["about", "http"]}], url: "https://mozilla.org"}, - - // Port filter: standard (implicit) ports. - {shouldPass, filters: [{ports: [443]}], url: "https://mozilla.org"}, - {shouldPass, filters: [{ports: [80]}], url: "http://mozilla.org"}, - {shouldPass, filters: [{ports: [21]}], url: "ftp://ftp.mozilla.org"}, - - // Port filter: schemes without a default port. - {shouldFail, filters: [{ports: [-1]}], url: "about:blank"}, - {shouldFail, filters: [{ports: [-1]}], url: "data:,testDataURL"}, - - {shouldFail, filters: [{ports: [[1, 65535]]}], url: "about:blank"}, - {shouldFail, filters: [{ports: [[1, 65535]]}], url: "data:,testDataURL"}, - - // Host filters (hostEquals, hostContains, hostPrefix, hostSuffix): schemes with an host. - {shouldFail, filters: [{hostEquals: ""}], url: "https://mozilla.org"}, - {shouldPass, filters: [{hostEquals: null}], url: "https://mozilla.org"}, - {shouldPass, filters: [{hostEquals: "mozilla.org"}], url: "https://mozilla.org"}, - {shouldFail, filters: [{hostEquals: "mozilla.com"}], url: "https://mozilla.org"}, - // NOTE: trying at least once another valid protocol. - {shouldPass, filters: [{hostEquals: "mozilla.org"}], url: "ftp://mozilla.org"}, - {shouldFail, filters: [{hostEquals: "mozilla.com"}], url: "ftp://mozilla.org"}, - {shouldPass, filters: [{hostEquals: "mozilla.org"}], url: "https://mozilla.org:8888"}, - - {shouldPass, filters: [{hostContains: "moz"}], url: "https://mozilla.org"}, - // NOTE: an implicit '.' char is inserted into the host. - {shouldPass, filters: [{hostContains: ".moz"}], url: "https://mozilla.org"}, - {shouldFail, filters: [{hostContains: "com"}], url: "https://mozilla.org"}, - {shouldPass, filters: [{hostContains: ""}], url: "https://mozilla.org"}, - {shouldPass, filters: [{hostContains: null}], url: "https://mozilla.org"}, - - {shouldPass, filters: [{hostPrefix: "moz"}], url: "https://mozilla.org"}, - {shouldFail, filters: [{hostPrefix: "org"}], url: "https://mozilla.org"}, - {shouldPass, filters: [{hostPrefix: ""}], url: "https://mozilla.org"}, - {shouldPass, filters: [{hostPrefix: null}], url: "https://mozilla.org"}, - - {shouldPass, filters: [{hostSuffix: ".org"}], url: "https://mozilla.org"}, - {shouldFail, filters: [{hostSuffix: "moz"}], url: "https://mozilla.org"}, - {shouldPass, filters: [{hostSuffix: ""}], url: "https://mozilla.org"}, - {shouldPass, filters: [{hostSuffix: null}], url: "https://mozilla.org"}, - {shouldPass, filters: [{hostSuffix: "lla.org"}], url: "https://mozilla.org:8888"}, - - // hostEquals: urls without an host. - // TODO: should we explicitly cover hostContains, hostPrefix, hostSuffix for - // these sub-cases? - {shouldFail, filters: [{hostEquals: "blank"}], url: "about:blank"}, - {shouldFail, filters: [{hostEquals: "blank"}], url: "about://blank"}, - {shouldFail, filters: [{hostEquals: "testDataURL"}], url: "data:,testDataURL"}, - {shouldPass, filters: [{hostEquals: ""}], url: "about:blank"}, - {shouldPass, filters: [{hostEquals: ""}], url: "about://blank"}, - {shouldPass, filters: [{hostEquals: ""}], url: "data:,testDataURL"}, - - // Path filters (pathEquals, pathContains, pathPrefix, pathSuffix). - {shouldFail, filters: [{pathEquals: ""}], url: "https://mozilla.org/test/path"}, - {shouldPass, filters: [{pathEquals: null}], url: "https://mozilla.org/test/path"}, - {shouldPass, filters: [{pathEquals: "/test/path"}], url: "https://mozilla.org/test/path"}, - {shouldFail, filters: [{pathEquals: "/wrong/path"}], url: "https://mozilla.org/test/path"}, - {shouldPass, filters: [{pathEquals: "/test/path"}], url: "https://mozilla.org:8888/test/path"}, - // NOTE: trying at least once another valid protocol - {shouldPass, filters: [{pathEquals: "/test/path"}], url: "ftp://mozilla.org/test/path"}, - {shouldFail, filters: [{pathEquals: "/wrong/path"}], url: "ftp://mozilla.org/test/path"}, - - {shouldPass, filters: [{pathContains: "st/"}], url: "https://mozilla.org/test/path"}, - {shouldPass, filters: [{pathContains: "/test"}], url: "https://mozilla.org/test/path"}, - {shouldFail, filters: [{pathContains: "org"}], url: "https://mozilla.org/test/path"}, - {shouldPass, filters: [{pathContains: ""}], url: "https://mozilla.org/test/path"}, - {shouldPass, filters: [{pathContains: null}], url: "https://mozilla.org/test/path"}, - {shouldFail, filters: [{pathContains: "param"}], url: "https://mozilla.org:8888/test/path?param=1"}, - {shouldFail, filters: [{pathContains: "ref"}], url: "https://mozilla.org:8888/test/path#ref"}, - {shouldPass, filters: [{pathContains: "st/pa"}], url: "https://mozilla.org:8888/test/path"}, - - {shouldPass, filters: [{pathPrefix: "/te"}], url: "https://mozilla.org/test/path"}, - {shouldFail, filters: [{pathPrefix: "org/"}], url: "https://mozilla.org/test/path"}, - {shouldPass, filters: [{pathPrefix: ""}], url: "https://mozilla.org/test/path"}, - {shouldPass, filters: [{pathPrefix: null}], url: "https://mozilla.org/test/path"}, - - {shouldPass, filters: [{pathSuffix: "/path"}], url: "https://mozilla.org/test/path"}, - {shouldFail, filters: [{pathSuffix: "th/"}], url: "https://mozilla.org/test/path"}, - {shouldPass, filters: [{pathSuffix: ""}], url: "https://mozilla.org/test/path"}, - {shouldPass, filters: [{pathSuffix: null}], url: "https://mozilla.org/test/path"}, - {shouldFail, filters: [{pathSuffix: "p=1"}], url: "https://mozilla.org:8888/test/path?p=1"}, - {shouldFail, filters: [{pathSuffix: "ref"}], url: "https://mozilla.org:8888/test/path#ref"}, - - // Query filters (queryEquals, queryContains, queryPrefix, querySuffix). - {shouldFail, filters: [{queryEquals: ""}], url: "https://mozilla.org/?param=val"}, - {shouldPass, filters: [{queryEquals: null}], url: "https://mozilla.org/?param=val"}, - {shouldPass, filters: [{queryEquals: "param=val"}], url: "https://mozilla.org/?param=val"}, - {shouldFail, filters: [{queryEquals: "?param=val"}], url: "https://mozilla.org/?param=val"}, - {shouldFail, filters: [{queryEquals: "/path?param=val"}], url: "https://mozilla.org/path?param=val"}, - - // NOTE: about scheme urls cannot be matched by query. - {shouldFail, filters: [{queryEquals: "param=val"}], url: "about:blank?param=val"}, - {shouldFail, filters: [{queryEquals: "param"}], url: "ftp://mozilla.org?param=val"}, - - {shouldPass, filters: [{queryContains: "ram"}], url: "https://mozilla.org/?param=val"}, - {shouldPass, filters: [{queryContains: "=val"}], url: "https://mozilla.org/?param=val"}, - {shouldFail, filters: [{queryContains: "?param"}], url: "https://mozilla.org/?param=val"}, - {shouldFail, filters: [{queryContains: "path"}], url: "https://mozilla.org/path/?p=v#ref"}, - {shouldPass, filters: [{queryContains: ""}], url: "https://mozilla.org/?param=val"}, - {shouldPass, filters: [{queryContains: null}], url: "https://mozilla.org/?param=val"}, - - {shouldPass, filters: [{queryPrefix: "param"}], url: "https://mozilla.org/?param=val"}, - {shouldFail, filters: [{queryPrefix: "p="}], url: "https://mozilla.org/?param=val"}, - {shouldFail, filters: [{queryPrefix: "path"}], url: "https://mozilla.org/path?param=val"}, - {shouldPass, filters: [{queryPrefix: ""}], url: "https://mozilla.org/?param=val"}, - {shouldPass, filters: [{queryPrefix: null}], url: "https://mozilla.org/?param=val"}, - - {shouldPass, filters: [{querySuffix: "=val"}], url: "https://mozilla.org/?param=val"}, - {shouldFail, filters: [{querySuffix: "=wrong"}], url: "https://mozilla.org/?param=val"}, - {shouldPass, filters: [{querySuffix: ""}], url: "https://mozilla.org/?param=val"}, - {shouldPass, filters: [{querySuffix: null}], url: "https://mozilla.org/?param=val"}, - - // URL filters (urlEquals, urlContains, urlPrefix, urlSuffix). - {shouldFail, filters: [{urlEquals: ""}], url: "https://mozilla.org/?p=v#ref"}, - {shouldPass, filters: [{urlEquals: null}], url: "https://mozilla.org/?p=v#ref"}, - {shouldPass, filters: [{urlEquals: "https://mozilla.org/?p=v#ref"}], - url: "https://mozilla.org/?p=v#ref"}, - {shouldFail, filters: [{urlEquals: "https://mozilla.org/?p=v#ref2"}], - url: "https://mozilla.org/?p=v#ref"}, - {shouldPass, filters: [{urlEquals: "about:blank?p=v#ref"}], url: "about:blank?p=v#ref"}, - {shouldPass, filters: [{urlEquals: "ftp://mozilla.org?p=v#ref"}], - url: "ftp://mozilla.org?p=v#ref"}, - - {shouldPass, filters: [{urlContains: "org/?p"}], url: "https://mozilla.org/?p=v#ref"}, - {shouldPass, filters: [{urlContains: "=v#ref"}], url: "https://mozilla.org/?p=v#ref"}, - {shouldFail, filters: [{urlContains: "ftp"}], url: "https://mozilla.org/?p=v#ref"}, - {shouldPass, filters: [{urlContains: ""}], url: "https://mozilla.org/?p=v#ref"}, - {shouldPass, filters: [{urlContains: null}], url: "https://mozilla.org/?p=v#ref"}, - - {shouldPass, filters: [{urlPrefix: "http"}], url: "https://mozilla.org/?p=v#ref"}, - {shouldFail, filters: [{urlPrefix: "moz"}], url: "https://mozilla.org/?p=v#ref"}, - {shouldPass, filters: [{urlPrefix: ""}], url: "https://mozilla.org/?p=v#ref"}, - {shouldPass, filters: [{urlPrefix: null}], url: "https://mozilla.org/?p=v#ref"}, - - {shouldPass, filters: [{urlSuffix: "#ref"}], url: "https://mozilla.org/?p=v#ref"}, - {shouldFail, filters: [{urlSuffix: "=wrong"}], url: "https://mozilla.org/?p=v#ref"}, - {shouldPass, filters: [{urlSuffix: ""}], url: "https://mozilla.org/?p=v#ref"}, - {shouldPass, filters: [{urlSuffix: null}], url: "https://mozilla.org/?p=v#ref"}, - - // More url filters: urlMatches. - {shouldPass, filters: [{urlMatches: ".*://mozilla"}], url: "https://mozilla.org/?p=v#ref"}, - {shouldPass, filters: [{urlMatches: ".*://mozilla"}], url: "ftp://mozilla.org/?p=v#ref"}, - {shouldPass, filters: [{urlMatches: ".*://.*/\?p"}], url: "ftp://mozilla.org/?p=v#ref"}, - // NOTE: urlMatches should not match the url without the ref. - {shouldFail, filters: [{urlMatches: "v#ref$"}], url: "https://mozilla.org/?p=v#ref"}, - {shouldPass, filters: [{urlMatches: "^ftp"}], url: "ftp://mozilla.org/?p=v#ref"}, - - // More url filters: originAndPathMatches. - {shouldPass, filters: [{originAndPathMatches: ".*://mozilla"}], - url: "https://mozilla.org/?p=v#ref"}, - {shouldPass, filters: [{originAndPathMatches: ".*://mozilla"}], - url: "ftp://mozilla.org/?p=v#ref"}, - // NOTE: urlMatches should not match the url without the query and the ref. - {shouldFail, filters: [{originAndPathMatches: ".*://.*/\?p"}], - url: "ftp://mozilla.org/?p=v#ref"}, - {shouldFail, filters: [{originAndPathMatches: "v#ref$"}], - url: "https://mozilla.org/?p=v#ref"}, - {shouldPass, filters: [{originAndPathMatches: "^ftp"}], - url: "ftp://mozilla.org/?p=v#ref"}, - - // Filter with all criteria: all matches, none matches, some matches. - - // All matches. - {shouldPass, filters: [ - { - schemes: ["https", "http"], - ports: [443, 80], - hostEquals: "www.mozilla.org", - hostContains: ".moz", - hostPrefix: "www", - hostSuffix: "org", - pathEquals: "/sub/path", - pathContains: "b/p", - pathPrefix: "/sub", - pathSuffix: "/path", - queryEquals: "p=v", - queryContains: "1=", - queryPrefix: "p1", - querySuffix: "=v", - urlEquals: "https://www.mozilla.org/sub/path?p1=v#ref", - urlContains: "org/sub", - urlPrefix: "https://moz", - urlSuffix: "#ref", - urlMatches: "v#ref$", - originAndPathMatches: ".*://moz.*/" - }, - ], url: "https://www.mozilla.org/sub/path?p1=v#ref"}, - // None matches. - {shouldFail, filters: [ - { - schemes: ["http"], - ports: [80], - hostEquals: "mozilla.com", - hostContains: "www.moz", - hostPrefix: "www", - hostSuffix: "com", - pathEquals: "/wrong/path", - pathContains: "g/p", - pathPrefix: "/wrong", - pathSuffix: "/wrong", - queryEquals: "p2=v", - queryContains: "2=", - queryPrefix: "p2", - querySuffix: "=value", - urlEquals: "http://mozilla.com/sub/path?p1=v#ref", - urlContains: "com/sub", - urlPrefix: "http://moz", - urlSuffix: "#ref2", - urlMatches: "value#ref2$", - originAndPathMatches: ".*://moz.*com/" - }, - ], url: "https://mozilla.org/sub/path?p1=v#ref"}, - // Some matches - {shouldFail, filters: [ - { - schemes: ["https"], - ports: [80], - hostEquals: "mozilla.com", - hostContains: "www.moz", - hostPrefix: "www", - hostSuffix: "com", - pathEquals: "/wrong/path", - pathContains: "g/p", - pathPrefix: "/wrong", - pathSuffix: "/wrong", - queryEquals: "p2=v", - queryContains: "2=", - queryPrefix: "p2", - querySuffix: "=value", - urlEquals: "http://mozilla.com/sub/path?p1=v#ref", - urlContains: "com/sub", - urlPrefix: "http://moz", - urlSuffix: "#ref2", - urlMatches: "value#ref2$", - originAndPathMatches: ".*://moz.*com/" - }, - ], url: "https://mozilla.org/sub/path?p1=v#ref"}, - - // Filter with multiple filters: all matches, some matches, none matches. - - // All matches. - {shouldPass, filters: [ - {schemes: ["https", "http"]}, - {ports: [443, 80]}, - {hostEquals: "www.mozilla.org"}, - {hostContains: ".moz"}, - {hostPrefix: "www"}, - {hostSuffix: "org"}, - {pathEquals: "/sub/path"}, - {pathContains: "b/p"}, - {pathPrefix: "/sub"}, - {pathSuffix: "/path"}, - {queryEquals: "p=v"}, - {queryContains: "1="}, - {queryPrefix: "p1"}, - {querySuffix: "=v"}, - {urlEquals: "https://www.mozilla.org/sub/path?p1=v#ref"}, - {urlContains: "org/sub"}, - {urlPrefix: "https://moz"}, - {urlSuffix: "#ref"}, - {urlMatches: "v#ref$"}, - {originAndPathMatches: ".*://moz.*/"}, - ], url: "https://www.mozilla.org/sub/path?p1=v#ref"}, - - // None matches. - {shouldFail, filters: [ - {schemes: ["http"]}, - {ports: [80]}, - {hostEquals: "mozilla.com"}, - {hostContains: "www.moz"}, - {hostPrefix: "www"}, - {hostSuffix: "com"}, - {pathEquals: "/wrong/path"}, - {pathContains: "g/p"}, - {pathPrefix: "/wrong"}, - {pathSuffix: "/wrong"}, - {queryEquals: "p2=v"}, - {queryContains: "2="}, - {queryPrefix: "p2"}, - {querySuffix: "=value"}, - {urlEquals: "http://mozilla.com/sub/path?p1=v#ref"}, - {urlContains: "com/sub"}, - {urlPrefix: "http://moz"}, - {urlSuffix: "#ref2"}, - {urlMatches: "value#ref2$"}, - {originAndPathMatches: ".*://moz.*com/"}, - ], url: "https://mozilla.org/sub/path?p1=v#ref"}, - - // Some matches. - {shouldPass, filters: [ - {schemes: ["https"]}, - {ports: [80]}, - {hostEquals: "mozilla.com"}, - {hostContains: "www.moz"}, - {hostPrefix: "www"}, - {hostSuffix: "com"}, - {pathEquals: "/wrong/path"}, - {pathContains: "g/p"}, - {pathPrefix: "/wrong"}, - {pathSuffix: "/wrong"}, - {queryEquals: "p2=v"}, - {queryContains: "2="}, - {queryPrefix: "p2"}, - {querySuffix: "=value"}, - {urlEquals: "http://mozilla.com/sub/path?p1=v#ref"}, - {urlContains: "com/sub"}, - {urlPrefix: "http://moz"}, - {urlSuffix: "#ref2"}, - {urlMatches: "value#ref2$"}, - {originAndPathMatches: ".*://moz.*com/"}, - ], url: "https://mozilla.org/sub/path?p1=v#ref"}, - ]; - - // Run all the the testCases defined above. - for (let currentTest of testCases) { - let { - exceptionMessageContains, - url, filters, - } = currentTest; - - if (currentTest.shouldThrow) { - expectThrow({url, filters, exceptionMessageContains}) - } else if (currentTest.shouldFail) { - expectFail({url, filters}); - } else { - expectPass({url, filters}); - } - } -}); |