Home | History | Annotate | Download | only in accessibility
      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 "core/accessibility/AXImageMapLink.h"
     31 
     32 #include "core/accessibility/AXObjectCache.h"
     33 #include "core/accessibility/AXRenderObject.h"
     34 
     35 namespace blink {
     36 
     37 using namespace HTMLNames;
     38 
     39 AXImageMapLink::AXImageMapLink()
     40     : m_areaElement(nullptr)
     41     , m_mapElement(nullptr)
     42 {
     43 }
     44 
     45 AXImageMapLink::~AXImageMapLink()
     46 {
     47 }
     48 
     49 void AXImageMapLink::detachFromParent()
     50 {
     51     AXMockObject::detachFromParent();
     52     m_areaElement = nullptr;
     53     m_mapElement = nullptr;
     54 }
     55 
     56 PassRefPtr<AXImageMapLink> AXImageMapLink::create()
     57 {
     58     return adoptRef(new AXImageMapLink());
     59 }
     60 
     61 AXObject* AXImageMapLink::parentObject() const
     62 {
     63     if (m_parent)
     64         return m_parent;
     65 
     66     if (!m_mapElement.get() || !m_mapElement->renderer())
     67         return 0;
     68 
     69     return m_mapElement->document().axObjectCache()->getOrCreate(m_mapElement->renderer());
     70 }
     71 
     72 AccessibilityRole AXImageMapLink::roleValue() const
     73 {
     74     if (!m_areaElement)
     75         return LinkRole;
     76 
     77     const AtomicString& ariaRole = getAttribute(roleAttr);
     78     if (!ariaRole.isEmpty())
     79         return AXObject::ariaRoleToWebCoreRole(ariaRole);
     80 
     81     return LinkRole;
     82 }
     83 
     84 Element* AXImageMapLink::actionElement() const
     85 {
     86     return anchorElement();
     87 }
     88 
     89 Element* AXImageMapLink::anchorElement() const
     90 {
     91     return m_areaElement.get();
     92 }
     93 
     94 KURL AXImageMapLink::url() const
     95 {
     96     if (!m_areaElement.get())
     97         return KURL();
     98 
     99     return m_areaElement->href();
    100 }
    101 
    102 String AXImageMapLink::accessibilityDescription() const
    103 {
    104     const AtomicString& ariaLabel = getAttribute(aria_labelAttr);
    105     if (!ariaLabel.isEmpty())
    106         return ariaLabel;
    107     const AtomicString& alt = getAttribute(altAttr);
    108     if (!alt.isEmpty())
    109         return alt;
    110 
    111     return String();
    112 }
    113 
    114 String AXImageMapLink::title() const
    115 {
    116     const AtomicString& title = getAttribute(titleAttr);
    117     if (!title.isEmpty())
    118         return title;
    119     const AtomicString& summary = getAttribute(summaryAttr);
    120     if (!summary.isEmpty())
    121         return summary;
    122 
    123     return String();
    124 }
    125 
    126 LayoutRect AXImageMapLink::elementRect() const
    127 {
    128     if (!m_mapElement.get() || !m_areaElement.get())
    129         return LayoutRect();
    130 
    131     RenderObject* renderer;
    132     if (m_parent && m_parent->isAXRenderObject())
    133         renderer = toAXRenderObject(m_parent)->renderer();
    134     else
    135         renderer = m_mapElement->renderer();
    136 
    137     if (!renderer)
    138         return LayoutRect();
    139 
    140     return m_areaElement->computeRect(renderer);
    141 }
    142 
    143 } // namespace blink
    144