summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/extensions/test/xpcshell/test_registerchrome.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/extensions/test/xpcshell/test_registerchrome.js')
-rw-r--r--toolkit/mozapps/extensions/test/xpcshell/test_registerchrome.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_registerchrome.js b/toolkit/mozapps/extensions/test/xpcshell/test_registerchrome.js
new file mode 100644
index 0000000000..5d45a1a273
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_registerchrome.js
@@ -0,0 +1,88 @@
+"use strict";
+
+function getFileURI(path) {
+ let file = do_get_file(".");
+ file.append(path);
+ return Services.io.newFileURI(file);
+}
+
+add_task(async function () {
+ const registry = Cc["@mozilla.org/chrome/chrome-registry;1"].getService(
+ Ci.nsIChromeRegistry
+ );
+
+ let file1 = getFileURI("file1");
+ let file2 = getFileURI("file2");
+
+ let uri1 = getFileURI("chrome.manifest");
+ let uri2 = getFileURI("manifest.json");
+
+ let overrideURL = Services.io.newURI("chrome://global/content/foo");
+ let contentURL = Services.io.newURI("chrome://test/content/foo");
+ let localeURL = Services.io.newURI("chrome://global/locale/foo");
+
+ let origOverrideURL = registry.convertChromeURL(overrideURL);
+ let origLocaleURL = registry.convertChromeURL(localeURL);
+
+ let entry1 = aomStartup.registerChrome(uri1, [
+ ["override", "chrome://global/content/foo", file1.spec],
+ ["content", "test", file2.spec + "/"],
+ ["locale", "global", "en-US", file2.spec + "/"],
+ ]);
+
+ let entry2 = aomStartup.registerChrome(uri2, [
+ ["override", "chrome://global/content/foo", file2.spec],
+ ["content", "test", file1.spec + "/"],
+ ["locale", "global", "en-US", file1.spec + "/"],
+ ]);
+
+ // Initially, the second entry should override the first.
+ equal(registry.convertChromeURL(overrideURL).spec, file2.spec);
+ let file = file1.spec + "/foo";
+ equal(registry.convertChromeURL(contentURL).spec, file);
+ equal(registry.convertChromeURL(localeURL).spec, file);
+
+ // After destroying the second entry, the first entry should now take
+ // precedence.
+ entry2.destruct();
+ equal(registry.convertChromeURL(overrideURL).spec, file1.spec);
+ file = file2.spec + "/foo";
+ equal(registry.convertChromeURL(contentURL).spec, file);
+ equal(registry.convertChromeURL(localeURL).spec, file);
+
+ // After dropping the reference to the first entry and allowing it to
+ // be GCed, we should be back to the original entries.
+ entry1 = null; // eslint-disable-line no-unused-vars
+ Cu.forceGC();
+ Cu.forceCC();
+ equal(registry.convertChromeURL(overrideURL).spec, origOverrideURL.spec);
+ equal(registry.convertChromeURL(localeURL).spec, origLocaleURL.spec);
+ Assert.throws(
+ () => registry.convertChromeURL(contentURL),
+ e => e.result == Cr.NS_ERROR_FILE_NOT_FOUND,
+ "chrome://test/ should no longer be registered"
+ );
+});
+
+add_task(async function () {
+ const INVALID_VALUES = [
+ {},
+ "foo",
+ ["foo"],
+ [{}],
+ [[]],
+ [["locale", "global"]],
+ [["locale", "global", "en", "foo", "foo"]],
+ [["override", "en"]],
+ [["override", "en", "US", "OR"]],
+ ];
+
+ let uri = getFileURI("chrome.manifest");
+ for (let arg of INVALID_VALUES) {
+ Assert.throws(
+ () => aomStartup.registerChrome(uri, arg),
+ e => e.result == Cr.NS_ERROR_INVALID_ARG,
+ `Arg ${uneval(arg)} should throw`
+ );
+ }
+});