Title: [122478] trunk/Source/WebKit2
Revision
122478
Author
[email protected]
Date
2012-07-12 10:21:06 -0700 (Thu, 12 Jul 2012)

Log Message

[Qt][WK2] Implement web notifications support
https://bugs.webkit.org/show_bug.cgi?id=80702

Patch by Adenilson Cavalcanti <[email protected]> on 2012-07-12
Reviewed by Noam Rosenthal.

Adding a new type of permission request for Desktop Notifications (plus required code
to register the handle for this requests).

* UIProcess/API/qt/qwebpermissionrequest.cpp:
(QWebPermissionRequestPrivate::QWebPermissionRequestPrivate):
(QWebPermissionRequestPrivate):
(QWebPermissionRequest::create):
(QWebPermissionRequest::QWebPermissionRequest):
(QWebPermissionRequest::setAllow):
* UIProcess/API/qt/qwebpermissionrequest_p.h:
* UIProcess/API/qt/tests/qmltests/WebView/tst_notification.qml: Added.
* UIProcess/API/qt/tests/qmltests/common/notification.html: Added.
* UIProcess/qt/QtWebPageUIClient.cpp:
(WebKit::QtWebPageUIClient::QtWebPageUIClient):
(WebKit::QtWebPageUIClient::policyForNotificationPermissionRequest):
(WebKit):
* UIProcess/qt/QtWebPageUIClient.h:

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (122477 => 122478)


--- trunk/Source/WebKit2/ChangeLog	2012-07-12 17:11:39 UTC (rev 122477)
+++ trunk/Source/WebKit2/ChangeLog	2012-07-12 17:21:06 UTC (rev 122478)
@@ -1,3 +1,28 @@
+2012-07-12  Adenilson Cavalcanti  <[email protected]>
+
+        [Qt][WK2] Implement web notifications support
+        https://bugs.webkit.org/show_bug.cgi?id=80702
+
+        Reviewed by Noam Rosenthal.
+
+        Adding a new type of permission request for Desktop Notifications (plus required code
+        to register the handle for this requests).
+
+        * UIProcess/API/qt/qwebpermissionrequest.cpp:
+        (QWebPermissionRequestPrivate::QWebPermissionRequestPrivate):
+        (QWebPermissionRequestPrivate):
+        (QWebPermissionRequest::create):
+        (QWebPermissionRequest::QWebPermissionRequest):
+        (QWebPermissionRequest::setAllow):
+        * UIProcess/API/qt/qwebpermissionrequest_p.h:
+        * UIProcess/API/qt/tests/qmltests/WebView/tst_notification.qml: Added.
+        * UIProcess/API/qt/tests/qmltests/common/notification.html: Added.
+        * UIProcess/qt/QtWebPageUIClient.cpp:
+        (WebKit::QtWebPageUIClient::QtWebPageUIClient):
+        (WebKit::QtWebPageUIClient::policyForNotificationPermissionRequest):
+        (WebKit):
+        * UIProcess/qt/QtWebPageUIClient.h:
+
 2012-07-12  Sudarsana Nagineni  <[email protected]>
 
         [EFL][WK2] Browser crashes running BatteryStatus tests.

Modified: trunk/Source/WebKit2/UIProcess/API/qt/qwebpermissionrequest.cpp (122477 => 122478)


--- trunk/Source/WebKit2/UIProcess/API/qt/qwebpermissionrequest.cpp	2012-07-12 17:11:39 UTC (rev 122477)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qwebpermissionrequest.cpp	2012-07-12 17:21:06 UTC (rev 122478)
@@ -25,13 +25,13 @@
 #include <WebKit2/WKBase.h>
 #include <WebKit2/WKRetainPtr.h>
 
-
 class QWebPermissionRequestPrivate : public QSharedData {
 public:
-    QWebPermissionRequestPrivate(WKSecurityOriginRef securityOrigin, WKGeolocationPermissionRequestRef permissionRequest)
+    QWebPermissionRequestPrivate(WKSecurityOriginRef securityOrigin, WKGeolocationPermissionRequestRef geo = 0, WKNotificationPermissionRequestRef notify = 0, QWebPermissionRequest::RequestType reqType = QWebPermissionRequest::Geolocation)
         : origin(securityOrigin)
-        , type(QWebPermissionRequest::Geolocation)
-        , request(permissionRequest)
+        , geolocationRequest(geo)
+        , notificationRequest(notify)
+        , type(reqType)
         , allow(false)
     {
         WKRetainPtr<WKStringRef> url = ""
@@ -48,8 +48,9 @@
     }
 
     WKRetainPtr<WKSecurityOriginRef> origin;
+    WKRetainPtr<WKGeolocationPermissionRequestRef> geolocationRequest;
+    WKRetainPtr<WKNotificationPermissionRequestRef> notificationRequest;
     QWebPermissionRequest::RequestType type;
-    WKRetainPtr<WKGeolocationPermissionRequestRef> request;
     QtWebSecurityOrigin securityInfo;
     bool allow;
 };
@@ -59,9 +60,18 @@
     return new QWebPermissionRequest(origin, request);
 }
 
-QWebPermissionRequest::QWebPermissionRequest(WKSecurityOriginRef securityOrigin, WKGeolocationPermissionRequestRef permissionRequest, QObject* parent)
+QWebPermissionRequest* QWebPermissionRequest::create(WKSecurityOriginRef origin, WKNotificationPermissionRequestRef request)
+{
+    return new QWebPermissionRequest(origin, 0, request, QWebPermissionRequest::Notification);
+}
+
+QWebPermissionRequest::QWebPermissionRequest(WKSecurityOriginRef securityOrigin
+                                             , WKGeolocationPermissionRequestRef geo
+                                             , WKNotificationPermissionRequestRef notify
+                                             , QWebPermissionRequest::RequestType type
+                                             , QObject* parent)
     : QObject(parent)
-    , d(new QWebPermissionRequestPrivate(securityOrigin, permissionRequest))
+    , d(new QWebPermissionRequestPrivate(securityOrigin, geo, notify, type))
 {
 }
 
@@ -80,11 +90,18 @@
     switch (type()) {
     case Geolocation: {
         if (accepted)
-            WKGeolocationPermissionRequestAllow(d->request.get());
+            WKGeolocationPermissionRequestAllow(d->geolocationRequest.get());
         else
-            WKGeolocationPermissionRequestDeny(d->request.get());
+            WKGeolocationPermissionRequestDeny(d->geolocationRequest.get());
         break;
     }
+    case Notification: {
+        if (accepted)
+            WKNotificationPermissionRequestAllow(d->notificationRequest.get());
+        else
+            WKNotificationPermissionRequestDeny(d->notificationRequest.get());
+        break;
+    }
     default:
         ASSERT_NOT_REACHED();
     }

Modified: trunk/Source/WebKit2/UIProcess/API/qt/qwebpermissionrequest_p.h (122477 => 122478)


--- trunk/Source/WebKit2/UIProcess/API/qt/qwebpermissionrequest_p.h	2012-07-12 17:11:39 UTC (rev 122477)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qwebpermissionrequest_p.h	2012-07-12 17:21:06 UTC (rev 122478)
@@ -26,6 +26,7 @@
 #include <QtCore/QObject>
 #include <QtCore/qshareddata.h>
 #include <WebKit2/WKGeolocationPermissionRequest.h>
+#include <WebKit2/WKNotificationPermissionRequest.h>
 #include <WebKit2/WKSecurityOrigin.h>
 
 class QWebPermissionRequestPrivate;
@@ -39,10 +40,12 @@
 
 public:
     enum RequestType {
-        Geolocation
+        Geolocation,
+        Notification
     };
 
     static QWebPermissionRequest* create(WKSecurityOriginRef, WKGeolocationPermissionRequestRef);
+    static QWebPermissionRequest* create(WKSecurityOriginRef, WKNotificationPermissionRequestRef);
     virtual ~QWebPermissionRequest();
 
     RequestType type() const;
@@ -54,7 +57,11 @@
 
 private:
     friend class QWebPermissionRequestPrivate;
-    QWebPermissionRequest(WKSecurityOriginRef securityOrigin, WKGeolocationPermissionRequestRef permissionRequest, QObject* parent = 0);
+    QWebPermissionRequest(WKSecurityOriginRef securityOrigin
+                          , WKGeolocationPermissionRequestRef geo = 0
+                          , WKNotificationPermissionRequestRef notify = 0
+                          , QWebPermissionRequest::RequestType type = Geolocation
+                          , QObject* parent = 0);
 
 private:
     QExplicitlySharedDataPointer<QWebPermissionRequestPrivate> d;

Added: trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_notification.qml (0 => 122478)


--- trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_notification.qml	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_notification.qml	2012-07-12 17:21:06 UTC (rev 122478)
@@ -0,0 +1,55 @@
+import QtQuick 2.0
+import QtTest 1.0
+import QtWebKit 3.0
+import QtWebKit.experimental 1.0
+
+WebView {
+    id: webView
+    width: 200
+    height: 200
+
+    property bool expectedPermission: false
+
+    SignalSpy {
+        id: spy
+        target: experimental
+        signalName: "permissionRequested"
+    }
+
+    experimental.onPermissionRequested: {
+        // Must be false by default
+        if (!permission.allow) {
+           permission.allow = true
+        } else {
+           console.log("Fail: permission must be set to false")
+        }
+
+        if (permission.type == PermissionRequest.Notification) {
+            console.log("Permission is Desktop Notification")
+        }
+    }
+
+    TestCase {
+        name: "WebViewDesktopNotificationPermission"
+
+        // Delayed windowShown to workaround problems with Qt5 in debug mode.
+        when: false
+        Timer {
+            running: parent.windowShown
+            repeat: false
+            interval: 1
+            onTriggered: parent.when = true
+        }
+
+        function init() {
+            spy.clear()
+        }
+
+        function test_permissionRequest() {
+            compare(spy.count, 0)
+            webView.url = ""
+            spy.wait()
+            compare(spy.count, 1)
+        }
+    }
+}

Added: trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/common/notification.html (0 => 122478)


--- trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/common/notification.html	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/common/notification.html	2012-07-12 17:21:06 UTC (rev 122478)
@@ -0,0 +1,19 @@
+<html>
+<head>
+  <title>Desktop Notification Permission test</title>
+  <script>
+    requestPermission = function(cb) {
+      window.webkitNotifications.requestPermission(function() {
+        if (cb)
+           cb(window.webkitNotifications.checkPermission() == 0);
+      });
+    }
+    requestPermission()
+  </script>
+</head>
+
+<body>
+  Desktop Notification test
+</body>
+
+</html>

Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebPageUIClient.cpp (122477 => 122478)


--- trunk/Source/WebKit2/UIProcess/qt/QtWebPageUIClient.cpp	2012-07-12 17:11:39 UTC (rev 122477)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebPageUIClient.cpp	2012-07-12 17:21:06 UTC (rev 122478)
@@ -48,6 +48,7 @@
     uiClient.mouseDidMoveOverElement = mouseDidMoveOverElement;
     uiClient.exceededDatabaseQuota = exceededDatabaseQuota;
     uiClient.decidePolicyForGeolocationPermissionRequest = policyForGeolocationPermissionRequest;
+    uiClient.decidePolicyForNotificationPermissionRequest = policyForNotificationPermissionRequest;
     WKPageSetPageUIClient(pageRef, &uiClient);
 }
 
@@ -161,4 +162,14 @@
     toQtWebPageUIClient(clientInfo)->permissionRequest(req);
 }
 
+void QtWebPageUIClient::policyForNotificationPermissionRequest(WKPageRef page, WKSecurityOriginRef origin, WKNotificationPermissionRequestRef request, const void *clientInfo)
+{
+    if (!request)
+        return;
+
+    QWebPermissionRequest* req = QWebPermissionRequest::create(origin, request);
+    toQtWebPageUIClient(clientInfo)->permissionRequest(req);
+}
+
 } // namespace WebKit
+

Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebPageUIClient.h (122477 => 122478)


--- trunk/Source/WebKit2/UIProcess/qt/QtWebPageUIClient.h	2012-07-12 17:11:39 UTC (rev 122477)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebPageUIClient.h	2012-07-12 17:21:06 UTC (rev 122478)
@@ -59,6 +59,7 @@
     static void mouseDidMoveOverElement(WKPageRef, WKHitTestResultRef, WKEventModifiers, WKTypeRef userData, const void* clientInfo);
     static unsigned long long exceededDatabaseQuota(WKPageRef, WKFrameRef, WKSecurityOriginRef, WKStringRef databaseName, WKStringRef displayName, unsigned long long currentQuota, unsigned long long currentOriginUsage, unsigned long long currentDatabaseUsage, unsigned long long expectedUsage, const void *clientInfo);
     static void policyForGeolocationPermissionRequest(WKPageRef, WKFrameRef, WKSecurityOriginRef, WKGeolocationPermissionRequestRef, const void*);
+    static void policyForNotificationPermissionRequest(WKPageRef, WKSecurityOriginRef, WKNotificationPermissionRequestRef, const void*);
 
     QQuickWebView* m_webView;
     QUrl m_lastHoveredURL;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to