summaryrefslogtreecommitdiff
path: root/data/extensions/https-everywhere@eff.org/chrome/content/toolbar_button.js
diff options
context:
space:
mode:
authorRuben Rodriguez <ruben@gnu.org>2015-07-13 22:53:00 -0500
committerRuben Rodriguez <ruben@gnu.org>2015-07-13 22:53:00 -0500
commit23103d7773e24fdf15b79ed69c67089b593fb31a (patch)
treeee1b744a80dd192e62fefc72ff1f0bf978d0d24c /data/extensions/https-everywhere@eff.org/chrome/content/toolbar_button.js
parent9cb91f8a48f9467e448f88984c20b3429e8a2510 (diff)
HTTPS-Everywhere updated to 5.0.5
Diffstat (limited to 'data/extensions/https-everywhere@eff.org/chrome/content/toolbar_button.js')
-rw-r--r--data/extensions/https-everywhere@eff.org/chrome/content/toolbar_button.js163
1 files changed, 92 insertions, 71 deletions
diff --git a/data/extensions/https-everywhere@eff.org/chrome/content/toolbar_button.js b/data/extensions/https-everywhere@eff.org/chrome/content/toolbar_button.js
index 740e51f..96b63d7 100644
--- a/data/extensions/https-everywhere@eff.org/chrome/content/toolbar_button.js
+++ b/data/extensions/https-everywhere@eff.org/chrome/content/toolbar_button.js
@@ -3,7 +3,11 @@ 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);
- gBrowser.addEventListener("DOMContentLoaded", migratePreferences, true);
+ if (gBrowser) {
+ gBrowser.addEventListener("DOMContentLoaded",
+ migratePreferences.bind(null, gBrowser),
+ true);
+ }
}, false);
const CI = Components.interfaces;
@@ -61,39 +65,54 @@ httpsEverywhere.toolbarButton = {
// make sure the checkbox for showing counter is properly set
var showCounter = tb.shouldShowCounter();
var counterItem = document.getElementById('https-everywhere-counter-item');
- counterItem.setAttribute('checked', showCounter ? 'true' : 'false');
+ 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');
- httpNowhereItem.setAttribute('checked', showHttpNowhere ? 'true' : 'false');
- toolbarbutton.setAttribute('http_nowhere',
- showHttpNowhere ? 'true' : 'false');
+ if (httpNowhereItem) {
+ httpNowhereItem.setAttribute('checked', showHttpNowhere ? 'true' : 'false');
+ }
+ if (toolbarbutton) {
+ toolbarbutton.setAttribute('http_nowhere',
+ showHttpNowhere ? 'true' : 'false');
+ }
// make sure UI is set depending on whether HTTPS-E is enabled
toggleEnabledUI();
// show ruleset counter when a tab is changed
tb.updateRulesetsApplied();
- gBrowser.tabContainer.addEventListener(
- 'TabSelect',
- tb.updateRulesetsApplied,
- false
- );
-
- // hook event for when page loads
- var onPageLoad = function() {
- // Timeout is used for a number of reasons.
- // 1) For Performance since we want to defer computation.
- // 2) Sometimes the page is loaded before all applied rulesets are
- // calculated; in such a case, a half-second wait works.
- setTimeout(tb.updateRulesetsApplied, 500);
- };
-
- var appcontent = document.getElementById('appcontent');
- if (appcontent) {
- appcontent.addEventListener('load', onPageLoad, true);
+
+ // 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.updateRulesetsApplied,
+ 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.updateRulesetsApplied();
+ }
+ }
+ };
+ gBrowser.addTabsProgressListener(httpseProgressListener);
}
// decide whether to show toolbar hint
@@ -102,14 +121,19 @@ httpsEverywhere.toolbarButton = {
|| !Services.prefs.getBoolPref(hintPref)) {
// only run once
Services.prefs.setBoolPref(hintPref, true);
- gBrowser.addEventListener("DOMContentLoaded", tb.handleShowHint, 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() {
+ handleShowHint: function(gBrowser) {
var tb = httpsEverywhere.toolbarButton;
if (!tb.hintShown){
tb.hintShown = true;
@@ -118,26 +142,37 @@ httpsEverywhere.toolbarButton = {
var strings = document.getElementById('HttpsEverywhereStrings');
var msg = strings.getString('https-everywhere.toolbar.hint');
var hint = nBox.appendNotification(
- msg,
- 'https-everywhere',
- 'chrome://https-everywhere/skin/https-everywhere-24.png',
+ msg,
+ 'https-everywhere',
+ 'chrome://https-everywhere/skin/https-everywhere-24.png',
nBox.PRIORITY_WARNING_MEDIUM,
- [],
- function(action) {
- // see https://developer.mozilla.org/en-US/docs/XUL/Method/appendNotification#Notification_box_events
- gBrowser.selectedTab = gBrowser.addTab(faqURL);
- }
- );
+ [],
+ function(action) {
+ // see https://developer.mozilla.org/en-US/docs/XUL/Method/appendNotification#Notification_box_events
+ gBrowser.selectedTab = gBrowser.addTab(faqURL);
+ });
}
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.
*/
updateRulesetsApplied: function() {
var toolbarbutton = document.getElementById('https-everywhere-button');
+ if (!toolbarbutton) {
+ return;
+ }
+
var enabled = HTTPSEverywhere.prefs.getBoolPref("globalEnabled");
var showCounter = httpsEverywhere.toolbarButton.shouldShowCounter();
if (!enabled || !showCounter) {
@@ -145,8 +180,12 @@ httpsEverywhere.toolbarButton = {
return;
}
- var domWin = content.document.defaultView.top;
- var alist = HTTPSEverywhere.getExpando(domWin,"applicable_rules");
+ var browser = httpsEverywhere.toolbarButton.selectedBrowser();
+ if (!browser) {
+ return;
+ }
+
+ var alist = HTTPSEverywhere.getExpando(browser,"applicable_rules");
if (!alist) {
return;
}
@@ -270,20 +309,20 @@ function stitch_context_menu2() {
var rulesetTestsMenuItem = null;
function show_applicable_list(menupopup) {
- var domWin = content.document.defaultView.top;
- if (!(domWin instanceof CI.nsIDOMWindow)) {
- alert(domWin + " is not an nsIDOMWindow");
- return null;
+ var browser = httpsEverywhere.toolbarButton.selectedBrowser();
+ if (!browser) {
+ HTTPSEverywhere.log(WARN, "No browser for applicable list");
+ return;
}
- var alist = HTTPSEverywhere.getExpando(domWin,"applicable_rules");
+ 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, document, domWin);
+ alist = new HTTPSEverywhere.ApplicableList(HTTPSEverywhere.log, browser.currentURI);
weird = true;
}
alist.populate_menu(document, menupopup, weird);
@@ -303,43 +342,24 @@ function show_applicable_list(menupopup) {
if(!menupopup.contains(rulesetTestsMenuItem))
menupopup.appendChild(rulesetTestsMenuItem);
}
-
}
function toggle_rule(rule_id) {
// toggle the rule state
HTTPSEverywhere.https_rules.rulesetsByID[rule_id].toggle();
- var domWin = content.document.defaultView.top;
- /*if (domWin instanceof CI.nsIDOMWindow) {
- var alist = HTTPSEverywhere.getExpando(domWin,"applicable_rules");
- if (alist) alist.empty();
- }*/
reload_window();
}
function reload_window() {
- var domWin = content.document.defaultView.top;
- if (!(domWin instanceof CI.nsIDOMWindow)) {
- HTTPSEverywhere.log(WARN, domWin + " is not an nsIDOMWindow");
- return null;
+ var browser = httpsEverywhere.toolbarButton.selectedBrowser();
+ if (browser) {
+ browser.reload();
}
- try {
- var webNav = domWin.QueryInterface(CI.nsIInterfaceRequestor)
- .getInterface(CI.nsIWebNavigation)
- .QueryInterface(CI.nsIDocShell);
- } catch(e) {
- HTTPSEverywhere.log(WARN,"failed to get webNav");
- return null;
- }
- // The choice of LOAD_FLAGS_CHARSET_CHANGE comes from NoScript's quickReload
- // function; not sure if it's optimal
- let flags = webNav.LOAD_FLAGS_BYPASS_CACHE & webNav.LOAD_FLAGS_CHARSET_CHANGE;
- webNav.reload(flags);
}
function toggleEnabledState(){
- HTTPSEverywhere.toggleEnabledState();
- reload_window();
+ HTTPSEverywhere.toggleEnabledState();
+ reload_window();
toggleEnabledUI();
}
@@ -353,7 +373,9 @@ function toggleEnabledUI() {
// Change icon depending on enabled state
var toolbarbutton = document.getElementById('https-everywhere-button');
- toolbarbutton.setAttribute('status', enabled ? 'enabled' : 'disabled');
+ if (toolbarbutton) {
+ toolbarbutton.setAttribute('status', enabled ? 'enabled' : 'disabled');
+ }
}
function open_in_tab(url) {
@@ -367,10 +389,10 @@ function open_in_tab(url) {
HTTPSEverywhere.log(DBUG, 'Adding listener for toolbarButton init.');
window.addEventListener("load", httpsEverywhere.toolbarButton.init, false);
-function migratePreferences() {
+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 {
@@ -402,4 +424,3 @@ function migratePreferences() {
HTTPSEverywhere.prefs.setIntPref("prefs_version", prefs_version+1);
}
}
-