From f6e09a9b1ae5c8ee4b1ac1d9089167895200c52d Mon Sep 17 00:00:00 2001 From: kkapsner Date: Wed, 26 Aug 2015 18:12:12 +0200 Subject: [PATCH] Removed bypass option with non content windos. --- canvasblocker.xpi | Bin 29779 -> 31479 bytes data/inject.js | 8 ++--- lib/disableWithoutDocumentElement.js | 49 +++++++++++++++++++++++++++ lib/main.js | 3 +- 4 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 lib/disableWithoutDocumentElement.js diff --git a/canvasblocker.xpi b/canvasblocker.xpi index 4f41e83c600fb4b4a723cd76a777d92569ab6655..c9c4db2b6a3116e06486c6f645fe8c9cbe4e394a 100644 GIT binary patch delta 14472 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 delta 12762 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

C>Cbnpfue%_{Qe`IU8P4>bv<@8=hF)( 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 diff --git a/data/inject.js b/data/inject.js index 0d4eeda..5601b26 100644 --- a/data/inject.js +++ b/data/inject.js @@ -147,7 +147,7 @@ toDataURL: { mode: blockMode.readAPI, object: unsafeWindow.HTMLCanvasElement, - fake: function(){ + fake: function toDataURL(){ var type = arguments[0] || "image/png"; return "data:" + type + ";base64," + btoa(randomImage); } @@ -155,7 +155,7 @@ toBlob: { mode: blockMode.readAPI, object: unsafeWindow.HTMLCanvasElement, - fake: function(callback){ + fake: function toBlob(callback){ var type = arguments[0] || "image/png"; var blob = new window.Blob(randomImage, {type: type}); callback(blob); @@ -169,7 +169,7 @@ getImageData: { mode: blockMode.readAPI, object: unsafeWindow.CanvasRenderingContext2D, - fake: function(sx, sy, sw, sh){ + fake: function getImageData(sx, sy, sw, sh){ var l = sw * sh * 4; var data = new Uint8ClampedArray(l); for (var i = 0; i < l; i += 1){ @@ -185,7 +185,7 @@ readPixels: { mode: blockMode.readAPI, object: unsafeWindow.WebGLRenderingContext, - fake: function(x, y, width, height, format, type, pixels){ + fake: function readPixels(x, y, width, height, format, type, pixels){ // fake not working due to XRay copy restrictions... // for (var i = 0; i < pixels.length; i += 1){ // pixels[i] = Math.floor( diff --git a/lib/disableWithoutDocumentElement.js b/lib/disableWithoutDocumentElement.js new file mode 100644 index 0000000..9fdedfb --- /dev/null +++ b/lib/disableWithoutDocumentElement.js @@ -0,0 +1,49 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +(function(){ + "use strict"; + + const observers = require("sdk/system/events"); + const { when: unload } = require("sdk/system/unload"); + + var classes = { + HTMLCanvasElement: ["getContext", "toDataURL", "toBlob", "mozGetAsFile"], + CanvasRenderingContext2D: ["getImageData"], + WebGLRenderingContext: ["readPixels"] + }; + + var classNames = Object.keys(classes); + + var originalProperties = new WeakMap(); + + function disable({subject: window}){ + var oldProperties = {}; + classNames.forEach(function(className){ + oldProperties[className] = {}; + classes[className].forEach(function(funcName){ + oldProperties[className][funcName] = window.wrappedJSObject[className].prototype[funcName]; + window.wrappedJSObject[className].prototype[funcName] = function(){}; + }); + }); + originalProperties.set(window, oldProperties); + } + + function reset({subject: document}){ + var window = document.defaultView; + var oldProperties = originalProperties.get(window); + if (oldProperties){ + originalProperties.delete(window); + classNames.forEach(function(className){ + classes[className].forEach(function(funcName){ + window.wrappedJSObject[className].prototype[funcName] = oldProperties[className][funcName]; + }); + }); + } + } + + observers.on("content-document-global-created", disable); + unload(() => observers.off("content-document-global-created", disable)); + observers.on("document-element-inserted", reset); + unload(() => observers.off("document-element-inserted", reset)); +}()); \ No newline at end of file diff --git a/lib/main.js b/lib/main.js index 4102195..47d8931 100644 --- a/lib/main.js +++ b/lib/main.js @@ -5,6 +5,7 @@ (function(){ "use strict"; require("./stylePreferencePane"); + require("./disableWithoutDocumentElement"); var self = require("sdk/self"); var pageMod = require("sdk/page-mod"); @@ -70,7 +71,7 @@ var url = new URL(worker.url); if ( (url.protocol === "about:") || - (prefs.allowPDFCanvas && worker.tab.contentType.match(/\/pdf$/i)) + (prefs.allowPDFCanvas && worker.tab && worker.tab.contentType.match(/\/pdf$/i)) ){ mode = "unblock"; }