From 971b7690860c677374cbe14ee64558b1bd174718 Mon Sep 17 00:00:00 2001 From: Ruben Rodriguez Date: Mon, 20 Oct 2014 02:25:28 +0200 Subject: https-everywhere updated to 4.0.2 --- .../chrome/content/about.xul | 4 +- .../chrome/content/code/AndroidUI.jsm | 226 ++++ .../chrome/content/code/HTTPS.js | 15 +- .../chrome/content/code/X509ChainWhitelist.js | 1304 ++++++++++---------- .../chrome/content/ruleset-tests.js | 55 +- .../chrome/content/toolbar_button.js | 100 +- .../chrome/content/toolbar_button.xul | 7 +- .../chrome/skin/https-everywhere-128.png | Bin 0 -> 13300 bytes .../chrome/skin/https-everywhere-16-red.png | Bin 0 -> 724 bytes .../chrome/skin/https-everywhere-24-red.png | Bin 0 -> 1238 bytes .../chrome/skin/https-everywhere.css | 7 +- 11 files changed, 1017 insertions(+), 701 deletions(-) create mode 100644 data/extensions/https-everywhere@eff.org/chrome/content/code/AndroidUI.jsm create mode 100644 data/extensions/https-everywhere@eff.org/chrome/skin/https-everywhere-128.png create mode 100644 data/extensions/https-everywhere@eff.org/chrome/skin/https-everywhere-16-red.png create mode 100644 data/extensions/https-everywhere@eff.org/chrome/skin/https-everywhere-24-red.png (limited to 'data/extensions/https-everywhere@eff.org/chrome') diff --git a/data/extensions/https-everywhere@eff.org/chrome/content/about.xul b/data/extensions/https-everywhere@eff.org/chrome/content/about.xul index cf57e9d..6bf5e40 100644 --- a/data/extensions/https-everywhere@eff.org/chrome/content/about.xul +++ b/data/extensions/https-everywhere@eff.org/chrome/content/about.xul @@ -21,12 +21,12 @@ - + - + diff --git a/data/extensions/https-everywhere@eff.org/chrome/content/code/AndroidUI.jsm b/data/extensions/https-everywhere@eff.org/chrome/content/code/AndroidUI.jsm new file mode 100644 index 0000000..e476345 --- /dev/null +++ b/data/extensions/https-everywhere@eff.org/chrome/content/code/AndroidUI.jsm @@ -0,0 +1,226 @@ +const CC = Components.classes; +const CI = Components.interfaces; +const CU = Components.utils; + +var HTTPSEverywhere = CC["@eff.org/https-everywhere;1"] + .getService(CI.nsISupports).wrappedJSObject; + +CU.import("resource://gre/modules/Prompt.jsm"); + +var menuId; +var urlbarId; +var aWindow = getWindow(); + + +/* + * Setup/Teardown for the UI + */ + +function loadIntoWindow() { + if (!aWindow) { + return; + } + var enabled = HTTPSEverywhere.prefs.getBoolPref("globalEnabled"); + addToggleItemToMenu(enabled); + if (enabled) { + urlbarId = aWindow.NativeWindow.pageactions.add(urlbarOptions); + } else if (urlbarId) { + aWindow.NativeWindow.pageactions.remove(urlbarId); + } +} + +function unloadFromWindow() { + if (!aWindow) { + return; + } + aWindow.NativeWindow.menu.remove(menuId); + aWindow.NativeWindow.pageactions.remove(urlbarId); +} + + +/* + * Add a menu item to toggle HTTPS Everywhere + */ + +function addToggleItemToMenu(enabled) { + if (menuId) { aWindow.NativeWindow.menu.remove(menuId); } + var menuLabel = enabled ? "HTTPS Everywhere on" : "HTTPS Everywhere off"; + menuId = aWindow.NativeWindow.menu.add(menuLabel, null, function() { + popupToggleMenu(aWindow, enabled); + }); +} + +function popupToggleMenu(aWindow, enabled) { + var buttons = [ + { + label: "Yes", + callback: function() { + toggleEnabledState(); + var msg = enabled ? "HTTPS Everywhere disabled!" : "HTTPS Everywhere enabled!"; + aWindow.NativeWindow.toast.show(msg, "short"); + return true; + } + }, { + label: "No", + callback: function() { return false; } + } + ]; + var newState = enabled ? "off?" : "on?"; + aWindow.NativeWindow.doorhanger.show("Would you like to turn HTTPS Everywhere "+newState, + "doorhanger-toggle", buttons); +} + + +/* + * The HTTPS Everywhere icon in the URL bar shows a popup of rules that the + * user can activate/deactivate. On long click, reset all rules to defaults. + */ + +var popupInfo = { + rules: [], + ruleItems: [], + ruleStatus: [], + alist: null, + getApplicableList: function() { + var domWin = aWindow.BrowserApp.selectedTab.window; + return HTTPSEverywhere.getApplicableListForDOMWin(domWin); + }, + fill: function() { + this.clear(); + this.alist = this.getApplicableList(); + HTTPSEverywhere.log(4,"applicable list active: "+JSON.stringify(this.alist.active)); + HTTPSEverywhere.log(4,"applicable list inactive: "+JSON.stringify(this.alist.inactive)); + for (var rule in this.alist.all) { + if (this.alist.active.hasOwnProperty(rule)) { + // active rules are checked and toggleable + this.ruleItems.push({ label: rule, selected: true }); + this.ruleStatus.push(true); + this.rules.push(this.alist.active[rule]); + } else if (this.alist.moot.hasOwnProperty(rule)) { + // moot rules are checked and toggleable too + this.ruleItems.push({ label: rule, selected: true }); + this.ruleStatus.push(true); + this.rules.push(this.alist.moot[rule]); + } else if (this.alist.inactive.hasOwnProperty(rule)) { + // inactive rules are unchecked and toggleable + this.ruleItems.push({ label: rule }); + this.ruleStatus.push(false); + this.rules.push(this.alist.inactive[rule]); + } else if (this.alist.breaking.hasOwnProperty(rule)) { + // breaking rules are get a unicode clockwise arrow next to them + var ruleLabel = "\u21B7"+rule; + var isSelected = this.alist.breaking[rule].active; + this.ruleItems.push({ label: ruleLabel, selected: isSelected }); + this.ruleStatus.push(isSelected); + this.rules.push(this.alist.breaking[rule]); + } + } + }, + clear: function() { + this.rules = []; + this.ruleItems = []; + this.ruleStatus = []; + this.alist = {}; + } +}; + +var urlbarOptions = { + + title: "HTTPS Everywhere", + + icon: "chrome://https-everywhere/skin/https-everywhere-128.png", + + clickCallback: function() { + popupInfo.fill(); + rulesPrompt.setMultiChoiceItems(popupInfo.ruleItems); + rulesPrompt.show(function(data) { + var db = data.button; + if (db === -1) { return null; } // user didn't click the accept button + if (popupInfo.rules.length !== db.length) { + // Why does db sometimes have an extra entry that doesn't correspond + // to any of the ruleItems? No idea, but let's log it. + HTTPSEverywhere.log(5,"Got length mismatch between popupInfo.ruleItems and data.button"); + HTTPSEverywhere.log(4,"Applicable rules: "+JSON.stringify(popupInfo.rules)); + HTTPSEverywhere.log(4, "data.button: "+JSON.stringify(db)); + } + for (var i=0; i 0) { + urls.push({ + url: 'http://'+target, + target: target, + ruleset_ids: active_ids + }); + } +} + function testRunner() { Components.utils.import("resource://gre/modules/PopupNotifications.jsm"); @@ -34,14 +59,24 @@ function testRunner() { var output = []; var urls = []; var num = 0; + var targets_to_ids = HTTPSEverywhere.https_rules.targets; + var ruleset_ids; + accepted_test_targets = {}; // reset each time - for(var target in HTTPSEverywhere.https_rules.targets) { - if(!target.indexOf("*") != -1) { - urls.push({ - url: 'https://'+target, - target: target, - ruleset_names: HTTPSEverywhere.https_rules.targets[target] - }); + // we need every ruleset loaded from DB to check if it's active + HTTPSEverywhere.https_rules.loadAllRulesets(); + + for(var target in targets_to_ids) { + ruleset_ids = targets_to_ids[target]; + if(target.indexOf("*") == -1) { + addTestTarget(urls, target, ruleset_ids); + } else { + // target is like *.example.wildcard.com, or www.example.* + // let's see what we can do... + var t = target.replace(left_star, "www."); + if (t.indexOf("*") == -1) { + addTestTarget(urls, t, ruleset_ids); + } } } @@ -72,8 +107,8 @@ function testRunner() { if(PopupNotifications.getNotification("mixed-content-blocked", gBrowser.getBrowserForTab(tab))) { // build output to log ruleset_xmls = ''; - for(let i=0; i - + + + + oncommand="httpsEverywhere.toolbarButton.toggleShowCounter()" class="hide-on-disable"/> diff --git a/data/extensions/https-everywhere@eff.org/chrome/skin/https-everywhere-128.png b/data/extensions/https-everywhere@eff.org/chrome/skin/https-everywhere-128.png new file mode 100644 index 0000000..317ecf9 Binary files /dev/null and b/data/extensions/https-everywhere@eff.org/chrome/skin/https-everywhere-128.png differ diff --git a/data/extensions/https-everywhere@eff.org/chrome/skin/https-everywhere-16-red.png b/data/extensions/https-everywhere@eff.org/chrome/skin/https-everywhere-16-red.png new file mode 100644 index 0000000..cad9162 Binary files /dev/null and b/data/extensions/https-everywhere@eff.org/chrome/skin/https-everywhere-16-red.png differ diff --git a/data/extensions/https-everywhere@eff.org/chrome/skin/https-everywhere-24-red.png b/data/extensions/https-everywhere@eff.org/chrome/skin/https-everywhere-24-red.png new file mode 100644 index 0000000..7866d2a Binary files /dev/null and b/data/extensions/https-everywhere@eff.org/chrome/skin/https-everywhere-24-red.png differ diff --git a/data/extensions/https-everywhere@eff.org/chrome/skin/https-everywhere.css b/data/extensions/https-everywhere@eff.org/chrome/skin/https-everywhere.css index 6c03b83..df0c1a7 100644 --- a/data/extensions/https-everywhere@eff.org/chrome/skin/https-everywhere.css +++ b/data/extensions/https-everywhere@eff.org/chrome/skin/https-everywhere.css @@ -16,10 +16,15 @@ toolbar #https-everywhere-button > .https-everywhere-button { } /* Use CSS attribute selector for changing icon */ +#https-everywhere-button[http_nowhere="true"] > .https-everywhere-button { + list-style-image: url("chrome://https-everywhere/skin/https-everywhere-24-red.png"); +} #https-everywhere-button[status="disabled"] > .https-everywhere-button { list-style-image: url("chrome://https-everywhere/skin/https-everywhere-24-gray.png"); } - +toolbar[iconsize="small"] #https-everywhere-button[http_nowhere="true"] > .https-everywhere-button { + list-style-image: url("chrome://https-everywhere/skin/https-everywhere-16-red.png"); +} toolbar[iconsize="small"] #https-everywhere-button[status="disabled"] > .https-everywhere-button { list-style-image: url("chrome://https-everywhere/skin/https-everywhere-16-gray.png"); } -- cgit v1.2.3