Changeset 64874 in webkit
- Timestamp:
- Aug 6, 2010 3:20:36 PM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r64873 r64874 1 2010-08-06 Eric Seidel <eric@webkit.org> 2 3 Reviewed by Chris Fleizach. 4 5 Make AX Code use more specific RenderObject subclass types 6 https://bugs.webkit.org/show_bug.cgi?id=43632 7 8 No functional change, thus no tests. 9 10 * accessibility/AXObjectCache.cpp: 11 (WebCore::nodeHasRole): 12 - Make this take a String instead of AtomicString, to avoid 13 thrashing the atomic string hash. 14 It would be better to take a const char* here, except 15 one caller passes nullAtom. 16 (WebCore::createFromRenderer): 17 - Split this out from getOrCreate to make it simpler. 18 - No longer needs to deal with setting a "result" 19 pointer and can instead just return. 20 - I've also made this function use RenderBoxModelObject* 21 where appropriate. 22 (WebCore::AXObjectCache::getOrCreate): 23 * accessibility/AXObjectCache.h: 24 * accessibility/AccessibilityImageMapLink.cpp: 25 (WebCore::AccessibilityImageMapLink::AccessibilityImageMapLink): 26 - Fix style. 27 * accessibility/AccessibilityMenuList.cpp: 28 (WebCore::AccessibilityMenuList::AccessibilityMenuList): 29 - Use a more specific type. 30 (WebCore::AccessibilityMenuList::renderer): 31 * accessibility/AccessibilityMenuList.h: 32 (WebCore::AccessibilityMenuList::create): 33 * accessibility/AccessibilityMenuListPopup.cpp: 34 - Need RenderMenuList.h since renderer() is a RenderMenuList* 35 * accessibility/AccessibilityObject.cpp: 36 (WebCore::renderListItemContainerForNode): 37 * accessibility/AccessibilityRenderObject.cpp: 38 (WebCore::AccessibilityRenderObject::renderBoxModelObject): 39 - New helper function, similar to Node::renderBoxModelObject() 40 (WebCore::isInlineWithContinuation): 41 (WebCore::AccessibilityRenderObject::isNativeImage): 42 (WebCore::AccessibilityRenderObject::isAttachment): 43 (WebCore::AccessibilityRenderObject::isMultiSelectable): 44 (WebCore::AccessibilityRenderObject::isReadOnly): 45 (WebCore::AccessibilityRenderObject::isFieldset): 46 (WebCore::AccessibilityRenderObject::actionElement): 47 (WebCore::AccessibilityRenderObject::stringValue): 48 (WebCore::AccessibilityRenderObject::accessibilityIsIgnored): 49 (WebCore::AccessibilityRenderObject::setValue): 50 (WebCore::AccessibilityRenderObject::widget): 51 (WebCore::AccessibilityRenderObject::visiblePositionForPoint): 52 (WebCore::AccessibilityRenderObject::doAccessibilityHitTest): 53 (WebCore::AccessibilityRenderObject::renderObjectIsObservable): 54 (WebCore::AccessibilityRenderObject::determineAccessibilityRole): 55 (WebCore::AccessibilityRenderObject::addChildren): 56 (WebCore::msaaRoleForRenderer): 57 * accessibility/AccessibilityRenderObject.h: 58 * accessibility/AccessibilityTable.cpp: 59 (WebCore::AccessibilityTable::isTableExposableThroughAccessibility): 60 * accessibility/AccessibilityTable.h: 61 - Remove unneeded "using namespace std". 62 1 63 2010-08-06 Tony Gentilcore <tonyg@chromium.org> 2 64 -
trunk/WebCore/accessibility/AXObjectCache.cpp
r61595 r64874 60 60 #include "InputElement.h" 61 61 #include "Page.h" 62 #include "RenderObject.h" 62 #include "RenderListBox.h" 63 #include "RenderMenuList.h" 64 #include "RenderTable.h" 65 #include "RenderTableCell.h" 66 #include "RenderTableRow.h" 63 67 #include "RenderProgress.h" 68 #include "RenderSlider.h" 64 69 #include "RenderView.h" 65 70 … … 161 166 return obj; 162 167 } 163 164 bool AXObjectCache::nodeHasRole(Node* node, const AtomicString& role) 168 169 // FIXME: This probably belongs on Node. 170 // FIXME: This should take a const char*, but one caller passes nullAtom. 171 bool nodeHasRole(Node* node, const String& role) 165 172 { 166 173 if (!node || !node->isElementNode()) 167 174 return false; 168 175 169 176 return equalIgnoringCase(static_cast<Element*>(node)->getAttribute(roleAttr), role); 170 177 } 171 178 172 AccessibilityObject* AXObjectCache::getOrCreate(RenderObject* renderer) 173 { 174 if (!renderer) 175 return 0; 176 177 AccessibilityObject* obj = get(renderer); 178 179 if (!obj) { 180 Node* node = renderer->node(); 181 RefPtr<AccessibilityObject> newObj = 0; 182 if (renderer->isListBox()) 183 newObj = AccessibilityListBox::create(renderer); 184 else if (renderer->isMenuList()) 185 newObj = AccessibilityMenuList::create(renderer); 186 187 // If the node is aria role="list" or the aria role is empty and its a ul/ol/dl type (it shouldn't be a list if aria says otherwise). 188 else if (node && ((nodeHasRole(node, "list") || nodeHasRole(node, "directory")) 189 || (nodeHasRole(node, nullAtom) && (node->hasTagName(ulTag) || node->hasTagName(olTag) || node->hasTagName(dlTag))))) 190 newObj = AccessibilityList::create(renderer); 191 192 // aria tables 193 else if (nodeHasRole(node, "grid") || nodeHasRole(node, "treegrid")) 194 newObj = AccessibilityARIAGrid::create(renderer); 195 else if (nodeHasRole(node, "row")) 196 newObj = AccessibilityARIAGridRow::create(renderer); 197 else if (nodeHasRole(node, "gridcell") || nodeHasRole(node, "columnheader") || nodeHasRole(node, "rowheader")) 198 newObj = AccessibilityARIAGridCell::create(renderer); 179 static PassRefPtr<AccessibilityObject> createFromRenderer(RenderObject* renderer) 180 { 181 // FIXME: How could renderer->node() ever not be an Element? 182 Node* node = renderer->node(); 183 184 // If the node is aria role="list" or the aria role is empty and its a 185 // ul/ol/dl type (it shouldn't be a list if aria says otherwise). 186 if (node && ((nodeHasRole(node, "list") || nodeHasRole(node, "directory")) 187 || (nodeHasRole(node, nullAtom) && (node->hasTagName(ulTag) || node->hasTagName(olTag) || node->hasTagName(dlTag))))) 188 return AccessibilityList::create(renderer); 189 190 // aria tables 191 if (nodeHasRole(node, "grid") || nodeHasRole(node, "treegrid")) 192 return AccessibilityARIAGrid::create(renderer); 193 if (nodeHasRole(node, "row")) 194 return AccessibilityARIAGridRow::create(renderer); 195 if (nodeHasRole(node, "gridcell") || nodeHasRole(node, "columnheader") || nodeHasRole(node, "rowheader")) 196 return AccessibilityARIAGridCell::create(renderer); 197 198 #if ENABLE(VIDEO) 199 // media controls 200 if (node && node->isMediaControlElement()) 201 return AccessibilityMediaControl::create(renderer); 202 #endif 203 204 if (renderer->isBoxModelObject()) { 205 RenderBoxModelObject* cssBox = toRenderBoxModelObject(renderer); 206 if (cssBox->isListBox()) 207 return AccessibilityListBox::create(toRenderListBox(cssBox)); 208 if (cssBox->isMenuList()) 209 return AccessibilityMenuList::create(toRenderMenuList(cssBox)); 199 210 200 211 // standard tables 201 else if (renderer->isTable()) 202 newObj = AccessibilityTable::create(renderer); 203 else if (renderer->isTableRow()) 204 newObj = AccessibilityTableRow::create(renderer); 205 else if (renderer->isTableCell()) 206 newObj = AccessibilityTableCell::create(renderer); 207 208 #if ENABLE(VIDEO) 209 // media controls 210 else if (renderer->node() && renderer->node()->isMediaControlElement()) 211 newObj = AccessibilityMediaControl::create(renderer); 212 #endif 212 if (cssBox->isTable()) 213 return AccessibilityTable::create(toRenderTable(cssBox)); 214 if (cssBox->isTableRow()) 215 return AccessibilityTableRow::create(toRenderTableRow(cssBox)); 216 if (cssBox->isTableCell()) 217 return AccessibilityTableCell::create(toRenderTableCell(cssBox)); 213 218 214 219 #if ENABLE(PROGRESS_TAG) 215 220 // progress bar 216 else if (renderer->isProgress())217 newObj = AccessibilityProgressIndicator::create(toRenderProgress(renderer));221 if (cssBox->isProgress()) 222 return AccessibilityProgressIndicator::create(toRenderProgress(cssBox)); 218 223 #endif 219 224 220 225 // input type=range 221 else if (renderer->isSlider()) 222 newObj = AccessibilitySlider::create(renderer); 223 224 else 225 newObj = AccessibilityRenderObject::create(renderer); 226 227 obj = newObj.get(); 228 229 getAXID(obj); 230 231 m_renderObjectMapping.set(renderer, obj->axObjectID()); 232 m_objects.set(obj->axObjectID(), obj); 233 attachWrapper(obj); 234 } 235 236 return obj; 226 if (cssBox->isSlider()) 227 return AccessibilitySlider::create(toRenderSlider(cssBox)); 228 } 229 230 return AccessibilityRenderObject::create(renderer); 231 } 232 233 AccessibilityObject* AXObjectCache::getOrCreate(RenderObject* renderer) 234 { 235 if (!renderer) 236 return 0; 237 238 if (AccessibilityObject* obj = get(renderer)) 239 return obj; 240 241 RefPtr<AccessibilityObject> newObj = createFromRenderer(renderer); 242 243 getAXID(newObj.get()); 244 245 m_renderObjectMapping.set(renderer, newObj->axObjectID()); 246 m_objects.set(newObj->axObjectID(), newObj); 247 attachWrapper(newObj.get()); 248 return newObj.get(); 237 249 } 238 250 -
trunk/WebCore/accessibility/AXObjectCache.h
r64861 r64874 125 125 void postNotification(AccessibilityObject*, Document*, AXNotification, bool postToElement, PostType = PostAsynchronously); 126 126 127 bool nodeHasRole(Node*, const AtomicString& role);128 129 127 protected: 130 128 void postPlatformNotification(AccessibilityObject*, AXNotification); … … 147 145 }; 148 146 147 bool nodeHasRole(Node*, const String& role); 148 149 149 #if !HAVE(ACCESSIBILITY) 150 150 inline void AXObjectCache::handleActiveDescendantChanged(RenderObject*) { } -
trunk/WebCore/accessibility/AccessibilityImageMapLink.cpp
r63358 r64874 34 34 #include "Document.h" 35 35 #include "HTMLNames.h" 36 #include "IntRect.h" 37 #include "RenderObject.h" 38 39 using namespace std; 36 #include "RenderBoxModelObject.h" 40 37 41 38 namespace WebCore { … … 44 41 45 42 AccessibilityImageMapLink::AccessibilityImageMapLink() 46 : m_areaElement(0) ,47 43 : m_areaElement(0) 44 , m_mapElement(0) 48 45 { 49 46 } -
trunk/WebCore/accessibility/AccessibilityMenuList.cpp
r53512 r64874 33 33 namespace WebCore { 34 34 35 AccessibilityMenuList::AccessibilityMenuList(Render Object* renderer)35 AccessibilityMenuList::AccessibilityMenuList(RenderMenuList* renderer) 36 36 : AccessibilityRenderObject(renderer) 37 37 { 38 ASSERT_ARG(renderer, renderer->isMenuList()); 38 } 39 40 RenderMenuList* AccessibilityMenuList::renderer() const 41 { 42 return toRenderMenuList(AccessibilityRenderObject::renderer()); 39 43 } 40 44 -
trunk/WebCore/accessibility/AccessibilityMenuList.h
r62978 r64874 34 34 class AccessibilityMenuListPopup; 35 35 class HTMLOptionElement; 36 class RenderMenuList; 36 37 37 38 class AccessibilityMenuList : public AccessibilityRenderObject { 38 39 public: 39 static PassRefPtr<AccessibilityMenuList> create(Render Object* renderer) { return adoptRef(new AccessibilityMenuList(renderer)); }40 static PassRefPtr<AccessibilityMenuList> create(RenderMenuList* renderer) { return adoptRef(new AccessibilityMenuList(renderer)); } 40 41 41 42 virtual bool isCollapsed() const; 42 43 virtual bool press() const; 43 44 45 RenderMenuList* renderer() const; 46 44 47 private: 45 AccessibilityMenuList(Render Object*);48 AccessibilityMenuList(RenderMenuList*); 46 49 47 50 virtual bool isMenuList() const { return true; } -
trunk/WebCore/accessibility/AccessibilityMenuListPopup.cpp
r53512 r64874 32 32 #include "HTMLNames.h" 33 33 #include "HTMLSelectElement.h" 34 #include "Render Object.h"34 #include "RenderMenuList.h" 35 35 36 36 namespace WebCore { -
trunk/WebCore/accessibility/AccessibilityObject.cpp
r64721 r64874 417 417 static RenderListItem* renderListItemContainerForNode(Node* node) 418 418 { 419 for (Node* stringNode = node; stringNode; stringNode = stringNode->parent()) { 420 RenderObject* renderObject = stringNode->renderer(); 421 if (!renderObject || !renderObject->isListItem()) 422 continue; 423 424 return toRenderListItem(renderObject); 425 } 426 419 for (; node; node = node->parent()) { 420 RenderBoxModelObject* renderer = node->renderBoxModelObject(); 421 if (renderer && renderer->isListItem()) 422 return toRenderListItem(renderer); 423 } 427 424 return 0; 428 425 } -
trunk/WebCore/accessibility/AccessibilityRenderObject.cpp
r64475 r64874 121 121 } 122 122 123 static inline bool isInlineWithContinuation(RenderObject* renderer) 124 { 123 RenderBoxModelObject* AccessibilityRenderObject::renderBoxModelObject() const 124 { 125 if (!m_renderer || !m_renderer->isBoxModelObject()) 126 return 0; 127 return toRenderBoxModelObject(m_renderer); 128 } 129 130 static inline bool isInlineWithContinuation(RenderObject* object) 131 { 132 if (!object->isBoxModelObject()) 133 return false; 134 135 RenderBoxModelObject* renderer = toRenderBoxModelObject(object); 125 136 if (!renderer->isRenderInline()) 126 137 return false; … … 430 441 bool AccessibilityRenderObject::isNativeImage() const 431 442 { 432 return m_renderer->is Image();443 return m_renderer->isBoxModelObject() && toRenderBoxModelObject(m_renderer)->isImage(); 433 444 } 434 445 … … 440 451 bool AccessibilityRenderObject::isAttachment() const 441 452 { 442 if (!m_renderer)443 return false;444 453 RenderBoxModelObject* renderer = renderBoxModelObject(); 454 if (!renderer) 455 return false; 445 456 // Widgets are the replaced elements that we represent to AX as attachments 446 bool isWidget = m_renderer && m_renderer->isWidget();447 ASSERT(!isWidget || ( m_renderer->isReplaced() && !isImage()));457 bool isWidget = renderer->isWidget(); 458 ASSERT(!isWidget || (renderer->isReplaced() && !isImage())); 448 459 return isWidget && ariaRoleAttribute() == UnknownRole; 449 460 } … … 604 615 return false; 605 616 606 if (!m_renderer->is ListBox())617 if (!m_renderer->isBoxModelObject() || !toRenderBoxModelObject(m_renderer)->isListBox()) 607 618 return false; 608 619 return m_renderer->node() && static_cast<HTMLSelectElement*>(m_renderer->node())->multiple(); … … 629 640 } 630 641 631 if (m_renderer->isTextField()) 632 return static_cast<HTMLInputElement*>(m_renderer->node())->readOnly(); 633 if (m_renderer->isTextArea()) 634 return static_cast<HTMLTextAreaElement*>(m_renderer->node())->readOnly(); 635 642 if (m_renderer->isBoxModelObject()) { 643 RenderBoxModelObject* box = toRenderBoxModelObject(m_renderer); 644 if (box->isTextField()) 645 return static_cast<HTMLInputElement*>(box->node())->readOnly(); 646 if (box->isTextArea()) 647 return static_cast<HTMLTextAreaElement*>(box->node())->readOnly(); 648 } 649 636 650 return !m_renderer->node() || !m_renderer->node()->isContentEditable(); 637 651 } … … 700 714 bool AccessibilityRenderObject::isFieldset() const 701 715 { 702 if (!m_renderer)703 return false;704 705 return m_renderer->isFieldset();716 RenderBoxModelObject* renderer = renderBoxModelObject(); 717 if (!renderer) 718 return false; 719 return renderer->isFieldset(); 706 720 } 707 721 … … 790 804 return static_cast<Element*>(node); 791 805 } 792 806 793 807 if (isFileUploadButton()) 794 808 return static_cast<Element*>(m_renderer->node()); … … 800 814 return static_cast<Element*>(m_renderer->node()); 801 815 802 if (m_renderer->is MenuList())816 if (m_renderer->isBoxModelObject() && toRenderBoxModelObject(m_renderer)->isMenuList()) 803 817 return static_cast<Element*>(m_renderer->node()); 804 818 … … 1050 1064 if (!m_renderer || isPasswordField()) 1051 1065 return String(); 1052 1066 1067 RenderBoxModelObject* cssBox = renderBoxModelObject(); 1068 1053 1069 if (ariaRoleAttribute() == StaticTextRole) { 1054 1070 String staticText = text(); … … 1061 1077 return textUnderElement(); 1062 1078 1063 if ( m_renderer->isMenuList()) {1079 if (cssBox && cssBox->isMenuList()) { 1064 1080 // RenderMenuList will go straight to the text() of its selected item. 1065 1081 // This has to be overriden in the case where the selected item has an aria label … … 1083 1099 return toRenderListMarker(m_renderer)->text(); 1084 1100 1085 if ( m_renderer->isRenderButton())1101 if (cssBox && cssBox->isRenderButton()) 1086 1102 return toRenderButton(m_renderer)->text(); 1087 1103 … … 1702 1718 if (!isAllowedChildOfTree()) 1703 1719 return true; 1704 1720 1705 1721 // ignore popup menu items because AppKit does 1706 1722 for (RenderObject* parent = m_renderer->parent(); parent; parent = parent->parent()) { 1707 if (parent->is MenuList())1723 if (parent->isBoxModelObject() && toRenderBoxModelObject(parent)->isMenuList()) 1708 1724 return true; 1709 1725 } 1710 1726 1711 1727 // find out if this element is inside of a label element. 1712 1728 // if so, it may be ignored because it's the label for a checkbox or radio button … … 2183 2199 void AccessibilityRenderObject::setValue(const String& string) 2184 2200 { 2185 if (!m_renderer )2201 if (!m_renderer || !m_renderer->node() || !m_renderer->node()->isElementNode()) 2186 2202 return; 2187 2203 Element* element = static_cast<Element*>(m_renderer->node()); 2204 2205 if (roleValue() == SliderRole) 2206 element->setAttribute(aria_valuenowAttr, string); 2207 2208 if (!m_renderer->isBoxModelObject()) 2209 return; 2210 RenderBoxModelObject* renderer = toRenderBoxModelObject(m_renderer); 2211 2188 2212 // FIXME: Do we want to do anything here for ARIA textboxes? 2189 if (m_renderer->isTextField()) { 2190 HTMLInputElement* input = static_cast<HTMLInputElement*>(m_renderer->node()); 2191 input->setValue(string); 2192 } else if (m_renderer->isTextArea()) { 2193 HTMLTextAreaElement* textArea = static_cast<HTMLTextAreaElement*>(m_renderer->node()); 2194 textArea->setValue(string); 2195 } else if (roleValue() == SliderRole) { 2196 Node* element = m_renderer->node(); 2197 if (element && element->isElementNode()) 2198 static_cast<Element*>(element)->setAttribute(aria_valuenowAttr, string); 2213 if (renderer->isTextField()) { 2214 // FIXME: This is not safe! Other elements could have a TextField renderer. 2215 static_cast<HTMLInputElement*>(element)->setValue(string); 2216 } else if (renderer->isTextArea()) { 2217 // FIXME: This is not safe! Other elements could have a TextArea renderer. 2218 static_cast<HTMLTextAreaElement*>(element)->setValue(string); 2199 2219 } 2200 2220 } … … 2256 2276 Widget* AccessibilityRenderObject::widget() const 2257 2277 { 2258 if (!m_renderer->is Widget())2278 if (!m_renderer->isBoxModelObject() || !toRenderBoxModelObject(m_renderer)->isWidget()) 2259 2279 return 0; 2260 2280 return toRenderWidget(m_renderer)->widget(); … … 2517 2537 2518 2538 pointResult = result.localPoint(); 2519 2539 2520 2540 // done if hit something other than a widget 2521 Render Object* renderer = innerNode->renderer();2541 RenderBoxModelObject* renderer = innerNode->renderBoxModelObject(); 2522 2542 if (!renderer->isWidget()) 2523 2543 break; 2524 2544 2525 2545 // descend into widget (FRAME, IFRAME, OBJECT...) 2526 2546 Widget* widget = toRenderWidget(renderer)->widget(); … … 2707 2727 AccessibilityObject* result = obj->document()->axObjectCache()->getOrCreate(obj); 2708 2728 2709 if (obj->is ListBox()) {2729 if (obj->isBoxModelObject() && toRenderBoxModelObject(obj)->isListBox()) { 2710 2730 // Make sure the children are initialized so that hit testing finds the right element. 2711 2731 AccessibilityListBox* listBox = static_cast<AccessibilityListBox*>(result); … … 2713 2733 return listBox->doAccessibilityHitTest(point); 2714 2734 } 2715 2735 2716 2736 if (result->accessibilityIsIgnored()) { 2717 2737 // If this element is the label of a control, a hit test should return the control. … … 2871 2891 2872 2892 // AX clients will listen for AXSelectedChildrenChanged on listboxes. 2873 AXObjectCache* cache = axObjectCache();2874 2893 Node* node = renderer->node(); 2875 if ( renderer->isListBox() || cache->nodeHasRole(node, "listbox"))2894 if (nodeHasRole(node, "listbox") || (renderer->isBoxModelObject() && toRenderBoxModelObject(renderer)->isListBox())) 2876 2895 return true; 2877 2896 2878 2897 // Textboxes should send out notifications. 2879 if ( cache->nodeHasRole(node, "textbox"))2898 if (nodeHasRole(node, "textbox")) 2880 2899 return true; 2881 2900 … … 2951 2970 if (ariaRole != UnknownRole) 2952 2971 return ariaRole; 2953 2972 2973 RenderBoxModelObject* cssBox = renderBoxModelObject(); 2974 2954 2975 if (node && node->isLink()) { 2955 if ( m_renderer->isImage())2976 if (cssBox && cssBox->isImage()) 2956 2977 return ImageMapRole; 2957 2978 return WebCoreLinkRole; 2958 2979 } 2959 if ( m_renderer->isListItem())2980 if (cssBox && cssBox->isListItem()) 2960 2981 return ListItemRole; 2961 2982 if (m_renderer->isListMarker()) … … 2965 2986 if (m_renderer->isText()) 2966 2987 return StaticTextRole; 2967 if ( m_renderer->isImage()) {2988 if (cssBox && cssBox->isImage()) { 2968 2989 if (node && node->hasTagName(inputTag)) 2969 2990 return ButtonRole; … … 2972 2993 if (node && node->hasTagName(canvasTag)) 2973 2994 return ImageRole; 2974 2975 if ( m_renderer->isRenderView())2995 2996 if (cssBox && cssBox->isRenderView()) 2976 2997 return WebAreaRole; 2977 2998 2978 if ( m_renderer->isTextField())2999 if (cssBox && cssBox->isTextField()) 2979 3000 return TextFieldRole; 2980 3001 2981 if ( m_renderer->isTextArea())3002 if (cssBox && cssBox->isTextArea()) 2982 3003 return TextAreaRole; 2983 3004 2984 3005 if (node && node->hasTagName(inputTag)) { 2985 3006 HTMLInputElement* input = static_cast<HTMLInputElement*>(node); … … 2998 3019 return ButtonRole; 2999 3020 3000 if ( m_renderer->isMenuList())3021 if (cssBox && cssBox->isMenuList()) 3001 3022 return PopUpButtonRole; 3002 3023 … … 3288 3309 3289 3310 // for a RenderImage, add the <area> elements as individual accessibility objects 3290 if (m_renderer->isRenderImage()) { 3291 HTMLMapElement* map = toRenderImage(m_renderer)->imageMap(); 3311 RenderBoxModelObject* cssBox = renderBoxModelObject(); 3312 if (cssBox && cssBox->isRenderImage()) { 3313 HTMLMapElement* map = toRenderImage(cssBox)->imageMap(); 3292 3314 if (map) { 3293 3315 for (Node* current = map->firstChild(); current; current = current->traverseNextNode(map)) { … … 3606 3628 return EditableTextRole; 3607 3629 3608 if (renderer->is ListItem())3630 if (renderer->isBoxModelObject() && toRenderBoxModelObject(renderer)->isListItem()) 3609 3631 return ListItemRole; 3610 3632 -
trunk/WebCore/accessibility/AccessibilityRenderObject.h
r64861 r64874 1 1 2 /* 2 3 * Copyright (C) 2008 Apple Inc. All rights reserved. … … 31 32 32 33 #include "AccessibilityObject.h" 33 #include "RenderObject.h"34 #include <wtf/Forward.h> 34 35 35 36 namespace WebCore { … … 166 167 void setRenderer(RenderObject* renderer) { m_renderer = renderer; } 167 168 RenderObject* renderer() const { return m_renderer; } 169 RenderBoxModelObject* renderBoxModelObject() const; 168 170 virtual Node* node() const; 169 171 -
trunk/WebCore/accessibility/AccessibilityTable.cpp
r63994 r64874 44 44 #include "RenderTableSection.h" 45 45 46 using namespace std;47 48 46 namespace WebCore { 49 47 … … 76 74 // is to only show "data" tables 77 75 78 if (! m_renderer || !m_renderer->isTable())76 if (!renderer()) 79 77 return false; 80 78 … … 197 195 if (row < 5 && row == alternatingRowColorCount) { 198 196 RenderObject* renderRow = cell->parent(); 199 if (!renderRow || !renderRow->is TableRow())197 if (!renderRow || !renderRow->isBoxModelObject() || !toRenderBoxModelObject(renderRow)->isTableRow()) 200 198 continue; 201 199 RenderStyle* rowRenderStyle = renderRow->style(); -
trunk/WebCore/accessibility/AccessibilityTable.h
r64861 r64874 51 51 static PassRefPtr<AccessibilityTable> create(RenderObject*); 52 52 virtual ~AccessibilityTable(); 53 53 54 54 virtual bool isDataTable() const; 55 55 virtual AccessibilityRole roleValue() const; … … 79 79 // an object that contains, as children, all the objects that act as headers 80 80 AccessibilityObject* headerContainer(); 81 82 protected: 81 82 protected: 83 83 AccessibilityChildrenVector m_rows; 84 84 AccessibilityChildrenVector m_columns; 85 85 86 86 AccessibilityTableHeaderContainer* m_headerContainer; 87 87 mutable bool m_isAccessibilityTable; 88 88 89 89 bool isTableExposableThroughAccessibility(); 90 90 }; 91 91 92 92 } // namespace WebCore 93 93
Note: See TracChangeset
for help on using the changeset viewer.