• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
38 namespace WebCore {
39 
40 using namespace HTMLNames;
41 
AccessibilityImageMapLink()42 AccessibilityImageMapLink::AccessibilityImageMapLink()
43     : m_areaElement(0)
44     , m_mapElement(0)
45     , m_parent(0)
46 {
47 }
48 
~AccessibilityImageMapLink()49 AccessibilityImageMapLink::~AccessibilityImageMapLink()
50 {
51 }
52 
create()53 PassRefPtr<AccessibilityImageMapLink> AccessibilityImageMapLink::create()
54 {
55     return adoptRef(new AccessibilityImageMapLink());
56 }
57 
parentObject() const58 AccessibilityObject* AccessibilityImageMapLink::parentObject() const
59 {
60     if (m_parent)
61         return m_parent;
62 
63     if (!m_mapElement.get() || !m_mapElement->renderer())
64         return 0;
65 
66     return m_mapElement->document()->axObjectCache()->getOrCreate(m_mapElement->renderer());
67 }
68 
roleValue() const69 AccessibilityRole AccessibilityImageMapLink::roleValue() const
70 {
71     if (!m_areaElement)
72         return WebCoreLinkRole;
73 
74     const AtomicString& ariaRole = getAttribute(roleAttr);
75     if (!ariaRole.isEmpty())
76         return AccessibilityObject::ariaRoleToWebCoreRole(ariaRole);
77 
78     return WebCoreLinkRole;
79 }
80 
actionElement() const81 Element* AccessibilityImageMapLink::actionElement() const
82 {
83     return anchorElement();
84 }
85 
anchorElement() const86 Element* AccessibilityImageMapLink::anchorElement() const
87 {
88     return m_areaElement.get();
89 }
90 
url() const91 KURL AccessibilityImageMapLink::url() const
92 {
93     if (!m_areaElement.get())
94         return KURL();
95 
96     return m_areaElement->href();
97 }
98 
accessibilityDescription() const99 String AccessibilityImageMapLink::accessibilityDescription() const
100 {
101     const AtomicString& ariaLabel = getAttribute(aria_labelAttr);
102     if (!ariaLabel.isEmpty())
103         return ariaLabel;
104     const AtomicString& alt = getAttribute(altAttr);
105     if (!alt.isEmpty())
106         return alt;
107 
108     return String();
109 }
110 
title() const111 String AccessibilityImageMapLink::title() const
112 {
113     const AtomicString& title = getAttribute(titleAttr);
114     if (!title.isEmpty())
115         return title;
116     const AtomicString& summary = getAttribute(summaryAttr);
117     if (!summary.isEmpty())
118         return summary;
119 
120     return String();
121 }
122 
elementRect() const123 IntRect AccessibilityImageMapLink::elementRect() const
124 {
125     if (!m_mapElement.get() || !m_areaElement.get())
126         return IntRect();
127 
128     RenderObject* renderer;
129     if (m_parent && m_parent->isAccessibilityRenderObject())
130         renderer = static_cast<AccessibilityRenderObject*>(m_parent)->renderer();
131     else
132         renderer = m_mapElement->renderer();
133 
134     if (!renderer)
135         return IntRect();
136 
137     return m_areaElement->computeRect(renderer);
138 }
139 
stringValueForMSAA() const140 String AccessibilityImageMapLink::stringValueForMSAA() const
141 {
142     return url();
143 }
144 
nameForMSAA() const145 String AccessibilityImageMapLink::nameForMSAA() const
146 {
147     return accessibilityDescription();
148 }
149 
150 } // namespace WebCore
151