| Index: chrome/content/ui/sidebar.js |
| =================================================================== |
| --- a/chrome/content/ui/sidebar.js |
| +++ b/chrome/content/ui/sidebar.js |
| @@ -15,16 +15,19 @@ |
| * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| */ |
| Cu.import("resource://gre/modules/XPCOMUtils.jsm"); |
| // Main browser window |
| var mainWin = parent; |
| +// Location of the content window that the list refers to |
| +var contentLocation = null; |
| + |
| // The window handler currently in use |
| var requestNotifier = null; |
| var cacheStorage = null; |
| // Matcher for disabled filters |
| var disabledMatcher = new CombinedMatcher(); |
| @@ -82,16 +85,17 @@ function init() { |
| let wnd = parent.document.documentElement; |
| for (let attr in defaults) |
| if (!wnd.hasAttribute(attr)) |
| wnd.setAttribute(attr, defaults[attr]); |
| } |
| let {getBrowser, addBrowserLocationListener} = require("appSupport"); |
| + updateContentLocation(); |
| Object.defineProperty(window, "content", { get: () => getBrowser(mainWin).contentWindow }); |
| // Initialize matcher for disabled filters |
| reloadDisabledFilters(); |
| FilterNotifier.addListener(reloadDisabledFilters); |
| Prefs.addListener(onPrefChange); |
| // Activate flasher |
| @@ -108,16 +112,25 @@ function init() { |
| localizedTypes.set(type, Utils.getString("type_label_" + type.toLowerCase())); |
| } |
| // To be called for a detached window when the main window has been closed |
| function mainUnload() { |
| parent.close(); |
| } |
| +function updateContentLocation() |
| +{ |
| + let {getCurrentLocation} = require("appSupport"); |
| + let location = getCurrentLocation(mainWin); |
| + if (location instanceof Ci.nsIURI) |
| + location = location.spec; |
| + contentLocation = location; |
| +} |
| + |
| function getFilter(item) |
| { |
| if ("filter" in item && item.filter) |
| return Filter.fromText(item.filter); |
| else |
| return null; |
| } |
| @@ -200,24 +213,26 @@ function onSelectionChange() { |
| requestNotifier.flashNodes(item ? item.ids : null, Prefs.flash_scrolltoitem); |
| } |
| function handleLocationChange() |
| { |
| if (requestNotifier) |
| requestNotifier.shutdown(); |
| + updateContentLocation(); |
| treeView.clearData(); |
| let {getBrowser, addBrowserLocationListener} = require("appSupport"); |
| let browser = getBrowser(mainWin); |
| if ("selectedBrowser" in browser) |
| browser = browser.selectedBrowser; |
| let outerWindowID = browser.outerWindowID; |
| - treeView.itemToSelect = RequestNotifier.getSelection(window.content); |
| + if (window.content) |
| + treeView.itemToSelect = RequestNotifier.getSelection(window.content); |
| requestNotifier = new RequestNotifier(outerWindowID, function(item, scanComplete) |
| { |
| if (item) |
| treeView.addItem(item, scanComplete); |
| }); |
| cacheStorage = null; |
| } |
| @@ -929,21 +944,21 @@ var treeView = { |
| else |
| return this.data[row].location; |
| } |
| else { |
| // Empty list, show dummy |
| if (row > 0 || (col != "address" && col != "filter")) |
| return ""; |
| if (col == "filter") { |
| - var filter = Policy.isWindowWhitelisted(window.content); |
| + var filter = Policy.isWhitelisted(contentLocation); |
| return filter ? filter.text : ""; |
| } |
| - return (Policy.isWindowWhitelisted(window.content) ? this.whitelistDummy : this.itemsDummy); |
| + return (Policy.isWhitelisted(contentLocation) ? this.whitelistDummy : this.itemsDummy); |
| } |
| }, |
| generateProperties: function(list, properties) |
| { |
| if (properties) |
| { |
| // Gecko 21 and below: we have an nsISupportsArray parameter, add atoms |
| @@ -993,17 +1008,17 @@ var treeView = { |
| else if (filter instanceof ElemHideException) |
| state = "state-hiddenexception"; |
| } |
| } |
| else { |
| list.push("dummy-true"); |
| state = "state-filtered"; |
| - if (this.data && Policy.isWindowWhitelisted(window.content)) |
| + if (this.data && Policy.isWhitelisted(contentLocation)) |
| state = "state-whitelisted"; |
| } |
| list.push(state); |
| return this.generateProperties(list, properties); |
| }, |
| getCellProperties: function(row, col, properties) |
| { |
| @@ -1303,17 +1318,17 @@ var treeView = { |
| this.boxObject.getCellAt(x, y, {}, col, {}); |
| return (col.value ? col.value.id : null); |
| }, |
| getDummyTooltip: function() { |
| if (!this.data || this.data.length) |
| return null; |
| - var filter = Policy.isWindowWhitelisted(window.content); |
| + var filter = Policy.isWhitelisted(contentLocation); |
| if (filter) |
| return {tooltip: this.whitelistDummyTooltip, filter: filter.text}; |
| else |
| return {tooltip: this.itemsDummyTooltip}; |
| }, |
| invalidateItem: function(item) |
| { |