mirror of
https://github.com/gorhill/uBlock.git
synced 2024-10-06 09:37:12 +02:00
to address #266 -- drafty, just curious to see if this helps
This commit is contained in:
parent
67950ec135
commit
b084d796b5
@ -2,7 +2,7 @@
|
|||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
|
|
||||||
"name": "uBlock Origin",
|
"name": "uBlock Origin",
|
||||||
"version": "0.9.8.2",
|
"version": "0.9.8.3",
|
||||||
|
|
||||||
"default_locale": "en",
|
"default_locale": "en",
|
||||||
"description": "__MSG_extShortDesc__",
|
"description": "__MSG_extShortDesc__",
|
||||||
|
@ -69,7 +69,7 @@ var cleanupTasks = [];
|
|||||||
// Fixed by github.com/AlexVallat:
|
// Fixed by github.com/AlexVallat:
|
||||||
// https://github.com/AlexVallat/uBlock/commit/7b781248f00cbe3d61b1cc367c440db80fa06049
|
// https://github.com/AlexVallat/uBlock/commit/7b781248f00cbe3d61b1cc367c440db80fa06049
|
||||||
// 7 instances of cleanupTasks.push, but one is unique to fennec, and one to desktop.
|
// 7 instances of cleanupTasks.push, but one is unique to fennec, and one to desktop.
|
||||||
var expectedNumberOfCleanups = 6;
|
var expectedNumberOfCleanups = 7;
|
||||||
|
|
||||||
window.addEventListener('unload', function() {
|
window.addEventListener('unload', function() {
|
||||||
for ( var cleanup of cleanupTasks ) {
|
for ( var cleanup of cleanupTasks ) {
|
||||||
@ -356,74 +356,6 @@ vAPI.storage = (function() {
|
|||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
var windowWatcher = {
|
|
||||||
onReady: function(e) {
|
|
||||||
if ( e ) {
|
|
||||||
this.removeEventListener(e.type, windowWatcher.onReady);
|
|
||||||
}
|
|
||||||
|
|
||||||
var wintype = this.document.documentElement.getAttribute('windowtype');
|
|
||||||
|
|
||||||
if ( wintype !== 'navigator:browser' ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var tabContainer;
|
|
||||||
var tabBrowser = getTabBrowser(this);
|
|
||||||
|
|
||||||
if ( !tabBrowser ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( tabBrowser.deck ) {
|
|
||||||
// Fennec
|
|
||||||
tabContainer = tabBrowser.deck;
|
|
||||||
} else if ( tabBrowser.tabContainer ) {
|
|
||||||
// desktop Firefox
|
|
||||||
tabContainer = tabBrowser.tabContainer;
|
|
||||||
vAPI.contextMenu.register(this.document);
|
|
||||||
} else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
tabContainer.addEventListener('TabClose', tabWatcher.onTabClose);
|
|
||||||
tabContainer.addEventListener('TabSelect', tabWatcher.onTabSelect);
|
|
||||||
|
|
||||||
// when new window is opened TabSelect doesn't run on the selected tab?
|
|
||||||
},
|
|
||||||
|
|
||||||
observe: function(win, topic) {
|
|
||||||
if ( topic === 'domwindowopened' ) {
|
|
||||||
win.addEventListener('DOMContentLoaded', this.onReady);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
var tabWatcher = {
|
|
||||||
onTabClose: function({target}) {
|
|
||||||
// target is tab in Firefox, browser in Fennec
|
|
||||||
var tabId = vAPI.tabs.getTabId(target);
|
|
||||||
vAPI.tabs.onClosed(tabId);
|
|
||||||
delete vAPI.toolbarButton.tabs[tabId];
|
|
||||||
},
|
|
||||||
|
|
||||||
onTabSelect: function({target}) {
|
|
||||||
vAPI.setIcon(vAPI.tabs.getTabId(target), getOwnerWindow(target));
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
vAPI.isBehindTheSceneTabId = function(tabId) {
|
|
||||||
return tabId.toString() === '-1';
|
|
||||||
};
|
|
||||||
|
|
||||||
vAPI.noTabId = '-1';
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
var getTabBrowser = function(win) {
|
var getTabBrowser = function(win) {
|
||||||
return vAPI.fennec && win.BrowserApp || win.gBrowser || null;
|
return vAPI.fennec && win.BrowserApp || win.gBrowser || null;
|
||||||
};
|
};
|
||||||
@ -458,6 +390,14 @@ var getOwnerWindow = function(target) {
|
|||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
|
vAPI.isBehindTheSceneTabId = function(tabId) {
|
||||||
|
return tabId.toString() === '-1';
|
||||||
|
};
|
||||||
|
|
||||||
|
vAPI.noTabId = '-1';
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
vAPI.tabs = {};
|
vAPI.tabs = {};
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
@ -492,8 +432,10 @@ vAPI.tabs.registerListeners = function() {
|
|||||||
tabContainer = tabBrowser.tabContainer;
|
tabContainer = tabBrowser.tabContainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
tabContainer.removeEventListener('TabClose', tabWatcher.onTabClose);
|
tabContainer.removeEventListener('TabOpen', tabWatcher.onOpen);
|
||||||
tabContainer.removeEventListener('TabSelect', tabWatcher.onTabSelect);
|
tabContainer.removeEventListener('TabShow', tabWatcher.onShow);
|
||||||
|
tabContainer.removeEventListener('TabClose', tabWatcher.onClose);
|
||||||
|
tabContainer.removeEventListener('TabSelect', tabWatcher.onSelect);
|
||||||
|
|
||||||
// Close extension tabs
|
// Close extension tabs
|
||||||
for ( var tab of tabBrowser.tabs ) {
|
for ( var tab of tabBrowser.tabs ) {
|
||||||
@ -512,72 +454,15 @@ vAPI.tabs.registerListeners = function() {
|
|||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
vAPI.tabs.stack = new WeakMap();
|
|
||||||
vAPI.tabs.stackId = 1;
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
vAPI.tabs.getTabId = function(target) {
|
|
||||||
if ( !target ) {
|
|
||||||
return vAPI.noTabId;
|
|
||||||
}
|
|
||||||
if ( vAPI.fennec ) {
|
|
||||||
if ( target.browser ) {
|
|
||||||
// target is a tab
|
|
||||||
target = target.browser;
|
|
||||||
}
|
|
||||||
} else if ( target.linkedPanel ) {
|
|
||||||
// target is a tab
|
|
||||||
target = target.linkedBrowser;
|
|
||||||
}
|
|
||||||
if ( target.localName !== 'browser' ) {
|
|
||||||
return vAPI.noTabId;
|
|
||||||
}
|
|
||||||
var tabId = this.stack.get(target);
|
|
||||||
if ( !tabId ) {
|
|
||||||
tabId = '' + this.stackId++;
|
|
||||||
this.stack.set(target, tabId);
|
|
||||||
}
|
|
||||||
return tabId;
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
// If tabIds is an array, then an array of tabs will be returned,
|
|
||||||
// otherwise a single tab
|
|
||||||
|
|
||||||
vAPI.tabs.getTabsForIds = function(tabIds) {
|
|
||||||
var tabs = [];
|
|
||||||
var singleTab = !Array.isArray(tabIds);
|
|
||||||
if ( singleTab ) {
|
|
||||||
tabIds = [tabIds];
|
|
||||||
}
|
|
||||||
for ( var tab of this.getAll() ) {
|
|
||||||
var tabId = this.stack.get(getBrowserForTab(tab));
|
|
||||||
if ( !tabId ) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ( tabIds.indexOf(tabId) !== -1 ) {
|
|
||||||
tabs.push(tab);
|
|
||||||
}
|
|
||||||
if ( tabs.length >= tabIds.length ) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return singleTab ? tabs[0] || null : tabs;
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
vAPI.tabs.get = function(tabId, callback) {
|
vAPI.tabs.get = function(tabId, callback) {
|
||||||
var tab, win;
|
var tab, win;
|
||||||
|
|
||||||
if ( tabId === null ) {
|
if ( tabId === null ) {
|
||||||
win = Services.wm.getMostRecentWindow('navigator:browser');
|
win = Services.wm.getMostRecentWindow('navigator:browser');
|
||||||
tab = getTabBrowser(win).selectedTab;
|
tab = getTabBrowser(win).selectedTab;
|
||||||
tabId = this.getTabId(tab);
|
tabId = tabWatcher.tabIdFromTab(tab);
|
||||||
} else {
|
} else {
|
||||||
tab = this.getTabsForIds(tabId);
|
tab = tabWatcher.tabFromTabId(tabId);
|
||||||
if ( tab ) {
|
if ( tab ) {
|
||||||
win = getOwnerWindow(tab);
|
win = getOwnerWindow(tab);
|
||||||
}
|
}
|
||||||
@ -632,6 +517,9 @@ vAPI.tabs.getAll = function(window) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for ( tab of tabBrowser.tabs ) {
|
for ( tab of tabBrowser.tabs ) {
|
||||||
|
if ( !vAPI.fennec && tab.hasAttribute('pending') ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
tabs.push(tab);
|
tabs.push(tab);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -697,7 +585,7 @@ vAPI.tabs.open = function(details) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( details.tabId ) {
|
if ( details.tabId ) {
|
||||||
tab = this.getTabsForIds(details.tabId);
|
tab = tabWatcher.tabFromTabId(details.tabId);
|
||||||
if ( tab ) {
|
if ( tab ) {
|
||||||
getBrowserForTab(tab).loadURI(details.url);
|
getBrowserForTab(tab).loadURI(details.url);
|
||||||
return;
|
return;
|
||||||
@ -736,7 +624,7 @@ vAPI.tabs.replace = function(tabId, url) {
|
|||||||
targetURL = vAPI.getURL(targetURL);
|
targetURL = vAPI.getURL(targetURL);
|
||||||
}
|
}
|
||||||
|
|
||||||
var tab = this.getTabsForIds(tabId);
|
var tab = tabWatcher.tabFromTabId(tabId);
|
||||||
if ( tab ) {
|
if ( tab ) {
|
||||||
getBrowserForTab(tab).loadURI(targetURL);
|
getBrowserForTab(tab).loadURI(targetURL);
|
||||||
}
|
}
|
||||||
@ -754,11 +642,8 @@ vAPI.tabs._remove = function(tab, tabBrowser) {
|
|||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
vAPI.tabs.remove = function(tabIds) {
|
vAPI.tabs.remove = function(tabId) {
|
||||||
if ( !Array.isArray(tabIds) ) {
|
var tabs = tabWatcher.tabFromTabId(tabId);
|
||||||
tabIds = [tabIds];
|
|
||||||
}
|
|
||||||
var tabs = this.getTabsForIds(tabIds);
|
|
||||||
if ( tabs.length === 0 ) {
|
if ( tabs.length === 0 ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -832,12 +717,158 @@ vAPI.tabs.injectScript = function(tabId, details, callback) {
|
|||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
|
var windowWatcher = {
|
||||||
|
onReady: function(e) {
|
||||||
|
if ( e ) {
|
||||||
|
this.removeEventListener(e.type, windowWatcher.onReady);
|
||||||
|
}
|
||||||
|
|
||||||
|
var wintype = this.document.documentElement.getAttribute('windowtype');
|
||||||
|
|
||||||
|
if ( wintype !== 'navigator:browser' ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var tabContainer;
|
||||||
|
var tabBrowser = getTabBrowser(this);
|
||||||
|
|
||||||
|
if ( !tabBrowser ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( tabBrowser.deck ) {
|
||||||
|
// Fennec
|
||||||
|
tabContainer = tabBrowser.deck;
|
||||||
|
} else if ( tabBrowser.tabContainer ) {
|
||||||
|
// desktop Firefox
|
||||||
|
tabContainer = tabBrowser.tabContainer;
|
||||||
|
vAPI.contextMenu.register(this.document);
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tabContainer.addEventListener('TabOpen', tabWatcher.onOpen);
|
||||||
|
tabContainer.addEventListener('TabShow', tabWatcher.onShow);
|
||||||
|
tabContainer.addEventListener('TabClose', tabWatcher.onClose);
|
||||||
|
tabContainer.addEventListener('TabSelect', tabWatcher.onSelect);
|
||||||
|
|
||||||
|
// when new window is opened TabSelect doesn't run on the selected tab?
|
||||||
|
},
|
||||||
|
|
||||||
|
observe: function(win, topic) {
|
||||||
|
if ( topic === 'domwindowopened' ) {
|
||||||
|
win.addEventListener('DOMContentLoaded', this.onReady);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
var tabWatcher = (function() {
|
||||||
|
var knownTabs = new Set();
|
||||||
|
var stack = new WeakMap();
|
||||||
|
var stackId = 1;
|
||||||
|
// If needed, we can optimize further by having a matching tabid->tab map.
|
||||||
|
|
||||||
|
var tabIdFromTab = function(target) {
|
||||||
|
if ( !target ) {
|
||||||
|
return vAPI.noTabId;
|
||||||
|
}
|
||||||
|
if ( vAPI.fennec ) {
|
||||||
|
if ( target.browser ) {
|
||||||
|
// target is a tab
|
||||||
|
target = target.browser;
|
||||||
|
}
|
||||||
|
} else if ( target.linkedPanel ) {
|
||||||
|
// target is a tab
|
||||||
|
target = target.linkedBrowser;
|
||||||
|
}
|
||||||
|
if ( target.localName !== 'browser' ) {
|
||||||
|
return vAPI.noTabId;
|
||||||
|
}
|
||||||
|
var tabId = stack.get(target);
|
||||||
|
if ( !tabId ) {
|
||||||
|
tabId = '' + stackId++;
|
||||||
|
stack.set(target, tabId);
|
||||||
|
}
|
||||||
|
return tabId;
|
||||||
|
};
|
||||||
|
|
||||||
|
var tabFromTabId = function(tabId) {
|
||||||
|
for ( var tab of knownTabs ) {
|
||||||
|
if ( tabIdFromTab(tab) === tabId ) {
|
||||||
|
return tab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Initialize map with existing active tabs
|
||||||
|
var tabBrowser;
|
||||||
|
for ( var win of vAPI.tabs.getWindows() ) {
|
||||||
|
tabBrowser = getTabBrowser(win);
|
||||||
|
if ( tabBrowser === null ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for ( var tab of tabBrowser.tabs ) {
|
||||||
|
if ( !vAPI.fennec && tab.hasAttribute('pending') ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
knownTabs.add(tab, true);
|
||||||
|
tabIdFromTab(tab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanupTasks.push(function() {
|
||||||
|
knownTabs.clear();
|
||||||
|
});
|
||||||
|
|
||||||
|
// https://developer.mozilla.org/en-US/docs/Web/Events/TabOpen
|
||||||
|
var onOpen = function({target}) {
|
||||||
|
knownTabs.add(target, true);
|
||||||
|
tabIdFromTab(tab);
|
||||||
|
};
|
||||||
|
|
||||||
|
// https://developer.mozilla.org/en-US/docs/Web/Events/TabShow
|
||||||
|
var onShow = function({target}) {
|
||||||
|
knownTabs.add(target, true);
|
||||||
|
tabIdFromTab(tab);
|
||||||
|
};
|
||||||
|
|
||||||
|
// https://developer.mozilla.org/en-US/docs/Web/Events/TabClose
|
||||||
|
var onClose = function({target}) {
|
||||||
|
// target is tab in Firefox, browser in Fennec
|
||||||
|
var tabId = tabIdFromTab(target);
|
||||||
|
vAPI.tabs.onClosed(tabId);
|
||||||
|
delete vAPI.toolbarButton.tabs[tabId];
|
||||||
|
knownTabs.delete(target);
|
||||||
|
};
|
||||||
|
|
||||||
|
// https://developer.mozilla.org/en-US/docs/Web/Events/TabSelect
|
||||||
|
var onSelect = function({target}) {
|
||||||
|
knownTabs.add(target, true);
|
||||||
|
vAPI.setIcon(tabIdFromTab(target), getOwnerWindow(target));
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
onOpen: onOpen,
|
||||||
|
onShow: onShow,
|
||||||
|
onClose: onClose,
|
||||||
|
onSelect: onSelect,
|
||||||
|
tabs: knownTabs,
|
||||||
|
tabIdFromTab: tabIdFromTab,
|
||||||
|
tabFromTabId: tabFromTabId
|
||||||
|
};
|
||||||
|
})();
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
vAPI.setIcon = function(tabId, iconStatus, badge) {
|
vAPI.setIcon = function(tabId, iconStatus, badge) {
|
||||||
// If badge is undefined, then setIcon was called from the TabSelect event
|
// If badge is undefined, then setIcon was called from the TabSelect event
|
||||||
var win = badge === undefined
|
var win = badge === undefined
|
||||||
? iconStatus
|
? iconStatus
|
||||||
: Services.wm.getMostRecentWindow('navigator:browser');
|
: Services.wm.getMostRecentWindow('navigator:browser');
|
||||||
var curTabId = vAPI.tabs.getTabId(getTabBrowser(win).selectedTab);
|
var curTabId = tabWatcher.tabIdFromTab(getTabBrowser(win).selectedTab);
|
||||||
var tb = vAPI.toolbarButton;
|
var tb = vAPI.toolbarButton;
|
||||||
|
|
||||||
// from 'TabSelect' event
|
// from 'TabSelect' event
|
||||||
@ -901,7 +932,7 @@ vAPI.messaging.onMessage = function({target, data}) {
|
|||||||
|
|
||||||
var sender = {
|
var sender = {
|
||||||
tab: {
|
tab: {
|
||||||
id: vAPI.tabs.getTabId(target)
|
id: tabWatcher.tabIdFromTab(target)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1413,12 +1444,12 @@ vAPI.net.registerListeners = function() {
|
|||||||
// a request would end up being categorized as a behind-the-scene
|
// a request would end up being categorized as a behind-the-scene
|
||||||
// requests.
|
// requests.
|
||||||
var details = e.data;
|
var details = e.data;
|
||||||
var tabId = vAPI.tabs.getTabId(e.target);
|
var tabId = tabWatcher.tabIdFromTab(e.target);
|
||||||
var sourceTabId = null;
|
var sourceTabId = null;
|
||||||
|
|
||||||
// Popup candidate
|
// Popup candidate
|
||||||
if ( details.openerURL ) {
|
if ( details.openerURL ) {
|
||||||
for ( var tab of vAPI.tabs.getAll() ) {
|
for ( var tab of tabWatcher.tabs ) {
|
||||||
var URI = getBrowserForTab(tab).currentURI;
|
var URI = getBrowserForTab(tab).currentURI;
|
||||||
|
|
||||||
// Probably isn't the best method to identify the source tab
|
// Probably isn't the best method to identify the source tab
|
||||||
@ -1426,7 +1457,7 @@ vAPI.net.registerListeners = function() {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceTabId = vAPI.tabs.getTabId(tab);
|
sourceTabId = tabWatcher.tabIdFromTab(tab);
|
||||||
|
|
||||||
if ( sourceTabId === tabId ) {
|
if ( sourceTabId === tabId ) {
|
||||||
sourceTabId = null;
|
sourceTabId = null;
|
||||||
@ -1462,7 +1493,7 @@ vAPI.net.registerListeners = function() {
|
|||||||
var locationChangedListener = function(e) {
|
var locationChangedListener = function(e) {
|
||||||
var details = e.data;
|
var details = e.data;
|
||||||
var browser = e.target;
|
var browser = e.target;
|
||||||
var tabId = vAPI.tabs.getTabId(browser);
|
var tabId = tabWatcher.tabIdFromTab(browser);
|
||||||
|
|
||||||
// Ignore notifications related to our popup
|
// Ignore notifications related to our popup
|
||||||
if ( details.url.lastIndexOf(vAPI.getURL('popup.html'), 0) === 0 ) {
|
if ( details.url.lastIndexOf(vAPI.getURL('popup.html'), 0) === 0 ) {
|
||||||
@ -1555,7 +1586,7 @@ vAPI.toolbarButton.init = function() {
|
|||||||
|
|
||||||
tb.onClick = function() {
|
tb.onClick = function() {
|
||||||
var win = Services.wm.getMostRecentWindow('navigator:browser');
|
var win = Services.wm.getMostRecentWindow('navigator:browser');
|
||||||
var curTabId = vAPI.tabs.getTabId(getTabBrowser(win).selectedTab);
|
var curTabId = tabWatcher.tabIdFromTab(getTabBrowser(win).selectedTab);
|
||||||
vAPI.tabs.open({
|
vAPI.tabs.open({
|
||||||
url: 'popup.html?tabId=' + curTabId,
|
url: 'popup.html?tabId=' + curTabId,
|
||||||
index: -1,
|
index: -1,
|
||||||
@ -1990,7 +2021,7 @@ vAPI.contextMenu.create = function(details, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
callback(details, {
|
callback(details, {
|
||||||
id: vAPI.tabs.getTabId(gContextMenu.browser),
|
id: tabWatcher.tabIdFromTab(gContextMenu.browser),
|
||||||
url: gContextMenu.browser.currentURI.asciiSpec
|
url: gContextMenu.browser.currentURI.asciiSpec
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -2070,13 +2101,8 @@ vAPI.lastError = function() {
|
|||||||
|
|
||||||
vAPI.onLoadAllCompleted = function() {
|
vAPI.onLoadAllCompleted = function() {
|
||||||
var µb = µBlock;
|
var µb = µBlock;
|
||||||
for ( var tab of this.tabs.getAll() ) {
|
for ( var tab of tabWatcher.tabs ) {
|
||||||
// We're insterested in only the tabs that were already loaded
|
var tabId = tabWatcher.tabIdFromTab(tab);
|
||||||
if ( !vAPI.fennec && tab.hasAttribute('pending') ) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var tabId = this.tabs.getTabId(tab);
|
|
||||||
var browser = getBrowserForTab(tab);
|
var browser = getBrowserForTab(tab);
|
||||||
µb.tabContextManager.commit(tabId, browser.currentURI.asciiSpec);
|
µb.tabContextManager.commit(tabId, browser.currentURI.asciiSpec);
|
||||||
µb.bindTabToPageStats(tabId);
|
µb.bindTabToPageStats(tabId);
|
||||||
|
Loading…
Reference in New Issue
Block a user