summaryrefslogtreecommitdiff
path: root/data/extensions/https-everywhere@eff.org/chrome/content/observatory-xul.js
diff options
context:
space:
mode:
Diffstat (limited to 'data/extensions/https-everywhere@eff.org/chrome/content/observatory-xul.js')
-rw-r--r--data/extensions/https-everywhere@eff.org/chrome/content/observatory-xul.js194
1 files changed, 194 insertions, 0 deletions
diff --git a/data/extensions/https-everywhere@eff.org/chrome/content/observatory-xul.js b/data/extensions/https-everywhere@eff.org/chrome/content/observatory-xul.js
new file mode 100644
index 0000000..df5e623
--- /dev/null
+++ b/data/extensions/https-everywhere@eff.org/chrome/content/observatory-xul.js
@@ -0,0 +1,194 @@
+const CC = Components.classes;
+const CI = Components.interfaces;
+VERB=1;
+DBUG=2;
+INFO=3;
+NOTE=4;
+WARN=5;
+
+var ssl_observatory = CC["@eff.org/ssl-observatory;1"]
+ .getService(Components.interfaces.nsISupports)
+ .wrappedJSObject;
+var obsprefs = ssl_observatory.prefs;
+
+const pref_prefix = "extensions.ssl_observatory.";
+
+function observatory_prefs_init(doc) {
+ // Is the Observatory on?
+ var enabled = obsprefs.getBoolPref("extensions.https_everywhere._observatory.enabled");
+ document.getElementById("use-observatory").checked = enabled;
+ set_observatory_configurability(enabled);
+ // Other settings
+ document.getElementById("alt-roots").checked =
+ obsprefs.getBoolPref("extensions.https_everywhere._observatory.alt_roots");
+ document.getElementById("priv-dns").checked =
+ obsprefs.getBoolPref("extensions.https_everywhere._observatory.priv_dns");
+ document.getElementById("self-signed").checked =
+ obsprefs.getBoolPref("extensions.https_everywhere._observatory.self_signed");
+ document.getElementById("send-asn").checked =
+ obsprefs.getBoolPref("extensions.https_everywhere._observatory.send_asn");
+
+ // More complicated: is it anonymised by Tor?
+ var obs_how = doc.getElementById("ssl-obs-how");
+ var anon_radio = document.getElementById("ssl-obs-anon");
+ var nonanon_radio = document.getElementById("ssl-obs-nonanon");
+ var anon = !obsprefs.getBoolPref(
+ "extensions.https_everywhere._observatory.use_custom_proxy");
+
+ // first set the radios to match the current settings variables
+ obs_how.selectedItem = (anon) ? anon_radio : nonanon_radio;
+
+ // But if the user hasn't turned the observatory on,
+ // the default should be the maximally sensible one
+ var torbutton_avail = ssl_observatory.proxy_test_successful;
+ if (!enabled) {
+ set_obs_anon(torbutton_avail);
+ obs_how.selectedItem = (torbutton_avail) ? anon_radio : nonanon_radio;
+ }
+ //scale_title_logo();
+}
+
+// The user has responded to the popup in a final way; don't show it to them
+// again
+function popup_done() {
+ obsprefs.setBoolPref("extensions.https_everywhere._observatory.popup_shown", true);
+ obsprefs.setBoolPref("extensions.https_everywhere._observatory.clean_config", true);
+ window.close();
+}
+
+
+function scale_title_logo() {
+ // The image is naturally 500x207, but if it's shrunk we don't want it
+ // distorted
+ var img = document.getElementById("obs-title-logo");
+ alert("ch is " + img.height);
+ if (img.height != "207")
+ img.width = (500.0/207.0) * img.height;
+}
+
+// grey/ungrey UI elements that control observatory operation
+function set_observatory_configurability(enabled) {
+ // the relevant widgets are tagged with class="ssl-obs-conf"
+ var ui_elements = document.querySelectorAll(".ssl-obs-conf");
+ for (var i =0; i < ui_elements.length; i++)
+ ui_elements[i].disabled = !enabled;
+ // the "use tor" option can't be ungreyed unless tor is available
+ if (ssl_observatory.proxy_test_successful == false) {
+ var tor_opt = document.getElementById("ssl-obs-anon")
+ tor_opt.disabled = true;
+ tor_opt.label = tor_opt.getAttribute("alt_label");
+ }
+ if (!enabled)
+ hide_advanced();
+}
+
+// show/hide advanced options in the preferences dialog
+function show_advanced() {
+ var enabled = obsprefs.getBoolPref("extensions.https_everywhere._observatory.enabled");
+ if (enabled) {
+ var adv_opts_box = document.getElementById("observatory-advanced-opts");
+ recursive_set(adv_opts_box, "hidden", "false");
+ document.getElementById("show-advanced-button").hidden = true;
+ document.getElementById("hide-advanced-button").hidden = false;
+ }
+ //scale_title_logo();
+}
+function hide_advanced() {
+ var adv_opts_box = document.getElementById("observatory-advanced-opts");
+ recursive_set(adv_opts_box, "hidden", "true");
+ document.getElementById("show-advanced-button").hidden = false;
+ document.getElementById("hide-advanced-button").hidden = true;
+}
+
+function recursive_set(node, attrib, value) {
+ node.setAttribute(attrib, value);
+ for (var i=0; i < node.childNodes.length; i++)
+ recursive_set(node.childNodes[i], attrib, value)
+}
+
+
+function set_obs_anon(val) {
+ obsprefs.setBoolPref( "extensions.https_everywhere._observatory.use_custom_proxy", !val);
+}
+
+// called from the popup only
+function enable_observatory() {
+ obsprefs.setBoolPref("extensions.https_everywhere._observatory.enabled", true);
+ var torbutton_avail = ssl_observatory.proxy_test_successful;
+ set_obs_anon(torbutton_avail);
+}
+
+function disable_observatory() {
+ // default but be sure...
+ obsprefs.setBoolPref("extensions.https_everywhere._observatory.enabled", false);
+}
+
+// called from within the prefs window, we have more work to do:
+function toggle_enabled() {
+ var use_obs = document.getElementById("use-observatory").checked;
+ obsprefs.setBoolPref("extensions.https_everywhere._observatory.enabled", use_obs);
+ set_observatory_configurability(use_obs);
+}
+
+function toggle_send_asn() {
+ var send_asn = document.getElementById("send-asn").checked;
+ obsprefs.setBoolPref("extensions.https_everywhere._observatory.send_asn", send_asn);
+ if (send_asn) ssl_observatory.setupASNWatcher()
+ else ssl_observatory.stopASNWatcher();
+}
+
+function toggle_alt_roots() {
+ var alt_roots = document.getElementById("alt-roots").checked;
+ obsprefs.setBoolPref("extensions.https_everywhere._observatory.alt_roots", alt_roots);
+}
+
+function toggle_priv_dns() {
+ var priv_dns = document.getElementById("priv-dns").checked;
+ obsprefs.setBoolPref("extensions.https_everywhere._observatory.priv_dns", priv_dns);
+}
+
+function toggle_self_signed() {
+ var self_signed = document.getElementById("self-signed").checked;
+ obsprefs.setBoolPref("extensions.https_everywhere._observatory.self_signed", self_signed);
+}
+
+function observatory_prefs_accept() {
+ // This is *horrid*, but
+ // https://developer.mozilla.org/en/working_with_windows_in_chrome_code#Accessing_the_elements_of_the_top-level_document_from_a_child_window
+ var outer = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
+ .getInterface(Components.interfaces.nsIWebNavigation)
+ .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
+ .rootTreeItem
+ .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
+ .getInterface(Components.interfaces.nsIDOMWindow);
+
+ if (outer) outer.close()
+ else alert("no outer space");
+
+ return true; // https://developer.mozilla.org/en/XUL/dialog#a-ondialogaccept
+ // also close things if there is no out meta prefs window
+}
+
+function warning_populate(warningObj) {
+ // Fill in the SSL Observatory Warning labels...
+ var container = document.getElementById("warning-container");
+ for (var hash in warningObj) {
+ var label=document.createElement("label");
+ label.setAttribute("style","padding:5px 25px 5px;");
+ label.textContent = warningObj[hash].long_desc;
+ container.appendChild(label);
+ //var spacer=document.createElement("spacer");
+ //separator.setAttribute("flex","1");
+ //container.appendChild(spacer);
+ }
+}
+
+function show_certs() {
+ var parent_win = window.arguments[1];
+ var cert = window.arguments[2];
+ if (!parent_win)
+ alert("no parent window trying to show certs");
+ CC["@mozilla.org/nsCertificateDialogs;1"]
+ .getService(CI.nsICertificateDialogs)
+ .viewCert(parent_win, cert);
+}