diff options
author | Ruben Rodriguez <ruben@gnu.org> | 2015-07-13 22:53:00 -0500 |
---|---|---|
committer | Ruben Rodriguez <ruben@gnu.org> | 2015-07-13 22:53:00 -0500 |
commit | 23103d7773e24fdf15b79ed69c67089b593fb31a (patch) | |
tree | ee1b744a80dd192e62fefc72ff1f0bf978d0d24c /data/extensions/https-everywhere@eff.org/chrome/content/toolbar_button.js | |
parent | 9cb91f8a48f9467e448f88984c20b3429e8a2510 (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.js | 163 |
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); } } - |