/usr/share/xul-ext/tabmixplus/modules/DownloadLastDir.jsm is in xul-ext-tabmixplus 0.5.0.0-1~deb8u1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | /// "use strict";
/* eslint strict: 0 */
this.EXPORTED_SYMBOLS = ["TabmixDownloadLastDir"];
const {interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Services",
"resource://gre/modules/Services.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "TabmixSvc",
"resource://tabmixplus/Services.jsm");
this.TabmixDownloadLastDir = {
_initialized: false,
init: function() {
if (this._initialized)
return;
this._initialized = true;
// original DownloadLastDir.jsm query Ci.nsILoadContext on this.window,
// it fails if we already closed the tab that initialized the download
// with TypeError: can't access dead object
let descriptor = {
get: function() {
if (this._window) {
try {
this._window.QueryInterface(Ci.nsIInterfaceRequestor);
} catch (ex) {
let win = Services.wm.getMostRecentWindow("navigator:browser");
return win ? win.gBrowser.selectedTab.ownerDocument.defaultView : null;
}
}
return this._window;
},
set: function(val) {
this._window = val;
return val;
},
configurable: true, enumerable: true
};
let downloadModule = {};
Cu.import("resource://gre/modules/DownloadLastDir.jsm", downloadModule);
let obj = downloadModule.DownloadLastDir.prototype;
Object.defineProperty(obj, "window", descriptor);
obj._window = null;
}
};
this.TabmixDownloadLastDir.init();
|