Title: [151516] trunk
Revision
151516
Author
[email protected]
Date
2013-06-12 11:57:51 -0700 (Wed, 12 Jun 2013)

Log Message

[Windows] Support Title UI Element Accessibility Attribute
https://bugs.webkit.org/show_bug.cgi?id=117530

Reviewed by Anders Carlsson.

Source/WebCore: 

Fixes: accessibility/list-item-role.html
       accessibility/hidden-legend.html

* accessibility/win/AccessibilityObjectWrapperWin.cpp:
(WebCore::AccessibilityObjectWrapper::accessibilityAttributeValue): Extend to support access
for the Title UI Element object.
* accessibility/win/AccessibilityObjectWrapperWin.h: Revise interface to use Variant output,
which is more in keeping with the Mac's 'id' method signature.

Source/WebKit/win: 

* AccessibleBase.cpp:
(AccessibleBase::attributeValue): Extend to handle Title UI Element.
* AccessibleBase.h: Revise signature to use a variant argument.
* Interfaces/AccessibleComparable.idl:  Revise interface to use variant

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (151515 => 151516)


--- trunk/Source/WebCore/ChangeLog	2013-06-12 18:53:47 UTC (rev 151515)
+++ trunk/Source/WebCore/ChangeLog	2013-06-12 18:57:51 UTC (rev 151516)
@@ -1,3 +1,19 @@
+2013-06-11  Brent Fulgham  <[email protected]>
+
+        [Windows] Support Title UI Element Accessibility Attribute
+        https://bugs.webkit.org/show_bug.cgi?id=117530
+
+        Reviewed by Anders Carlsson.
+
+        Fixes: accessibility/list-item-role.html
+               accessibility/hidden-legend.html
+
+        * accessibility/win/AccessibilityObjectWrapperWin.cpp:
+        (WebCore::AccessibilityObjectWrapper::accessibilityAttributeValue): Extend to support access
+        for the Title UI Element object.
+        * accessibility/win/AccessibilityObjectWrapperWin.h: Revise interface to use Variant output,
+        which is more in keeping with the Mac's 'id' method signature.
+
 2013-06-12  Ralph Thomas  <[email protected]>
 
         [CSS Shaders] Animations and transitions should use validated custom programs

Modified: trunk/Source/WebCore/accessibility/win/AccessibilityObjectWrapperWin.cpp (151515 => 151516)


--- trunk/Source/WebCore/accessibility/win/AccessibilityObjectWrapperWin.cpp	2013-06-12 18:53:47 UTC (rev 151515)
+++ trunk/Source/WebCore/accessibility/win/AccessibilityObjectWrapperWin.cpp	2013-06-12 18:57:51 UTC (rev 151516)
@@ -30,20 +30,39 @@
 
 #include "AXObjectCache.h"
 #include "AccessibilityObject.h"
+#include "BString.h"
 #include "HTMLNames.h"
 #include "QualifiedName.h"
 
 namespace WebCore {
 
-AtomicString AccessibilityObjectWrapper::accessibilityAttributeValue(const AtomicString& attributeName)
+void AccessibilityObjectWrapper::accessibilityAttributeValue(const AtomicString& attributeName, VARIANT* result)
 {
     // FIXME: This should be fleshed out to match the Mac version
-    
+
+    // Not a real concept on Windows, but used heavily in WebKit accessibility testing.
+    if (attributeName == "AXTitleUIElementAttribute") {
+        if (!m_object->exposesTitleUIElement())
+            return;
+
+        AccessibilityObject* obj = m_object->titleUIElement();
+        if (obj) {
+            ASSERT(V_VT(result) == VT_EMPTY);
+            V_VT(result) = VT_UNKNOWN;
+            V_UNKNOWN(result) = obj->wrapper();
+            obj->wrapper()->AddRef();
+        }
+        return;
+    }
+
     // Used by DRT to find an accessible node by its element id.
-    if (attributeName == "AXDRTElementIdAttribute")
-        return m_object->getAttribute(WebCore::HTMLNames::idAttr);
-    
-    return emptyString();
+    if (attributeName == "AXDRTElementIdAttribute") {
+        ASSERT(V_VT(result) == VT_EMPTY);
+
+        V_VT(result) = VT_BSTR;
+        V_BSTR(result) = WebCore::BString(m_object->getAttribute(WebCore::HTMLNames::idAttr)).release();
+        return;
+    }
 }
 
 

Modified: trunk/Source/WebCore/accessibility/win/AccessibilityObjectWrapperWin.h (151515 => 151516)


--- trunk/Source/WebCore/accessibility/win/AccessibilityObjectWrapperWin.h	2013-06-12 18:53:47 UTC (rev 151515)
+++ trunk/Source/WebCore/accessibility/win/AccessibilityObjectWrapperWin.h	2013-06-12 18:57:51 UTC (rev 151516)
@@ -44,7 +44,7 @@
         bool attached() const { return m_object; }
         AccessibilityObject* accessibilityObject() const { return m_object; }
 
-        AtomicString accessibilityAttributeValue(const AtomicString&);
+        void accessibilityAttributeValue(const AtomicString&, VARIANT*);
 
     protected:
         AccessibilityObjectWrapper(AccessibilityObject* obj) : m_object(obj) { }

Modified: trunk/Source/WebKit/win/AccessibleBase.cpp (151515 => 151516)


--- trunk/Source/WebKit/win/AccessibleBase.cpp	2013-06-12 18:53:47 UTC (rev 151515)
+++ trunk/Source/WebKit/win/AccessibleBase.cpp	2013-06-12 18:57:51 UTC (rev 151516)
@@ -835,15 +835,14 @@
     return S_OK;
 }
 
-HRESULT AccessibleBase::attributeValue(BSTR key, BSTR* value)
+HRESULT AccessibleBase::attributeValue(BSTR key, VARIANT* value)
 {
     if (!value)
         return E_POINTER;
 
-    AtomicString keyAtomic(_com_util::ConvertBSTRToString(key));
-    AtomicString valueAtomic = accessibilityAttributeValue(keyAtomic);
+    AtomicString keyAtomic(key, ::SysStringLen(key));
 
-    *value = BString(valueAtomic).release();
+    accessibilityAttributeValue(keyAtomic, value);
 
     return S_OK;
 }

Modified: trunk/Source/WebKit/win/AccessibleBase.h (151515 => 151516)


--- trunk/Source/WebKit/win/AccessibleBase.h	2013-06-12 18:53:47 UTC (rev 151515)
+++ trunk/Source/WebKit/win/AccessibleBase.h	2013-06-12 18:57:51 UTC (rev 151516)
@@ -94,7 +94,7 @@
 
     // IAccessibleComparable
     virtual HRESULT STDMETHODCALLTYPE isSameObject(IAccessibleComparable* other, BOOL* result);
-    virtual HRESULT STDMETHODCALLTYPE attributeValue(BSTR key, BSTR* value);
+    virtual HRESULT STDMETHODCALLTYPE attributeValue(BSTR key, VARIANT* value);
 
 protected:
     AccessibleBase(WebCore::AccessibilityObject*);

Modified: trunk/Source/WebKit/win/ChangeLog (151515 => 151516)


--- trunk/Source/WebKit/win/ChangeLog	2013-06-12 18:53:47 UTC (rev 151515)
+++ trunk/Source/WebKit/win/ChangeLog	2013-06-12 18:57:51 UTC (rev 151516)
@@ -1,3 +1,15 @@
+2013-06-12  Brent Fulgham  <[email protected]>
+
+        [Windows] Support Title UI Element Accessibility Attribute
+        https://bugs.webkit.org/show_bug.cgi?id=117530
+
+        Reviewed by Anders Carlsson.
+
+        * AccessibleBase.cpp:
+        (AccessibleBase::attributeValue): Extend to handle Title UI Element.
+        * AccessibleBase.h: Revise signature to use a variant argument.
+        * Interfaces/AccessibleComparable.idl:  Revise interface to use variant
+
 2013-06-12  Zan Dobersek  <[email protected]>
 
         Remove memoryInfoEnabled, quantizedMemoryInfoEnabled settings

Modified: trunk/Source/WebKit/win/Interfaces/AccessibleComparable.idl (151515 => 151516)


--- trunk/Source/WebKit/win/Interfaces/AccessibleComparable.idl	2013-06-12 18:53:47 UTC (rev 151515)
+++ trunk/Source/WebKit/win/Interfaces/AccessibleComparable.idl	2013-06-12 18:57:51 UTC (rev 151516)
@@ -42,5 +42,5 @@
 interface IAccessibleComparable : IAccessible
 {
     HRESULT isSameObject([in] IAccessibleComparable* other, [out, retval] BOOL* result);
-    HRESULT attributeValue([in] BSTR key, [out, retval] BSTR* value);
+    HRESULT attributeValue([in] BSTR key, [out, retval] VARIANT* value);
 }

Modified: trunk/Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp (151515 => 151516)


--- trunk/Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp	2013-06-12 18:53:47 UTC (rev 151515)
+++ trunk/Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp	2013-06-12 18:57:51 UTC (rev 151516)
@@ -35,6 +35,7 @@
 #include <WebCore/AccessibilityObjectWrapperWin.h>
 #include <WebCore/COMPtr.h>
 #include <WebKit/WebKit.h>
+#include <comutil.h>
 #include <oleacc.h>
 #include <string>
 #include <wtf/Assertions.h>
@@ -77,6 +78,8 @@
     return comparable;
 }
 
+static const _bstr_t s_AXDRTElementIdAttribute(L"AXDRTElementIdAttribute");
+
 static COMPtr<IAccessible> findAccessibleObjectById(AccessibilityUIElement parentObject, BSTR idAttribute)
 {
     COMPtr<IAccessible> parentIAccessible = parentObject.platformUIElement();
@@ -89,14 +92,17 @@
     if (!comparable)
         return 0;
 
-    BSTR value;
-    if (SUCCEEDED(comparable->attributeValue(L"AXDRTElementIdAttribute", &value))) {
-        if (VARCMP_EQ == ::VarBstrCmp(value, idAttribute, LOCALE_USER_DEFAULT, 0)) {
-            ::SysFreeString(value);
+    VARIANT value;
+    ::VariantInit(&value);
+
+    if (SUCCEEDED(comparable->attributeValue(s_AXDRTElementIdAttribute, &value))) {
+        ASSERT(V_VT(&value) == VT_BSTR);
+        if (VARCMP_EQ == ::VarBstrCmp(value.bstrVal, idAttribute, LOCALE_USER_DEFAULT, 0)) {
+            ::VariantClear(&value);
             return parentIAccessible;
         }
     }
-    ::SysFreeString(value);
+    ::VariantClear(&value);
 
     long childCount = parentObject.childrenCount();
     if (!childCount)

Modified: trunk/Tools/DumpRenderTree/win/AccessibilityUIElementWin.cpp (151515 => 151516)


--- trunk/Tools/DumpRenderTree/win/AccessibilityUIElementWin.cpp	2013-06-12 18:53:47 UTC (rev 151515)
+++ trunk/Tools/DumpRenderTree/win/AccessibilityUIElementWin.cpp	2013-06-12 18:57:51 UTC (rev 151516)
@@ -164,7 +164,37 @@
 
 AccessibilityUIElement AccessibilityUIElement::titleUIElement()
 {
-    return 0;
+    COMPtr<IAccessible> platformElement = platformUIElement();
+
+    COMPtr<IAccessibleComparable> comparable = comparableObject(platformElement.get());
+    if (!comparable)
+        return 0;
+
+    VARIANT value;
+    ::VariantInit(&value);
+    if (FAILED(comparable->attributeValue(L"AXTitleUIElementAttribute", &value))) {
+        ::VariantClear(&value);
+        return 0;
+    }
+
+    if (V_VT(&value) == VT_EMPTY) {
+        ::VariantClear(&value);
+        return 0;
+    }
+
+    ASSERT(V_VT(&value) == VT_UNKNOWN);
+
+    if (V_VT(&value) != VT_UNKNOWN) {
+        ::VariantClear(&value);
+        return 0;
+    }
+
+    COMPtr<IAccessible> titleElement(Query, value.punkVal);
+    if (value.punkVal)
+        value.punkVal->Release();
+    ::VariantClear(&value);
+
+    return titleElement;
 }
 
 AccessibilityUIElement AccessibilityUIElement::parentElement()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to