| Index: webkit/api/src/WebAccessibilityObject.cpp
 | 
| ===================================================================
 | 
| --- webkit/api/src/WebAccessibilityObject.cpp	(revision 30964)
 | 
| +++ webkit/api/src/WebAccessibilityObject.cpp	(working copy)
 | 
| @@ -29,8 +29,14 @@
 | 
|   */
 | 
|  
 | 
|  #include "config.h"
 | 
| +#include "WebAccessibilityObject.h"
 | 
| +
 | 
|  #include "AccessibilityObject.h"
 | 
| -#include "WebAccessibilityObject.h"
 | 
| +#include "EventHandler.h"
 | 
| +#include "FrameView.h"
 | 
| +#include "PlatformKeyboardEvent.h"
 | 
| +#include "WebPoint.h"
 | 
| +#include "WebRect.h"
 | 
|  #include "WebString.h"
 | 
|  
 | 
|  using namespace WebCore;
 | 
| @@ -62,6 +68,33 @@
 | 
|      return m_private->accessibilityDescription();
 | 
|  }
 | 
|  
 | 
| +WebString WebAccessibilityObject::actionVerb() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return WebString();
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->actionVerb();
 | 
| +}
 | 
| +
 | 
| +bool WebAccessibilityObject::canSetFocusAttribute() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return false;
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->canSetFocusAttribute();
 | 
| +}
 | 
| +
 | 
| +unsigned WebAccessibilityObject::childCount() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return 0;
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->children().size();
 | 
| +}
 | 
| +
 | 
|  WebAccessibilityObject WebAccessibilityObject::childAt(unsigned index) const
 | 
|  {
 | 
|      if (!m_private)
 | 
| @@ -74,15 +107,94 @@
 | 
|      return WebAccessibilityObject(m_private->children()[index]);
 | 
|  }
 | 
|  
 | 
| -unsigned WebAccessibilityObject::childCount() const
 | 
| +WebAccessibilityObject WebAccessibilityObject::firstChild() const
 | 
|  {
 | 
|      if (!m_private)
 | 
| +        return WebAccessibilityObject();
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return WebAccessibilityObject(m_private->firstChild());
 | 
| +}
 | 
| +
 | 
| +WebAccessibilityObject WebAccessibilityObject::focusedChild() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return WebAccessibilityObject();
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    RefPtr<AccessibilityObject> focused = m_private->focusedUIElement();
 | 
| +    if (m_private == focused.get() || focused->parentObject() == m_private)
 | 
| +        return WebAccessibilityObject(focused);
 | 
| +
 | 
| +    return WebAccessibilityObject();
 | 
| +}
 | 
| +
 | 
| +WebAccessibilityObject WebAccessibilityObject::lastChild() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return WebAccessibilityObject();
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return WebAccessibilityObject(m_private->lastChild());
 | 
| +}
 | 
| +
 | 
| +
 | 
| +WebAccessibilityObject WebAccessibilityObject::nextSibling() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return WebAccessibilityObject();
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return WebAccessibilityObject(m_private->nextSibling());
 | 
| +}
 | 
| +
 | 
| +WebAccessibilityObject WebAccessibilityObject::parentObject() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return WebAccessibilityObject();
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return WebAccessibilityObject(m_private->parentObject());
 | 
| +}
 | 
| +
 | 
| +
 | 
| +WebAccessibilityObject WebAccessibilityObject::previousSibling() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return WebAccessibilityObject();
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return WebAccessibilityObject(m_private->previousSibling());
 | 
| +}
 | 
| +
 | 
| +bool WebAccessibilityObject::isAnchor() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
|          return 0;
 | 
|  
 | 
|      m_private->updateBackingStore();
 | 
| -    return m_private->children().size();
 | 
| +    return m_private->isAnchor();
 | 
|  }
 | 
|  
 | 
| +bool WebAccessibilityObject::isChecked() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return 0;
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->isChecked();
 | 
| +}
 | 
| +
 | 
| +
 | 
| +bool WebAccessibilityObject::isFocused() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return 0;
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->isFocused();
 | 
| +}
 | 
| +
 | 
|  bool WebAccessibilityObject::isEnabled() const
 | 
|  {
 | 
|      if (!m_private)
 | 
| @@ -92,12 +204,170 @@
 | 
|      return m_private->isEnabled();
 | 
|  }
 | 
|  
 | 
| +bool WebAccessibilityObject::isHovered() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return 0;
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->isHovered();
 | 
| +}
 | 
| +
 | 
| +bool WebAccessibilityObject::isIndeterminate() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return 0;
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->isIndeterminate();
 | 
| +}
 | 
| +
 | 
| +bool WebAccessibilityObject::isMultiSelect() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return 0;
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->isMultiSelect();
 | 
| +}
 | 
| +
 | 
| +bool WebAccessibilityObject::isOffScreen() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return 0;
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->isOffScreen();
 | 
| +}
 | 
| +
 | 
| +bool WebAccessibilityObject::isPasswordField() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return 0;
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->isPasswordField();
 | 
| +}
 | 
| +
 | 
| +bool WebAccessibilityObject::isPressed() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return 0;
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->isPressed();
 | 
| +}
 | 
| +
 | 
| +bool WebAccessibilityObject::isReadOnly() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return 0;
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->isReadOnly();
 | 
| +}
 | 
| +
 | 
| +bool WebAccessibilityObject::isVisited() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return 0;
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->isVisited();
 | 
| +}
 | 
| +
 | 
| +WebRect WebAccessibilityObject::boundingBoxRect() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return WebRect();
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->documentFrameView()->contentsToWindow(m_private->boundingBoxRect());
 | 
| +}
 | 
| +
 | 
| +WebString WebAccessibilityObject::helpText() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return WebString();
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->helpText();
 | 
| +}
 | 
| +
 | 
| +WebAccessibilityObject WebAccessibilityObject::hitTest(const WebPoint& point) const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return WebAccessibilityObject();
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    IntPoint contentsPoint = m_private->documentFrameView()->windowToContents(point);
 | 
| +    RefPtr<AccessibilityObject> hit = m_private->doAccessibilityHitTest(contentsPoint);
 | 
| +
 | 
| +    if (hit.get())
 | 
| +        return WebAccessibilityObject(hit);
 | 
| +
 | 
| +    if (m_private->boundingBoxRect().contains(contentsPoint))
 | 
| +        return *this;
 | 
| +
 | 
| +    return WebAccessibilityObject();
 | 
| +}
 | 
| +
 | 
| +WebString WebAccessibilityObject::keyboardShortcut() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return WebString();
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    String accessKey = m_private->accessKey();
 | 
| +    if (accessKey.isNull())
 | 
| +        return WebString();
 | 
| +
 | 
| +    static String modifierString;
 | 
| +    if (modifierString.isNull()) {
 | 
| +        unsigned modifiers = EventHandler::accessKeyModifiers();
 | 
| +        // Follow the same order as Mozilla MSAA implementation:
 | 
| +        // Ctrl+Alt+Shift+Meta+key. MSDN states that keyboard shortcut strings
 | 
| +        // should not be localized and defines the separator as "+".
 | 
| +        if (modifiers & PlatformKeyboardEvent::CtrlKey)
 | 
| +            modifierString += "Ctrl+";
 | 
| +        if (modifiers & PlatformKeyboardEvent::AltKey)
 | 
| +            modifierString += "Alt+";
 | 
| +        if (modifiers & PlatformKeyboardEvent::ShiftKey)
 | 
| +            modifierString += "Shift+";
 | 
| +        if (modifiers & PlatformKeyboardEvent::MetaKey)
 | 
| +            modifierString += "Win+";
 | 
| +    }
 | 
| +
 | 
| +    return modifierString + accessKey;
 | 
| +}
 | 
| +
 | 
| +bool WebAccessibilityObject::performDefaultAction() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return false;
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->performDefaultAction();
 | 
| +}
 | 
| +
 | 
|  WebAccessibilityRole WebAccessibilityObject::roleValue() const
 | 
|  {
 | 
| +    if (!m_private)
 | 
| +        return WebKit::WebAccessibilityRoleUnknown;
 | 
| +
 | 
|      m_private->updateBackingStore();
 | 
|      return static_cast<WebAccessibilityRole>(m_private->roleValue());
 | 
|  }
 | 
|  
 | 
| +WebString WebAccessibilityObject::stringValue() const
 | 
| +{
 | 
| +    if (!m_private)
 | 
| +        return WebString();
 | 
| +
 | 
| +    m_private->updateBackingStore();
 | 
| +    return m_private->stringValue();
 | 
| +}
 | 
| +
 | 
|  WebString WebAccessibilityObject::title() const
 | 
|  {
 | 
|      if (!m_private)
 | 
| 
 | 
| Property changes on: webkit\api\src\WebAccessibilityObject.cpp
 | 
| ___________________________________________________________________
 | 
| Added: svn:eol-style
 | 
|    + LF
 | 
| 
 | 
| 
 |