Changeset 47312 in webkit


Ignore:
Timestamp:
Aug 14, 2009 11:15:05 PM (15 years ago)
Author:
jhoneycutt@apple.com
Message:

WebKitTools: Add a mechanism for logging MSAA focus events.

Part of <rdar://problem/6218721> No MSAA focus events fired for Webkit
nightly (20866)

https://bugs.webkit.org/show_bug.cgi?id=20866

Reviewed by Oliver Hunt.

  • DumpRenderTree/AccessibilityController.cpp:

(logFocusEventsCallback):
Call the AccessibilityController's logFocusEvents() function.
(AccessibilityController::getJSClass):
Add a "logFocusEvents" function to the AccessibilityController's JS
class definition.

  • DumpRenderTree/AccessibilityController.h:

On Windows, include windows.h, and add a member variable to hold the
handle to the event hook for focus events. Add a declaration for a
function that enables logging of focus events.

  • DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:

(AccessibilityController::logFocusEvents):
Stubbed.

  • DumpRenderTree/mac/AccessibilityControllerMac.mm:

(AccessibilityController::logFocusEvents):
Stubbed.

  • DumpRenderTree/win/AccessibilityControllerWin.cpp:

(AccessibilityController::AccessibilityController):
(AccessibilityController::~AccessibilityController):
If we hooked the focus event, unhook it.
(logFocusEventProc):
When we receive a focus event, get the accessible object for the event,
and log its name to stdout.
(AccessibilityController::logFocusEvents):
Setup the focus event hook to listen for events in the current process.

LayoutTests: Add a layout test for <rdar://problem/6218721> No MSAA focus events
fired for Webkit nightly (20866)

https://bugs.webkit.org/show_bug.cgi?id=20866

Reviewed by Oliver Hunt.

  • platform/win/Skipped:

Remove the blanket skipping of accessibility/, and add the individual
tests.

  • platform/win/accessibility/focus-events-expected.txt: Added.
  • platform/win/accessibility/focus-events.html: Added.
Location:
trunk
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r47308 r47312  
     12009-08-14  Jon Honeycutt  <jhoneycutt@apple.com>
     2
     3        Add a layout test for <rdar://problem/6218721> No MSAA focus events
     4        fired for Webkit nightly (20866)
     5
     6        https://bugs.webkit.org/show_bug.cgi?id=20866
     7
     8        Reviewed by Oliver Hunt.
     9
     10        * platform/win/Skipped:
     11        Remove the blanket skipping of accessibility/, and add the individual
     12        tests.
     13
     14        * platform/win/accessibility/focus-events-expected.txt: Added.
     15        * platform/win/accessibility/focus-events.html: Added.
     16
    1172009-08-14  Dmitry Titov  <dimich@chromium.org>
    218
  • trunk/LayoutTests/platform/win/Skipped

    r47289 r47312  
    356356http/tests/xmlhttprequest/access-control-basic-non-simple-allow.html
    357357
    358 # Still need to implement AccessibilityController for DumpRenderTree on Windows
    359 accessibility
     358# Accessibility tests without results or with Mac-specific results.
     359accessibility/aria-describedby-on-input.html
     360accessibility/aria-disabled.html
     361accessibility/aria-hidden.html
     362accessibility/aria-label.html
     363accessibility/aria-labelledby-on-input.html
     364accessibility/aria-labelledby-stay-within.html
     365accessibility/aria-link-supports-press.html
     366accessibility/aria-readonly.html
     367accessibility/aria-roles.html
     368accessibility/aria-tables.html
     369accessibility/button-press-action.html
     370accessibility/canvas.html
     371accessibility/editable-webarea-context-menu-point.html
     372accessibility/iframe-bastardization.html
     373accessibility/ignore-spacer-elements.html
     374accessibility/image-map1.html
     375accessibility/image-map2.html
     376accessibility/img-aria-button-alt-tag.html
     377accessibility/input-image-alt.html
     378accessibility/input-slider.html
     379accessibility/internal-link-anchors2.html
     380accessibility/language-attribute.html
     381accessibility/legend.html
     382accessibility/listelements-detection.html
     383accessibility/lists.html
     384accessibility/nochildren-elements.html
     385accessibility/non-data-table-cell-title-ui-element.html
     386accessibility/non-native-image-crash.html
     387accessibility/onclick-handlers.html
     388accessibility/parent-element.html
     389accessibility/placeholder.html
     390accessibility/plugin.html
     391accessibility/radio-button-checkbox-size.html
     392accessibility/radio-button-group-members.html
     393accessibility/radio-button-title-label.html
     394accessibility/secure-textfield-title-ui.html
     395accessibility/table-attributes.html
     396accessibility/table-cell-spans.html
     397accessibility/table-cells.html
     398accessibility/table-detection.html
     399accessibility/table-modification-crash.html
     400accessibility/table-nofirstbody.html
     401accessibility/table-notbody.html
     402accessibility/table-one-cell.html
     403accessibility/table-sections.html
     404accessibility/table-with-aria-role.html
     405accessibility/table-with-rules.html
     406accessibility/textarea-insertion-point-line-number.html
     407accessibility/textarea-line-for-index.html
     408accessibility/textarea-selected-text-range.html
     409accessibility/th-as-title-ui.html
     410accessibility/transformed-element.html
     411accessibility/visible-elements.html
    360412
    361413# No support for print-to-pdf in Windows DRT
  • trunk/WebKitTools/ChangeLog

    r47294 r47312  
     12009-08-14  Jon Honeycutt  <jhoneycutt@apple.com>
     2
     3        Add a mechanism for logging MSAA focus events.
     4
     5        Part of <rdar://problem/6218721> No MSAA focus events fired for Webkit
     6        nightly (20866)
     7
     8        https://bugs.webkit.org/show_bug.cgi?id=20866
     9
     10        Reviewed by Oliver Hunt.
     11
     12        * DumpRenderTree/AccessibilityController.cpp:
     13        (logFocusEventsCallback):
     14        Call the AccessibilityController's logFocusEvents() function.
     15        (AccessibilityController::getJSClass):
     16        Add a "logFocusEvents" function to the AccessibilityController's JS
     17        class definition.
     18
     19        * DumpRenderTree/AccessibilityController.h:
     20        On Windows, include windows.h, and add a member variable to hold the
     21        handle to the event hook for focus events. Add a declaration for a
     22        function that enables logging of focus events.
     23
     24        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
     25        (AccessibilityController::logFocusEvents):
     26        Stubbed.
     27
     28        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
     29        (AccessibilityController::logFocusEvents):
     30        Stubbed.
     31
     32        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
     33        (AccessibilityController::AccessibilityController):
     34        (AccessibilityController::~AccessibilityController):
     35        If we hooked the focus event, unhook it.
     36        (logFocusEventProc):
     37        When we receive a focus event, get the accessible object for the event,
     38        and log its name to stdout.
     39        (AccessibilityController::logFocusEvents):
     40        Setup the focus event hook to listen for events in the current process.
     41
    1422009-08-14  Eric Seidel  <eric@webkit.org>
    243
  • trunk/WebKitTools/DumpRenderTree/AccessibilityController.cpp

    r42056 r47312  
    5353}
    5454
     55static JSValueRef logFocusEventsCallback(JSContextRef ctx, JSObjectRef, JSObjectRef thisObject, size_t, const JSValueRef[], JSValueRef*)
     56{
     57    AccessibilityController* controller = static_cast<AccessibilityController*>(JSObjectGetPrivate(thisObject));
     58    controller->logFocusEvents();
     59    return JSValueMakeUndefined(ctx);
     60}
     61
    5562JSClassRef AccessibilityController::getJSClass()
    5663{
     64    static JSStaticFunction staticFunctions[] = {
     65        { "logFocusEvents", logFocusEventsCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
     66        { 0, 0, 0 }
     67    };
     68
    5769    static JSStaticValue staticValues[] = {
    5870        { "focusedElement", getFocusedElementCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
     
    6274
    6375    static JSClassDefinition classDefinition = {
    64         0, kJSClassAttributeNone, "AccessibilityController", 0, staticValues, 0,
     76        0, kJSClassAttributeNone, "AccessibilityController", 0, staticValues, staticFunctions,
    6577        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    6678    };
  • trunk/WebKitTools/DumpRenderTree/AccessibilityController.h

    r35903 r47312  
    2828
    2929#include <JavaScriptCore/JSObjectRef.h>
     30#if PLATFORM(WIN)
     31#include <windows.h>
     32#endif
    3033
    3134class AccessibilityUIElement;
     
    4245    AccessibilityUIElement focusedElement();
    4346
     47    void logFocusEvents();
     48
    4449private:
    4550    static JSClassRef getJSClass();
     51
     52#if PLATFORM(WIN)
     53    HWINEVENTHOOK m_focusEventHook;
     54#endif
    4655};
    4756
  • trunk/WebKitTools/DumpRenderTree/gtk/AccessibilityControllerGtk.cpp

    r46952 r47312  
    6262    return AccessibilityUIElement(axObject);
    6363}
     64
     65void AccessibilityController::logFocusEvents()
     66{
     67}
  • trunk/WebKitTools/DumpRenderTree/mac/AccessibilityControllerMac.mm

    r46340 r47312  
    5454    return AccessibilityUIElement(accessibilityObject);
    5555}
     56
     57void AccessibilityController::logFocusEvents()
     58{
     59}
  • trunk/WebKitTools/DumpRenderTree/win/AccessibilityControllerWin.cpp

    r37587 r47312  
    3333#include <WebKit/WebKit.h>
    3434#include <oleacc.h>
     35#include <string>
     36
     37using namespace std;
    3538
    3639AccessibilityController::AccessibilityController()
     40    : m_focusEventHook(0)
    3741{
    3842}
     
    4044AccessibilityController::~AccessibilityController()
    4145{
     46    if (m_focusEventHook)
     47        UnhookWinEvent(m_focusEventHook);
    4248}
    4349
     
    8389    return rootAccessible;
    8490}
     91
     92static void CALLBACK logFocusEventProc(HWINEVENTHOOK hWinEventHook, DWORD event, HWND hwnd, LONG idObject, LONG idChild, DWORD, DWORD)
     93{
     94    ASSERT_ARG(event, event == EVENT_OBJECT_FOCUS);
     95
     96    // Get the accessible object for this event.
     97    COMPtr<IAccessible> parentObject;
     98
     99    VARIANT vChild;
     100    VariantInit(&vChild);
     101
     102    HRESULT hr = AccessibleObjectFromEvent(hwnd, idObject, idChild, &parentObject, &vChild);
     103    ASSERT(SUCCEEDED(hr));
     104
     105    // Get the name of the focused element, and log it to stdout.
     106    BSTR nameBSTR;
     107    hr = parentObject->get_accName(vChild, &nameBSTR);
     108    ASSERT(SUCCEEDED(hr));
     109    wstring name(nameBSTR, ::SysStringLen(nameBSTR));
     110    SysFreeString(nameBSTR);
     111
     112    printf("Received focus event for object '%S'.\n", name.c_str());
     113}
     114
     115void AccessibilityController::logFocusEvents()
     116{
     117    ASSERT(!m_focusEventHook);
     118
     119    // Ensure that accessibility is initialized for the WebView by querying for
     120    // the root accessible object.
     121    rootElement();
     122
     123    m_focusEventHook = SetWinEventHook(EVENT_OBJECT_FOCUS, EVENT_OBJECT_FOCUS, GetModuleHandle(0), logFocusEventProc, GetCurrentProcessId(), 0, WINEVENT_INCONTEXT);
     124
     125    ASSERT(m_focusEventHook);
     126}
Note: See TracChangeset for help on using the changeset viewer.