2025-11-10 20:10:53 +01:00

227 lines
8.7 KiB
JavaScript

/*var self = require("sdk/self");
var buttons;
try {
buttons = require('sdk/ui/button/action');
} catch (ex) {
buttons = null;
}
var tabs = require("sdk/tabs");
const {Cc, Ci, Cu, Cr} = require("chrome");*/
/*if (buttons != null) {//null -> 24
var button = buttons.ActionButton({
id: "mozilla-link",
label: "Befator Inc. Secure-Web!",
icon: {
"16": "./icon-64.png",
"32": "./icon-64.png",
"64": "./icon-64.png"
},
onClick: handleClick
});
} else {
var widgets = require("sdk/widget")
var widget = widgets.Widget({
id: "mozilla-link",
label: "Befator Inc. Secure-Web!",
contentURL: "resource://befatoraddon-at-jetpack/befatoraddon/data/icon-64.png",
onClick: handleClick
});
}*/
var EXPORTED_SYMBOLS = ["befatorUpdate", "handleBefatorClick"];
//console.log("Befator Inc grüßt Sie!");
var befatorWindow;
function handleBefatorClick(window) {
try {
window.Cu.import('resource://gre/modules/Services.jsm');
} catch (e) {//e -> 3.6
var Services = {
prompt: window.Cc["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService)
}
}
let request = new window.XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState == 4) {
Services.prompt.alert(window, "Befator Inc Secure-Web", request.responseText);
}
}
request.open("GET", "http://proxy.befatorinc.de:3636/api/progressMessage?currentPage=" + window.document.getElementById("content").selectedBrowser.contentDocument.location.href.replace("http://proxy.befatorinc.de:3636/proxy/", ""), true);
request.send(null);
//tabs.open("https://wiki.befatorinc.de/index.php/Hauptseite");
}
function handleWindow(window) {
if (window.document.readyState == "complete") {
befatorWindow.console.log("Window!");
Components.utils.import("resource://befatoraddon/main.jsm");
onBefatorWindow(window);
} else {
window.addEventListener('load', function(e) {
handleWindow(window);
}, false);
}
}
//https://udn.realityripple.com/docs/Archive/Add-ons/Tabbed_browser#Getting_the_tab_that_fires_the_http-on-modify-request_notification
function loadContextGoodies(httpChannel) {
//httpChannel must be the subject of http-on-modify-request QI'ed to nsiHTTPChannel as is done on line 8 "httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);"
//start loadContext stuff
var loadContext;
try {
var interfaceRequestor = httpChannel.notificationCallbacks.QueryInterface(befatorWindow.Ci.nsIInterfaceRequestor);
//var DOMWindow = interfaceRequestor.getInterface(Components.interfaces.nsIDOMWindow); //not to be done anymore because: https://developer.mozilla.org/docs/Updating_extensions_for_Firefox_3.5#Getting_a_load_context_from_a_request //instead do the loadContext stuff below
try {
loadContext = interfaceRequestor.getInterface(befatorWindow.Ci.nsILoadContext);
} catch (ex) {
try {
loadContext = subject.loadGroup.notificationCallbacks.getInterface(befatorWindow.Ci.nsILoadContext);
} catch (ex2) {}
}
} catch (ex0) {}
if (!loadContext) {
//no load context so dont do anything although you can run this, which is your old code
//this probably means that its loading an ajax call or like a google ad thing
return null;
} else {
var contentWindow = loadContext.associatedWindow;
if (!contentWindow) {
//this channel does not have a window, its probably loading a resource
//this probably means that its loading an ajax call or like a google ad thing
return null;
} else {
try {
var aDOMWindow = contentWindow.top.QueryInterface(befatorWindow.Ci.nsIInterfaceRequestor)
.getInterface(befatorWindow.Ci.nsIWebNavigation)
.QueryInterface(befatorWindow.Ci.nsIDocShellTreeItem)
.rootTreeItem
.QueryInterface(befatorWindow.Ci.nsIInterfaceRequestor)
.getInterface(befatorWindow.Ci.nsIDOMWindow);
var gBrowser = aDOMWindow.gBrowser;
var aTab = gBrowser._getTabForContentWindow(contentWindow.top); //this is the clickable tab xul element, the one found in the tab strip of the firefox window, aTab.linkedBrowser is same as browser var above //can stylize tab like aTab.style.backgroundColor = 'blue'; //can stylize the tab like aTab.style.fontColor = 'red';
var browser = aTab.linkedBrowser; //this is the browser within the tab //this is where the example in the previous section ends
return {
aDOMWindow: aDOMWindow,
gBrowser: gBrowser,
aTab: aTab,
browser: browser,
contentWindow: contentWindow
};
} catch(e) {
return null;
}
}
}
}
var init = false;
function befatorUpdate(newWindow) {
if (!init) {
befatorWindow = newWindow;
init = true;
try {
Components.utils.import('resource://gre/modules/Services.jsm');
} catch(e) {//e -> 3.6
var Services = {
obs: Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService),
prefs: Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(""),
io: Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService)
}
}
var observers = {
'http-on-modify-request': {
observe: function (aSubject, aTopic, aData) {
//console.log('http-on-modify-request: aSubject = ' + aSubject + ' | aTopic = ' + aTopic + ' | aData = ' + aData);
var httpChannel = aSubject.QueryInterface(befatorWindow.Ci.nsIHttpChannel);
var requestUrl = httpChannel.URI.spec.toLowerCase();
//befatorWindow.console.log("Requesting: " + requestUrl);
//for (var i=0; i<urls_block.length; i++) {
//if (requestUrl.indexOf(urls_block[i]) > -1) {
//httpChannel.cancel(Cr.NS_BINDING_ABORTED); //this aborts the load
var contains = false;
if (requestUrl.includes != undefined) {
contains = requestUrl.includes("befatorinc.de:3636/");
} else if (requestUrl.contains != undefined) {
contains = requestUrl.contains("befatorinc.de:3636/");
} else {
contains = requestUrl.indexOf("befatorinc.de:3636/") != -1;
}
if (!contains) {
if (httpChannel.redirectTo != undefined) {//undefined -> 17
httpChannel.redirectTo(Services.io.newURI("http://proxy.befatorinc.de:3636/proxy/" + requestUrl, null, null/*redir_obj[urls_block[i]], null, null)*/)); //can redirect with this line, if dont want to redirect and just block, then uncomment this line and comment out line above (line 17)
} else {
httpChannel.cancel(befatorWindow.Cr.NS_BINDING_ABORTED);
var goodies = loadContextGoodies(httpChannel);
if (goodies && requestUrl.indexOf("web-static.archive.org") == -1) {
goodies.contentWindow.location.href = "http://proxy.befatorinc.de:3636/proxy/" + requestUrl;
} else {
//error?
}
//Components.utils.import("chrome://befatoraddon/content/ChannelReplacement.jsm");
//ChannelReplacement.runWhenPending(httpChannel, function() {
//var cr = new ChannelReplacement(httpChannel, Services.io.newURI("http://proxy.befatorinc.de:3636/proxy/" + requestUrl, null, null));
//cr.replace(true, null);
//cr.open();
//});
}
}
//break;
//}
//}
},
reg: function () {
Services.obs.addObserver(observers['http-on-modify-request'], 'http-on-modify-request', false);
},
unreg: function () {
Services.obs.removeObserver(observers['http-on-modify-request'], 'http-on-modify-request');
}
},
'homepage-pref': {
observe: function (aSubject, aTopic, aData) {
//befatorWindow.console.log("HomePage!");
if (Services.prefs.getCharPref("browser.startup.homepage") != "about:home") {
Services.prefs.setCharPref("browser.startup.homepage", "about:home");
}
},
reg: function () {
var pref = Services.prefs;
if (pref.addObserver == undefined) {//undefined -> 3.6
pref = pref.QueryInterface(Components.interfaces.nsIPrefBranch2)
}
pref.addObserver("browser.startup.homepage", observers['homepage-pref'], false);
},
unreg: function () {
//Services.obs.removeObserver(observers['http-on-modify-request'], 'http-on-modify-request');
}
},
'toplevel-window-ready': {
observe: function (aSubject, aTopic, aData) {
handleWindow(aSubject);
},
reg: function () {
Services.obs.addObserver(observers['toplevel-window-ready'], 'toplevel-window-ready', false);
},
unreg: function () {
Services.obs.removeObserver(observers['toplevel-window-ready'], 'toplevel-window-ready');
}
}
};
//console.log("Startup");
for (var o in observers) {
observers[o].reg();
}
handleWindow(befatorWindow);
}
}