summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-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;