From: Kevin Sawicki Date: Thu, 16 Jun 2016 19:07:59 +0000 (-0700) Subject: Forward will/did navigate events to extensions X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=65abaee29925dab95153052993522e8a94d87701;p=platform%2Fframework%2Fweb%2Fcrosswalk-tizen.git Forward will/did navigate events to extensions --- diff --git a/lib/browser/chrome-extension.js b/lib/browser/chrome-extension.js index 098f3aa..bd71feb 100644 --- a/lib/browser/chrome-extension.js +++ b/lib/browser/chrome-extension.js @@ -97,17 +97,42 @@ const removeBackgroundPages = function (manifest) { 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) }) } @@ -245,7 +270,7 @@ const loadDevToolsExtensions = function (win, manifests) { 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)) }) diff --git a/lib/renderer/chrome-api.js b/lib/renderer/chrome-api.js index f467c8b..6c28c98 100644 --- a/lib/renderer/chrome-api.js +++ b/lib/renderer/chrome-api.js @@ -174,5 +174,5 @@ exports.injectTo = function (extensionId, isBackgroundPage, context) { } chrome.i18n = require('./extensions/i18n').setup(extensionId) - chrome.webNavigation = require('./extensions/web-navigation') + chrome.webNavigation = require('./extensions/web-navigation').setup() } diff --git a/lib/renderer/extensions/web-navigation.js b/lib/renderer/extensions/web-navigation.js index 01fbfc5..19faa80 100644 --- a/lib/renderer/extensions/web-navigation.js +++ b/lib/renderer/extensions/web-navigation.js @@ -1,5 +1,21 @@ 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() +}