summaryrefslogtreecommitdiffstats
path: root/dom/browser-element/mochitest/browserElement_ThemeColor.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/browser-element/mochitest/browserElement_ThemeColor.js')
-rw-r--r--dom/browser-element/mochitest/browserElement_ThemeColor.js85
1 files changed, 85 insertions, 0 deletions
diff --git a/dom/browser-element/mochitest/browserElement_ThemeColor.js b/dom/browser-element/mochitest/browserElement_ThemeColor.js
new file mode 100644
index 000000000..01e9c5c36
--- /dev/null
+++ b/dom/browser-element/mochitest/browserElement_ThemeColor.js
@@ -0,0 +1,85 @@
+/* Any copyright is dedicated to the public domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Test that the onmozbrowsermetachange event for theme-color works.
+"use strict";
+
+SimpleTest.waitForExplicitFinish();
+browserElementTestHelpers.setEnabledPref(true);
+browserElementTestHelpers.addPermission();
+
+function runTest() {
+ function loadFrameScript(script) {
+ SpecialPowers.getBrowserFrameMessageManager(iframe1)
+ .loadFrameScript("data:," + script,
+ /* allowDelayedLoad = */ false);
+ }
+
+ let iframe1 = document.createElement('iframe');
+ iframe1.setAttribute('mozbrowser', 'true');
+ iframe1.src = "http://test/tests/dom/browser-element/mochitest/file_browserElement_ThemeColor.html";
+ iframe1.addEventListener('mozbrowsermetachange', tests);
+ document.body.appendChild(iframe1);
+
+ let numMetaChanges = 0;
+ function tests(e) {
+ let detail = e.detail;
+
+ switch (numMetaChanges++) {
+ case 0: {
+ is(detail.name, 'theme-color', 'name matches');
+ is(detail.content, 'pink', 'content matches');
+ is(detail.type, 'added', 'type matches');
+
+ let script =
+ "var meta = content.document.head.querySelector('meta');" +
+ "meta.content = 'green';";
+ loadFrameScript(script);
+ break;
+ }
+
+ case 1: {
+ is(detail.name, 'theme-color', 'name matches');
+ is(detail.content, 'green', 'content matches');
+ is(detail.type, 'changed', 'type matches');
+
+ let script =
+ "var meta = content.document.createElement('meta');" +
+ "meta.name = 'theme-group';" +
+ "meta.content = 'theme-productivity';" +
+ "content.document.head.appendChild(meta)";
+ loadFrameScript(script);
+ break;
+ }
+
+ case 2: {
+ is(detail.name, 'theme-group', 'name matches');
+ is(detail.content, 'theme-productivity', 'content matches');
+ is(detail.type, 'added', 'type matches');
+
+ let script =
+ "var meta = content.document.head.querySelector('meta');" +
+ "meta.parentNode.removeChild(meta);";
+ loadFrameScript(script);
+ break;
+ }
+
+ case 3: {
+ is(detail.name, 'theme-color', 'name matches');
+ is(detail.content, 'green', 'content matches');
+ is(detail.type, 'removed', 'type matches');
+
+ SimpleTest.finish();
+ break;
+ }
+
+ default: {
+ ok(false, 'Too many metachange events.');
+ break;
+ }
+ }
+ };
+}
+
+window.addEventListener('testready', runTest);
+