15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008 Apple Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1.  Redistributions of source code must retain the above copyright
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2.  Redistributions in binary form must reproduce the above copyright
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer in the
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     documentation and/or other materials provided with the distribution.
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     its contributors may be used to endorse or promote products derived
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     from this software without specific prior written permission.
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h"
30bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "core/accessibility/AXImageMapLink.h"
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/accessibility/AXObjectCache.h"
33bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "core/accessibility/AXRenderObject.h"
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
35c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
3602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace HTMLNames;
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
39bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)AXImageMapLink::AXImageMapLink()
40d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    : m_areaElement(nullptr)
41d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    , m_mapElement(nullptr)
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
45bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)AXImageMapLink::~AXImageMapLink()
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch}
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
49bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)void AXImageMapLink::detachFromParent()
50e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles){
51bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    AXMockObject::detachFromParent();
52d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_areaElement = nullptr;
53d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_mapElement = nullptr;
54e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)}
55e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
56bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)PassRefPtr<AXImageMapLink> AXImageMapLink::create()
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
58bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    return adoptRef(new AXImageMapLink());
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
61bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)AXObject* AXImageMapLink::parentObject() const
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_parent)
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return m_parent;
6502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!m_mapElement.get() || !m_mapElement->renderer())
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
6802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
698abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    return m_mapElement->document().axObjectCache()->getOrCreate(m_mapElement->renderer());
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
72bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)AccessibilityRole AXImageMapLink::roleValue() const
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!m_areaElement)
75c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        return LinkRole;
7602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const AtomicString& ariaRole = getAttribute(roleAttr);
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!ariaRole.isEmpty())
79bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)        return AXObject::ariaRoleToWebCoreRole(ariaRole);
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
81c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    return LinkRole;
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
84bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)Element* AXImageMapLink::actionElement() const
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return anchorElement();
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
89bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)Element* AXImageMapLink::anchorElement() const
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return m_areaElement.get();
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
94bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)KURL AXImageMapLink::url() const
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!m_areaElement.get())
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return KURL();
9802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return m_areaElement->href();
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
102bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)String AXImageMapLink::accessibilityDescription() const
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const AtomicString& ariaLabel = getAttribute(aria_labelAttr);
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!ariaLabel.isEmpty())
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return ariaLabel;
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const AtomicString& alt = getAttribute(altAttr);
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!alt.isEmpty())
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return alt;
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return String();
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
11302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
114bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)String AXImageMapLink::title() const
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const AtomicString& title = getAttribute(titleAttr);
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!title.isEmpty())
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return title;
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const AtomicString& summary = getAttribute(summaryAttr);
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!summary.isEmpty())
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return summary;
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return String();
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
126bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)LayoutRect AXImageMapLink::elementRect() const
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!m_mapElement.get() || !m_areaElement.get())
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return LayoutRect();
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RenderObject* renderer;
132bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    if (m_parent && m_parent->isAXRenderObject())
133bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)        renderer = toAXRenderObject(m_parent)->renderer();
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        renderer = m_mapElement->renderer();
13602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!renderer)
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return LayoutRect();
13902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return m_areaElement->computeRect(renderer);
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
14202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
143c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
144