AccessibilityImageMapLink.cpp revision cad810f21b803229eb11403f9209855525a25d57
1/*
2 * Copyright (C) 2008 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1.  Redistributions of source code must retain the above copyright
9 *     notice, this list of conditions and the following disclaimer.
10 * 2.  Redistributions in binary form must reproduce the above copyright
11 *     notice, this list of conditions and the following disclaimer in the
12 *     documentation and/or other materials provided with the distribution.
13 * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14 *     its contributors may be used to endorse or promote products derived
15 *     from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#include "config.h"
30#include "AccessibilityImageMapLink.h"
31
32#include "AXObjectCache.h"
33#include "AccessibilityRenderObject.h"
34#include "Document.h"
35#include "HTMLNames.h"
36#include "RenderBoxModelObject.h"
37
38namespace WebCore {
39
40using namespace HTMLNames;
41
42AccessibilityImageMapLink::AccessibilityImageMapLink()
43    : m_areaElement(0)
44    , m_mapElement(0)
45{
46}
47
48AccessibilityImageMapLink::~AccessibilityImageMapLink()
49{
50}
51
52PassRefPtr<AccessibilityImageMapLink> AccessibilityImageMapLink::create()
53{
54    return adoptRef(new AccessibilityImageMapLink());
55}
56
57AccessibilityObject* AccessibilityImageMapLink::parentObject() const
58{
59    if (m_parent)
60        return m_parent;
61
62    if (!m_mapElement.get() || !m_mapElement->renderer())
63        return 0;
64
65    return m_mapElement->document()->axObjectCache()->getOrCreate(m_mapElement->renderer());
66}
67
68AccessibilityRole AccessibilityImageMapLink::roleValue() const
69{
70    if (!m_areaElement)
71        return WebCoreLinkRole;
72
73    const AtomicString& ariaRole = getAttribute(roleAttr);
74    if (!ariaRole.isEmpty())
75        return AccessibilityObject::ariaRoleToWebCoreRole(ariaRole);
76
77    return WebCoreLinkRole;
78}
79
80Element* AccessibilityImageMapLink::actionElement() const
81{
82    return anchorElement();
83}
84
85Element* AccessibilityImageMapLink::anchorElement() const
86{
87    return m_areaElement.get();
88}
89
90KURL AccessibilityImageMapLink::url() const
91{
92    if (!m_areaElement.get())
93        return KURL();
94
95    return m_areaElement->href();
96}
97
98String AccessibilityImageMapLink::accessibilityDescription() const
99{
100    const AtomicString& ariaLabel = getAttribute(aria_labelAttr);
101    if (!ariaLabel.isEmpty())
102        return ariaLabel;
103    const AtomicString& alt = getAttribute(altAttr);
104    if (!alt.isEmpty())
105        return alt;
106
107    return String();
108}
109
110String AccessibilityImageMapLink::title() const
111{
112    const AtomicString& title = getAttribute(titleAttr);
113    if (!title.isEmpty())
114        return title;
115    const AtomicString& summary = getAttribute(summaryAttr);
116    if (!summary.isEmpty())
117        return summary;
118
119    return String();
120}
121
122IntRect AccessibilityImageMapLink::elementRect() const
123{
124    if (!m_mapElement.get() || !m_areaElement.get())
125        return IntRect();
126
127    RenderObject* renderer;
128    if (m_parent && m_parent->isAccessibilityRenderObject())
129        renderer = static_cast<AccessibilityRenderObject*>(m_parent)->renderer();
130    else
131        renderer = m_mapElement->renderer();
132
133    if (!renderer)
134        return IntRect();
135
136    return m_areaElement->getRect(renderer);
137}
138
139String AccessibilityImageMapLink::stringValueForMSAA() const
140{
141    return url();
142}
143
144String AccessibilityImageMapLink::nameForMSAA() const
145{
146    return accessibilityDescription();
147}
148
149} // namespace WebCore
150