delete backgroundPages[manifest.extensionId]
}
-// Dispatch tabs events.
-const hookWebContentsForTabEvents = function (webContents) {
- const tabId = webContents.id
+const sendToBackgroundPages = function (...args) {
for (const page of objectValues(backgroundPages)) {
- page.webContents.sendToAll('CHROME_TABS_ONCREATED', tabId)
+ page.webContents.sendToAll(...args)
}
+}
+
+// Dispatch web contents events to Chrome APIs
+const hookWebContentsEvents = function (webContents) {
+ const tabId = webContents.id
+
+ sendToBackgroundPages('CHROME_TABS_ONCREATED')
+
+ webContents.on('will-navigate', (event, url) => {
+ sendToBackgroundPages('CHROME_WEBNAVIGATION_ONBEFORENAVIGATE', {
+ frameId: 0,
+ parentFrameId: -1,
+ processId: webContents.getId(),
+ tabId: tabId,
+ timeStamp: Date.now(),
+ url: url
+ })
+ })
+
+ webContents.on('did-navigate', (event, url) => {
+ sendToBackgroundPages('CHROME_WEBNAVIGATION_ONCOMPLETED', {
+ frameId: 0,
+ parentFrameId: -1,
+ processId: webContents.getId(),
+ tabId: tabId,
+ timeStamp: Date.now(),
+ url: url
+ })
+ })
webContents.once('destroyed', () => {
- for (const page of objectValues(backgroundPages)) {
- page.webContents.sendToAll('CHROME_TABS_ONREMOVED', tabId)
- }
+ sendToBackgroundPages('CHROME_TABS_ONREMOVED', tabId)
})
}
app.on('web-contents-created', function (event, webContents) {
if (!isWindowOrWebView(webContents)) return
- hookWebContentsForTabEvents(webContents)
+ hookWebContentsEvents(webContents)
webContents.on('devtools-opened', function () {
loadDevToolsExtensions(webContents, objectValues(manifestMap))
})
const Event = require('./event')
+const {ipcRenderer} = require('electron')
-exports.onBeforeNavigate = new Event()
+class WebNavigation {
+ constructor () {
+ this.onBeforeNavigate = new Event()
+ this.onCompleted = new Event()
-exports.onCompleted = new Event()
+ ipcRenderer.on('CHROME_WEBNAVIGATION_ONBEFORENAVIGATE', (event, details) => {
+ this.onBeforeNavigate.emit(details)
+ })
+
+ ipcRenderer.on('CHROME_WEBNAVIGATION_ONCOMPLETED', (event, details) => {
+ this.onCompleted.emit(details)
+ })
+ }
+}
+
+exports.setup = () => {
+ return new WebNavigation()
+}