From: surya.kumar7 Date: Fri, 5 Apr 2019 12:30:48 +0000 (+0530) Subject: Implement Notification Permission callback X-Git-Tag: submit/tizen/20190412.025133~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9d798b6ed2324dfe4c34046a4f537dc4e9cbaf9a;p=platform%2Fframework%2Fweb%2Fwrtjs.git Implement Notification Permission callback When a website is requesting permission for notification, conditionally a popup is shown to gain access from the user; Also fixes tct-notification-w3c-tests partially Depends on: https://review.tizen.org/gerrit/202894 Change-Id: I04775ed2025046f7a8f370b844103123981b8dce Signed-off-by: surya.kumar7 --- diff --git a/wrt_app/src/web_application.js b/wrt_app/src/web_application.js index 38651d47..ae0cfc3a 100755 --- a/wrt_app/src/web_application.js +++ b/wrt_app/src/web_application.js @@ -60,7 +60,7 @@ class WebApplication { }; } handleEvents(options) { - var self = this; + let self = this; this.mainWindow.on('ready-to-show', function() { if (self.firstRendered) return; @@ -92,6 +92,7 @@ class WebApplication { } }); wrt.on('permission-response', function(event, id, result) { + console.log(`permission-response for ${id} is ${result}`); let callback = self.pendingCallbacks.get(id); if (typeof callback === 'function') { console.log('calling permission response callback'); @@ -104,6 +105,7 @@ class WebApplication { event.preventDefault(); if (certificate.data) { const id = ++self.pendingID; + console.log(`Raising a certificate error response with id: ${id}`); self.pendingCallbacks.set(id, callback); wrt.handleCertificateError(id, webContents, certificate.data, url); } else { @@ -111,6 +113,25 @@ class WebApplication { callback(false); } }); + function handlePermissionRequests(webContents, permission, callback) { + console.log(`handlePermissionRequests for ${permission}`); + if (permission === 'notifications') { + const id = ++self.pendingID; + console.log(`Raising a notification permission request with id: ${id}`); + self.pendingCallbacks.set(id, callback); + wrt.handleNotificationPermissionRequest(id, webContents); + } else { + /* electron by default allows permission for all if no request handler + is there; so granting permission only temporarily to not have any + side effects */ + callback(true); + } + } + this.mainWindow.webContents.session.setPermissionRequestHandler(handlePermissionRequests); + app.on('web-contents-created', function(event, webContents) { + const ses = webContents.session; + ses.setPermissionRequestHandler(handlePermissionRequests); + }); } suspend() { console.log('WebApplication : suspend');