/*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 -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); } }