mirror of
https://github.com/gorhill/uBlock.git
synced 2024-10-06 09:37:12 +02:00
This commit is contained in:
parent
e8e06dc10d
commit
ee16ae728a
@ -821,7 +821,7 @@ vAPI.tabs.get = function(tabId, callback) {
|
|||||||
return browser;
|
return browser;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !browser ) {
|
if ( !browser || !browser.currentURI ) {
|
||||||
callback();
|
callback();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -829,9 +829,13 @@ vAPI.tabs.get = function(tabId, callback) {
|
|||||||
var win = getOwnerWindow(browser);
|
var win = getOwnerWindow(browser);
|
||||||
var tabBrowser = getTabBrowser(win);
|
var tabBrowser = getTabBrowser(win);
|
||||||
|
|
||||||
|
// https://github.com/gorhill/uMatrix/issues/540
|
||||||
|
// The `index` property is nowhere used by uBlock at this point, so we
|
||||||
|
// will refrain from returning this information for the time being.
|
||||||
|
|
||||||
callback({
|
callback({
|
||||||
id: tabId,
|
id: tabId,
|
||||||
index: tabWatcher.indexFromTarget(browser),
|
index: undefined,
|
||||||
windowId: winWatcher.idFromWindow(win),
|
windowId: winWatcher.idFromWindow(win),
|
||||||
active: tabBrowser !== null && browser === tabBrowser.selectedBrowser,
|
active: tabBrowser !== null && browser === tabBrowser.selectedBrowser,
|
||||||
url: browser.currentURI.asciiSpec,
|
url: browser.currentURI.asciiSpec,
|
||||||
@ -1098,12 +1102,16 @@ vAPI.tabs.injectScript = function(tabId, details, callback) {
|
|||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
var tabWatcher = (function() {
|
var tabWatcher = (function() {
|
||||||
// TODO: find out whether we need a janitor to take care of stale entries.
|
// https://github.com/gorhill/uMatrix/issues/540
|
||||||
var browserToTabIdMap = new Map();
|
// Use only weak references to hold onto browser references.
|
||||||
|
var browserToTabIdMap = new WeakMap();
|
||||||
var tabIdToBrowserMap = new Map();
|
var tabIdToBrowserMap = new Map();
|
||||||
var tabIdGenerator = 1;
|
var tabIdGenerator = 1;
|
||||||
|
|
||||||
var indexFromBrowser = function(browser) {
|
var indexFromBrowser = function(browser) {
|
||||||
|
if ( !browser ) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
// TODO: Add support for this
|
// TODO: Add support for this
|
||||||
if ( vAPI.thunderbird ) {
|
if ( vAPI.thunderbird ) {
|
||||||
return -1;
|
return -1;
|
||||||
@ -1193,22 +1201,14 @@ var tabWatcher = (function() {
|
|||||||
if ( tabId === undefined ) {
|
if ( tabId === undefined ) {
|
||||||
tabId = '' + tabIdGenerator++;
|
tabId = '' + tabIdGenerator++;
|
||||||
browserToTabIdMap.set(browser, tabId);
|
browserToTabIdMap.set(browser, tabId);
|
||||||
tabIdToBrowserMap.set(tabId, browser);
|
tabIdToBrowserMap.set(tabId, Cu.getWeakReference(browser));
|
||||||
}
|
}
|
||||||
return tabId;
|
return tabId;
|
||||||
};
|
};
|
||||||
|
|
||||||
var browserFromTabId = function(tabId) {
|
var browserFromTabId = function(tabId) {
|
||||||
var browser = tabIdToBrowserMap.get(tabId);
|
var weakref = tabIdToBrowserMap.get(tabId);
|
||||||
if ( browser === undefined ) {
|
return weakref && weakref.get() || null;
|
||||||
return null;
|
|
||||||
}
|
|
||||||
// Verify that the browser is still live
|
|
||||||
if ( indexFromBrowser(browser) !== -1 ) {
|
|
||||||
return browser;
|
|
||||||
}
|
|
||||||
removeBrowserEntry(tabId, browser);
|
|
||||||
return null;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var currentBrowser = function() {
|
var currentBrowser = function() {
|
||||||
@ -1244,6 +1244,19 @@ var tabWatcher = (function() {
|
|||||||
onClose({ target: target });
|
onClose({ target: target });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var getAllBrowsers = function() {
|
||||||
|
var browsers = [], browser;
|
||||||
|
for ( var weakref of tabIdToBrowserMap.values() ) {
|
||||||
|
browser = weakref.get();
|
||||||
|
// TODO:
|
||||||
|
// Maybe call removeBrowserEntry() if the browser no longer exists?
|
||||||
|
if ( browser ) {
|
||||||
|
browsers.push(browser);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return browsers;
|
||||||
|
};
|
||||||
|
|
||||||
// https://developer.mozilla.org/en-US/docs/Web/Events/TabShow
|
// https://developer.mozilla.org/en-US/docs/Web/Events/TabShow
|
||||||
var onShow = function({target}) {
|
var onShow = function({target}) {
|
||||||
tabIdFromTarget(target);
|
tabIdFromTarget(target);
|
||||||
@ -1404,14 +1417,14 @@ var tabWatcher = (function() {
|
|||||||
for ( var win of winWatcher.getWindows() ) {
|
for ( var win of winWatcher.getWindows() ) {
|
||||||
onWindowUnload(win);
|
onWindowUnload(win);
|
||||||
}
|
}
|
||||||
browserToTabIdMap.clear();
|
browserToTabIdMap = new WeakMap();
|
||||||
tabIdToBrowserMap.clear();
|
tabIdToBrowserMap.clear();
|
||||||
};
|
};
|
||||||
|
|
||||||
cleanupTasks.push(stop);
|
cleanupTasks.push(stop);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
browsers: function() { return browserToTabIdMap.keys(); },
|
browsers: getAllBrowsers,
|
||||||
browserFromTabId: browserFromTabId,
|
browserFromTabId: browserFromTabId,
|
||||||
browserFromTarget: browserFromTarget,
|
browserFromTarget: browserFromTarget,
|
||||||
currentBrowser: currentBrowser,
|
currentBrowser: currentBrowser,
|
||||||
|
Loading…
Reference in New Issue
Block a user