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()