mirror of
https://github.com/PurpleI2P/i2pdbrowser
synced 2025-01-14 16:57:58 +00:00
R4SAS
9188271b06
What is CCK2? Answer here: https://mike.kaply.com/cck2/ Updated configuration Add new old reseed certificate Update addressbook Now time to think about one problem - user agent. In FF 60+ removed ability to change it without addons. Former-commit-id: 6e9eeba2096bc36b3521ebc040f733ad8ba06a27
184 lines
6.2 KiB
JavaScript
184 lines
6.2 KiB
JavaScript
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
|
|
Cu.import("resource://gre/modules/Services.jsm");
|
|
|
|
const EXPORTED_SYMBOLS = [];
|
|
|
|
var gAllowedPasteSites = [];
|
|
var gAllowedCutCopySites = [];
|
|
var gDeniedPasteSites = [];
|
|
var gDeniedCutCopySites = [];
|
|
var gDefaultPastePolicy = false;
|
|
var gDefaultCutCopyPolicy = false;
|
|
|
|
function allowCutCopy(doc) {
|
|
var win = doc.defaultView;
|
|
if (win !== win.top) {
|
|
// It's an iframe. Use the top level window
|
|
// for security purposes
|
|
win = win.top;
|
|
}
|
|
|
|
if (gDefaultCutCopyPolicy == true) {
|
|
for (var i=0; i < gDeniedCutCopySites.length; i++) {
|
|
if (win.location.href.indexOf(gDeniedCutCopySites[i]) == 0) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
} else {
|
|
for (var i=0; i < gAllowedCutCopySites.length; i++) {
|
|
if (win.location.href.indexOf(gAllowedCutCopySites[i]) == 0) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function allowPaste(doc) {
|
|
var win = doc.defaultView;
|
|
if (win !== win.top) {
|
|
// It's an iframe. Use the top level window
|
|
// for security purposes
|
|
win = win.top;
|
|
}
|
|
|
|
if (gDefaultPastePolicy == true) {
|
|
for (var i=0; i < gDeniedPasteSites.length; i++) {
|
|
if (win.location.href.indexOf(gDeniedPasteSites[i]) == 0) {
|
|
return false;
|
|
break;
|
|
}
|
|
}
|
|
return true;
|
|
} else {
|
|
for (var i=0; i < gAllowedPasteSites.length; i++) {
|
|
if (win.location.href.indexOf(gAllowedPasteSites[i]) == 0) {
|
|
return true;
|
|
break;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function myExecCommand(doc, originalExecCommand) {
|
|
return function(aCommandName, aShowDefaultUI, aValueArgument) {
|
|
switch (aCommandName.toLowerCase()) {
|
|
case "cut":
|
|
case "copy":
|
|
if (allowCutCopy(doc)) {
|
|
var win = Services.wm.getMostRecentWindow("navigator:browser");
|
|
win.goDoCommand("cmd_" + aCommandName.toLowerCase());
|
|
return true;
|
|
}
|
|
break;
|
|
case "paste":
|
|
if (allowPaste(doc)) {
|
|
var win = Services.wm.getMostRecentWindow("navigator:browser");
|
|
win.goDoCommand("cmd_" + aCommandName.toLowerCase());
|
|
return true;
|
|
}
|
|
break;
|
|
}
|
|
return originalExecCommand.call(doc, aCommandName, aShowDefaultUI, aValueArgument);
|
|
}
|
|
}
|
|
|
|
function myQueryCommandSupported(doc, originalQueryCommandSupported) {
|
|
return function(aCommandName) {
|
|
switch (aCommandName.toLowerCase()) {
|
|
case "cut":
|
|
case "copy":
|
|
if (allowCutCopy(doc)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case "paste":
|
|
if (allowPaste(doc)) {
|
|
return true;
|
|
}
|
|
break;
|
|
}
|
|
return originalQueryCommandSupported.call(doc, aCommandName, aShowDefaultUI, aValueArgument);
|
|
}
|
|
}
|
|
|
|
var documentObserver = {
|
|
observe: function observe(subject, topic, data) {
|
|
if (subject instanceof Ci.nsIDOMWindow && topic == 'content-document-global-created') {
|
|
var doc = subject.document;
|
|
var cutCopyAllowed = allowCutCopy(doc);
|
|
var pasteAllowed = allowPaste(doc);
|
|
if (!cutCopyAllowed && !pasteAllowed) {
|
|
return;
|
|
}
|
|
var originalExecCommand = Cu.waiveXrays(doc).execCommand;
|
|
Cu.exportFunction(myExecCommand(doc, originalExecCommand), doc, {defineAs: "execCommand"});
|
|
var originalQueryCommandSupported = Cu.waiveXrays(doc).queryCommandSupported;
|
|
Cu.exportFunction(myQueryCommandSupported(doc, originalQueryCommandSupported), doc, {defineAs: "queryCommandSupported"});
|
|
var originalQueryCommandEnabled = Cu.waiveXrays(doc).queryCommandEnabled;
|
|
Cu.exportFunction(myQueryCommandSupported(doc, originalQueryCommandEnabled), doc, {defineAs: "queryCommandEnabled"});
|
|
}
|
|
}
|
|
}
|
|
|
|
// Don't do this check before Firefox 29
|
|
if (Services.vc.compare(Services.appinfo.version, "29") > 0) {
|
|
try {
|
|
if (Services.prefs.getCharPref("capability.policy.default.Clipboard.cutcopy") == "allAccess") {
|
|
gDefaultCutCopyPolicy = true;
|
|
}
|
|
} catch (e) {}
|
|
try {
|
|
if (Services.prefs.getCharPref("capability.policy.default.Clipboard.paste") == "allAccess") {
|
|
gDefaultPastePolicy = true;
|
|
}
|
|
} catch (e) {}
|
|
try {
|
|
var policies = [];
|
|
policies = Services.prefs.getCharPref("capability.policy.policynames").split(', ');
|
|
for (var i=0; i < policies.length; i++ ) {
|
|
try {
|
|
if (Services.prefs.getCharPref("capability.policy." + policies[i] + ".Clipboard.cutcopy") == "allAccess") {
|
|
var allowedCutCopySites = Services.prefs.getCharPref("capability.policy." + policies[i] + ".sites").split(" ");
|
|
for (var j=0; j < allowedCutCopySites.length; j++) {
|
|
gAllowedCutCopySites.push(allowedCutCopySites[j]);
|
|
}
|
|
}
|
|
} catch(e) {}
|
|
try {
|
|
if (Services.prefs.getCharPref("capability.policy." + policies[i] + ".Clipboard.cutcopy") == "noAccess") {
|
|
var deniedCutCopySites = Services.prefs.getCharPref("capability.policy." + policies[i] + ".sites").split(" ");
|
|
for (var j=0; j < deniedCutCopySites.length; j++) {
|
|
gDeniedCutCopySites.push(deniedCutCopySites[j]);
|
|
}
|
|
}
|
|
} catch(e) {}
|
|
try {
|
|
if (Services.prefs.getCharPref("capability.policy." + policies[i] + ".Clipboard.paste") == "allAccess") {
|
|
var allowedPasteSites = Services.prefs.getCharPref("capability.policy." + policies[i] + ".sites").split(" ");
|
|
for (var j=0; j < allowedPasteSites.length; j++) {
|
|
gAllowedPasteSites.push(allowedPasteSites[j]);
|
|
}
|
|
}
|
|
} catch(e) {}
|
|
try {
|
|
if (Services.prefs.getCharPref("capability.policy." + policies[i] + ".Clipboard.paste") == "noAccess") {
|
|
var deniedPasteSites = Services.prefs.getCharPref("capability.policy." + policies[i] + ".sites").split(" ");
|
|
for (var j=0; j < deniedPasteSites.length; j++) {
|
|
gDeniedPasteSites.push(deniedPasteSites[j]);
|
|
}
|
|
}
|
|
} catch(e) {}
|
|
}
|
|
} catch (e) {}
|
|
if (gDefaultCutCopyPolicy || gDefaultPastePolicy ||
|
|
gAllowedCutCopySites.length > 0 || gAllowedPasteSites> 0) {
|
|
Services.obs.addObserver(documentObserver, "content-document-global-created", false);
|
|
addEventListener("unload", function() {
|
|
Services.obs.removeObserver(documentObserver, "content-document-global-created", false);
|
|
})
|
|
}
|
|
}
|