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;