diff options
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/WebKit/qt/ChangeLog | 19 | ||||
| -rw-r--r-- | Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp | 40 | ||||
| -rw-r--r-- | Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h | 9 |
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; |
