[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

tkent at chromium.org tkent at chromium.org
Thu Apr 8 02:13:30 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 24cd951b43068bdf18f8fe6bae4bf1db73a0a21a
Author: tkent at chromium.org <tkent at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Mon Mar 8 05:02:43 2010 +0000

    2010-03-07  Kent Tamura  <tkent at chromium.org>
    
            Reviewed by Dimitri Glazkov.
    
            [DRT/Chromium] Add AccessibilityController and AccessibilityUIElement
            https://bugs.webkit.org/show_bug.cgi?id=35774
    
            Add AccessibilityController and AccessibilityUIElement classes,
            which are going to be used by DumpRenderTree Chromium port. These
            files are based on:
            - src/webkit/tools/test_shell/accessibility_controller.{cc,h} and
            - src/webkit/tools/test_shell/accessibility_ui_element.{cc,h}
            of Chromium rev.40492.
    
            * DumpRenderTree/chromium/AccessibilityController.cpp: Added.
            * DumpRenderTree/chromium/AccessibilityController.h: Added.
            * DumpRenderTree/chromium/AccessibilityUIElement.cpp: Added.
            * DumpRenderTree/chromium/AccessibilityUIElement.h: Added.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@55655 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index df6f16e..8cae705 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,22 @@
+2010-03-07  Kent Tamura  <tkent at chromium.org>
+
+        Reviewed by Dimitri Glazkov.
+
+        [DRT/Chromium] Add AccessibilityController and AccessibilityUIElement
+        https://bugs.webkit.org/show_bug.cgi?id=35774
+
+        Add AccessibilityController and AccessibilityUIElement classes,
+        which are going to be used by DumpRenderTree Chromium port. These
+        files are based on:
+        - src/webkit/tools/test_shell/accessibility_controller.{cc,h} and
+        - src/webkit/tools/test_shell/accessibility_ui_element.{cc,h}
+        of Chromium rev.40492.
+
+        * DumpRenderTree/chromium/AccessibilityController.cpp: Added.
+        * DumpRenderTree/chromium/AccessibilityController.h: Added.
+        * DumpRenderTree/chromium/AccessibilityUIElement.cpp: Added.
+        * DumpRenderTree/chromium/AccessibilityUIElement.h: Added.
+
 2010-03-06  Hironori Bono  <hbono at chromium.org>
 
         Reviewed by Eric Seidel.
diff --git a/WebKitTools/DumpRenderTree/chromium/AccessibilityController.cpp b/WebKitTools/DumpRenderTree/chromium/AccessibilityController.cpp
new file mode 100644
index 0000000..afe850c
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/chromium/AccessibilityController.cpp
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2010 Google 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:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * 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.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "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 THE COPYRIGHT
+ * OWNER 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 "AccessibilityController.h"
+
+#include "TestShell.h"
+#include "public/WebAccessibilityCache.h"
+#include "public/WebAccessibilityObject.h"
+#include "public/WebFrame.h"
+#include "public/WebString.h"
+#include "public/WebView.h"
+
+using namespace WebKit;
+
+AccessibilityController::AccessibilityController(TestShell* shell)
+    : m_shell(shell)
+{
+
+    bindMethod("logFocusEvents",
+        &AccessibilityController::logFocusEventsCallback);
+    bindMethod("logScrollingStartEvents",
+        &AccessibilityController::logScrollingStartEventsCallback);
+
+    bindProperty("focusedElement",
+        &AccessibilityController::focusedElementGetterCallback);
+    bindProperty("rootElement",
+        &AccessibilityController::rootElementGetterCallback);
+
+    bindFallbackMethod(&AccessibilityController::fallbackCallback);
+}
+
+void AccessibilityController::bindToJavascript(WebFrame* frame, const WebString& classname)
+{
+    WebAccessibilityCache::enableAccessibility();
+    CppBoundClass::bindToJavascript(frame, classname);
+}
+
+void AccessibilityController::reset()
+{
+    m_rootElement = WebAccessibilityObject();
+    m_focusedElement = WebAccessibilityObject();
+    m_elements.clear();
+}
+
+void AccessibilityController::setFocusedElement(const WebAccessibilityObject& focusedElement)
+{
+    m_focusedElement = focusedElement;
+}
+
+AccessibilityUIElement* AccessibilityController::getFocusedElement()
+{
+    if (m_focusedElement.isNull())
+        m_focusedElement = m_shell->webView()->accessibilityObject();
+    return m_elements.create(m_focusedElement);
+}
+
+AccessibilityUIElement* AccessibilityController::getRootElement()
+{
+    if (m_rootElement.isNull())
+        m_rootElement = m_shell->webView()->accessibilityObject();
+    return m_elements.createRoot(m_rootElement);
+}
+
+void AccessibilityController::logFocusEventsCallback(const CppArgumentList&, CppVariant* result)
+{
+    // As of r49031, this is not being used upstream.
+    result->setNull();
+}
+
+void AccessibilityController::logScrollingStartEventsCallback(const CppArgumentList&, CppVariant* result)
+{
+    // As of r49031, this is not being used upstream.
+    result->setNull();
+}
+
+void AccessibilityController::focusedElementGetterCallback(CppVariant* result)
+{
+    result->set(*(getFocusedElement()->getAsCppVariant()));
+}
+
+void AccessibilityController::rootElementGetterCallback(CppVariant* result)
+{
+    result->set(*(getRootElement()->getAsCppVariant()));
+}
+
+void AccessibilityController::fallbackCallback(const CppArgumentList&, CppVariant* result)
+{
+    printf("CONSOLE MESSAGE: JavaScript ERROR: unknown method called on "
+           "AccessibilityController\n");
+    result->setNull();
+}
diff --git a/WebKitTools/DumpRenderTree/chromium/AccessibilityController.h b/WebKitTools/DumpRenderTree/chromium/AccessibilityController.h
new file mode 100644
index 0000000..3cde7cc
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/chromium/AccessibilityController.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2010 Google 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:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * 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.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "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 THE COPYRIGHT
+ * OWNER 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 AccessibilityController_h
+#define AccessibilityController_h
+
+#include "AccessibilityUIElement.h"
+#include "CppBoundClass.h"
+
+namespace WebKit {
+class WebAccessibilityObject;
+class WebFrame;
+}
+
+class TestShell;
+
+class AccessibilityController : public CppBoundClass {
+public:
+    explicit AccessibilityController(TestShell*);
+
+    // Shadow to include accessibility initialization.
+    void bindToJavascript(WebKit::WebFrame*, const WebKit::WebString& classname);
+    void reset();
+
+    void setFocusedElement(const WebKit::WebAccessibilityObject&);
+    AccessibilityUIElement* getFocusedElement();
+    AccessibilityUIElement* getRootElement();
+
+private:
+    // Bound methods and properties
+    void logFocusEventsCallback(const CppArgumentList&, CppVariant*);
+    void logScrollingStartEventsCallback(const CppArgumentList&, CppVariant*);
+    void fallbackCallback(const CppArgumentList&, CppVariant*);
+
+    void focusedElementGetterCallback(CppVariant*);
+    void rootElementGetterCallback(CppVariant*);
+
+    WebKit::WebAccessibilityObject m_focusedElement;
+    WebKit::WebAccessibilityObject m_rootElement;
+
+    AccessibilityUIElementList m_elements;
+
+    TestShell* m_shell;
+};
+
+#endif // AccessibilityController_h
diff --git a/WebKitTools/DumpRenderTree/chromium/AccessibilityUIElement.cpp b/WebKitTools/DumpRenderTree/chromium/AccessibilityUIElement.cpp
new file mode 100644
index 0000000..8698e25
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/chromium/AccessibilityUIElement.cpp
@@ -0,0 +1,585 @@
+/*
+ * Copyright (C) 2010 Google 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:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * 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.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "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 THE COPYRIGHT
+ * OWNER 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 "AccessibilityUIElement.h"
+
+#include "public/WebAccessibilityObject.h"
+#include "public/WebCString.h"
+#include "public/WebString.h"
+#include <wtf/Assertions.h>
+
+using namespace WebKit;
+using namespace std;
+
+// Map role value to string, matching Safari/Mac platform implementation to
+// avoid rebaselining layout tests.
+static string roleToString(WebAccessibilityRole role)
+{
+    string result = "AXRole: AX";
+    switch (role) {
+    case WebAccessibilityRoleButton:
+        return result.append("Button");
+    case WebAccessibilityRoleRadioButton:
+        return result.append("RadioButton");
+    case WebAccessibilityRoleCheckBox:
+        return result.append("CheckBox");
+    case WebAccessibilityRoleSlider:
+        return result.append("Slider");
+    case WebAccessibilityRoleTabGroup:
+        return result.append("TabGroup");
+    case WebAccessibilityRoleTextField:
+        return result.append("TextField");
+    case WebAccessibilityRoleStaticText:
+        return result.append("StaticText");
+    case WebAccessibilityRoleTextArea:
+        return result.append("TextArea");
+    case WebAccessibilityRoleScrollArea:
+        return result.append("ScrollArea");
+    case WebAccessibilityRolePopUpButton:
+        return result.append("PopUpButton");
+    case WebAccessibilityRoleMenuButton:
+        return result.append("MenuButton");
+    case WebAccessibilityRoleTable:
+        return result.append("Table");
+    case WebAccessibilityRoleApplication:
+        return result.append("Application");
+    case WebAccessibilityRoleGroup:
+        return result.append("Group");
+    case WebAccessibilityRoleRadioGroup:
+        return result.append("RadioGroup");
+    case WebAccessibilityRoleList:
+        return result.append("List");
+    case WebAccessibilityRoleScrollBar:
+        return result.append("ScrollBar");
+    case WebAccessibilityRoleValueIndicator:
+        return result.append("ValueIndicator");
+    case WebAccessibilityRoleImage:
+        return result.append("Image");
+    case WebAccessibilityRoleMenuBar:
+        return result.append("MenuBar");
+    case WebAccessibilityRoleMenu:
+        return result.append("Menu");
+    case WebAccessibilityRoleMenuItem:
+        return result.append("MenuItem");
+    case WebAccessibilityRoleColumn:
+        return result.append("Column");
+    case WebAccessibilityRoleRow:
+        return result.append("Row");
+    case WebAccessibilityRoleToolbar:
+        return result.append("Toolbar");
+    case WebAccessibilityRoleBusyIndicator:
+        return result.append("BusyIndicator");
+    case WebAccessibilityRoleProgressIndicator:
+        return result.append("ProgressIndicator");
+    case WebAccessibilityRoleWindow:
+        return result.append("Window");
+    case WebAccessibilityRoleDrawer:
+        return result.append("Drawer");
+    case WebAccessibilityRoleSystemWide:
+        return result.append("SystemWide");
+    case WebAccessibilityRoleOutline:
+        return result.append("Outline");
+    case WebAccessibilityRoleIncrementor:
+        return result.append("Incrementor");
+    case WebAccessibilityRoleBrowser:
+        return result.append("Browser");
+    case WebAccessibilityRoleComboBox:
+        return result.append("ComboBox");
+    case WebAccessibilityRoleSplitGroup:
+        return result.append("SplitGroup");
+    case WebAccessibilityRoleSplitter:
+        return result.append("Splitter");
+    case WebAccessibilityRoleColorWell:
+        return result.append("ColorWell");
+    case WebAccessibilityRoleGrowArea:
+        return result.append("GrowArea");
+    case WebAccessibilityRoleSheet:
+        return result.append("Sheet");
+    case WebAccessibilityRoleHelpTag:
+        return result.append("HelpTag");
+    case WebAccessibilityRoleMatte:
+        return result.append("Matte");
+    case WebAccessibilityRoleRuler:
+        return result.append("Ruler");
+    case WebAccessibilityRoleRulerMarker:
+        return result.append("RulerMarker");
+    case WebAccessibilityRoleLink:
+        return result.append("Link");
+    case WebAccessibilityRoleDisclosureTriangle:
+        return result.append("DisclosureTriangle");
+    case WebAccessibilityRoleGrid:
+        return result.append("Grid");
+    case WebAccessibilityRoleCell:
+        return result.append("Cell");
+    case WebAccessibilityRoleColumnHeader:
+        return result.append("ColumnHeader");
+    case WebAccessibilityRoleRowHeader:
+        return result.append("RowHeader");
+    case WebAccessibilityRoleWebCoreLink:
+        // Maps to Link role.
+        return result.append("Link");
+    case WebAccessibilityRoleImageMapLink:
+        return result.append("ImageMapLink");
+    case WebAccessibilityRoleImageMap:
+        return result.append("ImageMap");
+    case WebAccessibilityRoleListMarker:
+        return result.append("ListMarker");
+    case WebAccessibilityRoleWebArea:
+        return result.append("WebArea");
+    case WebAccessibilityRoleHeading:
+        return result.append("Heading");
+    case WebAccessibilityRoleListBox:
+        return result.append("ListBox");
+    case WebAccessibilityRoleListBoxOption:
+        return result.append("ListBoxOption");
+    case WebAccessibilityRoleTableHeaderContainer:
+        return result.append("TableHeaderContainer");
+    case WebAccessibilityRoleDefinitionListTerm:
+        return result.append("DefinitionListTerm");
+    case WebAccessibilityRoleDefinitionListDefinition:
+        return result.append("DefinitionListDefinition");
+    case WebAccessibilityRoleAnnotation:
+        return result.append("Annotation");
+    case WebAccessibilityRoleSliderThumb:
+        return result.append("SliderThumb");
+    case WebAccessibilityRoleLandmarkApplication:
+        return result.append("LandmarkApplication");
+    case WebAccessibilityRoleLandmarkBanner:
+        return result.append("LandmarkBanner");
+    case WebAccessibilityRoleLandmarkComplementary:
+        return result.append("LandmarkComplementary");
+    case WebAccessibilityRoleLandmarkContentInfo:
+        return result.append("LandmarkContentInfo");
+    case WebAccessibilityRoleLandmarkMain:
+        return result.append("LandmarkMain");
+    case WebAccessibilityRoleLandmarkNavigation:
+        return result.append("LandmarkNavigation");
+    case WebAccessibilityRoleLandmarkSearch:
+        return result.append("LandmarkSearch");
+    case WebAccessibilityRoleApplicationLog:
+        return result.append("ApplicationLog");
+    case WebAccessibilityRoleApplicationMarquee:
+        return result.append("ApplicationMarquee");
+    case WebAccessibilityRoleApplicationStatus:
+        return result.append("ApplicationStatus");
+    case WebAccessibilityRoleApplicationTimer:
+        return result.append("ApplicationTimer");
+    case WebAccessibilityRoleDocument:
+        return result.append("Document");
+    case WebAccessibilityRoleDocumentArticle:
+        return result.append("DocumentArticle");
+    case WebAccessibilityRoleDocumentNote:
+        return result.append("DocumentNote");
+    case WebAccessibilityRoleDocumentRegion:
+        return result.append("DocumentRegion");
+    case WebAccessibilityRoleUserInterfaceTooltip:
+        return result.append("UserInterfaceTooltip");
+    default:
+        // Also matches WebAccessibilityRoleUnknown.
+        return result.append("Unknown");
+    }
+}
+
+string getDescription(const WebAccessibilityObject& object)
+{
+    string description = object.accessibilityDescription().utf8();
+    return description.insert(0, "AXDescription: ");
+}
+
+string getRole(const WebAccessibilityObject& object)
+{
+    return roleToString(object.roleValue());
+}
+
+string getTitle(const WebAccessibilityObject& object)
+{
+    string title = object.title().utf8();
+    return title.insert(0, "AXTitle: ");
+}
+
+string getAttributes(const WebAccessibilityObject& object)
+{
+    // FIXME: Concatenate all attributes of the AccessibilityObject.
+    string attributes(getTitle(object));
+    attributes.append("\n");
+    attributes.append(getRole(object));
+    attributes.append("\n");
+    attributes.append(getDescription(object));
+    return attributes;
+}
+
+
+// Collects attributes into a string, delimited by dashes. Used by all methods
+// that output lists of attributes: attributesOfLinkedUIElementsCallback,
+// AttributesOfChildrenCallback, etc.
+class AttributesCollector {
+public:
+    void collectAttributes(const WebAccessibilityObject& object)
+    {
+        m_attributes.append("\n------------\n");
+        m_attributes.append(getAttributes(object));
+    }
+
+    string attributes() const { return m_attributes; }
+
+private:
+    string m_attributes;
+};
+
+AccessibilityUIElement::AccessibilityUIElement(const WebAccessibilityObject& object, Factory* factory)
+    : m_accessibilityObject(object)
+    , m_factory(factory)
+{
+
+    ASSERT(factory);
+
+    bindMethod("allAttributes", &AccessibilityUIElement::allAttributesCallback);
+    bindMethod("attributesOfLinkedUIElements",
+               &AccessibilityUIElement::attributesOfLinkedUIElementsCallback);
+    bindMethod("attributesOfDocumentLinks",
+               &AccessibilityUIElement::attributesOfDocumentLinksCallback);
+    bindMethod("attributesOfChildren",
+               &AccessibilityUIElement::attributesOfChildrenCallback);
+    bindMethod("parameterizedAttributeNames",
+               &AccessibilityUIElement::parametrizedAttributeNamesCallback);
+    bindMethod("lineForIndex", &AccessibilityUIElement::lineForIndexCallback);
+    bindMethod("boundsForRange", &AccessibilityUIElement::boundsForRangeCallback);
+    bindMethod("stringForRange", &AccessibilityUIElement::stringForRangeCallback);
+    bindMethod("childAtIndex", &AccessibilityUIElement::childAtIndexCallback);
+    bindMethod("elementAtPoint", &AccessibilityUIElement::elementAtPointCallback);
+    bindMethod("attributesOfColumnHeaders",
+               &AccessibilityUIElement::attributesOfColumnHeadersCallback);
+    bindMethod("attributesOfRowHeaders",
+               &AccessibilityUIElement::attributesOfRowHeadersCallback);
+    bindMethod("attributesOfColumns",
+               &AccessibilityUIElement::attributesOfColumnsCallback);
+    bindMethod("attributesOfRows",
+               &AccessibilityUIElement::attributesOfRowsCallback);
+    bindMethod("attributesOfVisibleCells",
+               &AccessibilityUIElement::attributesOfVisibleCellsCallback);
+    bindMethod("attributesOfHeader",
+               &AccessibilityUIElement::attributesOfHeaderCallback);
+    bindMethod("indexInTable", &AccessibilityUIElement::indexInTableCallback);
+    bindMethod("rowIndexRange", &AccessibilityUIElement::rowIndexRangeCallback);
+    bindMethod("columnIndexRange",
+               &AccessibilityUIElement::columnIndexRangeCallback);
+    bindMethod("cellForColumnAndRow",
+               &AccessibilityUIElement::cellForColumnAndRowCallback);
+    bindMethod("titleUIElement", &AccessibilityUIElement::titleUIElementCallback);
+    bindMethod("setSelectedTextRange",
+               &AccessibilityUIElement::setSelectedTextRangeCallback);
+    bindMethod("attributeValue", &AccessibilityUIElement::attributeValueCallback);
+    bindMethod("isAttributeSettable",
+               &AccessibilityUIElement::isAttributeSettableCallback);
+    bindMethod("isActionSupported",
+               &AccessibilityUIElement::isActionSupportedCallback);
+    bindMethod("parentElement", &AccessibilityUIElement::parentElementCallback);
+    bindMethod("increment", &AccessibilityUIElement::incrementCallback);
+    bindMethod("decrement", &AccessibilityUIElement::decrementCallback);
+
+    bindProperty("role", &AccessibilityUIElement::roleGetterCallback);
+    bindProperty("subrole", &m_subrole);
+    bindProperty("title", &AccessibilityUIElement::titleGetterCallback);
+    bindProperty("description",
+                 &AccessibilityUIElement::descriptionGetterCallback);
+    bindProperty("language", &m_language);
+    bindProperty("x", &m_x);
+    bindProperty("y", &m_y);
+    bindProperty("width", &m_width);
+    bindProperty("height", &m_height);
+    bindProperty("clickPointX", &m_clickPointX);
+    bindProperty("clickPointY", &m_clickPointY);
+    bindProperty("intValue", &m_intValue);
+    bindProperty("minValue", &m_minValue);
+    bindProperty("maxValue", &m_maxValue);
+    bindProperty("childrenCount",
+                 &AccessibilityUIElement::childrenCountGetterCallback);
+    bindProperty("insertionPointLineNumber", &m_insertionPointLineNumber);
+    bindProperty("selectedTextRange", &m_selectedTextRange);
+    bindProperty("isEnabled", &AccessibilityUIElement::isEnabledGetterCallback);
+    bindProperty("isRequired", &m_isRequired);
+    bindProperty("isSelected", &AccessibilityUIElement::isSelectedGetterCallback);
+    bindProperty("valueDescription", &m_valueDescription);
+
+    bindFallbackMethod(&AccessibilityUIElement::fallbackCallback);
+}
+
+AccessibilityUIElement* AccessibilityUIElement::getChildAtIndex(unsigned index)
+{
+    return m_factory->create(accessibilityObject().childAt(index));
+}
+
+void AccessibilityUIElement::allAttributesCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->set(getAttributes(accessibilityObject()));
+}
+
+void AccessibilityUIElement::attributesOfLinkedUIElementsCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::attributesOfDocumentLinksCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::attributesOfChildrenCallback(const CppArgumentList& arguments, CppVariant* result)
+{
+    AttributesCollector collector;
+    unsigned size = accessibilityObject().childCount();
+    for (unsigned i = 0; i < size; ++i)
+        collector.collectAttributes(accessibilityObject().childAt(i));
+    result->set(collector.attributes());
+}
+
+void AccessibilityUIElement::parametrizedAttributeNamesCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::lineForIndexCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::boundsForRangeCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::stringForRangeCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::childAtIndexCallback(const CppArgumentList& arguments, CppVariant* result)
+{
+    if (!arguments.size() || !arguments[0].isNumber()) {
+        result->setNull();
+        return;
+    }
+
+    AccessibilityUIElement* child = getChildAtIndex(arguments[0].toInt32());
+    if (!child) {
+        result->setNull();
+        return;
+    }
+
+    result->set(*(child->getAsCppVariant()));
+}
+
+void AccessibilityUIElement::elementAtPointCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::attributesOfColumnHeadersCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::attributesOfRowHeadersCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::attributesOfColumnsCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::attributesOfRowsCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::attributesOfVisibleCellsCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::attributesOfHeaderCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::indexInTableCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::rowIndexRangeCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::columnIndexRangeCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::cellForColumnAndRowCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::titleUIElementCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::setSelectedTextRangeCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::attributeValueCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::isAttributeSettableCallback(const CppArgumentList& arguments, CppVariant* result)
+{
+    if (arguments.size() < 1 && !arguments[0].isString()) {
+        result->setNull();
+        return;
+    }
+
+    string attribute = arguments[0].toString();
+    bool settable = false;
+    if (attribute == "AXValue")
+        settable = accessibilityObject().canSetValueAttribute();
+    result->set(settable);
+}
+
+void AccessibilityUIElement::isActionSupportedCallback(const CppArgumentList&, CppVariant* result)
+{
+    // This one may be really hard to implement.
+    // Not exposed by AccessibilityObject.
+    result->setNull();
+}
+
+void AccessibilityUIElement::parentElementCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::incrementCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::decrementCallback(const CppArgumentList&, CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::fallbackCallback(const CppArgumentList &, CppVariant* result)
+{
+    // FIXME: Implement this.
+    result->setNull();
+}
+
+void AccessibilityUIElement::childrenCountGetterCallback(CppVariant* result)
+{
+    int count = 1; // Root object always has only one child, the WebView.
+    if (!isRoot())
+        count = accessibilityObject().childCount();
+    result->set(count);
+}
+
+void AccessibilityUIElement::descriptionGetterCallback(CppVariant* result)
+{
+    result->set(getDescription(accessibilityObject()));
+}
+
+void AccessibilityUIElement::isEnabledGetterCallback(CppVariant* result)
+{
+    result->set(accessibilityObject().isEnabled());
+}
+
+void AccessibilityUIElement::isSelectedGetterCallback(CppVariant* result)
+{
+    result->setNull();
+}
+
+void AccessibilityUIElement::roleGetterCallback(CppVariant* result)
+{
+    result->set(getRole(accessibilityObject()));
+}
+
+void AccessibilityUIElement::titleGetterCallback(CppVariant* result)
+{
+    result->set(getTitle(accessibilityObject()));
+}
+
+
+RootAccessibilityUIElement::RootAccessibilityUIElement(const WebAccessibilityObject &object, Factory *factory)
+    : AccessibilityUIElement(object, factory) { }
+
+AccessibilityUIElement* RootAccessibilityUIElement::getChildAtIndex(unsigned index)
+{
+    if (index)
+        return 0;
+
+    return factory()->create(accessibilityObject());
+}
+
+
+AccessibilityUIElementList ::~AccessibilityUIElementList()
+{
+    clear();
+}
+
+void AccessibilityUIElementList::clear()
+{
+    for (ElementList::iterator i = m_elements.begin(); i != m_elements.end(); ++i)
+        delete (*i);
+    m_elements.clear();
+}
+
+AccessibilityUIElement* AccessibilityUIElementList::create(const WebAccessibilityObject& object)
+{
+    if (object.isNull())
+        return 0;
+
+    AccessibilityUIElement* element = new AccessibilityUIElement(object, this);
+    m_elements.append(element);
+    return element;
+}
+
+AccessibilityUIElement* AccessibilityUIElementList::createRoot(const WebAccessibilityObject& object)
+{
+    AccessibilityUIElement* element = new RootAccessibilityUIElement(object, this);
+    m_elements.append(element);
+    return element;
+}
diff --git a/WebKitTools/DumpRenderTree/chromium/AccessibilityUIElement.h b/WebKitTools/DumpRenderTree/chromium/AccessibilityUIElement.h
new file mode 100644
index 0000000..df3f5b9
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/chromium/AccessibilityUIElement.h
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2010 Google 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:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * 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.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "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 THE COPYRIGHT
+ * OWNER 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 "CppBoundClass.h"
+#include "public/WebAccessibilityObject.h"
+#include <wtf/Vector.h>
+
+class AccessibilityUIElement : public CppBoundClass {
+public:
+    class Factory {
+    public:
+        virtual ~Factory() { }
+        virtual AccessibilityUIElement* create(const WebKit::WebAccessibilityObject&) = 0;
+    };
+
+    AccessibilityUIElement(const WebKit::WebAccessibilityObject&, Factory*);
+
+    virtual AccessibilityUIElement* getChildAtIndex(unsigned);
+    virtual bool isRoot() const { return false; }
+
+protected:
+    const WebKit::WebAccessibilityObject& accessibilityObject() const { return m_accessibilityObject; }
+    Factory* factory() const { return m_factory; }
+
+private:
+    // Bound methods and properties.
+    void allAttributesCallback(const CppArgumentList&, CppVariant*);
+    void attributesOfLinkedUIElementsCallback(const CppArgumentList&, CppVariant*);
+    void attributesOfDocumentLinksCallback(const CppArgumentList&, CppVariant*);
+    void attributesOfChildrenCallback(const CppArgumentList&, CppVariant*);
+    void parametrizedAttributeNamesCallback(const CppArgumentList&, CppVariant*);
+    void lineForIndexCallback(const CppArgumentList&, CppVariant*);
+    void boundsForRangeCallback(const CppArgumentList&, CppVariant*);
+    void stringForRangeCallback(const CppArgumentList&, CppVariant*);
+    void childAtIndexCallback(const CppArgumentList&, CppVariant*);
+    void elementAtPointCallback(const CppArgumentList&, CppVariant*);
+    void attributesOfColumnHeadersCallback(const CppArgumentList&, CppVariant*);
+    void attributesOfRowHeadersCallback(const CppArgumentList&, CppVariant*);
+    void attributesOfColumnsCallback(const CppArgumentList&, CppVariant*);
+    void attributesOfRowsCallback(const CppArgumentList&, CppVariant*);
+    void attributesOfVisibleCellsCallback(const CppArgumentList&, CppVariant*);
+    void attributesOfHeaderCallback(const CppArgumentList&, CppVariant*);
+    void indexInTableCallback(const CppArgumentList&, CppVariant*);
+    void rowIndexRangeCallback(const CppArgumentList&, CppVariant*);
+    void columnIndexRangeCallback(const CppArgumentList&, CppVariant*);
+    void cellForColumnAndRowCallback(const CppArgumentList&, CppVariant*);
+    void titleUIElementCallback(const CppArgumentList&, CppVariant*);
+    void setSelectedTextRangeCallback(const CppArgumentList&, CppVariant*);
+    void attributeValueCallback(const CppArgumentList&, CppVariant*);
+    void isAttributeSettableCallback(const CppArgumentList&, CppVariant*);
+    void isActionSupportedCallback(const CppArgumentList&, CppVariant*);
+    void parentElementCallback(const CppArgumentList&, CppVariant*);
+    void incrementCallback(const CppArgumentList&, CppVariant*);
+    void decrementCallback(const CppArgumentList&, CppVariant*);
+    void fallbackCallback(const CppArgumentList&, CppVariant*);
+
+    void childrenCountGetterCallback(CppVariant*);
+    void descriptionGetterCallback(CppVariant*);
+    void isEnabledGetterCallback(CppVariant*);
+    void isSelectedGetterCallback(CppVariant*);
+    void roleGetterCallback(CppVariant*);
+    void titleGetterCallback(CppVariant*);
+
+    CppVariant m_subrole;
+    CppVariant m_language;
+    CppVariant m_x;
+    CppVariant m_y;
+    CppVariant m_width;
+    CppVariant m_height;
+    CppVariant m_clickPointX;
+    CppVariant m_clickPointY;
+    CppVariant m_intValue;
+    CppVariant m_minValue;
+    CppVariant m_maxValue;
+    CppVariant m_childrenCount;
+    CppVariant m_insertionPointLineNumber;
+    CppVariant m_selectedTextRange;
+    CppVariant m_isRequired;
+    CppVariant m_valueDescription;
+
+    WebKit::WebAccessibilityObject m_accessibilityObject;
+    Factory* m_factory;
+};
+
+
+class RootAccessibilityUIElement : public AccessibilityUIElement {
+public:
+    RootAccessibilityUIElement(const WebKit::WebAccessibilityObject&, Factory*);
+
+    virtual AccessibilityUIElement* getChildAtIndex(unsigned);
+    virtual bool isRoot() const { return true; }
+};
+
+
+// Provides simple lifetime management of the AccessibilityUIElement instances:
+// all AccessibilityUIElements ever created from the controller are stored in
+// a list and cleared explicitly.
+class AccessibilityUIElementList : public AccessibilityUIElement::Factory {
+public:
+    AccessibilityUIElementList() { }
+    virtual ~AccessibilityUIElementList();
+
+    void clear();
+    virtual AccessibilityUIElement* create(const WebKit::WebAccessibilityObject&);
+    AccessibilityUIElement* createRoot(const WebKit::WebAccessibilityObject&);
+
+private:
+    typedef Vector<AccessibilityUIElement*> ElementList;
+    ElementList m_elements;
+};
+
+#endif // AccessibilityUIElement_h

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list