1
0
mirror of https://github.com/kkapsner/CanvasBlocker synced 2025-05-25 09:13:27 +02:00

Added fake for readPixels and removed new tab bug

Bug description: if a new tab is opened the wrong blockmode could be
used.
This commit is contained in:
kkapsner 2015-04-22 11:18:26 +02:00
parent a8f636ba6f
commit 30407e71a0
4 changed files with 169 additions and 113 deletions

Binary file not shown.

View File

@ -171,7 +171,15 @@
}, },
readPixels: { readPixels: {
mode: blockMode.readAPI, mode: blockMode.readAPI,
object: unsafeWindow.WebGLRenderingContext object: unsafeWindow.WebGLRenderingContext,
fake: function(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(
// Math.random() * 256
// );
// }
}
} }
}; };
@ -253,37 +261,56 @@
// Communication with main.js // Communication with main.js
self.port.on("block", function(){ function setStatus(mode, askOnce){
blockMode.getContext.status = "block"; switch (mode){
blockMode.readAPI.status = "allow"; case "block":
}); blockMode.getContext.status = "block";
self.port.on("ask", function(askOnce){ blockMode.readAPI.status = "allow";
blockMode.getContext.status = "ask"; break;
blockMode.getContext.askStatus.askOnce = askOnce; case "ask":
blockMode.readAPI.status = "allow"; blockMode.getContext.status = "ask";
}); blockMode.getContext.askStatus.askOnce = askOnce;
self.port.on("blockReadout", function(){ blockMode.readAPI.status = "allow";
blockMode.getContext.status = "allow"; break;
blockMode.readAPI.status = "block"; case "blockReadout":
}); blockMode.getContext.status = "allow";
self.port.on("fakeReadout", function(){ blockMode.readAPI.status = "block";
blockMode.getContext.status = "allow"; break;
blockMode.readAPI.status = "fake"; case "fakeReadout":
}); blockMode.getContext.status = "allow";
self.port.on("askReadout", function(askOnce){ blockMode.readAPI.status = "fake";
blockMode.getContext.status = "allow"; break;
blockMode.readAPI.status = "ask"; case "askReadout":
blockMode.readAPI.askStatus.askOnce = askOnce; blockMode.getContext.status = "allow";
}); blockMode.readAPI.status = "ask";
self.port.on("unblock", function(){ blockMode.readAPI.askStatus.askOnce = askOnce;
blockMode.getContext.status = "allow"; break;
blockMode.readAPI.status = "allow"; case "unblock":
}); blockMode.getContext.status = "allow";
self.port.on("detach", function(){ blockMode.readAPI.status = "allow";
blockMode.getContext.status = "allow"; break;
blockMode.readAPI.status = "allow"; case "detach":
blockMode.getContext.status = "allow";
blockMode.readAPI.status = "allow";
break;
}
}
["block", "ask", "blockReadout", "fakeReadout", "askReadout", "unblock", "detach"].forEach(function(mode){
self.port.on(mode, function(askOnce){
setStatus(mode, askOnce);
});
}); });
setStatus(
checkURL(
location,
self.options.blockMode,
getDomainRegExpList(self.options.whiteList),
getDomainRegExpList(self.options.blackList)
),
self.options.askOnce
);
// settings passthrough // settings passthrough
self.port.on("set", function(name, value){ self.port.on("set", function(name, value){
settings[name] = value; settings[name] = value;

View File

@ -5,45 +5,6 @@
(function(){ (function(){
"use strict"; "use strict";
function getDomainRegExpList(domainList){
var list = domainList
.split(",")
.map(function(entry){
return entry.replace(/^\s+|\s+$/g, "");
})
.filter(function(entry){
return !!entry.length;
})
.map(function(entry){
var regExp;
var domain = !!entry.match(/^[\w.]+$/);
if (domain){
regExp = new RegExp("(?:^|\\.)" + entry.replace(/([\\\+\*\?\[\^\]\$\(\)\{\}\=\!\|\.])/g, "\\$1") + "\\.?$", "i");
}
else {
regExp = new RegExp(entry, "i");
}
return {
match: function(url){
if (domain){
return url.hostname.match(regExp);
}
else {
return url.href.match(regExp);
}
}
};
});
list.match = function(url){
return this.some(function(entry){
return entry.match(url);
});
};
return list;
}
var self = require("sdk/self"); var self = require("sdk/self");
var pageMod = require("sdk/page-mod"); var pageMod = require("sdk/page-mod");
var array = require("sdk/util/array"); var array = require("sdk/util/array");
@ -55,6 +16,8 @@
var tabUtils = require("sdk/tabs/utils"); var tabUtils = require("sdk/tabs/utils");
var windowUtils = require("sdk/window/utils"); var windowUtils = require("sdk/window/utils");
var sharedFunctions = require("./sharedFunctions.js");
var getDomainRegExpList = sharedFunctions.getDomainRegExpList;
// preferences // preferences
Object.keys(prefs).forEach(function(pref){ Object.keys(prefs).forEach(function(pref){
preferences.on(pref, function(){ preferences.on(pref, function(){
@ -90,48 +53,7 @@
}); });
function checkURL(url){ function checkURL(url){
var mode = "block"; return sharedFunctions.checkURL(url, prefs.blockMode, whiteList, blackList);
switch (prefs.blockMode){
case "blockEverything":
mode = "block";
break;
case "allowOnlyWhiteList":
if (whiteList.match(url)){
mode = "unblock";
}
else {
mode = "block";
}
break;
case "ask":
case "blockReadout":
case "fakeReadout":
case "askReadout":
if (whiteList.match(url)){
mode = "unblock";
}
else if (blackList.match(url)){
mode = "block";
}
else {
mode = prefs.blockMode;
}
break;
case "blockOnlyBlackList":
if (blackList.match(url)){
mode = "block";
}
else {
mode = "unblock";
}
break;
case "allowEverything":
mode = "unblock";
break;
default:
console.log("Unknown blocking mode. Default to block everything.");
}
return mode;
} }
function checkWorker(worker){ function checkWorker(worker){
try { try {
@ -154,10 +76,28 @@
} }
var workers = []; var workers = [];
var workerOptions = {
blockMode: checkURL(),
whiteList: prefs.whiteList,
blackList: prefs.blackList,
askOnce: prefs.askOnce
};
preferences.on("blockMode", function(){
workerOptions.blockMode = checkURL();
});
["whiteList", "blackList", "askOnce"].forEach(function(prefName){
preferences.on(prefName, function(){
workerOptions[prefName] = prefs[prefName];
});
});
pageMod.PageMod({ pageMod.PageMod({
include: "*", include: "*",
contentScriptWhen: "start", contentScriptWhen: "start",
contentScriptFile: self.data.url("inject.js"), contentScriptFile: [
self.data.url("sharedFunctions.js").replace("/data/", "/lib/"),
self.data.url("inject.js"),
],
contentScriptOptions: workerOptions,
onAttach: function(worker){ onAttach: function(worker){
array.add(workers, worker); array.add(workers, worker);

89
lib/sharedFunctions.js Normal file
View File

@ -0,0 +1,89 @@
function getDomainRegExpList(domainList){
var list = domainList
.split(",")
.map(function(entry){
return entry.replace(/^\s+|\s+$/g, "");
})
.filter(function(entry){
return !!entry.length;
})
.map(function(entry){
var regExp;
var domain = !!entry.match(/^[\w.]+$/);
if (domain){
regExp = new RegExp("(?:^|\\.)" + entry.replace(/([\\\+\*\?\[\^\]\$\(\)\{\}\=\!\|\.])/g, "\\$1") + "\\.?$", "i");
}
else {
regExp = new RegExp(entry, "i");
}
return {
match: function(url){
if (domain){
return url.hostname.match(regExp);
}
else {
return url.href.match(regExp);
}
}
};
});
list.match = function(url){
return this.some(function(entry){
return entry.match(url);
});
};
return list;
}
function checkURL(url, blockMode, whiteList, blackList){
var mode = "block";
switch (blockMode){
case "blockEverything":
mode = "block";
break;
case "allowOnlyWhiteList":
if (url && whiteList.match(url)){
mode = "unblock";
}
else {
mode = "block";
}
break;
case "ask":
case "blockReadout":
case "fakeReadout":
case "askReadout":
if (url && whiteList.match(url)){
mode = "unblock";
}
else if (url && blackList.match(url)){
mode = "block";
}
else {
mode = blockMode;
}
break;
case "blockOnlyBlackList":
if (url && blackList.match(url)){
mode = "block";
}
else {
mode = "unblock";
}
break;
case "allowEverything":
mode = "unblock";
break;
default:
console.log("Unknown blocking mode (" + blockMode + "). Default to block everything.");
}
return mode;
}
try {
exports.getDomainRegExpList = getDomainRegExpList;
exports.checkURL = checkURL;
}
catch(e){}