From bf078066c8530d0d728138243892cc2ad2ee2aed Mon Sep 17 00:00:00 2001 From: Geoff Lankow Date: Wed, 3 Jul 2013 00:20:51 +1200 Subject: [PATCH] Bug 888778 - Custom binding not applied to inline settings; r=Unfocused --- .../mozapps/extensions/content/extensions.js | 9 +- .../extensions/test/browser/Makefile.in | 1 + .../binding.xml | 19 ++++ .../bootstrap.js | 8 ++ .../chrome.manifest | 2 + .../install.rdf | 19 ++++ .../options.xul | 5 + .../browser_inlinesettings1_custom/string.dtd | 1 + .../browser/browser_inlinesettings_custom.js | 92 +++++++++++++++++++ 9 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/binding.xml create mode 100644 toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/bootstrap.js create mode 100644 toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/chrome.manifest create mode 100644 toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/install.rdf create mode 100644 toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/options.xul create mode 100644 toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/string.dtd create mode 100644 toolkit/mozapps/extensions/test/browser/browser_inlinesettings_custom.js diff --git a/toolkit/mozapps/extensions/content/extensions.js b/toolkit/mozapps/extensions/content/extensions.js index 41c23c21615..5f205f4af7a 100644 --- a/toolkit/mozapps/extensions/content/extensions.js +++ b/toolkit/mozapps/extensions/content/extensions.js @@ -2973,7 +2973,8 @@ var gDetailView = { var settings = xml.querySelectorAll(":root > setting"); var firstSetting = null; - for (let setting of settings) { + for (var xmlSetting of settings) { + var setting = document.importNode(xmlSetting, true); var desc = stripTextNodes(setting).trim(); if (!setting.hasAttribute("desc")) @@ -2983,6 +2984,12 @@ var gDetailView = { if (type == "file" || type == "directory") setting.setAttribute("fullpath", "true"); + var style = setting.getAttribute("style"); + if (style) { + setting.removeAttribute("style"); + setting.setAttribute("style", style); + } + rows.appendChild(setting); var visible = window.getComputedStyle(setting, null).getPropertyValue("display") != "none"; if (!firstSetting && visible) { diff --git a/toolkit/mozapps/extensions/test/browser/Makefile.in b/toolkit/mozapps/extensions/test/browser/Makefile.in index 17d0961589b..af6e1ea663a 100644 --- a/toolkit/mozapps/extensions/test/browser/Makefile.in +++ b/toolkit/mozapps/extensions/test/browser/Makefile.in @@ -59,6 +59,7 @@ MOCHITEST_BROWSER_MAIN = \ browser_openDialog.js \ browser_types.js \ browser_inlinesettings.js \ + browser_inlinesettings_custom.js \ browser_inlinesettings_info.js \ browser_tabsettings.js \ browser_pluginprefs.js \ diff --git a/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/binding.xml b/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/binding.xml new file mode 100644 index 00000000000..6ac72a03c93 --- /dev/null +++ b/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/binding.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/bootstrap.js b/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/bootstrap.js new file mode 100644 index 00000000000..7871af738e5 --- /dev/null +++ b/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/bootstrap.js @@ -0,0 +1,8 @@ +function install (params, aReason) { +} +function uninstall (params, aReason) { +} +function startup (params, aReason) { +} +function shutdown (params, aReason) { +} diff --git a/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/chrome.manifest b/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/chrome.manifest new file mode 100644 index 00000000000..f7132fc46b7 --- /dev/null +++ b/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/chrome.manifest @@ -0,0 +1,2 @@ +content inlinesettings ./ +locale inlinesettings en-US ./ diff --git a/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/install.rdf b/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/install.rdf new file mode 100644 index 00000000000..2bf7c6e2ef8 --- /dev/null +++ b/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/install.rdf @@ -0,0 +1,19 @@ + + + + + inlinesettings1@tests.mozilla.org + Inline Settings (Bootstrap) + 1 + true + + + + toolkit@mozilla.org + 0 + * + + + + + diff --git a/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/options.xul b/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/options.xul new file mode 100644 index 00000000000..148fb9856f8 --- /dev/null +++ b/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/options.xul @@ -0,0 +1,5 @@ + + + + + diff --git a/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/string.dtd b/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/string.dtd new file mode 100644 index 00000000000..0b2dcc8fe18 --- /dev/null +++ b/toolkit/mozapps/extensions/test/browser/addons/browser_inlinesettings1_custom/string.dtd @@ -0,0 +1 @@ + diff --git a/toolkit/mozapps/extensions/test/browser/browser_inlinesettings_custom.js b/toolkit/mozapps/extensions/test/browser/browser_inlinesettings_custom.js new file mode 100644 index 00000000000..ecd10852d4e --- /dev/null +++ b/toolkit/mozapps/extensions/test/browser/browser_inlinesettings_custom.js @@ -0,0 +1,92 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +// Tests various aspects of the details view + +var gManagerWindow; +var gCategoryUtilities; + +function installAddon(aCallback) { + AddonManager.getInstallForURL(TESTROOT + "addons/browser_inlinesettings1_custom.xpi", + function(aInstall) { + aInstall.addListener({ + onInstallEnded: function() { + executeSoon(aCallback); + } + }); + aInstall.install(); + }, "application/x-xpinstall"); +} + +function test() { + waitForExplicitFinish(); + + installAddon(function () { + open_manager("addons://list/extension", function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + + run_next_test(); + }); + }); +} + +function end_test() { + close_manager(gManagerWindow, function() { + AddonManager.getAddonByID("inlinesettings1@tests.mozilla.org", function(aAddon) { + aAddon.uninstall(); + finish(); + }); + }); +} + +// Addon with options.xul, with custom binding +add_test(function() { + var addon = get_addon_element(gManagerWindow, "inlinesettings1@tests.mozilla.org"); + is(addon.mAddon.optionsType, AddonManager.OPTIONS_TYPE_INLINE, "Options should be inline type"); + addon.parentNode.ensureElementIsVisible(addon); + + var button = gManagerWindow.document.getAnonymousElementByAttribute(addon, "anonid", "preferences-btn"); + is_element_visible(button, "Preferences button should be visible"); + + run_next_test(); +}); + +// Addon with options.xul, also a test for the setting.xml bindings +add_test(function() { + var addon = get_addon_element(gManagerWindow, "inlinesettings1@tests.mozilla.org"); + addon.parentNode.ensureElementIsVisible(addon); + + var button = gManagerWindow.document.getAnonymousElementByAttribute(addon, "anonid", "preferences-btn"); + EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow); + + wait_for_view_load(gManagerWindow, function() { + is(gManagerWindow.gViewController.currentViewId, + "addons://detail/inlinesettings1%40tests.mozilla.org/preferences", + "Current view should scroll to preferences"); + + var grid = gManagerWindow.document.getElementById("detail-grid"); + var settings = grid.querySelectorAll("rows > setting"); + is(settings.length, 1, "Grid should have settings children"); + + ok(settings[0].hasAttribute("first-row"), "First visible row should have first-row attribute"); + + var style = window.getComputedStyle(settings[0], null); + is(style.getPropertyValue("background-color"), "rgb(0, 0, 255)", "Background color should be set"); + is(style.getPropertyValue("display"), "-moz-grid-line", "Display should be set"); + is(style.getPropertyValue("-moz-binding"), 'url("chrome://inlinesettings/content/binding.xml#custom")', "Binding should be set"); + + var label = gManagerWindow.document.getAnonymousElementByAttribute(settings[0], "anonid", "label"); + is(label.textContent, "Custom", "Localized string should be shown"); + + var input = gManagerWindow.document.getAnonymousElementByAttribute(settings[0], "anonid", "input"); + isnot(input, null, "Binding should be applied"); + is(input.value, "Woah!", "Binding should be applied"); + + button = gManagerWindow.document.getElementById("detail-prefs-btn"); + is_element_hidden(button, "Preferences button should not be visible"); + + gCategoryUtilities.openType("extension", run_next_test); + }); +});