Implement Notification Permission callback 95/202895/7
authorsurya.kumar7 <surya.kumar7@samsung.com>
Fri, 5 Apr 2019 12:30:48 +0000 (18:00 +0530)
committersurya.kumar7 <surya.kumar7@samsung.com>
Wed, 10 Apr 2019 11:57:57 +0000 (17:27 +0530)
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 <surya.kumar7@samsung.com>
wrt_app/src/web_application.js

index 38651d4..ae0cfc3 100755 (executable)
@@ -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');