summaryrefslogtreecommitdiff
path: root/data/extensions/https-everywhere-eff@eff.org/chrome/content/toolbar_button.js
diff options
context:
space:
mode:
Diffstat (limited to 'data/extensions/https-everywhere-eff@eff.org/chrome/content/toolbar_button.js')
-rw-r--r--data/extensions/https-everywhere-eff@eff.org/chrome/content/toolbar_button.js441
1 files changed, 0 insertions, 441 deletions
diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/toolbar_button.js b/data/extensions/https-everywhere-eff@eff.org/chrome/content/toolbar_button.js
deleted file mode 100644
index 773b6ee..0000000
--- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/toolbar_button.js
+++ /dev/null
@@ -1,441 +0,0 @@
-window.addEventListener("load", https_everywhere_load, true);
-window.addEventListener("load", function load(event) {
- // need to wrap migratePreferences in another callback so that notification
- // always displays on browser restart
- window.removeEventListener("load", load, false);
- if (gBrowser) {
- gBrowser.addEventListener("DOMContentLoaded",
- migratePreferences.bind(null, gBrowser),
- true);
- }
-}, false);
-
-const CI = Components.interfaces;
-const CC = Components.classes;
-
-// LOG LEVELS ---
-let VERB=1;
-let DBUG=2;
-let INFO=3;
-let NOTE=4;
-let WARN=5;
-
-let HTTPSEverywhere = CC["@eff.org/https-everywhere;1"]
- .getService(Components.interfaces.nsISupports)
- .wrappedJSObject;
-
-// avoid polluting global namespace
-// see: https://developer.mozilla.org/en-US/docs/Security_best_practices_in_extensions#Code_wrapping
-if (!httpsEverywhere) { var httpsEverywhere = {}; }
-
-/**
- * JS Object that acts as a namespace for the toolbar.
- *
- * Used to display toolbar hints to new users and change toolbar UI for cases
- * such as when the toolbar is disabled.
- */
-httpsEverywhere.toolbarButton = {
-
- /**
- * Name of preference for determining whether to show ruleset counter.
- */
- COUNTER_PREF: "extensions.https_everywhere.show_counter",
-
- /**
- * Name of preference for whether HTTP Nowhere is on.
- */
- HTTP_NOWHERE_PREF: "extensions.https_everywhere.http_nowhere.enabled",
-
- /**
- * Used to determine if a hint has been previously shown.
- * TODO: Probably extraneous, look into removing
- */
- hintShown: false,
-
- /**
- * Initialize the toolbar button used to hint new users and update UI on
- * certain events.
- */
- init: function() {
- HTTPSEverywhere.log(DBUG, 'Removing listener for toolbarButton init.');
- window.removeEventListener('load', httpsEverywhere.toolbarButton.init, false);
-
- var tb = httpsEverywhere.toolbarButton;
-
- // make sure the checkbox for showing counter is properly set
- var showCounter = tb.shouldShowCounter();
- var counterItem = document.getElementById('https-everywhere-counter-item');
- if (counterItem) {
- counterItem.setAttribute('checked', showCounter ? 'true' : 'false');
- }
-
- // make sure UI for HTTP Nowhere mode is properly set
- var httpNowhereItem = document.getElementById('http-nowhere-item');
- var showHttpNowhere = tb.shouldShowHttpNowhere();
- var toolbarbutton = document.getElementById('https-everywhere-button');
- if (httpNowhereItem) {
- httpNowhereItem.setAttribute('checked', showHttpNowhere ? 'true' : 'false');
- }
- if (toolbarbutton) {
- toolbarbutton.setAttribute('http_nowhere',
- showHttpNowhere ? 'true' : 'false');
- }
-
- // Make icon state match current status and tab.
- tb.updateIconState();
-
- // There is no gBrowser object on Android. Instead Android uses the
- // window.BrowserApp object:
- // https://developer.mozilla.org/en-US/Add-ons/Firefox_for_Android/API/BrowserApp
- if (gBrowser) {
- gBrowser.tabContainer.addEventListener(
- 'TabSelect',
- tb.updateIconState,
- false
- );
-
- // add listener for top-level location change across all tabs
- let httpseProgressListener = {
- onLocationChange: function(aBrowser, aWebProgress, aReq, aLoc) {
- HTTPSEverywhere.log(DBUG, "Got on location change!");
- HTTPSEverywhere.resetApplicableList(aBrowser);
- },
- onStateChange: function(aBrowser, aWebProgress, aReq, aFlags, aStatus) {
- if ((gBrowser.selectedBrowser === aBrowser) &&
- (aFlags & CI.nsIWebProgressListener.STATE_STOP) &&
- aWebProgress.isTopLevel) {
- HTTPSEverywhere.log(DBUG, "Got on state change");
- tb.updateIconState();
- }
- }
- };
- gBrowser.addTabsProgressListener(httpseProgressListener);
- }
-
- // decide whether to show toolbar hint
- let hintPref = "extensions.https_everywhere.toolbar_hint_shown";
- if (!Services.prefs.getPrefType(hintPref)
- || !Services.prefs.getBoolPref(hintPref)) {
- // only run once
- Services.prefs.setBoolPref(hintPref, true);
- // gBrowser unavailable on Android, see above.
- if (gBrowser) {
- gBrowser.addEventListener("DOMContentLoaded",
- tb.handleShowHint.bind(null, gBrowser),
- true);
- }
- }
- },
-
- /**
- * Shows toolbar hint if previously not shown.
- */
- handleShowHint: function(gBrowser) {
- var tb = httpsEverywhere.toolbarButton;
- if (!tb.hintShown){
- tb.hintShown = true;
- const faqURL = "https://www.eff.org/https-everywhere/faq";
- var nBox = gBrowser.getNotificationBox();
- var strings = document.getElementById('HttpsEverywhereStrings');
- var msg = strings.getString('https-everywhere.toolbar.hint');
- var hint = nBox.appendNotification(
- msg,
- 'https-everywhere',
- 'chrome://https-everywhere/skin/icon-active-24.png',
- nBox.PRIORITY_WARNING_MEDIUM,
- [
- { accessKey: 'F',
- callback: function(ntf, btn) {
- // see https://developer.mozilla.org/en-US/docs/XUL/Method/appendNotification#Notification_box_events
- gBrowser.selectedTab = gBrowser.addTab(faqURL);
- },
- label: 'FAQ…',
- }
- ]);
- }
- gBrowser.removeEventListener("DOMContentLoaded", tb.handleShowHint, true);
- },
-
- selectedBrowser: function() {
- // gBrowser is unavailable on Android, see above.
- if (window.gBrowser) {
- return window.gBrowser.selectedBrowser;
- } else if (window.BrowserApp) {
- return window.BrowserApp.selectedBrowser;
- }
- },
-
- /**
- * Update the rulesets applied counter for the current tab.
- */
- updateIconState: function() {
- var toolbarbutton = document.getElementById('https-everywhere-button');
- if (!toolbarbutton) {
- return;
- }
-
- var enabled = HTTPSEverywhere.prefs.getBoolPref("globalEnabled");
- var blocking = httpsEverywhere.toolbarButton.shouldShowHttpNowhere();
- var showCounter = httpsEverywhere.toolbarButton.shouldShowCounter();
-
- var browser = httpsEverywhere.toolbarButton.selectedBrowser();
- if (!browser) {
- return;
- }
-
- var alist = HTTPSEverywhere.getExpando(browser,"applicable_rules");
- if (!alist) {
- return;
- }
- // Make sure the list is up to date
- alist.populate_list();
-
- var counter = 0;
- for (var x in alist.active) {
- if (!(x in alist.breaking)) {
- ++counter;
- }
- }
- for (var x in alist.moot) {
- if (!(x in alist.active)) {
- ++counter;
- }
- }
-
- // inactive: extension is enabled, but no rules were triggered on this page.
- // active: extension is enabled and rewrote URLs on this page.
- // blocking: extension is in "block all HTTP requests" mode.
- // disabled: extension is disabled.
- var iconState = 'inactive';
- if (!enabled) {
- iconState = 'disabled';
- } else if (blocking) {
- iconState = 'blocking';
- } else if (counter) {
- iconState = 'active';
- }
- toolbarbutton.setAttribute('state', iconState);
- if (!showCounter) {
- toolbarbutton.setAttribute('rulesetsApplied', 0);
- } else {
- toolbarbutton.setAttribute('rulesetsApplied', counter);
- }
-
- HTTPSEverywhere.log(INFO, 'Setting icon state to: ' + iconState + '[' + counter + ']');
- },
-
- /**
- * Gets whether to show the rulesets applied counter.
- *
- * @return {boolean}
- */
- shouldShowCounter: function() {
- var tb = httpsEverywhere.toolbarButton;
- var sp = Services.prefs;
-
- var prefExists = sp.getPrefType(tb.COUNTER_PREF);
-
- // the default behavior is to hide the rulesets applied counter.
- return prefExists && sp.getBoolPref(tb.COUNTER_PREF);
- },
-
- /**
- * Gets whether to show HTTP Nowhere UI.
- *
- * @return {boolean}
- */
- shouldShowHttpNowhere: function() {
- var tb = httpsEverywhere.toolbarButton;
- var sp = Services.prefs;
- return sp.getBoolPref(tb.HTTP_NOWHERE_PREF);
- },
-
- /**
- * Toggles the user's preference for displaying the rulesets applied counter
- * and updates the UI.
- */
- toggleShowCounter: function() {
- var tb = httpsEverywhere.toolbarButton;
- var sp = Services.prefs;
-
- var showCounter = tb.shouldShowCounter();
- sp.setBoolPref(tb.COUNTER_PREF, !showCounter);
-
- tb.updateIconState();
- },
-
- /**
- * Toggles whether HTTP Nowhere mode is active, updates the toolbar icon.
- */
- toggleHttpNowhere: function() {
- HTTPSEverywhere.toggleHttpNowhere();
- reload_window();
- },
-
- /**
- * Resets all rules to their default state.
- */
- resetToDefaults: function() {
- HTTPSEverywhere.https_rules.resetRulesetsToDefaults()
- }
-};
-
-function https_everywhere_load() {
- window.removeEventListener('load', https_everywhere_load, true);
- // on first run, put the context menu in the addons bar
- try {
- var first_run;
- try {
- first_run = Services.prefs.getBoolPref("extensions.https_everywhere.firstrun_context_menu");
- } catch(e) {
- Services.prefs.setBoolPref("extensions.https_everywhere.firstrun_context_menu", true);
- first_run = true;
- }
- if(first_run) {
- Services.prefs.setBoolPref("extensions.https_everywhere.firstrun_context_menu", false);
- var navbar = document.getElementById("nav-bar");
- if(navbar.currentSet.indexOf("https-everywhere-button") == -1) {
- var set = navbar.currentSet+',https-everywhere-button';
- navbar.setAttribute('currentset', set);
- navbar.currentSet = set;
- document.persist('nav-bar', 'currentset');
- }
- }
- } catch(e) { }
-}
-
-function stitch_context_menu() {
- // the same menu appears both under Tools and via the toolbar button:
- var menu = document.getElementById("https-everywhere-menu");
- if (!menu.firstChild) {
- var popup = document.getElementById("https-everywhere-context");
- menu.appendChild(popup.cloneNode(true));
- }
-}
-function stitch_context_menu2() {
- // the same menu appears both under Tools and via the toolbar button:
- var menu = document.getElementById("https-everywhere-menu2");
- if (!menu.firstChild) {
- var popup = document.getElementById("https-everywhere-context");
- menu.appendChild(popup.cloneNode(true));
- }
-}
-
-var rulesetTestsMenuItem = null;
-
-function show_applicable_list(menupopup) {
- var browser = httpsEverywhere.toolbarButton.selectedBrowser();
- if (!browser) {
- HTTPSEverywhere.log(WARN, "No browser for applicable list");
- return;
- }
-
- var alist = HTTPSEverywhere.getExpando(browser,"applicable_rules");
- var weird=false;
-
- if (!alist) {
- // This case occurs for error pages and similar. We need a dummy alist
- // because populate_menu lives in there. Would be good to refactor this
- // away.
- alist = new HTTPSEverywhere.ApplicableList(HTTPSEverywhere.log, browser.currentURI);
- weird = true;
- }
- alist.populate_menu(document, menupopup, weird);
-
- // should we also show the ruleset tests menu item?
- if(HTTPSEverywhere.prefs.getBoolPref("show_ruleset_tests")) {
-
- if(!rulesetTestsMenuItem) {
- let strings = document.getElementById('HttpsEverywhereStrings');
- let label = strings.getString('https-everywhere.menu.ruleset-tests');
-
- rulesetTestsMenuItem = this.document.createElement('menuitem');
- rulesetTestsMenuItem.setAttribute('command', 'https-everywhere-menuitem-ruleset-tests');
- rulesetTestsMenuItem.setAttribute('label', label);
- }
-
- if(!menupopup.contains(rulesetTestsMenuItem))
- menupopup.appendChild(rulesetTestsMenuItem);
- }
-}
-
-function toggle_rule(rule_id) {
- // toggle the rule state
- HTTPSEverywhere.https_rules.rulesetsByID[rule_id].toggle();
- reload_window();
-}
-
-function reload_window() {
- var browser = httpsEverywhere.toolbarButton.selectedBrowser();
- if (browser) {
- browser.reload();
- }
-}
-
-function toggleEnabledState(){
- HTTPSEverywhere.toggleEnabledState();
- reload_window();
- toggleEnabledUI();
-}
-
-function toggleEnabledUI() {
- // Add/remove menu items depending on whether HTTPS-E is enabled
- var items = document.querySelectorAll(".hide-on-disable");
- var enabled = HTTPSEverywhere.prefs.getBoolPref("globalEnabled");
- for (let i = 0; i < items.length; i++) {
- items[i].hidden = !enabled;
- }
-
- httpsEverywhere.toolbarButton.updateIconState();
-}
-
-function open_in_tab(url) {
- var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
- .getService(Components.interfaces.nsIWindowMediator);
- var recentWindow = wm.getMostRecentWindow("navigator:browser");
- recentWindow.delayedOpenTab(url, null, null, null, null);
-}
-
-function httpse_chrome_opener(url, prefs) {
- HTTPSEverywhere.chrome_opener(url, prefs);
-}
-
-// hook event for showing hint
-HTTPSEverywhere.log(DBUG, 'Adding listener for toolbarButton init.');
-window.addEventListener("load", httpsEverywhere.toolbarButton.init, false);
-
-function migratePreferences(gBrowser) {
- gBrowser.removeEventListener("DOMContentLoaded", migratePreferences, true);
- let prefs_version = HTTPSEverywhere.prefs.getIntPref("prefs_version");
-
- // first migration loses saved prefs
- if(prefs_version == 0) {
- try {
- // upgrades will have old rules as preferences, such as the EFF rule
- let upgrade = false;
- let childList = HTTPSEverywhere.prefs.getChildList("", {});
- for(let i=0; i<childList.length; i++) {
- if(childList[i] == 'EFF') {
- upgrade = true;
- break;
- }
- }
-
- if(upgrade) {
- let nBox = gBrowser.getNotificationBox();
- let strings = document.getElementById('HttpsEverywhereStrings');
- let msg = strings.getString('https-everywhere.migration.notification0');
- nBox.appendNotification(
- msg,
- 'https-everywhere-migration0',
- 'chrome://https-everywhere/skin/icon-active-24.png',
- nBox.PRIORITY_WARNING_MEDIUM
- );
- }
- } catch(e) {
- HTTPSEverywhere.log(WARN, "Migration from prefs_version 0 error: "+e);
- }
-
- HTTPSEverywhere.prefs.setIntPref("prefs_version", prefs_version+1);
- }
-}