Changeset 102378 in webkit


Ignore:
Timestamp:
Dec 8, 2011 1:27:16 PM (12 years ago)
Author:
dmazzoni@google.com
Message:

Source/WebCore: AccessibilityController should support listening to notifications on all elements.
https://bugs.webkit.org/show_bug.cgi?id=72866

Changes accessibilitySetShouldRepostNotifications from an instance method
into a class method so that it can be used for global notification listeners,
not just for listeners on a particular object.

Reviewed by Chris Fleizach.

Test: accessibility/notification-listeners.html

  • accessibility/mac/WebAccessibilityObjectWrapper.h:
  • accessibility/mac/WebAccessibilityObjectWrapper.mm:

(+[WebAccessibilityObjectWrapper accessibilitySetShouldRepostNotifications:]):
(-[WebAccessibilityObjectWrapper accessibilityPostedNotification:]):

Tools: Accessibility: AccessibilityController should support listening to notifications on all elements.
https://bugs.webkit.org/show_bug.cgi?id=72866

Adds addNotificationListener and removeNotificationListener methods
to AccessibilityController, to listen to notifications on any element
rather than a specific element. Mac (DRT and WKTR) and Chromium (DRT)
implementations are all contained in this change.

On Mac, refactors AccessibilityNotificationHandler into its own
source file that can be used by both AccessibilityController and
AccessibilityUIElement. (Both DRT and WKTR.)

Reviewed by Chris Fleizach.

  • DumpRenderTree/AccessibilityController.cpp:

(addNotificationListenerCallback):
(removeNotificationListenerCallback):
(AccessibilityController::getJSClass):

  • DumpRenderTree/AccessibilityController.h:
  • DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
  • DumpRenderTree/chromium/AccessibilityController.cpp:

(AccessibilityController::AccessibilityController):
(AccessibilityController::notificationReceived):
(AccessibilityController::addNotificationListenerCallback):
(AccessibilityController::removeNotificationListenerCallback):

  • DumpRenderTree/chromium/AccessibilityController.h:
  • DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:

(AccessibilityController::addNotificationListener):
(AccessibilityController::removeNotificationListener):

  • DumpRenderTree/mac/AccessibilityControllerMac.mm:

(AccessibilityController::~AccessibilityController):
(AccessibilityController::addNotificationListener):
(AccessibilityController::removeNotificationListener):

  • DumpRenderTree/mac/AccessibilityNotificationHandler.h: Added.
  • DumpRenderTree/mac/AccessibilityNotificationHandler.mm: Added.

(-[NSString createJSStringRef]):
(-[AccessibilityNotificationHandler init]):
(-[AccessibilityNotificationHandler setPlatformElement:]):
(-[AccessibilityNotificationHandler dealloc]):
(-[AccessibilityNotificationHandler setCallback:]):
(-[AccessibilityNotificationHandler startObserving]):
(-[AccessibilityNotificationHandler _notificationReceived:]):

  • DumpRenderTree/mac/AccessibilityUIElementMac.mm:

(AccessibilityUIElement::addNotificationListener):

  • DumpRenderTree/win/AccessibilityControllerWin.cpp:

(notificationListenerProc):
(AccessibilityController::addNotificationListener):
(AccessibilityController::removeNotificationListener):
(AccessibilityController::winNotificationReceived):
(AccessibilityController::winAddNotificationListener):

  • DumpRenderTree/win/AccessibilityUIElementWin.cpp:

(AccessibilityUIElement::addNotificationListener):

  • WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:

(WTR::AccessibilityController::addNotificationListener):
(WTR::AccessibilityController::removeNotificationListener):

  • WebKitTestRunner/InjectedBundle/AccessibilityController.h:

(WTR::AccessibilityController::logAccessibilityEvents):

  • WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.cpp:

(WTR::AccessibilityTextMarker::AccessibilityTextMarker):

  • WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.cpp:

(WTR::AccessibilityTextMarkerRange::AccessibilityTextMarkerRange):

  • WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
  • WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm: Added.

(WTR::AccessibilityController::addNotificationListener):
(WTR::AccessibilityController::removeNotificationListener):

  • WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.h: Added.
  • WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm: Added.

(-[NSString createJSStringRef]):
(-[AccessibilityNotificationHandler init]):
(-[AccessibilityNotificationHandler setPlatformElement:]):
(-[AccessibilityNotificationHandler dealloc]):
(-[AccessibilityNotificationHandler setCallback:]):
(-[AccessibilityNotificationHandler startObserving]):
(-[AccessibilityNotificationHandler _notificationReceived:]):

  • WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:

(WTR::AccessibilityUIElement::AccessibilityUIElement):
(WTR::AccessibilityUIElement::verticalScrollbar):
(WTR::AccessibilityUIElement::addNotificationListener):

  • WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

LayoutTests: Accessibility: AccessibilityController should support listening to notifications on all elements.
https://bugs.webkit.org/show_bug.cgi?id=72866

Previously, the Mac implementation of AccessibilityUIElement.addNotificationListener
incorrectly triggered on notifications from all elements. Now it only triggers on
notifications from the correct element, and a new addNotificationListener method
in AccessibilityController can be used to trigger on notifications from all elements.

Updates 2 tests that depended on the old incorrect behavior.

Reviewed by Chris Fleizach.

  • accessibility/notification-listeners.html: Added.
  • platform/chromium/accessibility/notification-listeners-expected.txt: Added.
  • platform/gtk/Skipped:
  • platform/mac/accessibility/aria-expanded-notifications.html:
  • platform/mac/accessibility/aria-listbox-selectedchildren-change.html:
  • platform/mac/accessibility/notification-listeners-expected.txt: Added.
  • platform/win/Skipped:
Location:
trunk
Files:
5 added
24 edited
3 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r102358 r102378  
     12011-12-08  Dominic Mazzoni  <dmazzoni@google.com>
     2
     3        Accessibility: AccessibilityController should support listening to notifications on all elements.
     4        https://bugs.webkit.org/show_bug.cgi?id=72866
     5
     6        Previously, the Mac implementation of AccessibilityUIElement.addNotificationListener
     7        incorrectly triggered on notifications from all elements. Now it only triggers on
     8        notifications from the correct element, and a new addNotificationListener method
     9        in AccessibilityController can be used to trigger on notifications from all elements.
     10
     11        Updates 2 tests that depended on the old incorrect behavior.
     12
     13        Reviewed by Chris Fleizach.
     14
     15        * accessibility/notification-listeners.html: Added.
     16        * platform/chromium/accessibility/notification-listeners-expected.txt: Added.
     17        * platform/gtk/Skipped:
     18        * platform/mac/accessibility/aria-expanded-notifications.html:
     19        * platform/mac/accessibility/aria-listbox-selectedchildren-change.html:
     20        * platform/mac/accessibility/notification-listeners-expected.txt: Added.
     21        * platform/win/Skipped:
     22
    1232011-12-08  Andrey Kosyakov  <caseq@chromium.org>
    224
  • trunk/LayoutTests/platform/gtk/Skipped

    r102327 r102378  
    424424accessibility/lists.html
    425425accessibility/loading-iframe-updates-axtree.html
     426accessibility/notification-listeners.html
    426427accessibility/onclick-handlers.html
    427428accessibility/placeholder.html
  • trunk/LayoutTests/platform/mac/accessibility/aria-expanded-notifications.html

    r100488 r102378  
    3030    var notifyName = 0;
    3131    // The order of notifications should be Row Count, Row Collapsed, Row Count, Row Expanded
    32     function notifyCallback(notification) { 
     32    function notifyCallback(element, notification) { 
    3333        notifyName = notification;
    3434        document.getElementById("notifications").innerHTML += "Notification: " + notifyName + "<br>";
    3535        if (notifyCount == 3) {
    36             axTree.removeNotificationListener();
     36            accessibilityController.removeNotificationListener();
    3737            window.layoutTestController.notifyDone();
    3838        }
     
    4848        axTree = window.accessibilityController.focusedElement;
    4949
    50         var addedNotification = axTree.addNotificationListener(notifyCallback);
     50        var addedNotification = accessibilityController.addNotificationListener(notifyCallback);
    5151        shouldBe("addedNotification", "true");
    5252
  • trunk/LayoutTests/platform/mac/accessibility/aria-listbox-selectedchildren-change.html

    r99258 r102378  
    2121    var listbox = 0;
    2222    var notificationCount = 0;
    23     function ariaCallback(notification) {
     23    function ariaCallback(element, notification) {
    2424        if (notification == "AXSelectedChildrenChanged") {
    2525            notificationCount++;
     
    2727            // We should get a total of 4 live region changes.
    2828            if (notificationCount == 2) {
    29                listbox.removeNotificationListener();
     29               window.accessibilityController.removeNotificationListener();
    3030               window.layoutTestController.notifyDone();
    3131            }
     
    3939        listbox = window.accessibilityController.focusedElement;
    4040
    41         var addedNotification = listbox.addNotificationListener(ariaCallback);
     41        var addedNotification = window.accessibilityController.addNotificationListener(ariaCallback);
    4242        shouldBe("addedNotification", "true");
    4343
  • trunk/LayoutTests/platform/win/Skipped

    r102281 r102378  
    583583accessibility/non-data-table-cell-title-ui-element.html
    584584accessibility/non-native-image-crash.html
     585accessibility/notification-listeners.html
    585586accessibility/onclick-handlers.html
    586587accessibility/aria-option-role.html
  • trunk/Source/WebCore/ChangeLog

    r102375 r102378  
     12011-12-08  Dominic Mazzoni  <dmazzoni@google.com>
     2
     3        AccessibilityController should support listening to notifications on all elements.
     4        https://bugs.webkit.org/show_bug.cgi?id=72866
     5
     6        Changes accessibilitySetShouldRepostNotifications from an instance method
     7        into a class method so that it can be used for global notification listeners,
     8        not just for listeners on a particular object.
     9
     10        Reviewed by Chris Fleizach.
     11
     12        Test: accessibility/notification-listeners.html
     13
     14        * accessibility/mac/WebAccessibilityObjectWrapper.h:
     15        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
     16        (+[WebAccessibilityObjectWrapper accessibilitySetShouldRepostNotifications:]):
     17        (-[WebAccessibilityObjectWrapper accessibilityPostedNotification:]):
     18
    1192011-12-08  Vsevolod Vlasov  <vsevik@chromium.org>
    220
  • trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapper.h

    r95901 r102378  
    4242- (void)detach;
    4343- (WebCore::AccessibilityObject*)accessibilityObject;
     44+ (void)accessibilitySetShouldRepostNotifications:(BOOL)repost;
    4445
    4546// Used to inform an element when a notification is posted for it. Used by DRT.
  • trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapper.mm

    r100666 r102378  
    31783178// This is set by DRT when it wants to listen for notifications.
    31793179static BOOL accessibilityShouldRepostNotifications;
    3180 - (void)accessibilitySetShouldRepostNotifications:(BOOL)repost
     3180+ (void)accessibilitySetShouldRepostNotifications:(BOOL)repost
    31813181{
    31823182    accessibilityShouldRepostNotifications = repost;
     
    31873187    if (accessibilityShouldRepostNotifications) {
    31883188        NSDictionary* userInfo = [NSDictionary dictionaryWithObjectsAndKeys:notificationName, @"notificationName", nil];
    3189         [[NSNotificationCenter defaultCenter] postNotificationName:@"AXDRTNotification" object:nil userInfo:userInfo];
     3189        [[NSNotificationCenter defaultCenter] postNotificationName:@"AXDRTNotification" object:self userInfo:userInfo];
    31903190    }
    31913191}
  • trunk/Tools/ChangeLog

    r102363 r102378  
     12011-12-08  Dominic Mazzoni  <dmazzoni@google.com>
     2
     3        Accessibility: AccessibilityController should support listening to notifications on all elements.
     4        https://bugs.webkit.org/show_bug.cgi?id=72866
     5
     6        Adds addNotificationListener and removeNotificationListener methods
     7        to AccessibilityController, to listen to notifications on any element
     8        rather than a specific element. Mac (DRT and WKTR) and Chromium (DRT)
     9        implementations are all contained in this change.
     10
     11        On Mac, refactors AccessibilityNotificationHandler into its own
     12        source file that can be used by both AccessibilityController and
     13        AccessibilityUIElement. (Both DRT and WKTR.)
     14
     15        Reviewed by Chris Fleizach.
     16
     17        * DumpRenderTree/AccessibilityController.cpp:
     18        (addNotificationListenerCallback):
     19        (removeNotificationListenerCallback):
     20        (AccessibilityController::getJSClass):
     21        * DumpRenderTree/AccessibilityController.h:
     22        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
     23        * DumpRenderTree/chromium/AccessibilityController.cpp:
     24        (AccessibilityController::AccessibilityController):
     25        (AccessibilityController::notificationReceived):
     26        (AccessibilityController::addNotificationListenerCallback):
     27        (AccessibilityController::removeNotificationListenerCallback):
     28        * DumpRenderTree/chromium/AccessibilityController.h:
     29        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
     30        (AccessibilityController::addNotificationListener):
     31        (AccessibilityController::removeNotificationListener):
     32        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
     33        (AccessibilityController::~AccessibilityController):
     34        (AccessibilityController::addNotificationListener):
     35        (AccessibilityController::removeNotificationListener):
     36        * DumpRenderTree/mac/AccessibilityNotificationHandler.h: Added.
     37        * DumpRenderTree/mac/AccessibilityNotificationHandler.mm: Added.
     38        (-[NSString createJSStringRef]):
     39        (-[AccessibilityNotificationHandler init]):
     40        (-[AccessibilityNotificationHandler setPlatformElement:]):
     41        (-[AccessibilityNotificationHandler dealloc]):
     42        (-[AccessibilityNotificationHandler setCallback:]):
     43        (-[AccessibilityNotificationHandler startObserving]):
     44        (-[AccessibilityNotificationHandler _notificationReceived:]):
     45        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
     46        (AccessibilityUIElement::addNotificationListener):
     47        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
     48        (notificationListenerProc):
     49        (AccessibilityController::addNotificationListener):
     50        (AccessibilityController::removeNotificationListener):
     51        (AccessibilityController::winNotificationReceived):
     52        (AccessibilityController::winAddNotificationListener):
     53        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
     54        (AccessibilityUIElement::addNotificationListener):
     55        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
     56        (WTR::AccessibilityController::addNotificationListener):
     57        (WTR::AccessibilityController::removeNotificationListener):
     58        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
     59        (WTR::AccessibilityController::logAccessibilityEvents):
     60        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.cpp:
     61        (WTR::AccessibilityTextMarker::AccessibilityTextMarker):
     62        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.cpp:
     63        (WTR::AccessibilityTextMarkerRange::AccessibilityTextMarkerRange):
     64        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
     65        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm: Added.
     66        (WTR::AccessibilityController::addNotificationListener):
     67        (WTR::AccessibilityController::removeNotificationListener):
     68        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.h: Added.
     69        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm: Added.
     70        (-[NSString createJSStringRef]):
     71        (-[AccessibilityNotificationHandler init]):
     72        (-[AccessibilityNotificationHandler setPlatformElement:]):
     73        (-[AccessibilityNotificationHandler dealloc]):
     74        (-[AccessibilityNotificationHandler setCallback:]):
     75        (-[AccessibilityNotificationHandler startObserving]):
     76        (-[AccessibilityNotificationHandler _notificationReceived:]):
     77        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
     78        (WTR::AccessibilityUIElement::AccessibilityUIElement):
     79        (WTR::AccessibilityUIElement::verticalScrollbar):
     80        (WTR::AccessibilityUIElement::addNotificationListener):
     81        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
     82
    1832011-12-08  Csaba Osztrogonác  <ossy@webkit.org>
    284
  • trunk/Tools/DumpRenderTree/AccessibilityController.cpp

    r78179 r102378  
    9898}
    9999
     100static JSValueRef addNotificationListenerCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
     101{
     102    if (argumentCount != 1)
     103        return JSValueMakeBoolean(context, false);
     104   
     105    AccessibilityController* controller = static_cast<AccessibilityController*>(JSObjectGetPrivate(thisObject));
     106    JSObjectRef callback = JSValueToObject(context, arguments[0], exception);
     107    bool succeeded = controller->addNotificationListener(callback);
     108    return JSValueMakeBoolean(context, succeeded);
     109}
     110
     111static JSValueRef removeNotificationListenerCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
     112{
     113    AccessibilityController* controller = static_cast<AccessibilityController*>(JSObjectGetPrivate(thisObject));
     114    controller->removeNotificationListener();
     115    return JSValueMakeUndefined(context);
     116}
     117
    100118JSClassRef AccessibilityController::getJSClass()
    101119{
     
    106124        { "logAccessibilityEvents", logAccessibilityEventsCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
    107125        { "elementAtPoint", getElementAtPointCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
     126        { "addNotificationListener", addNotificationListenerCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
     127        { "removeNotificationListener", removeNotificationListenerCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
    108128        { 0, 0, 0 }
    109129    };
  • trunk/Tools/DumpRenderTree/AccessibilityController.h

    r91219 r102378  
    5555    void resetToConsistentState();
    5656
    57     void addNotificationListener(PlatformUIElement, JSObjectRef functionCallback);
    58     void notificationReceived(PlatformUIElement, const std::string& eventName);
     57    // Global notification listener, captures notifications on any object.
     58    bool addNotificationListener(JSObjectRef functionCallback);
     59    void removeNotificationListener();
     60
     61#if PLATFORM(WIN)
     62    // Helper methods so this class can add the listeners on behalf of AccessibilityUIElement.
     63    void winAddNotificationListener(PlatformUIElement, JSObjectRef functionCallback);
     64    void winNotificationReceived(PlatformUIElement, const std::string& eventName);
     65#endif
    5966
    6067private:
     
    7077    HashMap<PlatformUIElement, JSObjectRef> m_notificationListeners;
    7178#endif
     79
     80#if PLATFORM(MAC)
     81    RetainPtr<NotificationHandler> m_globalNotificationHandler;
     82#endif
    7283};
    7384
  • trunk/Tools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj

    r99134 r102378  
    7878                5DB9ACA00F722C3600684641 /* WebKitWeightWatcher900.ttf in Copy Font Files */ = {isa = PBXBuildFile; fileRef = 375F09790DAC3CB600C8B4E5 /* WebKitWeightWatcher900.ttf */; };
    7979                5DE8AE4413A2C15900D6A37D /* libWebCoreTestSupport.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DE8AE4313A2C15800D6A37D /* libWebCoreTestSupport.dylib */; };
     80                80045AED147718E7008290A8 /* AccessibilityNotificationHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 80045AEB147718E7008290A8 /* AccessibilityNotificationHandler.h */; };
     81                80045AEE147718E7008290A8 /* AccessibilityNotificationHandler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 80045AEC147718E7008290A8 /* AccessibilityNotificationHandler.mm */; };
    8082                8465E2C70FFA8DF2003B8342 /* PixelDumpSupport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8465E2C60FFA8DF2003B8342 /* PixelDumpSupport.cpp */; };
    8183                933BF5AB0F93FA5C000F0441 /* PlainTextController.h in Headers */ = {isa = PBXBuildFile; fileRef = 933BF5A90F93FA5C000F0441 /* PlainTextController.h */; };
     
    259261                53CBB831134E42F3001CE6A4 /* CyclicRedundancyCheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CyclicRedundancyCheck.h; sourceTree = "<group>"; };
    260262                5DE8AE4313A2C15800D6A37D /* libWebCoreTestSupport.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libWebCoreTestSupport.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
     263                80045AEB147718E7008290A8 /* AccessibilityNotificationHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AccessibilityNotificationHandler.h; path = mac/AccessibilityNotificationHandler.h; sourceTree = "<group>"; };
     264                80045AEC147718E7008290A8 /* AccessibilityNotificationHandler.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AccessibilityNotificationHandler.mm; path = mac/AccessibilityNotificationHandler.mm; sourceTree = "<group>"; };
    261265                8465E2C60FFA8DF2003B8342 /* PixelDumpSupport.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PixelDumpSupport.cpp; sourceTree = "<group>"; };
    262266                9335435F03D75502008635CE /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = WebKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
     
    439443                        isa = PBXGroup;
    440444                        children = (
     445                                80045AEB147718E7008290A8 /* AccessibilityNotificationHandler.h */,
     446                                80045AEC147718E7008290A8 /* AccessibilityNotificationHandler.mm */,
    441447                                BCD08B390E1057EF00A7D0C1 /* AccessibilityController.cpp */,
    442448                                BCD08A580E10496B00A7D0C1 /* AccessibilityController.h */,
     
    680686                                3A5626CC131CA036002BE6D9 /* StorageTrackerDelegate.h in Headers */,
    681687                                417DAA1D137B3E24007C57FB /* WebCoreTestSupport.h in Headers */,
     688                                80045AED147718E7008290A8 /* AccessibilityNotificationHandler.h in Headers */,
    682689                        );
    683690                        runOnlyForDeploymentPostprocessing = 0;
     
    880887                                29CFBA2E12273A1000BC30C0 /* AccessibilityTextMarkerMac.mm in Sources */,
    881888                                3A5626CB131CA02A002BE6D9 /* StorageTrackerDelegate.mm in Sources */,
     889                                80045AEE147718E7008290A8 /* AccessibilityNotificationHandler.mm in Sources */,
    882890                        );
    883891                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/Tools/DumpRenderTree/chromium/AccessibilityController.cpp

    r102044 r102378  
    4646
    4747    bindMethod("logAccessibilityEvents", &AccessibilityController::logAccessibilityEventsCallback);
     48    bindMethod("addNotificationListener", &AccessibilityController::addNotificationListenerCallback);
     49    bindMethod("removeNotificationListener", &AccessibilityController::removeNotificationListenerCallback);
    4850
    4951    bindProperty("focusedElement", &AccessibilityController::focusedElementGetterCallback);
     
    9496void AccessibilityController::notificationReceived(const WebKit::WebAccessibilityObject& target, const char* notificationName)
    9597{
     98    // Call notification listeners on the element.
    9699    AccessibilityUIElement* element = m_elements.getOrCreate(target);
    97100    element->notificationReceived(notificationName);
     101
     102    // Call global notification listeners.
     103    size_t callbackCount = m_notificationCallbacks.size();
     104    for (size_t i = 0; i < callbackCount; i++) {
     105        CppVariant arguments[2];
     106        arguments[0].set(*element->getAsCppVariant());
     107        arguments[1].set(notificationName);
     108        CppVariant invokeResult;
     109        m_notificationCallbacks[i].invokeDefault(arguments, 2, invokeResult);
     110    }
    98111}
    99112
     
    101114{
    102115    m_logAccessibilityEvents = true;
     116    result->setNull();
     117}
     118
     119void AccessibilityController::addNotificationListenerCallback(const CppArgumentList& arguments, CppVariant* result)
     120{
     121    if (arguments.size() < 1 || !arguments[0].isObject()) {
     122        result->setNull();
     123        return;
     124    }
     125
     126    m_notificationCallbacks.push_back(arguments[0]);
     127    result->setNull();
     128}
     129
     130void AccessibilityController::removeNotificationListenerCallback(const CppArgumentList&, CppVariant* result)
     131{
     132    // FIXME: Implement this.
    103133    result->setNull();
    104134}
  • trunk/Tools/DumpRenderTree/chromium/AccessibilityController.h

    r97128 r102378  
    6565    void logAccessibilityEventsCallback(const CppArgumentList&, CppVariant*);
    6666    void fallbackCallback(const CppArgumentList&, CppVariant*);
     67    void addNotificationListenerCallback(const CppArgumentList&, CppVariant*);
     68    void removeNotificationListenerCallback(const CppArgumentList&, CppVariant*);
    6769
    6870    void focusedElementGetterCallback(CppVariant*);
     
    7476    AccessibilityUIElementList m_elements;
    7577
     78    std::vector<CppVariant> m_notificationCallbacks;
     79
    7680    TestShell* m_shell;
    7781};
  • trunk/Tools/DumpRenderTree/gtk/AccessibilityControllerGtk.cpp

    r78244 r102378  
    9898}
    9999
    100 void AccessibilityController::addNotificationListener(PlatformUIElement, JSObjectRef)
     100bool AccessibilityController::addNotificationListener(JSObjectRef)
     101{
     102    return false;
     103}
     104
     105void AccessibilityController::removeNotificationListener()
    101106{
    102107}
    103 
    104 void AccessibilityController::notificationReceived(PlatformUIElement, const std::string&)
    105 {
    106 }
  • trunk/Tools/DumpRenderTree/mac/AccessibilityControllerMac.mm

    r80498 r102378  
    2828#import "AccessibilityController.h"
    2929
     30#import "AccessibilityNotificationHandler.h"
    3031#import "AccessibilityUIElement.h"
    3132#import <AppKit/NSColor.h>
     
    4142AccessibilityController::~AccessibilityController()
    4243{
     44    // The notification handler should be nil because removeNotificationListener() should have been called in the test.
     45    ASSERT(!m_globalNotificationHandler);
    4346}
    4447
     
    8285}
    8386
    84 void AccessibilityController::addNotificationListener(PlatformUIElement, JSObjectRef)
     87bool AccessibilityController::addNotificationListener(JSObjectRef functionCallback)
    8588{
     89    if (!functionCallback)
     90        return false;
     91 
     92    // Mac programmers should not be adding more than one global notification listener.
     93    // Other platforms may be different.
     94    if (m_globalNotificationHandler)
     95        return false;
     96    m_globalNotificationHandler = [[AccessibilityNotificationHandler alloc] init];
     97    [m_globalNotificationHandler.get() setCallback:functionCallback];
     98    [m_globalNotificationHandler.get() startObserving];
     99
     100    return true;
    86101}
    87102
    88 void AccessibilityController::notificationReceived(PlatformUIElement, const std::string&)
     103void AccessibilityController::removeNotificationListener()
    89104{
     105    // Mac programmers should not be trying to remove a listener that's already removed.
     106    ASSERT(m_globalNotificationHandler);
     107    m_globalNotificationHandler.clear();
    90108}
  • trunk/Tools/DumpRenderTree/mac/AccessibilityNotificationHandler.h

    r102377 r102378  
    11/*
    2  * Copyright (C) 2010 Google Inc. All rights reserved.
     2 * Copyright (C) 2011 Google Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2929 */
    3030
    31 #ifndef AccessibilityController_h
    32 #define AccessibilityController_h
     31#ifndef AccessibilityNotificationHandler_h
     32#define AccessibilityNotificationHandler_h
    3333
    34 #include "AccessibilityUIElement.h"
    35 #include "CppBoundClass.h"
     34#import <JavaScriptCore/JSObjectRef.h>
    3635
    37 namespace WebKit {
    38 class WebAccessibilityObject;
    39 class WebFrame;
     36@interface AccessibilityNotificationHandler : NSObject {
     37    id m_platformElement;
     38    JSObjectRef m_notificationFunctionCallback;
    4039}
    4140
    42 class TestShell;
     41- (id)init;
     42- (void)setPlatformElement:(id)platformElement;
     43- (void)setCallback:(JSObjectRef)callback;
     44- (void)startObserving;
    4345
    44 class AccessibilityController : public CppBoundClass {
    45 public:
    46     explicit AccessibilityController(TestShell*);
     46@end
    4747
    48     // Shadow to include accessibility initialization.
    49     void bindToJavascript(WebKit::WebFrame*, const WebKit::WebString& classname);
    50     void reset();
    51 
    52     void setFocusedElement(const WebKit::WebAccessibilityObject&);
    53     AccessibilityUIElement* getFocusedElement();
    54     AccessibilityUIElement* getRootElement();
    55 
    56     bool shouldLogAccessibilityEvents();
    57 
    58     void notificationReceived(const WebKit::WebAccessibilityObject& target, const char* notificationName);
    59 
    60 private:
    61     // If true, will log all accessibility notifications.
    62     bool m_logAccessibilityEvents;
    63 
    64     // Bound methods and properties
    65     void logAccessibilityEventsCallback(const CppArgumentList&, CppVariant*);
    66     void fallbackCallback(const CppArgumentList&, CppVariant*);
    67 
    68     void focusedElementGetterCallback(CppVariant*);
    69     void rootElementGetterCallback(CppVariant*);
    70 
    71     WebKit::WebAccessibilityObject m_focusedElement;
    72     WebKit::WebAccessibilityObject m_rootElement;
    73 
    74     AccessibilityUIElementList m_elements;
    75 
    76     TestShell* m_shell;
    77 };
    78 
    79 #endif // AccessibilityController_h
     48#endif // AccessibilityNotificationHandler_h
  • trunk/Tools/DumpRenderTree/mac/AccessibilityUIElementMac.mm

    r101573 r102378  
    2626#import "config.h"
    2727#import "DumpRenderTree.h"
     28#import "AccessibilityNotificationHandler.h"
    2829#import "AccessibilityUIElement.h"
    2930
     
    6162@interface NSObject (WebKitAccessibilityAdditions)
    6263- (NSArray *)accessibilityArrayAttributeValues:(NSString *)attribute index:(NSUInteger)index maxCount:(NSUInteger)maxCount;
    63 - (void)accessibilitySetShouldRepostNotifications:(BOOL)repost;
    6464- (NSUInteger)accessibilityIndexOfChild:(id)child;
    6565- (NSUInteger)accessibilityArrayAttributeCount:(NSString *)attribute;
     
    8585{
    8686    return JSStringCreateWithCFString((CFStringRef)self);
    87 }
    88 
    89 @end
    90 
    91 @interface AccessibilityNotificationHandler : NSObject
    92 {
    93     id m_platformElement;
    94     JSObjectRef m_notificationFunctionCallback;
    95 }
    96 
    97 @end
    98 
    99 @implementation AccessibilityNotificationHandler
    100 
    101 - (id)initWithPlatformElement:(id)platformElement
    102 {
    103     self = [super init];
    104 
    105     m_platformElement = platformElement;
    106    
    107     // Once an object starts requesting notifications, it's on for the duration of the program.
    108     // This is to avoid any race conditions between tests turning this flag on and off. Instead
    109     // AccessibilityNotificationHandler can just listen when they want to.
    110     [m_platformElement accessibilitySetShouldRepostNotifications:YES];
    111     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_notificationReceived:) name:@"AXDRTNotification" object:nil];
    112 
    113     return self;
    114 }
    115  
    116 - (void)dealloc
    117 {
    118     [[NSNotificationCenter defaultCenter] removeObserver:self];
    119     JSValueUnprotect([mainFrame globalContext], m_notificationFunctionCallback);
    120     m_notificationFunctionCallback = 0;
    121    
    122     [super dealloc];
    123 }
    124 
    125 - (void)_notificationReceived:(NSNotification *)notification
    126 {
    127     NSString *notificationName = [[notification userInfo] objectForKey:@"notificationName"];
    128     if (!notificationName)
    129         return;
    130    
    131     JSRetainPtr<JSStringRef> jsNotification(Adopt, [notificationName createJSStringRef]);
    132     JSValueRef argument = JSValueMakeString([mainFrame globalContext], jsNotification.get());
    133     JSObjectCallAsFunction([mainFrame globalContext], m_notificationFunctionCallback, 0, 1, &argument, 0);
    134 }
    135 
    136 - (void)setCallback:(JSObjectRef)callback
    137 {
    138     if (!callback)
    139         return;
    140  
    141     // Release the old callback.
    142     if (m_notificationFunctionCallback)
    143         JSValueUnprotect([mainFrame globalContext], m_notificationFunctionCallback);
    144    
    145     m_notificationFunctionCallback = callback;
    146     JSValueProtect([mainFrame globalContext], m_notificationFunctionCallback);
    14787}
    14888
     
    12301170    if (m_notificationHandler)
    12311171        return false;
    1232     m_notificationHandler = [[AccessibilityNotificationHandler alloc] initWithPlatformElement:platformUIElement()];
     1172    m_notificationHandler = [[AccessibilityNotificationHandler alloc] init];
     1173    [m_notificationHandler setPlatformElement:platformUIElement()];
    12331174    [m_notificationHandler setCallback:functionCallback];
     1175    [m_notificationHandler startObserving];
    12341176
    12351177    return true;
  • trunk/Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp

    r91219 r102378  
    270270    COMPtr<IAccessible> childAccessible(Query, childDispatch);
    271271
    272     sharedFrameLoadDelegate->accessibilityController()->notificationReceived(childAccessible, stringEvent(event));
     272    sharedFrameLoadDelegate->accessibilityController()->winNotificationReceived(childAccessible, stringEvent(event));
    273273
    274274    VariantClear(&vChild);
     
    282282}
    283283
    284 void AccessibilityController::notificationReceived(PlatformUIElement element, const string& eventName)
     284bool AccessibilityController::addNotificationListener(JSObjectRef functionCallback)
     285{
     286    return false;
     287}
     288
     289void AccessibilityController::removeNotificationListener()
     290{
     291}
     292
     293void AccessibilityController::winNotificationReceived(PlatformUIElement element, const string& eventName)
    285294{
    286295    for (HashMap<PlatformUIElement, JSObjectRef>::iterator it = m_notificationListeners.begin(); it != m_notificationListeners.end(); ++it) {
     
    312321}
    313322
    314 void AccessibilityController::addNotificationListener(PlatformUIElement element, JSObjectRef functionCallback)
     323void AccessibilityController::winAddNotificationListener(PlatformUIElement element, JSObjectRef functionCallback)
    315324{
    316325    if (!m_notificationsEventHook)
  • trunk/Tools/DumpRenderTree/win/AccessibilityUIElementWin.cpp

    r100892 r102378  
    614614        return false;
    615615
    616     sharedFrameLoadDelegate->accessibilityController()->addNotificationListener(m_element, functionCallback);
     616    sharedFrameLoadDelegate->accessibilityController()->winAddNotificationListener(m_element, functionCallback);
    617617    return true;
    618618}
  • trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.cpp

    r100488 r102378  
    9393    return uiElement->elementAtPoint(x, y);
    9494}
     95
     96// Unsupported methods on various platforms. As they're implemented on other platforms this list should be modified.
     97#if !PLATFORM(MAC)
     98bool AccessibilityController::addNotificationListener(JSValueRef) { return false; }
     99bool AccessibilityController::removeNotificationListener() { return false; }
     100#endif
    95101   
    96102} // namespace WTR
  • trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.h

    r100488 r102378  
    5050    PassRefPtr<AccessibilityUIElement> elementAtPoint(int x, int y);
    5151
     52    bool addNotificationListener(JSValueRef functionCallback);
     53    bool removeNotificationListener();
     54
    5255    // Here for consistency with DRT. Not implemented because they don't do anything on the Mac.
    5356    void logFocusEvents() { }
     
    5558    void logScrollingStartEvents() { }
    5659    void logAccessibilityEvents() { }
    57     void addNotificationListener(AccessibilityUIElement*, JSValueRef functionCallback) { }
    58     void notificationReceived(AccessibilityUIElement*, JSStringRef eventName) { }
    5960   
    6061    void resetToConsistentState() { }
     
    6263private:
    6364    AccessibilityController();
     65
     66#if PLATFORM(MAC)
     67    RetainPtr<NotificationHandler> m_globalNotificationHandler;
     68#endif
    6469};
    6570
  • trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl

    r100488 r102378  
    3131        AccessibilityUIElement elementAtPoint(in int x, in int y);
    3232       
    33         void addNotificationListener(in AccessibilityUIElement element, in object functionCallback);
    34         void notificationReceived(in AccessibilityUIElement element, in DOMString eventName);
     33        boolean addNotificationListener(in object functionCallback);
     34        boolean removeNotificationListener();
    3535
    3636        void logFocusEvents();
  • trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm

    r102377 r102378  
    11/*
    2  * Copyright (C) 2010 Google Inc. All rights reserved.
     2 * Copyright (C) 2011 Google Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2929 */
    3030
    31 #ifndef AccessibilityController_h
    32 #define AccessibilityController_h
     31#import "config.h"
     32#import "AccessibilityController.h"
     33#import "AccessibilityNotificationHandler.h"
    3334
    34 #include "AccessibilityUIElement.h"
    35 #include "CppBoundClass.h"
     35namespace WTR {
    3636
    37 namespace WebKit {
    38 class WebAccessibilityObject;
    39 class WebFrame;
     37bool AccessibilityController::addNotificationListener(JSValueRef functionCallback)
     38{
     39    if (!functionCallback)
     40        return false;
     41
     42    // Mac programmers should not be adding more than one global notification listener.
     43    // Other platforms may be different.
     44    if (m_globalNotificationHandler)
     45        return false;
     46    m_globalNotificationHandler = [[AccessibilityNotificationHandler alloc] init];
     47    [m_globalNotificationHandler.get() setCallback:functionCallback];
     48    [m_globalNotificationHandler.get() startObserving];
     49
     50    return true;
    4051}
    4152
    42 class TestShell;
     53bool AccessibilityController::removeNotificationListener()
     54{
     55    // Mac programmers should not be trying to remove a listener that's already removed.
     56    ASSERT(m_globalNotificationHandler);
     57    m_globalNotificationHandler.clear();
    4358
    44 class AccessibilityController : public CppBoundClass {
    45 public:
    46     explicit AccessibilityController(TestShell*);
     59    return true;
     60}
    4761
    48     // Shadow to include accessibility initialization.
    49     void bindToJavascript(WebKit::WebFrame*, const WebKit::WebString& classname);
    50     void reset();
    51 
    52     void setFocusedElement(const WebKit::WebAccessibilityObject&);
    53     AccessibilityUIElement* getFocusedElement();
    54     AccessibilityUIElement* getRootElement();
    55 
    56     bool shouldLogAccessibilityEvents();
    57 
    58     void notificationReceived(const WebKit::WebAccessibilityObject& target, const char* notificationName);
    59 
    60 private:
    61     // If true, will log all accessibility notifications.
    62     bool m_logAccessibilityEvents;
    63 
    64     // Bound methods and properties
    65     void logAccessibilityEventsCallback(const CppArgumentList&, CppVariant*);
    66     void fallbackCallback(const CppArgumentList&, CppVariant*);
    67 
    68     void focusedElementGetterCallback(CppVariant*);
    69     void rootElementGetterCallback(CppVariant*);
    70 
    71     WebKit::WebAccessibilityObject m_focusedElement;
    72     WebKit::WebAccessibilityObject m_rootElement;
    73 
    74     AccessibilityUIElementList m_elements;
    75 
    76     TestShell* m_shell;
    77 };
    78 
    79 #endif // AccessibilityController_h
     62} // namespace WTR
  • trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.h

    r102377 r102378  
    11/*
    2  * Copyright (C) 2010 Google Inc. All rights reserved.
     2 * Copyright (C) 2011 Google Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2929 */
    3030
    31 #ifndef AccessibilityController_h
    32 #define AccessibilityController_h
     31#ifndef AccessibilityNotificationHandler_h
     32#define AccessibilityNotificationHandler_h
    3333
    34 #include "AccessibilityUIElement.h"
    35 #include "CppBoundClass.h"
     34#import <JavaScriptCore/JSObjectRef.h>
    3635
    37 namespace WebKit {
    38 class WebAccessibilityObject;
    39 class WebFrame;
     36@interface AccessibilityNotificationHandler : NSObject {
     37    id m_platformElement;
     38    JSValueRef m_notificationFunctionCallback;
    4039}
    4140
    42 class TestShell;
     41- (id)init;
     42- (void)setPlatformElement:(id)platformElement;
     43- (void)setCallback:(JSValueRef)callback;
     44- (void)startObserving;
    4345
    44 class AccessibilityController : public CppBoundClass {
    45 public:
    46     explicit AccessibilityController(TestShell*);
     46@end
    4747
    48     // Shadow to include accessibility initialization.
    49     void bindToJavascript(WebKit::WebFrame*, const WebKit::WebString& classname);
    50     void reset();
    51 
    52     void setFocusedElement(const WebKit::WebAccessibilityObject&);
    53     AccessibilityUIElement* getFocusedElement();
    54     AccessibilityUIElement* getRootElement();
    55 
    56     bool shouldLogAccessibilityEvents();
    57 
    58     void notificationReceived(const WebKit::WebAccessibilityObject& target, const char* notificationName);
    59 
    60 private:
    61     // If true, will log all accessibility notifications.
    62     bool m_logAccessibilityEvents;
    63 
    64     // Bound methods and properties
    65     void logAccessibilityEventsCallback(const CppArgumentList&, CppVariant*);
    66     void fallbackCallback(const CppArgumentList&, CppVariant*);
    67 
    68     void focusedElementGetterCallback(CppVariant*);
    69     void rootElementGetterCallback(CppVariant*);
    70 
    71     WebKit::WebAccessibilityObject m_focusedElement;
    72     WebKit::WebAccessibilityObject m_rootElement;
    73 
    74     AccessibilityUIElementList m_elements;
    75 
    76     TestShell* m_shell;
    77 };
    78 
    79 #endif // AccessibilityController_h
     48#endif // AccessibilityNotificationHandler_h
  • trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm

    r101700 r102378  
    2525
    2626#import "config.h"
     27#import "AccessibilityNotificationHandler.h"
    2728#import "AccessibilityUIElement.h"
    2829#import "InjectedBundle.h"
     
    6162@interface NSObject (WebKitAccessibilityAdditions)
    6263- (NSArray *)accessibilityArrayAttributeValues:(NSString *)attribute index:(NSUInteger)index maxCount:(NSUInteger)maxCount;
    63 - (void)accessibilitySetShouldRepostNotifications:(BOOL)repost;
    6464- (NSUInteger)accessibilityIndexOfChild:(id)child;
    6565- (NSUInteger)accessibilityArrayAttributeCount:(NSString *)attribute;
     
    8585{
    8686    return JSStringCreateWithCFString((CFStringRef)self);
    87 }
    88 
    89 @end
    90 
    91 @interface AccessibilityNotificationHandler : NSObject
    92 {
    93     id m_platformElement;
    94     JSValueRef m_notificationFunctionCallback;
    95 }
    96 
    97 @end
    98 
    99 @implementation AccessibilityNotificationHandler
    100 
    101 - (id)initWithPlatformElement:(id)platformElement
    102 {
    103     self = [super init];
    104 
    105     m_platformElement = platformElement;
    106    
    107     // Once an object starts requesting notifications, it's on for the duration of the program.
    108     // This is to avoid any race conditions between tests turning this flag on and off. Instead
    109     // AccessibilityNotificationHandler can just listen when they want to.
    110     [m_platformElement accessibilitySetShouldRepostNotifications:YES];
    111     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_notificationReceived:) name:@"AXDRTNotification" object:nil];
    112 
    113     return self;
    114 }
    115  
    116 - (void)dealloc
    117 {
    118     [[NSNotificationCenter defaultCenter] removeObserver:self];
    119 
    120     WKBundleFrameRef mainFrame = WKBundlePageGetMainFrame(WTR::InjectedBundle::shared().page()->page());
    121     JSContextRef context = WKBundleFrameGetJavaScriptContext(mainFrame);
    122    
    123     JSValueUnprotect(context, m_notificationFunctionCallback);
    124     m_notificationFunctionCallback = 0;
    125    
    126     [super dealloc];
    127 }
    128 
    129 - (void)_notificationReceived:(NSNotification *)notification
    130 {
    131     NSString *notificationName = [[notification userInfo] objectForKey:@"notificationName"];
    132     if (!notificationName)
    133         return;
    134    
    135     WKBundleFrameRef mainFrame = WKBundlePageGetMainFrame(WTR::InjectedBundle::shared().page()->page());
    136     JSContextRef context = WKBundleFrameGetJavaScriptContext(mainFrame);
    137 
    138     JSRetainPtr<JSStringRef> jsNotification(Adopt, [notificationName createJSStringRef]);
    139     JSValueRef argument = JSValueMakeString(context, jsNotification.get());
    140     JSObjectCallAsFunction(context, const_cast<JSObjectRef>(m_notificationFunctionCallback), 0, 1, &argument, 0);
    141 }
    142 
    143 - (void)setCallback:(JSValueRef)callback
    144 {
    145     if (!callback)
    146         return;
    147  
    148     WKBundleFrameRef mainFrame = WKBundlePageGetMainFrame(WTR::InjectedBundle::shared().page()->page());
    149     JSContextRef context = WKBundleFrameGetJavaScriptContext(mainFrame);
    150 
    151     // Release the old callback.
    152     if (m_notificationFunctionCallback)
    153         JSValueUnprotect(context, m_notificationFunctionCallback);
    154    
    155     m_notificationFunctionCallback = callback;
    156     JSValueProtect(context, m_notificationFunctionCallback);
    15787}
    15888
     
    12481178    if (m_notificationHandler)
    12491179        return false;
    1250     m_notificationHandler = [[AccessibilityNotificationHandler alloc] initWithPlatformElement:platformUIElement()];
     1180    m_notificationHandler = [[AccessibilityNotificationHandler alloc] init];
     1181    [m_notificationHandler setPlatformElement:platformUIElement()];
    12511182    [m_notificationHandler setCallback:functionCallback];
     1183    [m_notificationHandler startObserving];
    12521184
    12531185    return true;
  • trunk/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj

    r100488 r102378  
    5151                6510A78C11EC643800410867 /* WebKitWeightWatcher900.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6510A78111EC643800410867 /* WebKitWeightWatcher900.ttf */; };
    5252                65EB85A011EC67CC0034D300 /* ActivateFonts.mm in Sources */ = {isa = PBXBuildFile; fileRef = 65EB859F11EC67CC0034D300 /* ActivateFonts.mm */; };
     53                8034C6621487636400AC32E9 /* AccessibilityControllerMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8034C6611487636400AC32E9 /* AccessibilityControllerMac.mm */; };
     54                8097338A14874A5A008156D9 /* AccessibilityNotificationHandler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8097338914874A5A008156D9 /* AccessibilityNotificationHandler.mm */; };
    5355                A664BC7613A5F3A9009A7B25 /* libWebCoreTestSupport.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 41230E16138C78BF00BCCFCA /* libWebCoreTestSupport.dylib */; };
    5456                BC14E4DB120E02D000826C0C /* GCController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC14E4D9120E02D000826C0C /* GCController.cpp */; };
     
    146148                65EB859D11EC67CC0034D300 /* ActivateFonts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ActivateFonts.h; sourceTree = "<group>"; };
    147149                65EB859F11EC67CC0034D300 /* ActivateFonts.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ActivateFonts.mm; sourceTree = "<group>"; };
     150                8034C6611487636400AC32E9 /* AccessibilityControllerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AccessibilityControllerMac.mm; path = mac/AccessibilityControllerMac.mm; sourceTree = "<group>"; };
     151                8097338814874A5A008156D9 /* AccessibilityNotificationHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AccessibilityNotificationHandler.h; path = mac/AccessibilityNotificationHandler.h; sourceTree = "<group>"; };
     152                8097338914874A5A008156D9 /* AccessibilityNotificationHandler.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AccessibilityNotificationHandler.mm; path = mac/AccessibilityNotificationHandler.mm; sourceTree = "<group>"; };
    148153                8DD76FA10486AA7600D96B5E /* WebKitTestRunner */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = WebKitTestRunner; sourceTree = BUILT_PRODUCTS_DIR; };
    149154                BC14E4D8120E02D000826C0C /* GCController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCController.h; sourceTree = "<group>"; };
     
    283288                        isa = PBXGroup;
    284289                        children = (
     290                                8034C6611487636400AC32E9 /* AccessibilityControllerMac.mm */,
     291                                8097338814874A5A008156D9 /* AccessibilityNotificationHandler.h */,
     292                                8097338914874A5A008156D9 /* AccessibilityNotificationHandler.mm */,
    285293                                29210EA2144CAAA500835BB5 /* AccessibilityController.cpp */,
    286294                                29210EA3144CAAA500835BB5 /* AccessibilityController.h */,
     
    589597                                29A8FCE2145F037B009045A6 /* AccessibilityTextMarkerRange.cpp in Sources */,
    590598                                29A8FCE5145F0464009045A6 /* AccessibilityTextMarkerRangeMac.mm in Sources */,
     599                                8097338A14874A5A008156D9 /* AccessibilityNotificationHandler.mm in Sources */,
     600                                8034C6621487636400AC32E9 /* AccessibilityControllerMac.mm in Sources */,
    591601                        );
    592602                        runOnlyForDeploymentPostprocessing = 0;
Note: See TracChangeset for help on using the changeset viewer.