Implement chrome.tab.onCreated/onRemoved APIs
This commit is contained in:
parent
2431d886bf
commit
ec1944c146
2 changed files with 29 additions and 4 deletions
|
@ -68,6 +68,20 @@ const removeBackgroundPages = function (manifest) {
|
||||||
delete backgroundPages[manifest.extensionId]
|
delete backgroundPages[manifest.extensionId]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Dispatch tabs events.
|
||||||
|
const hookWindowForTabEvents = function (win) {
|
||||||
|
const tabId = win.webContents.id
|
||||||
|
for (const page of objectValues(backgroundPages)) {
|
||||||
|
page.webContents.sendToAll('CHROME_TABS_ONCREATED', tabId)
|
||||||
|
}
|
||||||
|
|
||||||
|
win.once('closed', () => {
|
||||||
|
for (const page of objectValues(backgroundPages)) {
|
||||||
|
page.webContents.sendToAll('CHROME_TABS_ONREMOVED', tabId)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Handle the chrome.* API messages.
|
// Handle the chrome.* API messages.
|
||||||
let nextId = 0
|
let nextId = 0
|
||||||
|
|
||||||
|
@ -290,6 +304,7 @@ app.once('ready', function () {
|
||||||
const init = BrowserWindow.prototype._init
|
const init = BrowserWindow.prototype._init
|
||||||
BrowserWindow.prototype._init = function () {
|
BrowserWindow.prototype._init = function () {
|
||||||
init.call(this)
|
init.call(this)
|
||||||
|
hookWindowForTabEvents(this)
|
||||||
this.webContents.on('devtools-opened', () => {
|
this.webContents.on('devtools-opened', () => {
|
||||||
loadDevToolsExtensions(this, objectValues(manifestMap))
|
loadDevToolsExtensions(this, objectValues(manifestMap))
|
||||||
})
|
})
|
||||||
|
|
|
@ -90,6 +90,14 @@ exports.injectTo = function (extensionId, isBackgroundPage, context) {
|
||||||
chrome.runtime.onMessage.emit(message, new MessageSender(tabId, extensionId))
|
chrome.runtime.onMessage.emit(message, new MessageSender(tabId, extensionId))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
ipcRenderer.on('CHROME_TABS_ONCREATED', (event, tabId) => {
|
||||||
|
chrome.tabs.onCreated.emit(new Tab(tabId))
|
||||||
|
})
|
||||||
|
|
||||||
|
ipcRenderer.on('CHROME_TABS_ONREMOVED', (event, tabId) => {
|
||||||
|
chrome.tabs.onRemoved.emit(tabId)
|
||||||
|
})
|
||||||
|
|
||||||
chrome.runtime = {
|
chrome.runtime = {
|
||||||
getURL: function (path) {
|
getURL: function (path) {
|
||||||
return url.format({
|
return url.format({
|
||||||
|
@ -100,8 +108,6 @@ exports.injectTo = function (extensionId, isBackgroundPage, context) {
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
onConnect: new Event(),
|
|
||||||
|
|
||||||
connect (...args) {
|
connect (...args) {
|
||||||
if (isBackgroundPage) {
|
if (isBackgroundPage) {
|
||||||
console.error('chrome.runtime.connect is not supported in background page')
|
console.error('chrome.runtime.connect is not supported in background page')
|
||||||
|
@ -141,7 +147,9 @@ exports.injectTo = function (extensionId, isBackgroundPage, context) {
|
||||||
ipcRenderer.send('CHROME_RUNTIME_SENDMESSAGE', targetExtensionId, message)
|
ipcRenderer.send('CHROME_RUNTIME_SENDMESSAGE', targetExtensionId, message)
|
||||||
},
|
},
|
||||||
|
|
||||||
onMessage: new Event()
|
onConnect: new Event(),
|
||||||
|
onMessage: new Event(),
|
||||||
|
onInstalled: new Event()
|
||||||
}
|
}
|
||||||
|
|
||||||
chrome.tabs = {
|
chrome.tabs = {
|
||||||
|
@ -160,7 +168,9 @@ exports.injectTo = function (extensionId, isBackgroundPage, context) {
|
||||||
ipcRenderer.send(`CHROME_TABS_SEND_MESSAGE`, tabId, extensionId, isBackgroundPage, message)
|
ipcRenderer.send(`CHROME_TABS_SEND_MESSAGE`, tabId, extensionId, isBackgroundPage, message)
|
||||||
},
|
},
|
||||||
|
|
||||||
onUpdated: new Event()
|
onUpdated: new Event(),
|
||||||
|
onCreated: new Event(),
|
||||||
|
onRemoved: new Event()
|
||||||
}
|
}
|
||||||
|
|
||||||
chrome.extension = {
|
chrome.extension = {
|
||||||
|
|
Loading…
Reference in a new issue