From: Samuel Attard Date: Tue, 2 Aug 2016 03:02:55 +0000 (+1000) Subject: Implement asynchronous versions of getZoomFactor and GetZoomLevel on the webContents... X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e4f6083753bd360013b36b42dd49e8724852a0d0;p=platform%2Fframework%2Fweb%2Fcrosswalk-tizen.git Implement asynchronous versions of getZoomFactor and GetZoomLevel on the webContents object --- diff --git a/lib/browser/api/web-contents.js b/lib/browser/api/web-contents.js index 5515984..7a57eac 100644 --- a/lib/browser/api/web-contents.js +++ b/lib/browser/api/web-contents.js @@ -89,6 +89,11 @@ const webFrameMethods = [ 'setZoomLevelLimits' ] +const webFrameMethodsWithResult = [ + 'getZoomFactor', + 'getZoomLevel' +] + // Add JavaScript wrappers for WebContents class. const wrapWebContents = function (webContents) { // webContents is an EventEmitter. @@ -120,6 +125,21 @@ const wrapWebContents = function (webContents) { } } + const asyncWebFrameMethods = function (requestId, method, callback, ...args) { + this.send('ELECTRON_INTERNAL_RENDERER_ASYNC_WEB_FRAME_METHOD', requestId, method, args) + ipcMain.once(`ELECTRON_INTERNAL_BROWSER_ASYNC_WEB_FRAME_RESPONSE_${requestId}`, function (event, result) { + console.info(callback); + if (callback) callback(result) + }) + } + + const syncWebFrameMethods = function (requestId, method, callback, ...args) { + this.send('ELECTRON_INTERNAL_RENDERER_SYNC_WEB_FRAME_METHOD', requestId, method, args) + ipcMain.once(`ELECTRON_INTERNAL_BROWSER_SYNC_WEB_FRAME_RESPONSE_${requestId}`, function (event, result) { + if (callback) callback(result) + }) + } + // Mapping webFrame methods. for (const method of webFrameMethods) { webContents[method] = function (...args) { @@ -127,11 +147,12 @@ const wrapWebContents = function (webContents) { } } - const asyncWebFrameMethods = function (requestId, method, callback, ...args) { - this.send('ELECTRON_INTERNAL_RENDERER_ASYNC_WEB_FRAME_METHOD', requestId, method, args) - ipcMain.once(`ELECTRON_INTERNAL_BROWSER_ASYNC_WEB_FRAME_RESPONSE_${requestId}`, function (event, result) { - if (callback) callback(result) - }) + for (const method of webFrameMethodsWithResult) { + webContents[method] = function (...args) { + const callback = args[args.length - 1] + const actualArgs = args.slice(0, args.length - 2) + syncWebFrameMethods.call(this, getNextId(), method, callback, ...actualArgs) + } } // Make sure webContents.executeJavaScript would run the code only when the diff --git a/lib/renderer/init.js b/lib/renderer/init.js index f0875ca..710c4c7 100644 --- a/lib/renderer/init.js +++ b/lib/renderer/init.js @@ -32,6 +32,11 @@ electron.ipcRenderer.on('ELECTRON_INTERNAL_RENDERER_WEB_FRAME_METHOD', (event, m electron.webFrame[method].apply(electron.webFrame, args) }) +electron.ipcRenderer.on('ELECTRON_INTERNAL_RENDERER_SYNC_WEB_FRAME_METHOD', (event, requestId, method, args) => { + const result = electron.webFrame[method].apply(electron.webFrame, args) + event.sender.send(`ELECTRON_INTERNAL_BROWSER_SYNC_WEB_FRAME_RESPONSE_${requestId}`, result) +}) + electron.ipcRenderer.on('ELECTRON_INTERNAL_RENDERER_ASYNC_WEB_FRAME_METHOD', (event, requestId, method, args) => { const responseCallback = function (result) { event.sender.send(`ELECTRON_INTERNAL_BROWSER_ASYNC_WEB_FRAME_RESPONSE_${requestId}`, result)