summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@digia.com>2013-02-05 14:14:14 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-02-06 17:41:22 +0100
commit052090690fe4006427d89e09eca8f0fd67a8e7f1 (patch)
treec69d5a09bfae652a5813d39f5953e18e9c3b5b75
parentaf04e12234efbf6bba5bddf9c2cfc11f6d516ca8 (diff)
downloadqtwebkit-052090690fe4006427d89e09eca8f0fd67a8e7f1.tar.gz
[Qt][WK1] Permission request callbacks for non-legacy notifications
https://bugs.webkit.org/show_bug.cgi?id=107438 Reviewed by Jocelyn Turcotte. Tracks the new callbacks the same way legacy callbacks are tracked. No test affected yet as we are still lacking support for testing feature permission callbacks. * WebCoreSupport/NotificationPresenterClientQt.cpp: (WebCore::NotificationPresenterClientQt::requestPermission): (WebCore::NotificationPresenterClientQt::allowNotificationForFrame): * WebCoreSupport/NotificationPresenterClientQt.h: (NotificationPresenterClientQt): (CallbacksInfo): Change-Id: Ia01ec54c2d55fac59c6a245757f44ce507a3ef19 git-svn-id: http://svn.webkit.org/repository/webkit/trunk@140330 268f45cc-cd09-0410-ab3c-d52691b4dbfc Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
-rw-r--r--Source/WebKit/qt/ChangeLog19
-rw-r--r--Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp40
-rw-r--r--Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h9
3 files changed, 63 insertions, 5 deletions
diff --git a/Source/WebKit/qt/ChangeLog b/Source/WebKit/qt/ChangeLog
index f03960ceb..5a7a30d01 100644
--- a/Source/WebKit/qt/ChangeLog
+++ b/Source/WebKit/qt/ChangeLog
@@ -1,5 +1,24 @@
2013-01-21 Allan Sandfeld Jensen <allan.jensen@digia.com>
+ [Qt][WK1] Permission request callbacks for non-legacy notifications
+ https://bugs.webkit.org/show_bug.cgi?id=107438
+
+ Reviewed by Jocelyn Turcotte.
+
+ Tracks the new callbacks the same way legacy callbacks are tracked.
+
+ No test affected yet as we are still lacking support for testing
+ feature permission callbacks.
+
+ * WebCoreSupport/NotificationPresenterClientQt.cpp:
+ (WebCore::NotificationPresenterClientQt::requestPermission):
+ (WebCore::NotificationPresenterClientQt::allowNotificationForFrame):
+ * WebCoreSupport/NotificationPresenterClientQt.h:
+ (NotificationPresenterClientQt):
+ (CallbacksInfo):
+
+2013-01-21 Allan Sandfeld Jensen <allan.jensen@digia.com>
+
[Qt] Crash in gmail on enabling desktop notifications
https://bugs.webkit.org/show_bug.cgi?id=106699
diff --git a/Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp b/Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp
index 2f25b8960..d3a6d74e1 100644
--- a/Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp
+++ b/Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp
@@ -304,6 +304,7 @@ void NotificationPresenterClientQt::notificationControllerDestroyed()
{
}
+#if ENABLE(LEGACY_NOTIFICATIONS)
void NotificationPresenterClientQt::requestPermission(ScriptExecutionContext* context, PassRefPtr<VoidCallback> callback)
{
if (dumpNotification)
@@ -311,11 +312,34 @@ void NotificationPresenterClientQt::requestPermission(ScriptExecutionContext* co
QHash<ScriptExecutionContext*, CallbacksInfo >::iterator iter = m_pendingPermissionRequests.find(context);
if (iter != m_pendingPermissionRequests.end())
- iter.value().m_callbacks.append(callback);
+ iter.value().m_voidCallbacks.append(callback);
else {
RefPtr<VoidCallback> cb = callback;
CallbacksInfo info;
info.m_frame = toFrame(context);
+ info.m_voidCallbacks.append(cb);
+
+ if (toPage(context) && toFrame(context)) {
+ m_pendingPermissionRequests.insert(context, info);
+ toPage(context)->notificationsPermissionRequested(toFrame(context));
+ }
+ }
+}
+#endif
+
+#if ENABLE(NOTIFICATIONS)
+void NotificationPresenterClientQt::requestPermission(ScriptExecutionContext* context, PassRefPtr<NotificationPermissionCallback> callback)
+{
+ if (dumpNotification)
+ printf("DESKTOP NOTIFICATION PERMISSION REQUESTED: %s\n", QString(context->securityOrigin()->toString()).toUtf8().constData());
+
+ QHash<ScriptExecutionContext*, CallbacksInfo >::iterator iter = m_pendingPermissionRequests.find(context);
+ if (iter != m_pendingPermissionRequests.end())
+ iter.value().m_callbacks.append(callback);
+ else {
+ RefPtr<NotificationPermissionCallback> cb = callback;
+ CallbacksInfo info;
+ info.m_frame = toFrame(context);
info.m_callbacks.append(cb);
if (toPage(context) && toFrame(context)) {
@@ -324,6 +348,7 @@ void NotificationPresenterClientQt::requestPermission(ScriptExecutionContext* co
}
}
}
+#endif
NotificationClient::Permission NotificationPresenterClientQt::checkPermission(ScriptExecutionContext* context)
{
@@ -366,11 +391,20 @@ void NotificationPresenterClientQt::allowNotificationForFrame(Frame* frame)
if (iter == m_pendingPermissionRequests.end())
return;
- QList<RefPtr<VoidCallback> >& callbacks = iter.value().m_callbacks;
- Q_FOREACH(const RefPtr<VoidCallback>& callback, callbacks) {
+#if ENABLE(LEGACY_NOTIFICATIONS)
+ QList<RefPtr<VoidCallback> >& voidCallbacks = iter.value().m_voidCallbacks;
+ Q_FOREACH(const RefPtr<VoidCallback>& callback, voidCallbacks) {
if (callback)
callback->handleEvent();
}
+#endif
+#if ENABLE(NOTIFICATIONS)
+ QList<RefPtr<NotificationPermissionCallback> >& callbacks = iter.value().m_callbacks;
+ Q_FOREACH(const RefPtr<NotificationPermissionCallback>& callback, callbacks) {
+ if (callback)
+ callback->handleEvent(Notification::permissionString(NotificationClient::PermissionAllowed));
+ }
+#endif
m_pendingPermissionRequests.remove(iter.key());
}
diff --git a/Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h b/Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h
index 78668f35f..2c52f435a 100644
--- a/Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h
+++ b/Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h
@@ -94,7 +94,7 @@ public:
virtual void requestPermission(ScriptExecutionContext*, PassRefPtr<VoidCallback>);
#endif
#if ENABLE(NOTIFICATIONS)
- virtual void requestPermission(ScriptExecutionContext*, PassRefPtr<NotificationPermissionCallback>) { }
+ virtual void requestPermission(ScriptExecutionContext*, PassRefPtr<NotificationPermissionCallback>);
#endif
virtual NotificationClient::Permission checkPermission(ScriptExecutionContext*);
virtual void cancelRequestsForPermission(ScriptExecutionContext*);
@@ -131,7 +131,12 @@ private:
int m_clientCount;
struct CallbacksInfo {
QWebFrameAdapter* m_frame;
- QList<RefPtr<VoidCallback> > m_callbacks;
+#if ENABLE(LEGACY_NOTIFICATIONS)
+ QList<RefPtr<VoidCallback> > m_voidCallbacks;
+#endif
+#if ENABLE(NOTIFICATIONS)
+ QList<RefPtr<NotificationPermissionCallback> > m_callbacks;
+#endif
};
QHash<ScriptExecutionContext*, CallbacksInfo > m_pendingPermissionRequests;
QHash<ScriptExecutionContext*, NotificationClient::Permission> m_cachedPermissions;