Index: lib/elemHide.js |
=================================================================== |
--- a/lib/elemHide.js |
+++ b/lib/elemHide.js |
@@ -136,16 +136,48 @@ let ElemHide = exports.ElemHide = |
return; |
if (!Prefs.enabled) |
return; |
if (Policy.shouldNeverBlockWindow(subject)) |
return; |
+ let domain = null; |
+ let filters = null; |
+ try |
+ { |
+ domain = subject.document.documentURIObject.host; |
+ if (domain) |
+ filters = ElemHide.getFiltersWithKeyForDomain(domain, true); |
+ } catch (e) {} |
+ |
+ if (filters) |
+ { |
+ let list = Object.create(null); |
+ for (let {key, filter} of filters) |
+ list[key] = filter; |
+ |
+ let css = ""; |
+ for (let line in this._generateCSSContent(list, false)) |
+ css += line + "\n"; |
+ |
+ let uri = Services.io.newURI("data:text/css;base64," + btoa(css), null, null); |
+ try |
+ { |
+ let utils = subject.QueryInterface(Ci.nsIInterfaceRequestor) |
+ .getInterface(Ci.nsIDOMWindowUtils); |
+ utils.loadSheet(uri, Ci.nsIStyleSheetService.USER_SHEET); |
+ } |
+ catch (e) |
+ { |
+ Cu.reportError(e); |
+ } |
+ } |
+ |
if (styleSheet) |
{ |
try |
{ |
let utils = subject.QueryInterface(Ci.nsIInterfaceRequestor) |
.getInterface(Ci.nsIDOMWindowUtils); |
utils.addSheet(styleSheet, Ci.nsIStyleSheetService.USER_SHEET); |
} |
@@ -296,17 +328,17 @@ let ElemHide = exports.ElemHide = |
ElemHide.unapply(); |
TimeLine.log("ElemHide.unapply() finished"); |
} |
TimeLine.leave("ElemHide.apply() done (no file changes)"); |
return; |
} |
- IO.writeToFile(styleURL.file, this._generateCSSContent(), function(e) |
+ IO.writeToFile(styleURL.file, this._generateCSSContent(filterByKey, useNew), function(e) |
{ |
TimeLine.enter("ElemHide.apply() write callback"); |
this._applying = false; |
// _generateCSSContent is throwing NS_ERROR_NOT_AVAILABLE to indicate that |
// there are no filters. If that exception is passed through XPCOM we will |
// see a proper exception here, otherwise a number. |
let noFilters = (e == Cr.NS_ERROR_NOT_AVAILABLE || (e && e.result == Cr.NS_ERROR_NOT_AVAILABLE)); |
@@ -340,39 +372,43 @@ let ElemHide = exports.ElemHide = |
styleSheet = Utils.styleService.preloadSheet(styleURL, Ci.nsIStyleSheetService.USER_SHEET); |
ElemHide.applied = true; |
} |
catch (e) |
{ |
Cu.reportError(e); |
} |
TimeLine.log("Applying stylesheet finished"); |
+ Cu.reportError("applying finished"); |
} |
FilterNotifier.triggerListeners("elemhideupdate"); |
} |
TimeLine.leave("ElemHide.apply() write callback done"); |
}.bind(this), "ElemHideWrite"); |
this._applying = true; |
TimeLine.leave("ElemHide.apply() done", "ElemHideWrite"); |
}, |
- _generateCSSContent: function() |
+ _generateCSSContent: function(filters, onlyGlobal) |
{ |
// Grouping selectors by domains |
TimeLine.log("start grouping selectors"); |
let domains = Object.create(null); |
let hasFilters = false; |
- for (let key in filterByKey) |
+ for (let key in filters) |
{ |
- let filter = filterByKey[key]; |
+ let filter = filters[key]; |
let domain = filter.selectorDomain || ""; |
+ if (onlyGlobal && domain) |
+ continue; |
+ |
let list; |
if (domain in domains) |
list = domains[domain]; |
else |
{ |
list = Object.create(null); |
domains[domain] = list; |
} |
@@ -458,10 +494,27 @@ let ElemHide = exports.ElemHide = |
if (specificOnly && (!domains || domains[""])) |
continue; |
if (filter.isActiveOnDomain(domain) && !this.getException(filter, domain)) |
result.push(filter.selector); |
} |
return result; |
+ }, |
+ |
+ getFiltersWithKeyForDomain: function(/**String*/ domain) |
+ { |
+ let result = []; |
+ for (let key in filterByKey) |
+ { |
+ let filter = filterByKey[key]; |
+ |
+ if (!filter.domains) |
+ continue |
+ |
+ if (filter.isActiveOnDomain(domain) && !this.getException(filter, domain)) |
+ result.push({key, filter}); |
+ } |
+ return result; |
} |
+ |
}; |