WebKitTools/DumpRenderTree/AccessibilityUIElement.h
changeset 0 4f2f89ce4247
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebKitTools/DumpRenderTree/AccessibilityUIElement.h	Fri Sep 17 09:02:29 2010 +0300
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2008 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. 
+ */
+
+#ifndef AccessibilityUIElement_h
+#define AccessibilityUIElement_h
+
+#include <JavaScriptCore/JSObjectRef.h>
+#include <wtf/Platform.h>
+#include <wtf/Vector.h>
+
+#if PLATFORM(MAC)
+#ifdef __OBJC__
+typedef id PlatformUIElement;
+#else
+typedef struct objc_object* PlatformUIElement;
+#endif
+#elif PLATFORM(WIN)
+#undef _WINSOCKAPI_
+#define _WINSOCKAPI_ // Prevent inclusion of winsock.h in windows.h
+
+#include <oleacc.h>
+#include <WebCore/COMPtr.h>
+
+typedef COMPtr<IAccessible> PlatformUIElement;
+#elif PLATFORM(GTK)
+#include <atk/atk.h>
+typedef AtkObject* PlatformUIElement;
+#else
+typedef void* PlatformUIElement;
+#endif
+
+#if PLATFORM(MAC)
+#ifdef __OBJC__
+typedef id NotificationHandler;
+#else
+typedef struct objc_object* NotificationHandler;
+#endif
+#endif
+
+class AccessibilityUIElement {
+public:
+    AccessibilityUIElement(PlatformUIElement);
+    AccessibilityUIElement(const AccessibilityUIElement&);
+    ~AccessibilityUIElement();
+
+    PlatformUIElement platformUIElement() { return m_element; }
+
+    static JSObjectRef makeJSAccessibilityUIElement(JSContextRef, const AccessibilityUIElement&);
+
+    bool isEqual(AccessibilityUIElement* otherElement) { return platformUIElement() == otherElement->platformUIElement(); }
+    
+    void getLinkedUIElements(Vector<AccessibilityUIElement>&);
+    void getDocumentLinks(Vector<AccessibilityUIElement>&);
+    void getChildren(Vector<AccessibilityUIElement>&);
+    void getChildrenWithRange(Vector<AccessibilityUIElement>&, unsigned location, unsigned length);
+    
+    AccessibilityUIElement elementAtPoint(int x, int y);
+    AccessibilityUIElement getChildAtIndex(unsigned);
+    unsigned indexOfChild(AccessibilityUIElement*);
+    int childrenCount();
+    AccessibilityUIElement titleUIElement();
+    AccessibilityUIElement parentElement();
+
+    void takeFocus();
+    void takeSelection();
+    void addSelection();
+    void removeSelection();
+
+    // Methods - platform-independent implementations
+    JSStringRef allAttributes();
+    JSStringRef attributesOfLinkedUIElements();
+    AccessibilityUIElement linkedUIElementAtIndex(unsigned);
+    
+    JSStringRef attributesOfDocumentLinks();
+    JSStringRef attributesOfChildren();
+    JSStringRef parameterizedAttributeNames();
+    void increment();
+    void decrement();
+    void showMenu();
+    void press();
+
+    // Attributes - platform-independent implementations
+    JSStringRef stringAttributeValue(JSStringRef attribute);
+    bool boolAttributeValue(JSStringRef attribute);
+    bool isAttributeSupported(JSStringRef attribute);
+    bool isAttributeSettable(JSStringRef attribute);
+    bool isActionSupported(JSStringRef action);
+    JSStringRef role();
+    JSStringRef subrole();
+    JSStringRef roleDescription();
+    JSStringRef title();
+    JSStringRef description();
+    JSStringRef language();
+    JSStringRef stringValue();
+    JSStringRef accessibilityValue() const;
+    JSStringRef helpText() const;
+    JSStringRef orientation() const;
+    double x();
+    double y();
+    double width();
+    double height();
+    double intValue() const;
+    double minValue();
+    double maxValue();
+    JSStringRef valueDescription();
+    int insertionPointLineNumber();
+    JSStringRef selectedTextRange();
+    bool isEnabled();
+    bool isRequired() const;
+    bool isSelected() const;
+    bool isSelectable() const;
+    bool isMultiSelectable() const;
+    bool isExpanded() const;
+    bool isChecked() const;
+    bool isVisible() const;
+    bool isOffScreen() const;
+    bool isCollapsed() const;
+    bool hasPopup() const;
+    int hierarchicalLevel() const;
+    double clickPointX();
+    double clickPointY();
+    JSStringRef documentEncoding();
+    JSStringRef documentURI();
+    JSStringRef url();
+
+    // Table-specific attributes
+    JSStringRef attributesOfColumnHeaders();
+    JSStringRef attributesOfRowHeaders();
+    JSStringRef attributesOfColumns();
+    JSStringRef attributesOfRows();
+    JSStringRef attributesOfVisibleCells();
+    JSStringRef attributesOfHeader();
+    int indexInTable();
+    JSStringRef rowIndexRange();
+    JSStringRef columnIndexRange();
+    int rowCount();
+    int columnCount();
+    
+    // Tree/Outline specific attributes
+    AccessibilityUIElement selectedRowAtIndex(unsigned);
+    AccessibilityUIElement disclosedByRow();
+    AccessibilityUIElement disclosedRowAtIndex(unsigned);
+
+    // ARIA specific
+    AccessibilityUIElement ariaOwnsElementAtIndex(unsigned);
+    AccessibilityUIElement ariaFlowToElementAtIndex(unsigned);
+
+    // ARIA Drag and Drop
+    bool ariaIsGrabbed() const;
+    // A space concatentated string of all the drop effects.
+    JSStringRef ariaDropEffects() const;
+    
+    // Parameterized attributes
+    int lineForIndex(int);
+    JSStringRef boundsForRange(unsigned location, unsigned length);
+    void setSelectedTextRange(unsigned location, unsigned length);
+    JSStringRef stringForRange(unsigned location, unsigned length);
+    
+    // Table-specific
+    AccessibilityUIElement cellForColumnAndRow(unsigned column, unsigned row);
+
+    // Notifications
+    // Function callback should take one argument, the name of the notification.
+    bool addNotificationListener(JSObjectRef functionCallback);
+    // Make sure you call remove, because you can't rely on objects being deallocated in a timely fashion.
+    void removeNotificationListener();
+    
+private:
+    static JSClassRef getJSClass();
+    PlatformUIElement m_element;
+    
+    // A retained, platform specific object used to help manage notifications for this object.
+#if PLATFORM(MAC)
+    NotificationHandler m_notificationHandler;
+#endif
+};
+
+#endif // AccessibilityUIElement_h