Created
November 16, 2010 16:05
-
-
Save tronical/701979 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/WebKit/qt/Api/qwebpage.cpp b/WebKit/qt/Api/qwebpage.cpp | |
index 6152660..a29d417 100644 | |
--- a/WebKit/qt/Api/qwebpage.cpp | |
+++ b/WebKit/qt/Api/qwebpage.cpp | |
@@ -2123,7 +2123,7 @@ void QWebPage::setUserPermission(QWebFrame* frame, PermissionDomain domain, Perm | |
case NotificationsPermissionDomain: | |
#if ENABLE(NOTIFICATIONS) | |
if (policy == PermissionGranted) | |
- NotificationPresenterClientQt::notificationPresenter()->allowNotificationForFrame(frame); | |
+ NotificationPresenterClientQt::notificationPresenter()->allowNotificationForFrame(frame->d->frame); | |
#endif | |
break; | |
case GeolocationPermissionDomain: | |
diff --git a/WebKit/qt/Api/qwebpage.h b/WebKit/qt/Api/qwebpage.h | |
index ec551e5..9fa3518 100644 | |
--- a/WebKit/qt/Api/qwebpage.h | |
+++ b/WebKit/qt/Api/qwebpage.h | |
@@ -394,7 +394,6 @@ Q_SIGNALS: | |
void viewportChangeRequested(); | |
void requestPermissionFromUser(QWebFrame* frame, QWebPage::PermissionDomain domain); | |
- void checkPermissionFromUser(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy& policy); | |
void cancelRequestsForPermission(QWebFrame* frame, QWebPage::PermissionDomain domain); | |
protected: | |
diff --git a/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp b/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp | |
index 0324c0d..e58829b 100644 | |
--- a/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp | |
+++ b/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp | |
@@ -335,24 +335,13 @@ void NotificationPresenterClientQt::requestPermission(ScriptExecutionContext* co | |
NotificationPresenter::Permission NotificationPresenterClientQt::checkPermission(ScriptExecutionContext* context) | |
{ | |
- QWebPage::PermissionPolicy policy = QWebPage::PermissionUnknown; | |
- if (toPage(context) && toFrame(context)) | |
- emit toPage(context)->checkPermissionFromUser(toFrame(context), QWebPage::NotificationsPermissionDomain, policy); | |
- | |
- switch (policy) { | |
- case QWebPage::PermissionGranted: | |
- return NotificationPresenter::PermissionAllowed; | |
- case QWebPage::PermissionUnknown: | |
- return NotificationPresenter::PermissionNotAllowed; | |
- case QWebPage::PermissionDenied: | |
- return NotificationPresenter::PermissionDenied; | |
- } | |
- ASSERT_NOT_REACHED(); | |
- return NotificationPresenter::PermissionNotAllowed; | |
+ return m_cachedPermissions.value(context, NotificationPresenter::PermissionNotAllowed); | |
} | |
void NotificationPresenterClientQt::cancelRequestsForPermission(ScriptExecutionContext* context) | |
{ | |
+ m_cachedPermissions.remove(context); | |
+ | |
QHash<ScriptExecutionContext*, CallbacksInfo >::iterator iter = m_pendingPermissionRequests.find(context); | |
if (iter == m_pendingPermissionRequests.end()) | |
return; | |
@@ -372,11 +361,13 @@ void NotificationPresenterClientQt::cancelRequestsForPermission(ScriptExecutionC | |
emit page->cancelRequestsForPermission(frame, QWebPage::NotificationsPermissionDomain); | |
} | |
-void NotificationPresenterClientQt::allowNotificationForFrame(QWebFrame* frame) | |
+void NotificationPresenterClientQt::allowNotificationForFrame(Frame* frame) | |
{ | |
+ m_cachedPermissions.insert(frame->document(), NotificationPresenter::PermissionAllowed); | |
+ | |
QHash<ScriptExecutionContext*, CallbacksInfo>::iterator iter = m_pendingPermissionRequests.begin(); | |
while (iter != m_pendingPermissionRequests.end()) { | |
- if (toFrame(iter.key()) == frame) | |
+ if (iter.key() == frame->document()) | |
break; | |
} | |
diff --git a/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h b/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h | |
index 2520f6c..a501247 100644 | |
--- a/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h | |
+++ b/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h | |
@@ -48,6 +48,7 @@ class QWebPage; | |
namespace WebCore { | |
class Document; | |
+class Frame; | |
class ScriptExecutionContext; | |
class NotificationWrapper : public QObject, public QWebNotificationData { | |
@@ -95,7 +96,7 @@ public: | |
void cancel(NotificationWrapper*); | |
- void allowNotificationForFrame(QWebFrame*); | |
+ void allowNotificationForFrame(Frame*); | |
static bool dumpNotification; | |
@@ -123,6 +124,7 @@ private: | |
QList<RefPtr<VoidCallback> > m_callbacks; | |
}; | |
QHash<ScriptExecutionContext*, CallbacksInfo > m_pendingPermissionRequests; | |
+ QHash<ScriptExecutionContext*, NotificationPresenter::Permission> m_cachedPermissions; | |
NotificationsQueue m_notifications; | |
QtPlatformPlugin m_platformPlugin; | |
diff --git a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp | |
index 3e50e06..2cfe38d 100644 | |
--- a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp | |
+++ b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp | |
@@ -196,6 +196,8 @@ int LayoutTestController::windowCount() | |
void LayoutTestController::grantDesktopNotificationPermission(const QString& origin) | |
{ | |
+ QWebFrame* frame = m_drt->webPage()->mainFrame(); | |
+ m_drt->webPage()->setUserPermission(frame, QWebPage::NotificationsPermissionDomain, QWebPage::PermissionGranted); | |
m_desktopNotificationAllowedOrigins.append(origin); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment