diff --git a/content/base/test/unit/test_csp_ignores_path.js b/content/base/test/unit/test_csp_ignores_path.js new file mode 100644 index 000000000000..02fc65907651 --- /dev/null +++ b/content/base/test/unit/test_csp_ignores_path.js @@ -0,0 +1,133 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +const Cc = Components.classes; +const Ci = Components.interfaces; +const Cu = Components.utils; + +Cu.import('resource://gre/modules/CSPUtils.jsm'); + +var ioService = Cc["@mozilla.org/network/io-service;1"] + .getService(Ci.nsIIOService); +var self = ioService.newURI("http://test1.example.com:80", null, null); + +function testValidSRCsRegularHost() { + var csps = [ + "test1.example.com", + "test1.example.com/", + "test1.example.com/path-1", + "test1.example.com/path-1/", + "test1.example.com/path-1/path_2/", + "test1.example.com/path-1/path_2/file.js", + "test1.example.com/path-1/path_2/file_1.js", + "test1.example.com/path-1/path_2/file-2.js", + "test1.example.com/path-1/path_2/f.js" + ] + + var obj; + var expected = "http://test1.example.com:80"; + for (let i in csps) { + var src = csps[i]; + obj = CSPSourceList.fromString(src, undefined, self); + do_check_eq(1, obj._sources.length); + do_check_eq(obj._sources[0], expected); + } +} + +function testValidSRCsWildCardHost() { + var csps = [ + "*.example.com", + "*.example.com/", + "*.example.com/path-1", + "*.example.com/path-1/", + "*.example.com/path-1/path_2/", + "*.example.com/path-1/path_2/file.js", + "*.example.com/path-1/path_2/file_1.js", + "*.example.com/path-1/path_2/file-2.js", + "*.example.com/path-1/path_2/f.js", + ] + + var obj; + var expected = "http://*.example.com:80"; + for (let i in csps) { + var src = csps[i]; + obj = CSPSourceList.fromString(src, undefined, self); + do_check_eq(1, obj._sources.length); + do_check_eq(obj._sources[0], expected); + } +} + +function testValidSRCsRegularPort() { + var csps = [ + "test1.example.com:80", + "test1.example.com:80/", + "test1.example.com:80/path-1", + "test1.example.com:80/path-1/", + "test1.example.com:80/path-1/path_2", + "test1.example.com:80/path-1/path_2/", + "test1.example.com:80/path-1/path_2/file.js" + ] + + var obj; + var expected = "http://test1.example.com:80"; + for (let i in csps) { + var src = csps[i]; + obj = CSPSourceList.fromString(src, undefined, self); + do_check_eq(1, obj._sources.length); + do_check_eq(obj._sources[0], expected); + } +} + +function testValidSRCsWildCardPort() { + var csps = [ + "test1.example.com:*", + "test1.example.com:*/", + "test1.example.com:*/path-1", + "test1.example.com:*/path-1/", + "test1.example.com:*/path-1/path_2", + "test1.example.com:*/path-1/path_2/", + "test1.example.com:*/path-1/path_2/file.js" + ] + + var obj; + var expected = "http://test1.example.com:*"; + for (let i in csps) { + var src = csps[i]; + obj = CSPSourceList.fromString(src, undefined, self); + do_check_eq(1, obj._sources.length); + do_check_eq(obj._sources[0], expected); + } +} + + +function testInvalidSRCs() { + var csps = [ + "test1.example.com/path-1//path_2", + "test1.example.com/path-1/file.js.cpp", + "test1.example.com:88path-1/", + "test1.example.com:80//", + "test1.example.com:80//path-1", + "test1.example.com:80/.js", + "test1.example.com:80.js", + "test1.example.com:*.js", + "test1.example.com:*." + ] + + var obj; + var expected = []; + for (let i in csps) { + var src = csps[i]; + obj = CSPSourceList.fromString(src, undefined, self); + do_check_eq(0, obj._sources.length); + } +} + +function run_test() { + testValidSRCsRegularHost(); + testValidSRCsWildCardHost(); + testValidSRCsRegularPort(); + testValidSRCsWildCardPort(); + testInvalidSRCs(); + do_test_finished(); +} diff --git a/content/base/test/unit/xpcshell.ini b/content/base/test/unit/xpcshell.ini index 24b526c545af..6e4ef89e4e6d 100644 --- a/content/base/test/unit/xpcshell.ini +++ b/content/base/test/unit/xpcshell.ini @@ -30,3 +30,4 @@ run-sequentially = Hardcoded 4444 port. [test_thirdpartyutil.js] [test_xhr_standalone.js] [test_xmlserializer.js] +[test_csp_ignores_path.js]