import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo

This commit is contained in:
Roy Tam 2018-01-19 03:59:58 +08:00
commit dcd9973243
150858 changed files with 23884658 additions and 0 deletions

10
chrome/test/moz.build Normal file
View file

@ -0,0 +1,10 @@
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# 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/.
XPCSHELL_TESTS_MANIFESTS += [
'unit/xpcshell.ini',
'unit_ipc/xpcshell.ini',
]

View file

@ -0,0 +1,4 @@
category abitest test1 found ABI=XPCShell_noarch-spidermonkey
category abitest test2 notfound ABI=WINNT_noarch-spidermonkey
category abitest test3 found ABI!=WINNT_noarch-spidermonkey
category abitest test4 notfound ABI!=XPCShell_noarch-spidermonkey

View file

@ -0,0 +1,4 @@
content test1 test/
content test2 test/ contentaccessible=yes
content test3 test/ contentaccessible=no
content test4 test/ contentaccessible

View file

@ -0,0 +1,14 @@
# Success cases
content test1 test/ appversion=5
content test2 test/ appversion<6
content test3 test/ appversion>4
content test4 test/ appversion>=5
content test5 test/ appversion<=5
# Failure cases
content test6 test/ appversion>5
content test7 test/ appversion<5
content test8 test/ appversion>
content test9 test/ appversion<
content test10 test/ appversion=
content test11 test/ appversion

View file

@ -0,0 +1,6 @@
# Success cases
content test1 test/ os=xpcshell
content test2 test/ os=XPCshell
# Failure cases
content test3 test/ os=FOOshell

View file

@ -0,0 +1,11 @@
# Success cases
content test1 test/ application={39885e5f-f6b4-4e2a-87e5-6259ecf79011}
content test2 test/ application!={d51eecae-eab5-4779-85cb-45f1ec8657c8}
content test3 test/ application!=
# Failure cases
content test4 test/ application=
content test5 test/ application={d51eecae-eab5-4779-85cb-45f1ec8657c8}
content test6 test/ application!={39885e5f-f6b4-4e2a-87e5-6259ecf79011}
content test7 test/ appversion=={39885e5f-f6b4-4e2a-87e5-6259ecf79011}
content test8 test/ application!!{d51eecae-eab5-4779-85cb-45f1ec8657c8}

View file

@ -0,0 +1,11 @@
# Should work
resource test1 test1/
# Mapping into jar files should work
resource test3 jar:test3.jar!/resources/
# Invalid line
resource test4
# Check we made it through the whole manifest
resource test5 test5/

View file

@ -0,0 +1,4 @@
locale testmatchos en-US jar:en-US.jar!/locale/en-US/global/
locale testmatchos fr-FR jar:en-US.jar!/locale/en-US/global/
locale testmatchos de-DE jar:en-US.jar!/locale/en-US/global/
locale testmatchos xx-AA jar:en-US.jar!/locale/en-US/global/

Binary file not shown.

View file

@ -0,0 +1,16 @@
# Locally defined URLs
content test1 test/
locale test1 en-US test/
skin test1 test test/
# Test Override
content testOverride test/
override chrome://testOverride/content file:///test1/override
# Load external manifest
manifest loaded.manifest
# Failure Cases
overlay chrome://test1/content/overlay.xul chrome://test1/content/test1.xul
style chrome://test1/content/style.xul chrome://test1/content/test1.css

View file

@ -0,0 +1,2 @@
content test2 test/
locale test2 en-US test/

View file

@ -0,0 +1,4 @@
locale basepack en-US jar:en-US.jar!/locale/en-US/global/
locale basepack fr jar:en-US.jar!/locale/en-US/global/
locale overpack en-US jar:en-US.jar!/locale/en-US/global/
locale overpack de jar:en-US.jar!/locale/en-US/global/

View file

@ -0,0 +1,3 @@
# Note: the following lines begins/end with a CR
content test_crlf .

View file

@ -0,0 +1,5 @@
# package used only for valid override
content good-package bar/
# Local resource (should work)
override chrome://good-package/content/test.xul data:application/vnd.mozilla.xul+xml,

View file

@ -0,0 +1,32 @@
# package used only for valid overlaying and overrides
content good-package bar/
# UI Resource URIs (should not work)
content moz-protocol-ui-resource moz-protocol-ui-resource://foo/
locale moz-protocol-ui-resource en-us moz-protocol-ui-resource://foo/
skin moz-protocol-ui-resource skin1 moz-protocol-ui-resource://foo/
override chrome://good-package/content/override-moz-protocol-ui-resource.xul moz-protocol-ui-resource://foo/
resource moz-protocol-ui-resource moz-protocol-ui-resource://foo/
# Local file URIs (should not work)
content moz-protocol-local-file moz-protocol-local-file://foo/
locale moz-protocol-local-file en-us moz-protocol-local-file://foo/
skin moz-protocol-local-file skin1 moz-protocol-local-file://foo/
override chrome://good-package/content/override-moz-protocol-local-file.xul moz-protocol-local-file://foo/
resource moz-protocol-local-file moz-protocol-local-file://foo/
# Loadable by anyone URIs (should not work)
content moz-protocol-loadable-by-anyone moz-protocol-loadable-by-anyone://foo/
locale moz-protocol-loadable-by-anyone en-us moz-protocol-loadable-by-anyone://foo/
skin moz-protocol-loadable-by-anyone skin1 moz-protocol-loadable-by-anyone://foo/
override chrome://good-package/content/override-moz-protocol-loadable-by-anyone.xul moz-protocol-loadable-by-anyone://foo/
resource moz-protocol-loadable-by-anyone moz-protocol-loadable-by-anyone://foo/
# Working protocols should be after this point. Failing ones should be before.
# Local resource (should work)
content moz-protocol-local-resource moz-protocol-local-resource://foo/
locale moz-protocol-local-resource en-us moz-protocol-local-resource://foo/
skin moz-protocol-local-resource skin1 moz-protocol-local-resource://foo/
override chrome://good-package/content/override-moz-protocol-local-resource.xul moz-protocol-local-resource://foo/
resource moz-protocol-local-resource moz-protocol-local-resource://foo/

View file

@ -0,0 +1,5 @@
resource foo .
content foo resource://foo/foo-content/
locale foo foo resource://foo/foo-locale/
skin foo foo resource://foo/foo-skin/
override chrome://good-package/content/override-me.xul resource://foo/foo-override/override-me.xul

View file

@ -0,0 +1,14 @@
const XULAPPINFO_CONTRACTID = "@mozilla.org/xre/app-info;1";
const XULAPPINFO_CID = Components.ID("{4ba645d3-be6f-40d6-a42a-01b2f40091b8}");
var Cc = Components.classes;
var Ci = Components.interfaces;
var Cr = Components.results;
function registerManifests(manifests)
{
var reg = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
for (var manifest of manifests)
reg.autoRegister(manifest);
}

View file

@ -0,0 +1,29 @@
Components.utils.import("resource://testing-common/AppInfo.jsm", this);
updateAppInfo({
name: "XPCShell",
ID: "{39885e5f-f6b4-4e2a-87e5-6259ecf79011}",
version: "5",
platformVersion: "1.9",
});
registerManifests([do_get_file("data/test_abi.manifest")]);
const catman = Components.classes["@mozilla.org/categorymanager;1"].
getService(Components.interfaces.nsICategoryManager);
function is_registered(name) {
try {
var d = catman.getCategoryEntry("abitest", name);
return d == "found";
}
catch (e) {
return false;
}
}
function run_test() {
do_check_true(is_registered("test1"));
do_check_false(is_registered("test2"));
do_check_true(is_registered("test3"));
do_check_false(is_registered("test4"));
}

View file

@ -0,0 +1,37 @@
/* 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 MANIFESTS = [
do_get_file("data/test_bug292789.manifest")
];
registerManifests(MANIFESTS);
var gIOS;
var gCR;
function check_accessibility(spec, desired)
{
var uri = gIOS.newURI(spec, null, null);
var actual = gCR.allowContentToAccess(uri);
do_check_eq(desired, actual);
}
function run_test()
{
gIOS = Cc["@mozilla.org/network/io-service;1"].
getService(Ci.nsIIOService);
gCR = Cc["@mozilla.org/chrome/chrome-registry;1"].
getService(Ci.nsIXULChromeRegistry);
gCR.checkForNewChrome();
check_accessibility("chrome://test1/content/", false);
check_accessibility("chrome://test1/content/foo.js", false);
check_accessibility("chrome://test2/content/", true);
check_accessibility("chrome://test2/content/foo.js", true);
check_accessibility("chrome://test3/content/", false);
check_accessibility("chrome://test3/content/foo.js", false);
check_accessibility("chrome://test4/content/", true);
}

View file

@ -0,0 +1,68 @@
/* 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/.
*/
var MANIFESTS = [
do_get_file("data/test_bug380398.manifest")
];
registerManifests(MANIFESTS);
Components.utils.import("resource://testing-common/AppInfo.jsm", this);
updateAppInfo({
name: "XPCShell",
id: "{39885e5f-f6b4-4e2a-87e5-6259ecf79011}",
version: "5",
platformVersion: "1.9",
});
var gIOS = Cc["@mozilla.org/network/io-service;1"]
.getService(Ci.nsIIOService);
var chromeReg = Cc["@mozilla.org/chrome/chrome-registry;1"]
.getService(Ci.nsIChromeRegistry);
chromeReg.checkForNewChrome();
var target = gIOS.newFileURI(do_get_file("data"));
target = target.spec + "test/test.xul";
function test_succeeded_mapping(namespace)
{
var uri = gIOS.newURI("chrome://" + namespace + "/content/test.xul",
null, null);
try {
var result = chromeReg.convertChromeURL(uri);
do_check_eq(result.spec, target);
}
catch (ex) {
do_throw(namespace);
}
}
function test_failed_mapping(namespace)
{
var uri = gIOS.newURI("chrome://" + namespace + "/content/test.xul",
null, null);
try {
var result = chromeReg.convertChromeURL(uri);
do_throw(namespace);
}
catch (ex) {
}
}
function run_test()
{
test_succeeded_mapping("test1");
test_succeeded_mapping("test2");
test_succeeded_mapping("test3");
test_succeeded_mapping("test4");
test_succeeded_mapping("test5");
test_failed_mapping("test6");
test_failed_mapping("test7");
test_failed_mapping("test8");
test_failed_mapping("test9");
test_failed_mapping("test10");
test_failed_mapping("test11");
}

View file

@ -0,0 +1,61 @@
/* 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/.
*/
var MANIFESTS = [
do_get_file("data/test_bug397073.manifest")
];
registerManifests(MANIFESTS);
Components.utils.import("resource://testing-common/AppInfo.jsm", this);
updateAppInfo({
name: "XPCShell",
ID: "{39885e5f-f6b4-4e2a-87e5-6259ecf79011}",
version: "5",
platformVersion: "1.9",
});
var gIOS = Cc["@mozilla.org/network/io-service;1"]
.getService(Ci.nsIIOService);
var chromeReg = Cc["@mozilla.org/chrome/chrome-registry;1"]
.getService(Ci.nsIChromeRegistry);
chromeReg.checkForNewChrome();
var target = gIOS.newFileURI(do_get_file("data"));
target = target.spec + "test/test.xul";
function test_succeeded_mapping(namespace)
{
var uri = gIOS.newURI("chrome://" + namespace + "/content/test.xul",
null, null);
try {
var result = chromeReg.convertChromeURL(uri);
do_check_eq(result.spec, target);
}
catch (ex) {
do_throw(namespace);
}
}
function test_failed_mapping(namespace)
{
var uri = gIOS.newURI("chrome://" + namespace + "/content/test.xul",
null, null);
try {
var result = chromeReg.convertChromeURL(uri);
do_throw(namespace);
}
catch (ex) {
}
}
function run_test()
{
test_succeeded_mapping("test1");
test_succeeded_mapping("test2");
test_failed_mapping("test3");
}

View file

@ -0,0 +1,64 @@
/* 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/.
*/
var MANIFESTS = [
do_get_file("data/test_bug399707.manifest")
];
registerManifests(MANIFESTS);
Components.utils.import("resource://testing-common/AppInfo.jsm", this);
updateAppInfo({
name: "XPCShell",
ID: "{39885e5f-f6b4-4e2a-87e5-6259ecf79011}",
version: "5",
platformVersion: "1.9",
});
var gIOS = Cc["@mozilla.org/network/io-service;1"]
.getService(Ci.nsIIOService);
var chromeReg = Cc["@mozilla.org/chrome/chrome-registry;1"]
.getService(Ci.nsIChromeRegistry);
chromeReg.checkForNewChrome();
var target = gIOS.newFileURI(do_get_file("data"));
target = target.spec + "test/test.xul";
function test_succeeded_mapping(namespace)
{
var uri = gIOS.newURI("chrome://" + namespace + "/content/test.xul",
null, null);
try {
var result = chromeReg.convertChromeURL(uri);
do_check_eq(result.spec, target);
}
catch (ex) {
do_throw(namespace);
}
}
function test_failed_mapping(namespace)
{
var uri = gIOS.newURI("chrome://" + namespace + "/content/test.xul",
null, null);
try {
var result = chromeReg.convertChromeURL(uri);
do_throw(namespace);
}
catch (ex) {
}
}
function run_test()
{
test_succeeded_mapping("test1");
test_succeeded_mapping("test2");
test_succeeded_mapping("test3");
test_failed_mapping("test4");
test_failed_mapping("test5");
test_failed_mapping("test6");
test_failed_mapping("test7");
test_failed_mapping("test8");
}

View file

@ -0,0 +1,55 @@
/* 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/.
*/
var MANIFESTS = [
do_get_file("data/test_bug401153.manifest")
];
registerManifests(MANIFESTS);
Components.utils.import("resource://testing-common/AppInfo.jsm", this);
updateAppInfo({
name: "XPCShell",
ID: "{39885e5f-f6b4-4e2a-87e5-6259ecf79011}",
version: "5",
platformVersion: "1.9",
});
var gIOS = Cc["@mozilla.org/network/io-service;1"]
.getService(Ci.nsIIOService);
var chromeReg = Cc["@mozilla.org/chrome/chrome-registry;1"]
.getService(Ci.nsIChromeRegistry);
chromeReg.checkForNewChrome();
var rph = gIOS.getProtocolHandler("resource")
.QueryInterface(Ci.nsIResProtocolHandler);
function test_succeeded_mapping(namespace, target)
{
try {
do_check_true(rph.hasSubstitution(namespace));
var uri = gIOS.newURI("resource://" + namespace, null, null);
dump("### checking for " + target + ", getting " + rph.resolveURI(uri) + "\n");
do_check_eq(rph.resolveURI(uri), target);
}
catch (ex) {
dump(ex + "\n");
do_throw(namespace);
}
}
function test_failed_mapping(namespace)
{
do_check_false(rph.hasSubstitution(namespace));
}
function run_test()
{
var data = gIOS.newFileURI(do_get_file("data")).spec;
test_succeeded_mapping("test1", data + "test1/");
test_succeeded_mapping("test3", "jar:" + data + "test3.jar!/resources/");
test_failed_mapping("test4");
test_succeeded_mapping("test5", data + "test5/");
}

View file

@ -0,0 +1,48 @@
/* 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/.
*/
var gIOS = Cc["@mozilla.org/network/io-service;1"]
.getService(Ci.nsIIOService);
function test_uri(obj)
{
var uri = null;
var failed = false;
var message = "";
try {
uri = gIOS.newURI(obj.uri, null, null);
if (!obj.result) {
failed = true;
message = obj.uri + " should not be accepted as a valid URI";
}
}
catch (ex) {
if (obj.result) {
failed = true;
message = obj.uri + " should be accepted as a valid URI";
}
}
if (failed)
do_throw(message);
if (obj.result) {
do_check_true(uri != null);
do_check_eq(uri.spec, obj.uri);
}
}
function run_test()
{
var tests = [
{uri: "chrome://blah/content/blah.xul", result: true},
{uri: "chrome://blah/content/:/blah/blah.xul", result: false},
{uri: "chrome://blah/content/%252e./blah/blah.xul", result: false},
{uri: "chrome://blah/content/%252e%252e/blah/blah.xul", result: false},
{uri: "chrome://blah/content/blah.xul?param=%252e./blah/", result: true},
{uri: "chrome://blah/content/blah.xul?param=:/blah/", result: true},
{uri: "chrome://blah/content/blah.xul?param=%252e%252e/blah/", result: true},
];
for (var i = 0; i < tests.length; ++ i)
test_uri(tests[i]);
}

View file

@ -0,0 +1,94 @@
/* 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/.
*/
var MANIFESTS = [
do_get_file("data/test_bug519468.manifest")
];
Components.utils.import("resource://testing-common/MockRegistrar.jsm");
// Stub in the locale service so we can control what gets returned as the OS locale setting
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
var stubOSLocale = null;
StubLocaleService = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsILocaleService, Ci.nsISupports]),
getLocaleComponentForUserAgent: function SLS_getLocaleComponentForUserAgent()
{
return stubOSLocale;
}
}
MockRegistrar.register("@mozilla.org/intl/nslocaleservice;1", StubLocaleService);
// Now fire up the test
do_test_pending()
registerManifests(MANIFESTS);
var chromeReg = Cc["@mozilla.org/chrome/chrome-registry;1"]
.getService(Ci.nsIXULChromeRegistry)
.QueryInterface(Ci.nsIToolkitChromeRegistry);
chromeReg.checkForNewChrome();
var prefService = Cc["@mozilla.org/preferences-service;1"]
.getService(Ci.nsIPrefService)
.QueryInterface(Ci.nsIPrefBranch);
var os = Cc["@mozilla.org/observer-service;1"]
.getService(Ci.nsIObserverService);
var testsLocale = [
// These tests cover when the OS local is included in our manifest
{matchOS: false, selected: "en-US", osLocale: "xx-AA", locale: "en-US"},
{matchOS: true, selected: "en-US", osLocale: "xx-AA", locale: "xx-AA"},
{matchOS: false, selected: "fr-FR", osLocale: "xx-AA", locale: "fr-FR"},
{matchOS: true, selected: "fr-FR", osLocale: "xx-AA", locale: "xx-AA"},
{matchOS: false, selected: "de-DE", osLocale: "xx-AA", locale: "de-DE"},
{matchOS: true, selected: "de-DE", osLocale: "xx-AA", locale: "xx-AA"},
// these tests cover the case where the OS locale is not available in our manifest, but the
// base language is (ie, substitute xx-AA which we have for xx-BB which we don't)
{matchOS: false, selected: "en-US", osLocale: "xx-BB", locale: "en-US"},
{matchOS: true, selected: "en-US", osLocale: "xx-BB", locale: "xx-AA"},
{matchOS: false, selected: "fr-FR", osLocale: "xx-BB", locale: "fr-FR"},
{matchOS: true, selected: "fr-FR", osLocale: "xx-BB", locale: "xx-AA"},
// These tests cover where the language is not available
{matchOS: false, selected: "en-US", osLocale: "xy-BB", locale: "en-US"},
{matchOS: true, selected: "en-US", osLocale: "xy-BB", locale: "en-US"},
{matchOS: false, selected: "fr-FR", osLocale: "xy-BB", locale: "fr-FR"},
{matchOS: true, selected: "fr-FR", osLocale: "xy-BB", locale: "en-US"},
];
var observedLocale = null;
function test_locale(aTest) {
observedLocale = null;
stubOSLocale = aTest.osLocale;
prefService.setBoolPref("intl.locale.matchOS", aTest.matchOS);
prefService.setCharPref("general.useragent.locale", aTest.selected);
chromeReg.reloadChrome();
do_check_eq(observedLocale, aTest.locale);
}
// Callback function for observing locale change. May be called more than once
// per test iteration.
function checkValidity() {
observedLocale = chromeReg.getSelectedLocale("testmatchos");
dump("checkValidity called back with locale = " + observedLocale + "\n");
}
function run_test() {
os.addObserver(checkValidity, "selected-locale-has-changed", false);
for (let count = 0 ; count < testsLocale.length ; count++) {
dump("count = " + count + " " + testsLocale[count].toSource() + "\n");
test_locale(testsLocale[count]);
}
os.removeObserver(checkValidity, "selected-locale-has-changed");
do_test_finished();
}

View file

@ -0,0 +1,121 @@
/* 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 UNPACKAGED_ADDON = do_get_file("data/test_bug564667");
const PACKAGED_ADDON = do_get_file("data/test_bug564667.xpi");
var gIOS = Cc["@mozilla.org/network/io-service;1"].
getService(Ci.nsIIOService);
var gCR = Cc["@mozilla.org/chrome/chrome-registry;1"].
getService(Ci.nsIChromeRegistry).
QueryInterface(Ci.nsIXULOverlayProvider);
/*
* Checks that a mapping was added
*/
function test_mapping(chromeURL, target) {
var uri = gIOS.newURI(chromeURL, null, null);
try {
var result = gCR.convertChromeURL(uri);
do_check_eq(result.spec, target);
}
catch (ex) {
do_throw(chromeURL + " not Registered");
}
}
/*
* Checks that a mapping was removed
*/
function test_removed_mapping(chromeURL, target) {
var uri = gIOS.newURI(chromeURL, null, null);
try {
var result = gCR.convertChromeURL(uri);
do_throw(chromeURL + " not removed");
}
catch (ex) {
// This should throw
}
}
/*
* Checks if any overlay was added after loading
* the manifest files
*
* @param type The type of overlay: overlay|style
*/
function test_no_overlays(chromeURL, target, type) {
var type = type || "overlay";
var uri = gIOS.newURI(chromeURL, null, null);
var present = false, elem;
var overlays = (type == "overlay") ?
gCR.getXULOverlays(uri) : gCR.getStyleOverlays(uri);
// We shouldn't be allowed to register overlays nor styles
if (overlays.hasMoreElements()) {
if (type == "styles")
do_throw("Style Registered: " + chromeURL);
else
do_throw("Overlay Registered: " + chromeURL);
}
}
function testManifest(manifestPath, baseURI) {
// ------------------ Add manifest file ------------------------
Components.manager.addBootstrappedManifestLocation(manifestPath);
// Test Adding Content URL
test_mapping("chrome://test1/content", baseURI + "test/test1.xul");
// Test Adding Locale URL
test_mapping("chrome://test1/locale", baseURI + "test/test1.dtd");
// Test Adding Skin URL
test_mapping("chrome://test1/skin", baseURI + "test/test1.css");
// Test Adding Manifest URL
test_mapping("chrome://test2/content", baseURI + "test/test2.xul");
test_mapping("chrome://test2/locale", baseURI + "test/test2.dtd");
// Test Adding Override
test_mapping("chrome://testOverride/content", 'file:///test1/override')
// Test Not-Adding Overlays
test_no_overlays("chrome://test1/content/overlay.xul",
"chrome://test1/content/test1.xul");
// Test Not-Adding Styles
test_no_overlays("chrome://test1/content/style.xul",
"chrome://test1/content/test1.css", "styles");
// ------------------ Remove manifest file ------------------------
Components.manager.removeBootstrappedManifestLocation(manifestPath);
// Test Removing Content URL
test_removed_mapping("chrome://test1/content", baseURI + "test/test1.xul");
// Test Removing Content URL
test_removed_mapping("chrome://test1/locale", baseURI + "test/test1.dtd");
// Test Removing Skin URL
test_removed_mapping("chrome://test1/skin", baseURI + "test/test1.css");
// Test Removing Manifest URL
test_removed_mapping("chrome://test2/content", baseURI + "test/test2.xul");
test_removed_mapping("chrome://test2/locale", baseURI + "test/test2.dtd");
}
function run_test() {
// Test an unpackaged addon
testManifest(UNPACKAGED_ADDON, gIOS.newFileURI(UNPACKAGED_ADDON).spec);
// Test a packaged addon
testManifest(PACKAGED_ADDON, "jar:" + gIOS.newFileURI(PACKAGED_ADDON).spec + "!/");
}

View file

@ -0,0 +1,48 @@
/* 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/.
*/
var MANIFESTS = [
do_get_file("data/test_bug848297.manifest")
];
// Stub in the locale service so we can control what gets returned as the OS locale setting
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
registerManifests(MANIFESTS);
var chromeReg = Cc["@mozilla.org/chrome/chrome-registry;1"]
.getService(Ci.nsIXULChromeRegistry)
.QueryInterface(Ci.nsIToolkitChromeRegistry);
chromeReg.checkForNewChrome();
var prefService = Cc["@mozilla.org/preferences-service;1"]
.getService(Ci.nsIPrefService)
.QueryInterface(Ci.nsIPrefBranch);
function enum_to_array(strings) {
let rv = [];
while (strings.hasMore()) {
rv.push(strings.getNext());
}
rv.sort();
return rv;
}
function run_test() {
// without override
prefService.setCharPref("general.useragent.locale", "de");
do_check_eq(chromeReg.getSelectedLocale("basepack"), "en-US");
do_check_eq(chromeReg.getSelectedLocale("overpack"), "de");
do_check_matches(enum_to_array(chromeReg.getLocalesForPackage("basepack")),
['en-US', 'fr']);
// with override
prefService.setCharPref("chrome.override_package.basepack", "overpack");
do_check_eq(chromeReg.getSelectedLocale("basepack"), "de");
do_check_matches(enum_to_array(chromeReg.getLocalesForPackage("basepack")),
['de', 'en-US']);
}

View file

@ -0,0 +1,15 @@
registerManifests([do_get_file("data/test_crlf.manifest")]);
function run_test()
{
let cr = Cc["@mozilla.org/chrome/chrome-registry;1"].
getService(Ci.nsIChromeRegistry);
let ios = Cc["@mozilla.org/network/io-service;1"].
getService(Ci.nsIIOService);
let sourceURI = ios.newURI("chrome://test_crlf/content/", null, null);
// this throws for packages that are not registered
let file = cr.convertChromeURL(sourceURI).QueryInterface(Ci.nsIFileURL).file;
do_check_true(file.equals(do_get_file("data/test_crlf.xul", true)));
}

View file

@ -0,0 +1,65 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
* vim: sw=2 ts=2 sts=2 tw=78 expandtab :
* 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/. */
var manifests = [
do_get_file("data/test_data_protocol_registration.manifest"),
];
registerManifests(manifests);
var XULAppInfoFactory = {
// These two are used when we register all our factories (and unregister)
CID: XULAPPINFO_CID,
scheme: "XULAppInfo",
contractID: XULAPPINFO_CONTRACTID,
createInstance: function (outer, iid) {
if (outer != null)
throw Cr.NS_ERROR_NO_AGGREGATION;
return XULAppInfo.QueryInterface(iid);
}
};
function run_test()
{
// Add our XULAppInfo factory
let factories = [XULAppInfoFactory];
// Register our factories
for (let i = 0; i < factories.length; i++) {
let factory = factories[i];
Components.manager.QueryInterface(Ci.nsIComponentRegistrar)
.registerFactory(factory.CID, "test-" + factory.scheme,
factory.contractID, factory);
}
// Check for new chrome
let cr = Cc["@mozilla.org/chrome/chrome-registry;1"].
getService(Ci.nsIChromeRegistry);
cr.checkForNewChrome();
// Check that our override worked
let expectedURI = "data:application/vnd.mozilla.xul+xml,";
let sourceURI = "chrome://good-package/content/test.xul";
try {
let ios = Cc["@mozilla.org/network/io-service;1"].
getService(Ci.nsIIOService);
sourceURI = ios.newURI(sourceURI, null, null);
// this throws for packages that are not registered
let uri = cr.convertChromeURL(sourceURI).spec;
do_check_eq(expectedURI, uri);
}
catch (e) {
dump(e + "\n");
do_throw("Should have registered our URI!");
}
// Unregister our factories so we do not leak
for (let i = 0; i < factories.length; i++) {
let factory = factories[i];
Components.manager.QueryInterface(Ci.nsIComponentRegistrar)
.unregisterFactory(factory.CID, factory);
}
}

View file

@ -0,0 +1,202 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
* vim: sw=2 ts=2 sts=2 tw=78 expandtab :
* 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/. */
var manifests = [
do_get_file("data/test_no_remote_registration.manifest"),
];
registerManifests(manifests);
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
Components.utils.import("resource://testing-common/AppInfo.jsm", this);
var XULAppInfo = newAppInfo({
name: "XPCShell",
ID: "{39885e5f-f6b4-4e2a-87e5-6259ecf79011}",
version: "5",
platformVersion: "1.9",
});
var XULAppInfoFactory = {
// These two are used when we register all our factories (and unregister)
CID: Components.ID("{c763b610-9d49-455a-bbd2-ede71682a1ac}"),
scheme: "XULAppInfo",
contractID: "@mozilla.org/xre/app-info;1",
createInstance: function (outer, iid) {
if (outer != null)
throw Cr.NS_ERROR_NO_AGGREGATION;
return XULAppInfo.QueryInterface(iid);
}
};
function ProtocolHandler(aScheme, aFlags)
{
this.scheme = aScheme;
this.protocolFlags = aFlags;
this.contractID = "@mozilla.org/network/protocol;1?name=" + aScheme;
}
ProtocolHandler.prototype =
{
defaultPort: -1,
allowPort: () => false,
newURI: function(aSpec, aCharset, aBaseURI)
{
let uri = Cc["@mozilla.org/network/standard-url;1"].
createInstance(Ci.nsIURI);
uri.spec = aSpec;
if (!uri.scheme) {
// We got a partial uri, so let's resolve it with the base one
uri.spec = aBaseURI.resolve(aSpec);
}
return uri;
},
newChannel2: function() { throw Cr.NS_ERROR_NOT_IMPLEMENTED },
newChannel: function() { throw Cr.NS_ERROR_NOT_IMPLEMENTED },
QueryInterface: XPCOMUtils.generateQI([
Ci.nsIProtocolHandler
])
};
var testProtocols = [
// It doesn't matter if it has this flag - the only flag we accept is
// URI_IS_LOCAL_RESOURCE.
{scheme: "moz-protocol-ui-resource",
flags: Ci.nsIProtocolHandler.URI_IS_UI_RESOURCE,
CID: Components.ID("{d6dedc93-558f-44fe-90f4-3b4bba8a0b14}"),
shouldRegister: false
},
// It doesn't matter if it has this flag - the only flag we accept is
// URI_IS_LOCAL_RESOURCE.
{scheme: "moz-protocol-local-file",
flags: Ci.nsIProtocolHandler.URI_IS_LOCAL_FILE,
CID: Components.ID("{ee30d594-0a2d-4f47-89cc-d4cde320ab69}"),
shouldRegister: false
},
// This clearly is non-local
{scheme: "moz-protocol-loadable-by-anyone",
flags: Ci.nsIProtocolHandler.URI_LOADABLE_BY_ANYONE,
CID: Components.ID("{c3735f23-3b0c-4a33-bfa0-79436dcd40b2}"),
shouldRegister: false
},
// This should always be last (unless we add more flags that are OK)
{scheme: "moz-protocol-local-resource",
flags: Ci.nsIProtocolHandler.URI_IS_LOCAL_RESOURCE,
CID: Components.ID("{b79e977c-f840-469a-b413-0125cc1b62a5}"),
shouldRegister: true
},
];
function run_test()
{
// Create factories
let factories = [];
for (let i = 0; i < testProtocols.length; i++) {
factories[i] = {
scheme: testProtocols[i].scheme,
flags: testProtocols[i].flags,
CID: testProtocols[i].CID,
contractID: "@mozilla.org/network/protocol;1?name=" + testProtocols[i].scheme,
createInstance: function(aOuter, aIID)
{
if (aOuter != null)
throw Cr.NS_ERROR_NO_AGGREGATION;
let handler = new ProtocolHandler(this.scheme, this.flags, this.CID);
return handler.QueryInterface(aIID);
}
};
}
// Add our XULAppInfo factory
factories.push(XULAppInfoFactory);
// Register our factories
for (let i = 0; i < factories.length; i++) {
let factory = factories[i];
Components.manager.QueryInterface(Ci.nsIComponentRegistrar)
.registerFactory(factory.CID, "test-" + factory.scheme,
factory.contractID, factory);
}
// Check for new chrome
let cr = Cc["@mozilla.org/chrome/chrome-registry;1"].
getService(Ci.nsIChromeRegistry);
cr.checkForNewChrome();
// See if our various things were able to register
let registrationTypes = [
"content",
"locale",
"skin",
"override",
"resource",
];
for (let i = 0; i < testProtocols.length; i++) {
let protocol = testProtocols[i];
for (let j = 0; j < registrationTypes.length; j++) {
let type = registrationTypes[j];
dump("Testing protocol '" + protocol.scheme + "' with type '" + type +
"'\n");
let expectedURI = protocol.scheme + "://foo/";
let sourceURI = "chrome://" + protocol.scheme + "/" + type + "/";
switch (type) {
case "content":
expectedURI += protocol.scheme + ".xul";
break;
case "locale":
expectedURI += protocol.scheme + ".dtd";
break;
case "skin":
expectedURI += protocol.scheme + ".css";
break;
case "override":
sourceURI = "chrome://good-package/content/override-" +
protocol.scheme + ".xul";
break;
case "resource":
sourceURI = "resource://" + protocol.scheme + "/";
break;
};
try {
let ios = Cc["@mozilla.org/network/io-service;1"].
getService(Ci.nsIIOService);
sourceURI = ios.newURI(sourceURI, null, null);
let uri;
if (type == "resource") {
// resources go about a slightly different way than everything else
let rph = ios.getProtocolHandler("resource").
QueryInterface(Ci.nsIResProtocolHandler);
// this throws for packages that are not registered
uri = rph.resolveURI(sourceURI);
}
else {
// this throws for packages that are not registered
uri = cr.convertChromeURL(sourceURI).spec;
}
if (protocol.shouldRegister) {
do_check_eq(expectedURI, uri);
}
else {
// Overrides will not throw, so we'll get to here. We want to make
// sure that the two strings are not the same in this situation.
do_check_neq(expectedURI, uri);
}
}
catch (e) {
if (protocol.shouldRegister) {
dump(e + "\n");
do_throw("Should have registered our URI for protocol " +
protocol.scheme);
}
}
}
}
// Unregister our factories so we do not leak
for (let i = 0; i < factories.length; i++) {
let factory = factories[i];
Components.manager.QueryInterface(Ci.nsIComponentRegistrar)
.unregisterFactory(factory.CID, factory);
}
}

View file

@ -0,0 +1,93 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
* 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/. */
// head_crtestutils.js doesn't get included in the child by default
if (typeof registerManifests === "undefined") {
load("../unit/head_crtestutils.js");
}
var manifestFile = do_get_file("../unit/data/test_resolve_uris.manifest");
var manifests = [ manifestFile ];
registerManifests(manifests);
var ios = Cc["@mozilla.org/network/io-service;1"].
getService(Ci.nsIIOService);
function do_run_test()
{
let cr = Cc["@mozilla.org/chrome/chrome-registry;1"].
getService(Ci.nsIChromeRegistry);
// If we don't have libxul or e10s then we don't have process separation, so
// we don't need to worry about checking for new chrome.
var appInfo = Cc["@mozilla.org/xre/app-info;1"];
if (!appInfo ||
(appInfo.getService(Ci.nsIXULRuntime).processType ==
Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT)) {
cr.checkForNewChrome();
}
// See if our various things were able to register
let registrationTypes = [
"content",
"locale",
"skin",
"override",
"resource",
];
for (let j = 0; j < registrationTypes.length; j++) {
let type = registrationTypes[j];
dump("Testing type '" + type + "'\n");
let expectedURI = "resource://foo/foo-" + type + "/";
let sourceURI = "chrome://foo/" + type + "/";
switch (type) {
case "content":
expectedURI += "foo.xul";
break;
case "locale":
expectedURI += "foo.dtd";
break;
case "skin":
expectedURI += "foo.css";
break;
case "override":
sourceURI = "chrome://good-package/content/override-me.xul";
expectedURI += "override-me.xul";
break;
case "resource":
expectedURI = ios.newFileURI(manifestFile.parent).spec;
sourceURI = "resource://foo/";
break;
};
try {
sourceURI = ios.newURI(sourceURI, null, null);
let uri;
if (type == "resource") {
// resources go about a slightly different way than everything else
let rph = ios.getProtocolHandler("resource").
QueryInterface(Ci.nsIResProtocolHandler);
uri = rph.resolveURI(sourceURI);
}
else {
uri = cr.convertChromeURL(sourceURI).spec;
}
do_check_eq(expectedURI, uri);
}
catch (e) {
dump(e + "\n");
do_throw("Should have registered a handler for type '" +
type + "'\n");
}
}
}
if (typeof run_test === "undefined") {
run_test = function() {
do_run_test();
};
}

View file

@ -0,0 +1,20 @@
[DEFAULT]
head = head_crtestutils.js
tail =
support-files = data/**
[test_abi.js]
[test_bug292789.js]
[test_bug380398.js]
[test_bug397073.js]
[test_bug399707.js]
[test_bug401153.js]
[test_bug415367.js]
[test_bug519468.js]
[test_bug564667.js]
tags = addons
[test_bug848297.js]
[test_crlf.js]
[test_data_protocol_registration.js]
[test_no_remote_registration.js]
[test_resolve_uris.js]

View file

@ -0,0 +1,9 @@
//
// Run test script in content process instead of chrome (xpcshell's default)
//
function run_test() {
load("../unit/test_resolve_uris.js");
do_run_test();
run_test_in_child("../unit/test_resolve_uris.js");
}

View file

@ -0,0 +1,10 @@
[DEFAULT]
head =
tail =
skip-if = toolkit == 'android'
support-files =
!/chrome/test/unit/data/**
!/chrome/test/unit/test_resolve_uris.js
!/chrome/test/unit/head_crtestutils.js
[test_resolve_uris_ipc.js]