Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: lib/child/elemHide.js

Issue 29346613: Issue 521 - Inject our stylesheet on per-site basis rather than globally (Closed)
Patch Set: Created June 17, 2016, 2:07 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | lib/child/main.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>, 2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-2016 Eyeo GmbH 3 * Copyright (C) 2006-2016 Eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 15 matching lines...) Expand all
26 let property = Object.getOwnPropertyDescriptor(proto, "Components"); 26 let property = Object.getOwnPropertyDescriptor(proto, "Components");
27 if (property && property.get) 27 if (property && property.get)
28 delete proto.Components; 28 delete proto.Components;
29 } 29 }
30 catch (e) 30 catch (e)
31 { 31 {
32 Cu.reportError(e); 32 Cu.reportError(e);
33 } 33 }
34 34
35 let {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {}); 35 let {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {});
36 let {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
36 37
37 let {shouldAllowAsync} = require("child/contentPolicy"); 38 let {shouldAllowAsync} = require("child/contentPolicy");
39 let {getFrames, isPrivate} = require("child/utils");
40 let {RequestNotifier} = require("child/requestNotifier");
38 let {port} = require("messaging"); 41 let {port} = require("messaging");
39 let {Utils} = require("utils"); 42 let {Utils} = require("utils");
40 43
41 // The allowXBL binding below won't have any effect on the element. For elements 44 // The allowXBL binding below won't have any effect on the element. For elements
42 // that should be hidden however we don't return any binding at all, this makes 45 // that should be hidden however we don't return any binding at all, this makes
43 // Gecko stop constructing the node - it cannot be shown. 46 // Gecko stop constructing the node - it cannot be shown.
44 const allowXBL = "<bindings xmlns='http://www.mozilla.org/xbl'><binding id='dumm y' bindToUntrustedContent='true'/></bindings>"; 47 const allowXBL = "<bindings xmlns='http://www.mozilla.org/xbl'><binding id='dumm y' bindToUntrustedContent='true'/></bindings>";
45 const hideXBL = "<bindings xmlns='http://www.mozilla.org/xbl'/>"; 48 const hideXBL = "<bindings xmlns='http://www.mozilla.org/xbl'/>";
46 49
47 const notImplemented = () => Cr.NS_ERROR_NOT_IMPLEMENTED; 50 const notImplemented = () => Cr.NS_ERROR_NOT_IMPLEMENTED;
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 return new Promise((resolve, reject) => 289 return new Promise((resolve, reject) =>
287 { 290 {
288 let window = Utils.getRequestWindow(this); 291 let window = Utils.getRequestWindow(this);
289 shouldAllowAsync(window, window.document, "ELEMHIDE", this.key, allow => 292 shouldAllowAsync(window, window.document, "ELEMHIDE", this.key, allow =>
290 { 293 {
291 resolve(allow ? allowXBL : hideXBL); 294 resolve(allow ? allowXBL : hideXBL);
292 }); 295 });
293 }); 296 });
294 } 297 }
295 }; 298 };
299
300 let observer = {
301 QueryInterface: XPCOMUtils.generateQI([
302 Ci.nsIObserver, Ci.nsISupportsWeakReference
303 ]),
304
305 topic: "content-document-global-created",
306 styleURL: Utils.makeURI("about:abp-elemhide?css"),
307 sheet: null,
308
309 init: function()
310 {
311 Services.obs.addObserver(this, this.topic, true);
312 onShutdown.add(() =>
313 {
314 Services.obs.removeObserver(this, this.topic);
315 });
316
317 port.on("elemhideupdate", () =>
318 {
319 this.sheet = null;
Thomas Greiner 2016/06/23 14:12:42 If I understand this correctly, we no longer apply
Wladimir Palant 2016/06/29 16:18:21 Yes, this is very much desirable and indeed listed
320 });
321 },
322
323 observe: function(subject, topic, data)
324 {
325 if (topic != this.topic)
326 return;
327
328 port.emitWithResponse("elemhideEnabled", {
329 frames: getFrames(subject),
330 isPrivate: isPrivate(subject)
331 }).then(({
332 enabled, contentType, docDomain, thirdParty, location, filter,
333 filterType
334 }) =>
335 {
336 if (enabled)
337 {
338 if (!this.sheet)
339 {
340 this.sheet = Utils.styleService.preloadSheet(this.styleURL,
341 Ci.nsIStyleSheetService.USER_SHEET);
342 }
343
344 let utils = subject.QueryInterface(Ci.nsIInterfaceRequestor)
345 .getInterface(Ci.nsIDOMWindowUtils);
346 utils.addSheet(this.sheet, Ci.nsIStyleSheetService.USER_SHEET);
347 }
348 else if (filter)
349 {
350 RequestNotifier.addNodeData(subject.document, subject.top, {
351 contentType, docDomain, thirdParty, location, filter, filterType
352 });
353 }
354 });
355 }
356 };
357 observer.init();
OLDNEW
« no previous file with comments | « no previous file | lib/child/main.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld