Title: [151459] trunk
Revision
151459
Author
bfulg...@apple.com
Date
2013-06-11 12:53:06 -0700 (Tue, 11 Jun 2013)

Log Message

Source/WebCore: [Windows] Implement 'attributeValue' accessor to support testing.
https://bugs.webkit.org/show_bug.cgi?id=117513

Reviewed by Anders Carlsson.

* WebCore.vcxproj/WebCore.vcxproj: Add new implementation file.
* WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
* accessibility/win/AccessibilityObjectWrapperWin.cpp: Added.
* accessibility/win/AccessibilityObjectWrapperWin.h: Add declaration

Source/WebKit/win: [Windows] Implement 'attributeValue' accessor to support testing.
https://bugs.webkit.org/show_bug.cgi?id=117513

Reviewed by Anders Carlsson.

* AccessibleBase.cpp:
(AccessibleBase::attributeValue): Added.
* AccessibleBase.h: Added method declaration.
* Interfaces/AccessibleComparable.idl: New accessor interface.

Tools: [Windows] Implement 'attributeValue' accessor to support testing
https://bugs.webkit.org/show_bug.cgi?id=117513

Reviewed by Anders Carlsson.

* DumpRenderTree/win/AccessibilityControllerWin.cpp:
(comparableObject): Move earlier in file.
(findAccessibleObjectById): New implemenation.
(AccessibilityController::accessibleElementById): New implementation.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (151458 => 151459)


--- trunk/Source/WebCore/ChangeLog	2013-06-11 19:49:40 UTC (rev 151458)
+++ trunk/Source/WebCore/ChangeLog	2013-06-11 19:53:06 UTC (rev 151459)
@@ -1,3 +1,15 @@
+2013-06-11  Brent Fulgham  <bfulg...@apple.com>
+
+        [Windows] Implement 'attributeValue' accessor to support testing.
+        https://bugs.webkit.org/show_bug.cgi?id=117513
+
+        Reviewed by Anders Carlsson.
+
+        * WebCore.vcxproj/WebCore.vcxproj: Add new implementation file.
+        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
+        * accessibility/win/AccessibilityObjectWrapperWin.cpp: Added.
+        * accessibility/win/AccessibilityObjectWrapperWin.h: Add declaration
+
 2013-05-27  Robert Hogan  <rob...@webkit.org>
 
         Positioned Replaced Elements That Aren't RenderReplaced get Incorrect Width

Modified: trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj (151458 => 151459)


--- trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj	2013-06-11 19:49:40 UTC (rev 151458)
+++ trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj	2013-06-11 19:53:06 UTC (rev 151459)
@@ -3882,6 +3882,7 @@
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_WinCairo|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|Win32'">true</ExcludedFromBuild>
     </ClCompile>
+    <ClCompile Include="..\accessibility\win\AccessibilityObjectWrapperWin.cpp" />
     <ClCompile Include="..\accessibility\win\AccessibilityObjectWin.cpp" />
     <ClCompile Include="..\accessibility\win\AXObjectCacheWin.cpp" />
     <ClCompile Include="..\page\animation\AnimationBase.cpp" />
@@ -13532,4 +13533,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
\ No newline at end of file
+</Project>

Modified: trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters (151458 => 151459)


--- trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters	2013-06-11 19:49:40 UTC (rev 151458)
+++ trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters	2013-06-11 19:53:06 UTC (rev 151459)
@@ -687,6 +687,9 @@
     <ClCompile Include="..\accessibility\AXObjectCache.cpp">
       <Filter>accessibility</Filter>
     </ClCompile>
+    <ClCompile Include="..\accessibility\win\AccessibilityObjectWrapperWin.cpp">
+      <Filter>accessibility\win</Filter>
+    </ClCompile>
     <ClCompile Include="..\accessibility\win\AccessibilityObjectWin.cpp">
       <Filter>accessibility\win</Filter>
     </ClCompile>
@@ -2432,6 +2435,7 @@
     </ClCompile>
     <ClCompile Include="..\rendering\EllipsisBox.cpp">
       <Filter>rendering</Filter>
+    </ClCompile>
     <ClCompile Include="..\rendering\shapes\PolygonShape.cpp">
       <Filter>rendering</Filter>
     </ClCompile>
@@ -2444,7 +2448,6 @@
     <ClCompile Include="..\rendering\shapes\ShapeInsideInfo.cpp">
       <Filter>rendering</Filter>
     </ClCompile>
-    </ClCompile>
     <ClCompile Include="..\rendering\shapes\ShapeInterval.cpp">
       <Filter>rendering</Filter>
     </ClCompile>

Added: trunk/Source/WebCore/accessibility/win/AccessibilityObjectWrapperWin.cpp (0 => 151459)


--- trunk/Source/WebCore/accessibility/win/AccessibilityObjectWrapperWin.cpp	                        (rev 0)
+++ trunk/Source/WebCore/accessibility/win/AccessibilityObjectWrapperWin.cpp	2013-06-11 19:53:06 UTC (rev 151459)
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2013 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#include "config.h"
+#include "AccessibilityObjectWrapperWin.h"
+
+#if HAVE(ACCESSIBILITY)
+
+#include "AXObjectCache.h"
+#include "AccessibilityObject.h"
+#include "HTMLNames.h"
+#include "QualifiedName.h"
+
+namespace WebCore {
+
+AtomicString AccessibilityObjectWrapper::accessibilityAttributeValue(const AtomicString& attributeName)
+{
+    // FIXME: This should be fleshed out to match the Mac version
+    
+    // Used by DRT to find an accessible node by its element id.
+    if (attributeName == "AXDRTElementIdAttribute")
+        return m_object->getAttribute(WebCore::HTMLNames::idAttr);
+    
+    return emptyString();
+}
+
+
+} // namespace WebCore
+
+#endif // HAVE(ACCESSIBILITY)

Modified: trunk/Source/WebCore/accessibility/win/AccessibilityObjectWrapperWin.h (151458 => 151459)


--- trunk/Source/WebCore/accessibility/win/AccessibilityObjectWrapperWin.h	2013-06-11 19:49:40 UTC (rev 151458)
+++ trunk/Source/WebCore/accessibility/win/AccessibilityObjectWrapperWin.h	2013-06-11 19:53:06 UTC (rev 151459)
@@ -27,6 +27,8 @@
 #ifndef AccessibilityObjectWrapperWin_h
 #define AccessibilityObjectWrapperWin_h
 
+#include <wtf/text/AtomicString.h>
+
 namespace WebCore {
 
     class AccessibilityObject;
@@ -42,6 +44,8 @@
         bool attached() const { return m_object; }
         AccessibilityObject* accessibilityObject() const { return m_object; }
 
+        AtomicString accessibilityAttributeValue(const AtomicString&);
+
     protected:
         AccessibilityObjectWrapper(AccessibilityObject* obj) : m_object(obj) { }
         AccessibilityObjectWrapper() : m_object(0) { }

Modified: trunk/Source/WebKit/win/AccessibleBase.cpp (151458 => 151459)


--- trunk/Source/WebKit/win/AccessibleBase.cpp	2013-06-11 19:49:40 UTC (rev 151458)
+++ trunk/Source/WebKit/win/AccessibleBase.cpp	2013-06-11 19:53:06 UTC (rev 151459)
@@ -46,6 +46,7 @@
 #include <WebCore/RenderFrame.h>
 #include <WebCore/RenderObject.h>
 #include <WebCore/RenderView.h>
+#include <comutil.h>
 #include <oleacc.h>
 #include <wtf/RefPtr.h>
 #include <wtf/text/StringBuilder.h>
@@ -836,3 +837,16 @@
     *result = (otherAccessibleBase == this || otherAccessibleBase->m_object == m_object);
     return S_OK;
 }
+
+HRESULT AccessibleBase::attributeValue(BSTR key, BSTR* value)
+{
+    if (!value)
+        return E_POINTER;
+
+    AtomicString keyAtomic(_com_util::ConvertBSTRToString(key));
+    AtomicString valueAtomic = accessibilityAttributeValue(keyAtomic);
+
+    *value = BString(valueAtomic).release();
+
+    return S_OK;
+}

Modified: trunk/Source/WebKit/win/AccessibleBase.h (151458 => 151459)


--- trunk/Source/WebKit/win/AccessibleBase.h	2013-06-11 19:49:40 UTC (rev 151458)
+++ trunk/Source/WebKit/win/AccessibleBase.h	2013-06-11 19:53:06 UTC (rev 151459)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008, 2009, 2010 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2008, 2009, 2010, 2013 Apple Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -94,6 +94,7 @@
 
     // IAccessibleComparable
     virtual HRESULT STDMETHODCALLTYPE isSameObject(IAccessibleComparable* other, BOOL* result);
+    virtual HRESULT STDMETHODCALLTYPE attributeValue(BSTR key, BSTR* value);
 
 protected:
     AccessibleBase(WebCore::AccessibilityObject*);

Modified: trunk/Source/WebKit/win/ChangeLog (151458 => 151459)


--- trunk/Source/WebKit/win/ChangeLog	2013-06-11 19:49:40 UTC (rev 151458)
+++ trunk/Source/WebKit/win/ChangeLog	2013-06-11 19:53:06 UTC (rev 151459)
@@ -1,3 +1,15 @@
+2013-06-11  Brent Fulgham  <bfulg...@apple.com>
+
+        [Windows] Implement 'attributeValue' accessor to support testing.
+        https://bugs.webkit.org/show_bug.cgi?id=117513
+
+        Reviewed by Anders Carlsson.
+
+        * AccessibleBase.cpp:
+        (AccessibleBase::attributeValue): Added.
+        * AccessibleBase.h: Added method declaration.
+        * Interfaces/AccessibleComparable.idl: New accessor interface.
+
 2013-06-09  Brent Fulgham  <bfulg...@apple.com>
 
         [Windows] Provide MSAA mappings for more WebCore roles.

Modified: trunk/Source/WebKit/win/Interfaces/AccessibleComparable.idl (151458 => 151459)


--- trunk/Source/WebKit/win/Interfaces/AccessibleComparable.idl	2013-06-11 19:49:40 UTC (rev 151458)
+++ trunk/Source/WebKit/win/Interfaces/AccessibleComparable.idl	2013-06-11 19:53:06 UTC (rev 151459)
@@ -42,4 +42,5 @@
 interface IAccessibleComparable : IAccessible
 {
     HRESULT isSameObject([in] IAccessibleComparable* other, [out, retval] BOOL* result);
+    HRESULT attributeValue([in] BSTR key, [out, retval] BSTR* value);
 }

Modified: trunk/Tools/ChangeLog (151458 => 151459)


--- trunk/Tools/ChangeLog	2013-06-11 19:49:40 UTC (rev 151458)
+++ trunk/Tools/ChangeLog	2013-06-11 19:53:06 UTC (rev 151459)
@@ -1,3 +1,15 @@
+2013-06-11  Brent Fulgham  <bfulg...@apple.com>
+
+        [Windows] Implement 'attributeValue' accessor to support testing
+        https://bugs.webkit.org/show_bug.cgi?id=117513
+
+        Reviewed by Anders Carlsson.
+
+        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
+        (comparableObject): Move earlier in file.
+        (findAccessibleObjectById): New implemenation.
+        (AccessibilityController::accessibleElementById): New implementation.
+
 2013-06-11  Csaba Osztrogonác  <o...@webkit.org>
 
         Make WTR use its own temporary directory for application cache

Modified: trunk/Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp (151458 => 151459)


--- trunk/Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp	2013-06-11 19:49:40 UTC (rev 151458)
+++ trunk/Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp	2013-06-11 19:53:06 UTC (rev 151459)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008, 2009, 2010 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2008, 2009, 2010, 2013 Apple Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -31,11 +31,14 @@
 #include "FrameLoadDelegate.h"
 #include <_javascript_Core/JSRetainPtr.h>
 #include <_javascript_Core/JSStringRef.h>
+#include <_javascript_Core/JSStringRefBSTR.h>
+#include <WebCore/AccessibilityObjectWrapperWin.h>
 #include <WebCore/COMPtr.h>
 #include <WebKit/WebKit.h>
 #include <oleacc.h>
 #include <string>
 #include <wtf/Assertions.h>
+#include <wtf/text/AtomicString.h>
 
 using namespace std;
 
@@ -67,9 +70,63 @@
     return 0;
 }
 
+static COMPtr<IAccessibleComparable> comparableObject(const COMPtr<IServiceProvider>& serviceProvider)
+{
+    COMPtr<IAccessibleComparable> comparable;
+    serviceProvider->QueryService(SID_AccessibleComparable, __uuidof(IAccessibleComparable), reinterpret_cast<void**>(&comparable));
+    return comparable;
+}
+
+static COMPtr<IAccessible> findAccessibleObjectById(AccessibilityUIElement parentObject, BSTR idAttribute)
+{
+    COMPtr<IAccessible> parentIAccessible = parentObject.platformUIElement();
+
+    COMPtr<IServiceProvider> serviceProvider(Query, parentIAccessible);
+    if (!serviceProvider)
+        return 0;
+
+    COMPtr<IAccessibleComparable> comparable = comparableObject(serviceProvider);
+    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);
+            return parentIAccessible;
+        }
+    }
+    ::SysFreeString(value);
+
+    long childCount = parentObject.childrenCount();
+    if (!childCount)
+        return 0;
+
+    COMPtr<IAccessible> result;
+    for (long i = 0; i < childCount; ++i) {
+        AccessibilityUIElement childAtIndex = parentObject.getChildAtIndex(i);
+
+        result = findAccessibleObjectById(childAtIndex, idAttribute);
+        if (result)
+            return result;
+    }
+
+    return 0;
+}
+
 AccessibilityUIElement AccessibilityController::accessibleElementById(JSStringRef id)
 {
-    // FIXME: implement
+    AccessibilityUIElement rootAccessibilityUIElement = rootElement();
+
+    BSTR idAttribute = JSStringCopyBSTR(id);
+
+    COMPtr<IAccessible> result = findAccessibleObjectById(rootAccessibilityUIElement, idAttribute);
+
+    ::SysFreeString(idAttribute);
+
+    if (result)
+        return AccessibilityUIElement(result);
+
     return 0;
 }
 
@@ -280,13 +337,6 @@
     VariantClear(&vChild);
 }
 
-static COMPtr<IAccessibleComparable> comparableObject(const COMPtr<IServiceProvider>& serviceProvider)
-{
-    COMPtr<IAccessibleComparable> comparable;
-    serviceProvider->QueryService(SID_AccessibleComparable, __uuidof(IAccessibleComparable), reinterpret_cast<void**>(&comparable));
-    return comparable;
-}
-
 bool AccessibilityController::addNotificationListener(JSObjectRef functionCallback)
 {
     return false;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to