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 "AccessibilityRenderObject.h"
33 #include "AXObjectCache.h"
34 #include "Document.h"
35 #include "HTMLNames.h"
36 #include "IntRect.h"
37 #include "RenderObject.h"
38
39 using namespace std;
40
41 namespace WebCore {
42
43 using namespace HTMLNames;
44
AccessibilityImageMapLink()45 AccessibilityImageMapLink::AccessibilityImageMapLink()
46 : m_areaElement(0),
47 m_mapElement(0)
48 {
49 }
50
~AccessibilityImageMapLink()51 AccessibilityImageMapLink::~AccessibilityImageMapLink()
52 {
53 }
54
create()55 PassRefPtr<AccessibilityImageMapLink> AccessibilityImageMapLink::create()
56 {
57 return adoptRef(new AccessibilityImageMapLink());
58 }
59
parentObject() const60 AccessibilityObject* AccessibilityImageMapLink::parentObject() const
61 {
62 if (m_parent)
63 return m_parent;
64
65 if (!m_mapElement || !m_mapElement->renderer())
66 return 0;
67
68 return m_mapElement->document()->axObjectCache()->getOrCreate(m_mapElement->renderer());
69 }
70
actionElement() const71 Element* AccessibilityImageMapLink::actionElement() const
72 {
73 return anchorElement();
74 }
75
anchorElement() const76 Element* AccessibilityImageMapLink::anchorElement() const
77 {
78 return m_areaElement;
79 }
80
url() const81 KURL AccessibilityImageMapLink::url() const
82 {
83 if (!m_areaElement)
84 return KURL();
85
86 return m_areaElement->href();
87 }
88
accessibilityDescription() const89 String AccessibilityImageMapLink::accessibilityDescription() const
90 {
91 if (!m_areaElement)
92 return String();
93
94 const AtomicString& alt = m_areaElement->getAttribute(altAttr);
95 if (!alt.isEmpty())
96 return alt;
97
98 return String();
99 }
100
title() const101 String AccessibilityImageMapLink::title() const
102 {
103 if (!m_areaElement)
104 return String();
105
106 const AtomicString& title = m_areaElement->getAttribute(titleAttr);
107 if (!title.isEmpty())
108 return title;
109 const AtomicString& summary = m_areaElement->getAttribute(summaryAttr);
110 if (!summary.isEmpty())
111 return summary;
112
113 return String();
114 }
115
elementRect() const116 IntRect AccessibilityImageMapLink::elementRect() const
117 {
118 if (!m_mapElement || !m_areaElement)
119 return IntRect();
120
121 RenderObject* renderer;
122 if (m_parent && m_parent->isAccessibilityRenderObject())
123 renderer = static_cast<AccessibilityRenderObject*>(m_parent)->renderer();
124 else
125 renderer = m_mapElement->renderer();
126
127 if (!renderer)
128 return IntRect();
129
130 return m_areaElement->getRect(renderer);
131 }
132
size() const133 IntSize AccessibilityImageMapLink::size() const
134 {
135 return elementRect().size();
136 }
137
138 } // namespace WebCore
139