WebAccessibilityObject.cpp [plain text]
#include "config.h"
#include "WebAccessibilityObject.h"
#include "AccessibilityObject.h"
#include "EventHandler.h"
#include "FrameView.h"
#include "PlatformKeyboardEvent.h"
#include "WebPoint.h"
#include "WebRect.h"
#include "WebString.h"
using namespace WebCore;
namespace WebKit {
class WebAccessibilityObjectPrivate : public WebCore::AccessibilityObject {
};
void WebAccessibilityObject::reset()
{
assign(0);
}
void WebAccessibilityObject::assign(const WebKit::WebAccessibilityObject& other)
{
WebAccessibilityObjectPrivate* p = const_cast<WebAccessibilityObjectPrivate*>(other.m_private);
if (p)
p->ref();
assign(p);
}
WebString WebAccessibilityObject::accessibilityDescription() const
{
if (!m_private)
return WebString();
m_private->updateBackingStore();
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();
}
bool WebAccessibilityObject::canSetValueAttribute() const
{
if (!m_private)
return false;
m_private->updateBackingStore();
return m_private->canSetValueAttribute();
}
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)
return WebAccessibilityObject();
m_private->updateBackingStore();
if (m_private->children().size() <= index)
return WebAccessibilityObject();
return WebAccessibilityObject(m_private->children()[index]);
}
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->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)
return 0;
m_private->updateBackingStore();
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::isMultiSelectable() const
{
if (!m_private)
return 0;
m_private->updateBackingStore();
return m_private->isMultiSelectable();
}
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();
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)
return WebString();
m_private->updateBackingStore();
return m_private->title();
}
WebAccessibilityObject::WebAccessibilityObject(const WTF::PassRefPtr<WebCore::AccessibilityObject>& object)
: m_private(static_cast<WebAccessibilityObjectPrivate*>(object.releaseRef()))
{
}
WebAccessibilityObject& WebAccessibilityObject::operator=(const WTF::PassRefPtr<WebCore::AccessibilityObject>& object)
{
assign(static_cast<WebAccessibilityObjectPrivate*>(object.releaseRef()));
return *this;
}
WebAccessibilityObject::operator WTF::PassRefPtr<WebCore::AccessibilityObject>() const
{
return PassRefPtr<WebCore::AccessibilityObject>(const_cast<WebAccessibilityObjectPrivate*>(m_private));
}
void WebAccessibilityObject::assign(WebAccessibilityObjectPrivate* p)
{
if (m_private)
m_private->deref();
m_private = p;
}
}