From cfd14894824a145698bfd069ba3cd7200571dd31 Mon Sep 17 00:00:00 2001 From: Matthew Noorenberghe Date: Fri, 14 Mar 2014 16:24:57 -0700 Subject: [PATCH] Bug 983761 - Add support for CSSGroupingRules in LightweightThemeListener. r=Gijs --- browser/base/content/browser-addons.js | 28 +++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/browser/base/content/browser-addons.js b/browser/base/content/browser-addons.js index 76fd4297e1f1..835855f4e285 100644 --- a/browser/base/content/browser-addons.js +++ b/browser/base/content/browser-addons.js @@ -405,16 +405,30 @@ let LightweightThemeListener = { updateStyleSheet: function(headerImage) { if (!this.styleSheet) return; - for (let i = 0; i < this.styleSheet.cssRules.length; i++) { - let rule = this.styleSheet.cssRules[i]; - if (!rule.style.backgroundImage) - continue; + this.substituteRules(this.styleSheet.cssRules, headerImage); + }, - if (!this._modifiedStyles[i]) - this._modifiedStyles[i] = { backgroundImage: rule.style.backgroundImage }; + substituteRules: function(ruleList, headerImage, existingStyleRulesModified = 0) { + let styleRulesModified = 0; + for (let i = 0; i < ruleList.length; i++) { + let rule = ruleList[i]; + if (rule instanceof Ci.nsIDOMCSSGroupingRule) { + // Add the number of modified sub-rules to the modified count + styleRulesModified += this.substituteRules(rule.cssRules, headerImage, existingStyleRulesModified + styleRulesModified); + } else if (rule instanceof Ci.nsIDOMCSSStyleRule) { + if (!rule.style.backgroundImage) + continue; + let modifiedIndex = existingStyleRulesModified + styleRulesModified; + if (!this._modifiedStyles[modifiedIndex]) + this._modifiedStyles[modifiedIndex] = { backgroundImage: rule.style.backgroundImage }; - rule.style.backgroundImage = this._modifiedStyles[i].backgroundImage + ", " + headerImage; + rule.style.backgroundImage = this._modifiedStyles[modifiedIndex].backgroundImage + ", " + headerImage; + styleRulesModified++; + } else { + Cu.reportError("Unsupported rule encountered"); + } } + return styleRulesModified; }, // nsIObserver