[GTK] Missing DRT AccessibilityController::addNotificationListener implementation
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 10 Sep 2013 16:20:01 +0000 (16:20 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 10 Sep 2013 16:20:01 +0000 (16:20 +0000)
https://bugs.webkit.org/show_bug.cgi?id=70606

Patch by Denis Nomiyama <d.nomiyama@samsung.com> on 2013-09-10
Reviewed by Mario Sanchez Prada.

Implemented the global notification listener for
AccessibilityController. The signal is generated by
AXObjectCache::postPlatformNotification() and received by
axObjectEventListener(). axObjectEventListener will then invoke
JSObjectCallAsFunction() with the respective callback function.

There is no additional test for this patch since its implementation will
be tested by a11y layout tests that are currently skipped (e.g. bug
98370).

* DumpRenderTree/AccessibilityController.h: Added a global notification
handler for GTK+.
* DumpRenderTree/atk/AccessibilityControllerAtk.cpp:
(AccessibilityController::AccessibilityController): Initializes the
global handler with 0.
(AccessibilityController::addNotificationListener): Creates the
notification handler and sets the notification function callback.
(AccessibilityController::removeNotificationListener): Removes the
global handler.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@155448 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/DumpRenderTree/AccessibilityController.h
Tools/DumpRenderTree/atk/AccessibilityControllerAtk.cpp

index b05d4d76f8efb16b7d4cebcf400ef901a86ae2e1..a774153ff05aafa4cf640e731fb424392171b052 100644 (file)
@@ -1,3 +1,30 @@
+2013-09-10  Denis Nomiyama  <d.nomiyama@samsung.com>
+
+        [GTK] Missing DRT AccessibilityController::addNotificationListener implementation
+        https://bugs.webkit.org/show_bug.cgi?id=70606
+
+        Reviewed by Mario Sanchez Prada.
+
+        Implemented the global notification listener for
+        AccessibilityController. The signal is generated by
+        AXObjectCache::postPlatformNotification() and received by
+        axObjectEventListener(). axObjectEventListener will then invoke
+        JSObjectCallAsFunction() with the respective callback function.
+
+        There is no additional test for this patch since its implementation will
+        be tested by a11y layout tests that are currently skipped (e.g. bug
+        98370).
+
+        * DumpRenderTree/AccessibilityController.h: Added a global notification
+        handler for GTK+.
+        * DumpRenderTree/atk/AccessibilityControllerAtk.cpp:
+        (AccessibilityController::AccessibilityController): Initializes the
+        global handler with 0.
+        (AccessibilityController::addNotificationListener): Creates the
+        notification handler and sets the notification function callback.
+        (AccessibilityController::removeNotificationListener): Removes the
+        global handler.
+
 2013-09-10  Krzysztof Czech  <k.czech@samsung.com>
 
         [ATK] Incorrect type for holding float value
index 1bb066fa0ae5f7b29d10fe5dcdac51849045fe49..0c1b6f6079c1e9d451e828ceb4a924882ff5553f 100644 (file)
@@ -35,6 +35,7 @@
 #include <windows.h>
 #endif
 #if HAVE(ACCESSIBILITY) && (PLATFORM(GTK) || PLATFORM(EFL))
+#include "AccessibilityNotificationHandlerAtk.h"
 #include <atk/atk.h>
 #endif
 
@@ -88,6 +89,10 @@ private:
 #if PLATFORM(MAC)
     RetainPtr<NotificationHandler> m_globalNotificationHandler;
 #endif
+
+#if PLATFORM(GTK) || PLATFORM(EFL)
+    RefPtr<AccessibilityNotificationHandler> m_globalNotificationHandler;
+#endif
 };
 
 #endif // AccessibilityController_h
index 48c6dd6990bfd8b11433d8afc734ea54b5612705..e5003574e1b5317464777a228b538f0d45e4128a 100644 (file)
@@ -38,6 +38,7 @@
 bool loggingAccessibilityEvents = false;
 
 AccessibilityController::AccessibilityController()
+    : m_globalNotificationHandler(0)
 {
 }
 
@@ -79,13 +80,27 @@ void AccessibilityController::setLogAccessibilityEvents(bool logAccessibilityEve
     loggingAccessibilityEvents = true;
 }
 
-bool AccessibilityController::addNotificationListener(JSObjectRef)
+bool AccessibilityController::addNotificationListener(JSObjectRef functionCallback)
 {
-    return false;
+    if (!functionCallback)
+        return false;
+
+    // Only one global notification listener.
+    if (m_globalNotificationHandler)
+        return false;
+
+    m_globalNotificationHandler = AccessibilityNotificationHandler::create();
+    m_globalNotificationHandler->setNotificationFunctionCallback(functionCallback);
+
+    return true;
 }
 
 void AccessibilityController::removeNotificationListener()
 {
+    // Programmers should not be trying to remove a listener that's already removed.
+    ASSERT(m_globalNotificationHandler);
+
+    m_globalNotificationHandler = 0;
 }
 
 AtkObject* AccessibilityController::childElementById(AtkObject* parent, const char* id)