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 "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 
     42 AccessibilityImageMapLink::AccessibilityImageMapLink()
     43     : m_areaElement(0)
     44     , m_mapElement(0)
     45     , m_parent(0)
     46 {
     47 }
     48 
     49 AccessibilityImageMapLink::~AccessibilityImageMapLink()
     50 {
     51 }
     52 
     53 PassRefPtr<AccessibilityImageMapLink> AccessibilityImageMapLink::create()
     54 {
     55     return adoptRef(new AccessibilityImageMapLink());
     56 }
     57 
     58 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 
     69 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 
     81 Element* AccessibilityImageMapLink::actionElement() const
     82 {
     83     return anchorElement();
     84 }
     85 
     86 Element* AccessibilityImageMapLink::anchorElement() const
     87 {
     88     return m_areaElement.get();
     89 }
     90 
     91 KURL AccessibilityImageMapLink::url() const
     92 {
     93     if (!m_areaElement.get())
     94         return KURL();
     95 
     96     return m_areaElement->href();
     97 }
     98 
     99 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 
    111 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 
    123 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 
    140 String AccessibilityImageMapLink::stringValueForMSAA() const
    141 {
    142     return url();
    143 }
    144 
    145 String AccessibilityImageMapLink::nameForMSAA() const
    146 {
    147     return accessibilityDescription();
    148 }
    149 
    150 } // namespace WebCore
    151