18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * its contributors may be used to endorse or promote products derived 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * from this software without specific prior written permission. 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "AccessibilityImageMapLink.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "AXObjectCache.h" 33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "AccessibilityRenderObject.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Document.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLNames.h" 36dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "RenderBoxModelObject.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace HTMLNames; 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectAccessibilityImageMapLink::AccessibilityImageMapLink() 43dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch : m_areaElement(0) 44dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch , m_mapElement(0) 452bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_parent(0) 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectAccessibilityImageMapLink::~AccessibilityImageMapLink() 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPassRefPtr<AccessibilityImageMapLink> AccessibilityImageMapLink::create() 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return adoptRef(new AccessibilityImageMapLink()); 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectAccessibilityObject* AccessibilityImageMapLink::parentObject() const 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_parent) 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_parent; 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 634a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch if (!m_mapElement.get() || !m_mapElement->renderer()) 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 668f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return m_mapElement->document()->axObjectCache()->getOrCreate(m_mapElement->renderer()); 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 69643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockAccessibilityRole AccessibilityImageMapLink::roleValue() const 70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!m_areaElement) 72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return WebCoreLinkRole; 73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 74967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch const AtomicString& ariaRole = getAttribute(roleAttr); 75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!ariaRole.isEmpty()) 76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return AccessibilityObject::ariaRoleToWebCoreRole(ariaRole); 77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return WebCoreLinkRole; 79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 80643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectElement* AccessibilityImageMapLink::actionElement() const 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return anchorElement(); 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectElement* AccessibilityImageMapLink::anchorElement() const 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 884a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch return m_areaElement.get(); 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 915f1ab04193ad0130ca8204aadaceae083aca9881Feng QianKURL AccessibilityImageMapLink::url() const 925f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 934a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch if (!m_areaElement.get()) 945f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return KURL(); 955f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 965f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return m_areaElement->href(); 975f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 985f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString AccessibilityImageMapLink::accessibilityDescription() const 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 101967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch const AtomicString& ariaLabel = getAttribute(aria_labelAttr); 102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!ariaLabel.isEmpty()) 103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return ariaLabel; 104967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch const AtomicString& alt = getAttribute(altAttr); 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!alt.isEmpty()) 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return alt; 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return String(); 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString AccessibilityImageMapLink::title() const 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 113967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch const AtomicString& title = getAttribute(titleAttr); 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!title.isEmpty()) 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return title; 116967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch const AtomicString& summary = getAttribute(summaryAttr); 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!summary.isEmpty()) 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return summary; 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return String(); 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntRect AccessibilityImageMapLink::elementRect() const 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1254a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch if (!m_mapElement.get() || !m_areaElement.get()) 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return IntRect(); 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* renderer; 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_parent && m_parent->isAccessibilityRenderObject()) 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project renderer = static_cast<AccessibilityRenderObject*>(m_parent)->renderer(); 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project renderer = m_mapElement->renderer(); 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!renderer) 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return IntRect(); 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return m_areaElement->computeRect(renderer); 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 140643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockString AccessibilityImageMapLink::stringValueForMSAA() const 141643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 142643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return url(); 143643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 144643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 145643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockString AccessibilityImageMapLink::nameForMSAA() const 146643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 147643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return accessibilityDescription(); 148643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 149643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 151