Skip to content
  • atwilson@chromium.org's avatar
    JavaScriptCore: Desktop Notifications API · bb49055e
    atwilson@chromium.org authored
    https://bugs.webkit.org/show_bug.cgi?id=25463
    
    Patch by John Gregg <johnnyg@google.com> on 2009-08-11
    Reviewed by Maciej Stachowiak.
    
    Adds ENABLE_NOTIFICATION flag.
    
    * Configurations/FeatureDefines.xcconfig:
    * wtf/Platform.h:
    
    WebCore: Desktop Notifications API
    https://bugs.webkit.org/show_bug.cgi?id=25463
    
    Patch by John Gregg <johnnyg@google.com> on 2009-08-11
    Reviewed by Maciej Stachowiak.
    
    Adds an implementation of desktop notifications, behind the compile-time
    flag ENABLE(NOTIFICATIONS).  This code simply relays calls on the JavaScript
    API through a NotificationProvider interface, which must provide the services
    to actually notify the user and manage the desktop.  This provider is injected
    into WebKit through the ChromeClient for normal page contexts and through the
    WorkerThread for worker contexts.
    
    A permissions API is defined on a per-origin basis, which allows a web page
    to check if its origin is allowed to show desktop notifications, and to request
    permission for its origin.
    
    * Configurations/FeatureDefines.xcconfig:
    * DerivedSources.cpp:
    * DerivedSources.make:
    * GNUmakefile.am:
    * WebCore.vcproj/WebCore.vcproj:
    * WebCore.vcproj/WebCoreCommon.vsprops:
    * WebCore.xcodeproj/project.pbxproj:
    * bindings/js/JSDOMWindowCustom.cpp:
    * bindings/js/JSDesktopNotificationsCustom.cpp: Added.
    (WebCore::JSNotificationCenter::requestPermission):
    (WebCore::JSNotification::addEventListener):
    (WebCore::JSNotification::removeEventListener):
    * bindings/js/JSEventTarget.cpp:
    (WebCore::toJS):
    (WebCore::toEventTarget):
    * dom/EventTarget.cpp:
    (WebCore::EventTarget::toNotification):
    * dom/EventTarget.h:
    * loader/EmptyClients.h:
    (WebCore::EmptyChromeClient::notificationPresenter):
    * notifications: Added.
    * notifications/Notification.cpp: Added.
    (WebCore::Notification::Notification):
    (WebCore::Notification::~Notification):
    (WebCore::Notification::show):
    (WebCore::Notification::cancel):
    (WebCore::Notification::ondisplay):
    (WebCore::Notification::setOndisplay):
    (WebCore::Notification::onerror):
    (WebCore::Notification::setOnerror):
    (WebCore::Notification::onclose):
    (WebCore::Notification::setOnclose):
    (WebCore::Notification::getAttributeEventListener):
    (WebCore::Notification::setAttributeEventListener):
    (WebCore::Notification::clearAttributeEventListener):
    (WebCore::Notification::dispatchDisplayEvent):
    (WebCore::Notification::dispatchErrorEvent):
    (WebCore::Notification::dispatchCloseEvent):
    (WebCore::Notification::addEventListener):
    (WebCore::Notification::removeEventListener):
    (WebCore::Notification::handleEvent):
    (WebCore::Notification::dispatchEvent):
    * notifications/Notification.h: Added.
    (WebCore::Notification::create):
    (WebCore::Notification::isHTML):
    (WebCore::Notification::url):
    (WebCore::Notification::contents):
    (WebCore::Notification::scriptExecutionContext):
    (WebCore::Notification::toNotification):
    (WebCore::Notification::refEventTarget):
    (WebCore::Notification::derefEventTarget):
    * notifications/Notification.idl: Added.
    * notifications/NotificationCenter.cpp: Added.
    (WebCore::NotificationCenter::NotificationCenter):
    (WebCore::NotificationCenter::checkPermission):
    (WebCore::NotificationCenter::requestPermission):
    * notifications/NotificationCenter.h: Added.
    (WebCore::NotificationCenter::create):
    (WebCore::NotificationCenter::createHTMLNotification):
    (WebCore::NotificationCenter::createNotification):
    (WebCore::NotificationCenter::context):
    (WebCore::NotificationCenter::presenter):
    * notifications/NotificationCenter.idl: Added.
    * notifications/NotificationContents.h: Added.
    (WebCore::NotificationContents::NotificationContents):
    (WebCore::NotificationContents::icon):
    (WebCore::NotificationContents::title):
    (WebCore::NotificationContents::body):
    * notifications/NotificationPresenter.h: Added.
    (WebCore::NotificationPresenter::):
    (WebCore::NotificationPresenter::~NotificationPresenter):
    * page/Chrome.cpp:
    (WebCore::Chrome::notificationPresenter):
    * page/Chrome.h:
    * page/ChromeClient.h:
    * page/DOMWindow.cpp:
    (WebCore::DOMWindow::clear):
    (WebCore::DOMWindow::webkitNotifications):
    * page/DOMWindow.h:
    * page/DOMWindow.idl:
    * page/Page.h:
    * workers/WorkerContext.cpp:
    (WebCore::WorkerContext::~WorkerContext):
    (WebCore::WorkerContext::webkitNotifications):
    * workers/WorkerContext.h:
    * workers/WorkerContext.idl:
    * workers/WorkerThread.h:
    (WebCore::WorkerThread::getNotificationPresenter):
    (WebCore::WorkerThread::setNotificationPresenter):
    
    WebKit/mac: Desktop Notifications API
    https://bugs.webkit.org/show_bug.cgi?id=25643
    
    Patch by John Gregg <johnnyg@google.com> on 2009-08-11
    Reviewed by Maciej Stachowiak.
    
    Adds ENABLE_NOTIFICATION flag.
    
    * Configurations/FeatureDefines.xcconfig:
    
    WebKit/win: Desktop Notifications API
    https://bugs.webkit.org/show_bug.cgi?id=25643
    
    Patch by John Gregg <johnnyg@google.com> on 2009-08-11
    Reviewed by Maciej Stachowiak.
    
    Adds test hooks for notification features to WebCoreSupport for
    use in DumpRenderTree.
    
    * Interfaces/IWebDesktopNotificationsDelegate.idl: Added.
    * Interfaces/IWebUIDelegate.idl:
    * Interfaces/WebKit.idl:
    * WebCoreSupport/WebChromeClient.cpp:
    (WebChromeClient::WebChromeClient):
    * WebCoreSupport/WebChromeClient.h:
    (WebChromeClient::notificationPresenter):
    * WebCoreSupport/WebDesktopNotificationsDelegate.cpp: Added.
    (NotificationCOMWrapper::create):
    (NotificationCOMWrapper::NotificationCOMWrapper):
    (NotificationCOMWrapper::QueryInterface):
    (NotificationCOMWrapper::AddRef):
    (NotificationCOMWrapper::Release):
    (NotificationCOMWrapper::isHTML):
    (NotificationCOMWrapper::contentsURL):
    (NotificationCOMWrapper::iconURL):
    (NotificationCOMWrapper::title):
    (NotificationCOMWrapper::text):
    (NotificationCOMWrapper::notifyDisplay):
    (NotificationCOMWrapper::notifyError):
    (NotificationCOMWrapper::notifyClose):
    (WebDesktopNotificationsDelegate::WebDesktopNotificationsDelegate):
    (WebDesktopNotificationsDelegate::show):
    (WebDesktopNotificationsDelegate::cancel):
    (WebDesktopNotificationsDelegate::notificationObjectDestroyed):
    (WebDesktopNotificationsDelegate::requestPermission):
    (WebDesktopNotificationsDelegate::checkPermission):
    (WebDesktopNotificationsDelegate::notificationDelegate):
    * WebCoreSupport/WebDesktopNotificationsDelegate.h: Added.
    * WebCoreSupport/WebInspectorDelegate.h:
    (WebInspectorDelegate::desktopNotificationsDelegate):
    * WebKit.vcproj/Interfaces.vcproj:
    * WebKit.vcproj/WebKit.vcproj:
    
    WebKitTools: Add support for desktop notifications API to DumpRenderTree,
    and support for ENABLE_NOTIFICATIONS flag to build-webkit.
    
    Patch by John Gregg <johnnyg@google.com> on 2009-08-11
    Reviewed by Maciej Stachowiak.
    
    * DumpRenderTree/LayoutTestController.cpp:
    (grantDesktopNotificationPermissionCallback):
    (LayoutTestController::staticFunctions):
    (LayoutTestController::grantDesktopNotificationPermission):
    (LayoutTestController::checkDesktopNotificationPermission):
    * DumpRenderTree/LayoutTestController.h:
    * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp: Added.
    (DRTDesktopNotificationPresenter::DRTDesktopNotificationPresenter):
    (DRTDesktopNotificationPresenter::QueryInterface):
    (DRTDesktopNotificationPresenter::AddRef):
    (DRTDesktopNotificationPresenter::Release):
    (DRTDesktopNotificationPresenter::showDesktopNotification):
    (DRTDesktopNotificationPresenter::cancelDesktopNotification):
    (DRTDesktopNotificationPresenter::notificationDestroyed):
    (DRTDesktopNotificationPresenter::checkNotificationPermission):
    (DRTDesktopNotificationPresenter::requestNotificationPermission):
    * DumpRenderTree/win/DRTDesktopNotificationPresenter.h: Added.
    * DumpRenderTree/win/DumpRenderTree.vcproj:
    * DumpRenderTree/win/UIDelegate.cpp:
    (UIDelegate::UIDelegate):
    (UIDelegate::desktopNotificationsDelegate):
    * DumpRenderTree/win/UIDelegate.h:
    * Scripts/build-webkit:
    
    LayoutTests: Desktop Notifications API
    https://bugs.webkit.org/show_bug.cgi?id=25463
    
    Patch by John Gregg <johnnyg@google.com> on 2009-08-11
    Reviewed by Maciej Stachowiak.
    
    Adding layout tests for desktop notifications.  Currently these
    are all disabled because the flag for this feature is set to 0.
    
    * fast/notifications: Added.
    * fast/notifications/notifications-check-permission-expected.txt: Added.
    * fast/notifications/notifications-check-permission.html-disabled: Added.
     - Validates that checking permission for notifications works correctly.
    * fast/notifications/notifications-display-close-events-expected.txt: Added.
    * fast/notifications/notifications-display-close-events.html-disabled: Added.
     - Validates that the display and close events are fired correctly.
    * fast/notifications/notifications-double-show-expected.txt: Added.
    * fast/notifications/notifications-double-show.html-disabled: Added.
     - Validates that the same notification object cannot be shown twice.
    * fast/notifications/notifications-request-permission-expected.txt: Added.
    * fast/notifications/notifications-request-permission.html-disabled: Added.
     - Validates that requesting permission works correctly.
    * fast/notifications/notifications-with-permission-expected.txt: Added.
    * fast/notifications/notifications-with-permission.html-disabled: Added.
     - Validates that, with permission, showing a notification works correctly.
    * fast/notifications/notifications-without-permission-expected.txt: Added.
    * fast/notifications/notifications-without-permission.html-disabled: Added.
     - Validates that, without permission, showing a notification fails.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@47056 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    bb49055e