1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*
2643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Google Inc. All rights reserved.
3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without
5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions are
6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * met:
7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Redistributions of source code must retain the above copyright
9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer.
10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Redistributions in binary form must reproduce the above
11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * copyright notice, this list of conditions and the following disclaimer
12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * in the documentation and/or other materials provided with the
13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * distribution.
14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Neither the name of Google Inc. nor the names of its
15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * contributors may be used to endorse or promote products derived from
16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * this software without specific prior written permission.
17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */
30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "config.h"
32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebAccessibilityObject.h"
33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "AccessibilityObject.h"
350617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "CSSPrimitiveValueMappings.h"
360617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "Document.h"
37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "EventHandler.h"
38643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "FrameView.h"
390617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "Node.h"
40643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "PlatformKeyboardEvent.h"
410617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "RenderStyle.h"
4281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "UserGestureIndicator.h"
430617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "WebDocument.h"
440617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "WebNode.h"
45643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebPoint.h"
46643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebRect.h"
47643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebString.h"
48f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "WebURL.h"
49643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
50643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockusing namespace WebCore;
51643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
52643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit {
53643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
54643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebAccessibilityObjectPrivate : public WebCore::AccessibilityObject {
55643ca7872b450ea4efacab6188849e5aac2ba161Steve Block};
56643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
57643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebAccessibilityObject::reset()
58643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
59643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    assign(0);
60643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
61643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
62643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebAccessibilityObject::assign(const WebKit::WebAccessibilityObject& other)
63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebAccessibilityObjectPrivate* p = const_cast<WebAccessibilityObjectPrivate*>(other.m_private);
65643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (p)
66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        p->ref();
67643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    assign(p);
68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
7081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool WebAccessibilityObject::equals(const WebAccessibilityObject& n) const
7181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
7281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return (m_private == n.m_private);
7381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
7481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
75643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebString WebAccessibilityObject::accessibilityDescription() const
76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebString();
79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
80643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
81643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->accessibilityDescription();
82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
83643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
84643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebString WebAccessibilityObject::actionVerb() const
85643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
86643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
87643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebString();
88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->actionVerb();
91643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
93643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebAccessibilityObject::canSetFocusAttribute() const
94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return false;
97643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->canSetFocusAttribute();
100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
101643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
102643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebAccessibilityObject::canSetValueAttribute() const
103643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
105643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return false;
106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
108643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->canSetValueAttribute();
109643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
110643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
11168513a70bcd92384395513322f1b801e7bf9c729Steve Blockbool WebAccessibilityObject::isValid() const
11268513a70bcd92384395513322f1b801e7bf9c729Steve Block{
11368513a70bcd92384395513322f1b801e7bf9c729Steve Block    if (!m_private)
11468513a70bcd92384395513322f1b801e7bf9c729Steve Block        return false;
11568513a70bcd92384395513322f1b801e7bf9c729Steve Block
11668513a70bcd92384395513322f1b801e7bf9c729Steve Block    m_private->updateBackingStore();
11768513a70bcd92384395513322f1b801e7bf9c729Steve Block    return m_private->axObjectID();
11868513a70bcd92384395513322f1b801e7bf9c729Steve Block}
11968513a70bcd92384395513322f1b801e7bf9c729Steve Block
120643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockunsigned WebAccessibilityObject::childCount() const
121643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
123643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
124643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
125643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
126643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->children().size();
127643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
128643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
129643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebAccessibilityObject WebAccessibilityObject::childAt(unsigned index) const
130643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
131643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
132643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebAccessibilityObject();
133643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
134643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
135643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (m_private->children().size() <= index)
136643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebAccessibilityObject();
137643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
138643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return WebAccessibilityObject(m_private->children()[index]);
139643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
140643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
141643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebAccessibilityObject WebAccessibilityObject::firstChild() const
142643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
143643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
144643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebAccessibilityObject();
145643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
146643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
147643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return WebAccessibilityObject(m_private->firstChild());
148643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
149643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
150643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebAccessibilityObject WebAccessibilityObject::focusedChild() const
151643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
152643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
153643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebAccessibilityObject();
154643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
155643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
156643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    RefPtr<AccessibilityObject> focused = m_private->focusedUIElement();
157643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (m_private == focused.get() || focused->parentObject() == m_private)
158643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebAccessibilityObject(focused);
159643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
160643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return WebAccessibilityObject();
161643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
162643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
163643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebAccessibilityObject WebAccessibilityObject::lastChild() const
164643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
165643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
166643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebAccessibilityObject();
167643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
168643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
169643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return WebAccessibilityObject(m_private->lastChild());
170643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
171643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
172643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
173643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebAccessibilityObject WebAccessibilityObject::nextSibling() const
174643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
175643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
176643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebAccessibilityObject();
177643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
178643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
179643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return WebAccessibilityObject(m_private->nextSibling());
180643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
181643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
182643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebAccessibilityObject WebAccessibilityObject::parentObject() const
183643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
184643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
185643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebAccessibilityObject();
186643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
187643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
188643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return WebAccessibilityObject(m_private->parentObject());
189643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
190643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
191643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
192643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebAccessibilityObject WebAccessibilityObject::previousSibling() const
193643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
194643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
195643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebAccessibilityObject();
196643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
197643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
198643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return WebAccessibilityObject(m_private->previousSibling());
199643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
200643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
2015abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickbool WebAccessibilityObject::canSetSelectedAttribute() const
2025abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{
2035abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    if (!m_private)
2045abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick        return 0;
2055abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick
2065abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    m_private->updateBackingStore();
2075abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    return m_private->canSetSelectedAttribute();
2085abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}
2095abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick
210643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebAccessibilityObject::isAnchor() const
211643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
212643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
213643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
214643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
215643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
216643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->isAnchor();
217643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
218643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
219643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebAccessibilityObject::isChecked() const
220643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
221643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
222643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
223643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
224643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
225643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->isChecked();
226643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
227643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
2285abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickbool WebAccessibilityObject::isCollapsed() const
2295abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{
2305abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    if (!m_private)
2315abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick        return 0;
2325abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick
2335abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    m_private->updateBackingStore();
2345abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    return m_private->isCollapsed();
2355abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}
2365abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick
237643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
238643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebAccessibilityObject::isFocused() const
239643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
240643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
241643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
242643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
243643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
244643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->isFocused();
245643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
246643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
247643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebAccessibilityObject::isEnabled() const
248643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
249643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
250643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
251643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
252643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
253643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->isEnabled();
254643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
255643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
256643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebAccessibilityObject::isHovered() const
257643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
258643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
259643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
260643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
261643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
262643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->isHovered();
263643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
264643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
265643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebAccessibilityObject::isIndeterminate() const
266643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
267643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
268643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
269643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
270643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
271643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->isIndeterminate();
272643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
273643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
2745abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickbool WebAccessibilityObject::isLinked() const
2755abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{
2765abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    if (!m_private)
2775abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick        return 0;
2785abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick
2795abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    m_private->updateBackingStore();
2805abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    return m_private->isLinked();
2815abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}
2825abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick
283d0825bca7fe65beaee391d30da42e937db621564Steve Blockbool WebAccessibilityObject::isMultiSelectable() const
284643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
285643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
286643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
287643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
288643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
289d0825bca7fe65beaee391d30da42e937db621564Steve Block    return m_private->isMultiSelectable();
290643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
291643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
292643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebAccessibilityObject::isOffScreen() const
293643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
294643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
295643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
296643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
297643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
298643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->isOffScreen();
299643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
300643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
301643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebAccessibilityObject::isPasswordField() const
302643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
303643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
304643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
305643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
306643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
307643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->isPasswordField();
308643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
309643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
310643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebAccessibilityObject::isPressed() const
311643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
312643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
313643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
314643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
315643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
316643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->isPressed();
317643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
318643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
319643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebAccessibilityObject::isReadOnly() const
320643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
321643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
322643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
323643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
324643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
325643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->isReadOnly();
326643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
327643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
3285abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickbool WebAccessibilityObject::isSelected() const
3295abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{
3305abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    if (!m_private)
3315abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick        return 0;
3325abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick
3335abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    m_private->updateBackingStore();
3345abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    return m_private->isSelected();
3355abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}
3365abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick
3375abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickbool WebAccessibilityObject::isVisible() const
3385abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{
3395abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    if (!m_private)
3405abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick        return 0;
3415abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick
3425abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    m_private->updateBackingStore();
3435abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    return m_private->isVisible();
3445abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}
3455abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick
346643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebAccessibilityObject::isVisited() const
347643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
348643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
349643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return 0;
350643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
351643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
352643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->isVisited();
353643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
354643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
355643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebRect WebAccessibilityObject::boundingBoxRect() const
356643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
357643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
358643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebRect();
359643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
360643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
36128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    return m_private->boundingBoxRect();
362643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
363643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
364643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebString WebAccessibilityObject::helpText() const
365643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
366643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
367643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebString();
368643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
369643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
370643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->helpText();
371643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
372643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
373e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockint WebAccessibilityObject::headingLevel() const
374e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block{
375e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    if (!m_private)
376e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        return 0;
377e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
378e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    m_private->updateBackingStore();
379e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    return m_private->headingLevel();
380e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block}
381e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
382643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebAccessibilityObject WebAccessibilityObject::hitTest(const WebPoint& point) const
383643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
384643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
385643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebAccessibilityObject();
386643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
387643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
388643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    IntPoint contentsPoint = m_private->documentFrameView()->windowToContents(point);
389f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    RefPtr<AccessibilityObject> hit = m_private->accessibilityHitTest(contentsPoint);
390643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
391643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (hit.get())
392643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebAccessibilityObject(hit);
393643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
394643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (m_private->boundingBoxRect().contains(contentsPoint))
395643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return *this;
396643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
397643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return WebAccessibilityObject();
398643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
399643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
400643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebString WebAccessibilityObject::keyboardShortcut() const
401643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
402643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
403643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebString();
404643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
405643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
406643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    String accessKey = m_private->accessKey();
407643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (accessKey.isNull())
408643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebString();
409643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
410643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    static String modifierString;
411643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (modifierString.isNull()) {
412643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        unsigned modifiers = EventHandler::accessKeyModifiers();
413643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        // Follow the same order as Mozilla MSAA implementation:
414643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        // Ctrl+Alt+Shift+Meta+key. MSDN states that keyboard shortcut strings
415643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        // should not be localized and defines the separator as "+".
416643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        if (modifiers & PlatformKeyboardEvent::CtrlKey)
417643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            modifierString += "Ctrl+";
418643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        if (modifiers & PlatformKeyboardEvent::AltKey)
419643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            modifierString += "Alt+";
420643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        if (modifiers & PlatformKeyboardEvent::ShiftKey)
421643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            modifierString += "Shift+";
422643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        if (modifiers & PlatformKeyboardEvent::MetaKey)
423643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            modifierString += "Win+";
424643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    }
425643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
426643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return modifierString + accessKey;
427643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
428643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
429643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebAccessibilityObject::performDefaultAction() const
430643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
431643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
432643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return false;
433643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
43481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture);
43581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
436643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
437643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->performDefaultAction();
438643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
439643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
440643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebAccessibilityRole WebAccessibilityObject::roleValue() const
441643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
442643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
443643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebKit::WebAccessibilityRoleUnknown;
444643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
445643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
446643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return static_cast<WebAccessibilityRole>(m_private->roleValue());
447643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
448643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
449e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockvoid WebAccessibilityObject::setFocused(bool on) const
450e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block{
451e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    if (m_private)
452e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        m_private->setFocused(on);
453e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block}
454e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
455643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebString WebAccessibilityObject::stringValue() const
456643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
457643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
458643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebString();
459643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
460643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
461643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->stringValue();
462643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
463643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
464643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebString WebAccessibilityObject::title() const
465643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
466643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!m_private)
467643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return WebString();
468643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
469643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->updateBackingStore();
470643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->title();
471643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
472643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
473f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochWebURL WebAccessibilityObject::url() const
474f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
475f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (!m_private)
476f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        return WebURL();
477f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
478f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    m_private->updateBackingStore();
479f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return m_private->url();
480f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
4810617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
4820617145a89917ae7735fe1c9538688ab9a577df5Kristian MonsenWebNode WebAccessibilityObject::node() const
4830617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{
4840617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    if (!m_private)
4850617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        return WebNode();
4860617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
4870617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    m_private->updateBackingStore();
4880617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
4890617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    Node* node = m_private->node();
4900617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    if (!node)
4910617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        return WebNode();
4920617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
4930617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    return WebNode(node);
4940617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen}
4950617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
4960617145a89917ae7735fe1c9538688ab9a577df5Kristian MonsenWebDocument WebAccessibilityObject::document() const
4970617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{
4980617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    if (!m_private)
4990617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        return WebDocument();
5000617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
5010617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    m_private->updateBackingStore();
5020617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
5030617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    Document* document = m_private->document();
5040617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    if (!document)
5050617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        return WebDocument();
5060617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
5070617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    return WebDocument(document);
5080617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen}
5090617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
5100617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenbool WebAccessibilityObject::hasComputedStyle() const
5110617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{
5120617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    Document* document = m_private->document();
5130617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    if (document)
5140617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        document->updateStyleIfNeeded();
5150617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
5160617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    Node* node = m_private->node();
5170617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    if (!node)
5180617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        return false;
5190617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
5200617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    return node->computedStyle();
5210617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen}
5220617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
5230617145a89917ae7735fe1c9538688ab9a577df5Kristian MonsenWebString WebAccessibilityObject::computedStyleDisplay() const
5240617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{
5250617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    Document* document = m_private->document();
5260617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    if (document)
5270617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        document->updateStyleIfNeeded();
5280617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
5290617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    Node* node = m_private->node();
5300617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    if (!node)
5310617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        return WebString();
5320617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
5330617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    RenderStyle* renderStyle = node->computedStyle();
5340617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    if (!renderStyle)
5350617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen        return WebString();
5360617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
5370617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    return WebString(CSSPrimitiveValue::create(renderStyle->display())->getStringValue());
5380617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen}
5390617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
5402bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebAccessibilityObject::accessibilityIsIgnored() const
5412bde8e466a4451c7319e3a072d118917957d6554Steve Block{
5422bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_private->updateBackingStore();
5432bde8e466a4451c7319e3a072d118917957d6554Steve Block    return m_private->accessibilityIsIgnored();
5442bde8e466a4451c7319e3a072d118917957d6554Steve Block}
5452bde8e466a4451c7319e3a072d118917957d6554Steve Block
546643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebAccessibilityObject::WebAccessibilityObject(const WTF::PassRefPtr<WebCore::AccessibilityObject>& object)
547643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    : m_private(static_cast<WebAccessibilityObjectPrivate*>(object.releaseRef()))
548643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
549643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
550643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
551643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebAccessibilityObject& WebAccessibilityObject::operator=(const WTF::PassRefPtr<WebCore::AccessibilityObject>& object)
552643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
553643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    assign(static_cast<WebAccessibilityObjectPrivate*>(object.releaseRef()));
554643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return *this;
555643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
556643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
557643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebAccessibilityObject::operator WTF::PassRefPtr<WebCore::AccessibilityObject>() const
558643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
559643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return PassRefPtr<WebCore::AccessibilityObject>(const_cast<WebAccessibilityObjectPrivate*>(m_private));
560643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
561643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
562643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebAccessibilityObject::assign(WebAccessibilityObjectPrivate* p)
563643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
564643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // p is already ref'd for us by the caller
565643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (m_private)
566643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        m_private->deref();
567643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private = p;
568643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
569643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
570643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit
571