Changeset 123219 in webkit
- Timestamp:
- Jul 20, 2012 7:57:55 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 4 deleted
- 27 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r123217 r123219 1 2012-07-20 Sheriff Bot <webkit.review.bot@gmail.com> 2 3 Unreviewed, rolling out r123182. 4 http://trac.webkit.org/changeset/123182 5 https://bugs.webkit.org/show_bug.cgi?id=91863 6 7 Causing ASSERT crashes in tests accessibility/canvas.html and 8 accessibility/canvas-accessibilitynodeobject.html (Requested 9 by jernoble on #webkit). 10 11 * accessibility/canvas-accessibilitynodeobject-expected.txt: Removed. 12 * accessibility/canvas-accessibilitynodeobject.html: Removed. 13 1 14 2012-07-20 Stephen Chenney <schenney@chromium.org> 2 15 -
trunk/Source/WebCore/CMakeLists.txt
r123182 r123219 936 936 accessibility/AccessibilityMenuListPopup.cpp 937 937 accessibility/AccessibilityMockObject.cpp 938 accessibility/AccessibilityNodeObject.cpp939 938 accessibility/AccessibilityObject.cpp 940 939 accessibility/AccessibilityProgressIndicator.cpp -
trunk/Source/WebCore/ChangeLog
r123218 r123219 1 2012-07-20 Sheriff Bot <webkit.review.bot@gmail.com> 2 3 Unreviewed, rolling out r123182. 4 http://trac.webkit.org/changeset/123182 5 https://bugs.webkit.org/show_bug.cgi?id=91863 6 7 Causing ASSERT crashes in tests accessibility/canvas.html and 8 accessibility/canvas-accessibilitynodeobject.html (Requested 9 by jernoble on #webkit). 10 11 * CMakeLists.txt: 12 * GNUmakefile.list.am: 13 * Target.pri: 14 * WebCore.gypi: 15 * accessibility/AXObjectCache.cpp: 16 (WebCore): 17 * accessibility/AXObjectCache.h: 18 (AXObjectCache): 19 * accessibility/AccessibilityARIAGrid.cpp: 20 (WebCore::AccessibilityARIAGrid::AccessibilityARIAGrid): 21 (WebCore::AccessibilityARIAGrid::~AccessibilityARIAGrid): 22 (WebCore): 23 (WebCore::AccessibilityARIAGrid::create): 24 * accessibility/AccessibilityARIAGrid.h: 25 (AccessibilityARIAGrid): 26 * accessibility/AccessibilityARIAGridCell.cpp: 27 (WebCore::AccessibilityARIAGridCell::create): 28 * accessibility/AccessibilityARIAGridRow.cpp: 29 (WebCore::AccessibilityARIAGridRow::create): 30 * accessibility/AccessibilityAllInOne.cpp: 31 * accessibility/AccessibilityList.cpp: 32 (WebCore::AccessibilityList::create): 33 * accessibility/AccessibilityListBox.cpp: 34 (WebCore::AccessibilityListBox::create): 35 * accessibility/AccessibilityMediaControls.cpp: 36 (WebCore::AccessibilityMediaControl::create): 37 (WebCore::AccessibilityMediaControlsContainer::create): 38 (WebCore::AccessibilityMediaTimeline::create): 39 (WebCore::AccessibilityMediaTimeDisplay::create): 40 * accessibility/AccessibilityMenuList.cpp: 41 * accessibility/AccessibilityMenuList.h: 42 (WebCore::AccessibilityMenuList::create): 43 * accessibility/AccessibilityNodeObject.cpp: Removed. 44 * accessibility/AccessibilityNodeObject.h: Removed. 45 * accessibility/AccessibilityObject.h: 46 (AccessibilityObject): 47 * accessibility/AccessibilityProgressIndicator.cpp: 48 (WebCore::AccessibilityProgressIndicator::create): 49 * accessibility/AccessibilityRenderObject.cpp: 50 (WebCore::AccessibilityRenderObject::AccessibilityRenderObject): 51 (WebCore::AccessibilityRenderObject::create): 52 (WebCore::AccessibilityRenderObject::detach): 53 (WebCore::AccessibilityRenderObject::remapAriaRoleDueToParent): 54 (WebCore): 55 (WebCore::AccessibilityRenderObject::determineAriaRoleAttribute): 56 (WebCore::AccessibilityRenderObject::ariaRoleAttribute): 57 (WebCore::AccessibilityRenderObject::updateAccessibilityRole): 58 (WebCore::AccessibilityRenderObject::canSetFocusAttribute): 59 (WebCore::AccessibilityRenderObject::childrenChanged): 60 (WebCore::AccessibilityRenderObject::canHaveChildren): 61 (WebCore::AccessibilityRenderObject::addChildren): 62 * accessibility/AccessibilityRenderObject.h: 63 (AccessibilityRenderObject): 64 (WebCore::AccessibilityRenderObject::setRenderer): 65 * accessibility/AccessibilitySlider.cpp: 66 (WebCore::AccessibilitySlider::create): 67 * accessibility/AccessibilityTable.cpp: 68 (WebCore::AccessibilityTable::AccessibilityTable): 69 (WebCore::AccessibilityTable::~AccessibilityTable): 70 (WebCore): 71 (WebCore::AccessibilityTable::create): 72 * accessibility/AccessibilityTable.h: 73 (AccessibilityTable): 74 * accessibility/AccessibilityTableCell.cpp: 75 (WebCore::AccessibilityTableCell::create): 76 * accessibility/AccessibilityTableRow.cpp: 77 (WebCore::AccessibilityTableRow::create): 78 1 79 2012-07-20 Christophe Dumez <christophe.dumez@intel.com> 2 80 -
trunk/Source/WebCore/GNUmakefile.list.am
r123182 r123219 1318 1318 Source/WebCore/accessibility/AccessibilityMockObject.cpp \ 1319 1319 Source/WebCore/accessibility/AccessibilityMockObject.h \ 1320 Source/WebCore/accessibility/AccessibilityNodeObject.cpp \1321 Source/WebCore/accessibility/AccessibilityNodeObject.h \1322 1320 Source/WebCore/accessibility/AccessibilityObject.cpp \ 1323 1321 Source/WebCore/accessibility/AccessibilityObject.h \ -
trunk/Source/WebCore/Target.pri
r123182 r123219 53 53 accessibility/AccessibilityListBox.cpp \ 54 54 accessibility/AccessibilityListBoxOption.cpp \ 55 accessibility/AccessibilityNodeObject.cpp \56 55 accessibility/AccessibilityProgressIndicator.cpp \ 57 56 accessibility/AccessibilityRenderObject.cpp \ -
trunk/Source/WebCore/WebCore.gypi
r123182 r123219 1793 1793 'accessibility/AccessibilityMockObject.cpp', 1794 1794 'accessibility/AccessibilityMockObject.h', 1795 'accessibility/AccessibilityNodeObject.cpp',1796 'accessibility/AccessibilityNodeObject.h',1797 1795 'accessibility/AccessibilityObject.cpp', 1798 1796 'accessibility/AccessibilityProgressIndicator.cpp', -
trunk/Source/WebCore/accessibility/AXObjectCache.cpp
r123182 r123219 189 189 } 190 190 191 AccessibilityObject* AXObjectCache::get(Node* node)192 {193 if (!node)194 return 0;195 196 // Always prefer building the AccessibilityObject from the renderer if there is one.197 if (node->renderer())198 return get(node->renderer());199 200 AXID axID = m_nodeObjectMapping.get(node);201 ASSERT(!HashTraits<AXID>::isDeletedValue(axID));202 if (!axID)203 return 0;204 205 return m_objects.get(axID).get();206 }207 208 191 // FIXME: This probably belongs on Node. 209 192 // FIXME: This should take a const char*, but one caller passes nullAtom. … … 270 253 } 271 254 272 static PassRefPtr<AccessibilityObject> createFromNode(Node* node)273 {274 return AccessibilityNodeObject::create(node);275 }276 277 255 AccessibilityObject* AXObjectCache::getOrCreate(Widget* widget) 278 256 { … … 296 274 return newObj.get(); 297 275 } 298 299 AccessibilityObject* AXObjectCache::getOrCreate(Node* node) 300 { 301 if (!node) 302 return 0; 303 304 if (AccessibilityObject* obj = get(node)) 305 return obj; 306 307 if (node->renderer()) 308 return getOrCreate(node->renderer()); 309 310 // It's only allowed to create an AccessibilityObject from a Node if it's in a canvas subtree. 311 if (!node->parentElement() || !node->parentElement()->isInCanvasSubtree()) 312 return 0; 313 314 RefPtr<AccessibilityObject> newObj = createFromNode(node); 315 316 getAXID(newObj.get()); 317 318 m_nodeObjectMapping.set(node, newObj->axObjectID()); 319 m_objects.set(newObj->axObjectID(), newObj); 320 attachWrapper(newObj.get()); 321 return newObj.get(); 322 } 323 276 324 277 AccessibilityObject* AXObjectCache::getOrCreate(RenderObject* renderer) 325 278 { … … 436 389 } 437 390 438 void AXObjectCache::remove(Node* node)439 {440 if (!node)441 return;442 443 removeNodeForUse(node);444 445 // This is all safe even if we didn't have a mapping.446 AXID axID = m_nodeObjectMapping.get(node);447 remove(axID);448 m_nodeObjectMapping.remove(node);449 450 if (node->renderer()) {451 remove(node->renderer());452 return;453 }454 }455 456 391 void AXObjectCache::remove(Widget* view) 457 392 { -
trunk/Source/WebCore/accessibility/AXObjectCache.h
r123182 r123219 71 71 AccessibilityObject* getOrCreate(RenderObject*); 72 72 AccessibilityObject* getOrCreate(Widget*); 73 AccessibilityObject* getOrCreate(Node*);74 73 75 74 // used for objects without backing elements … … 79 78 AccessibilityObject* get(RenderObject*); 80 79 AccessibilityObject* get(Widget*); 81 AccessibilityObject* get(Node*);82 80 83 81 void remove(RenderObject*); 84 void remove(Node*);85 82 void remove(Widget*); 86 83 void remove(AXID); … … 186 183 HashMap<RenderObject*, AXID> m_renderObjectMapping; 187 184 HashMap<Widget*, AXID> m_widgetObjectMapping; 188 HashMap<Node*, AXID> m_nodeObjectMapping;189 185 HashSet<Node*> m_textMarkerNodes; 190 186 static bool gAccessibilityEnabled; … … 209 205 inline AccessibilityObject* AXObjectCache::focusedUIElementForPage(const Page*) { return 0; } 210 206 inline AccessibilityObject* AXObjectCache::get(RenderObject*) { return 0; } 211 inline AccessibilityObject* AXObjectCache::get(Node*) { return 0; }212 207 inline AccessibilityObject* AXObjectCache::get(Widget*) { return 0; } 213 208 inline AccessibilityObject* AXObjectCache::getOrCreate(AccessibilityRole) { return 0; } 214 209 inline AccessibilityObject* AXObjectCache::getOrCreate(RenderObject*) { return 0; } 215 inline AccessibilityObject* AXObjectCache::getOrCreate(Node*) { return 0; }216 210 inline AccessibilityObject* AXObjectCache::getOrCreate(Widget*) { return 0; } 217 211 inline AccessibilityObject* AXObjectCache::rootObject() { return 0; } … … 240 234 inline void AXObjectCache::remove(AXID) { } 241 235 inline void AXObjectCache::remove(RenderObject*) { } 242 inline void AXObjectCache::remove(Node*) { }243 236 inline void AXObjectCache::remove(Widget*) { } 244 237 inline void AXObjectCache::selectedChildrenChanged(RenderObject*) { } -
trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.cpp
r123182 r123219 44 44 : AccessibilityTable(renderer) 45 45 { 46 }47 48 AccessibilityARIAGrid::~AccessibilityARIAGrid()49 {50 }51 52 void AccessibilityARIAGrid::init()53 {54 AccessibilityTable::init();55 46 #if ACCESSIBILITY_TABLES 56 47 m_isAccessibilityTable = true; … … 60 51 } 61 52 53 AccessibilityARIAGrid::~AccessibilityARIAGrid() 54 { 55 } 56 62 57 PassRefPtr<AccessibilityARIAGrid> AccessibilityARIAGrid::create(RenderObject* renderer) 63 58 { 64 AccessibilityARIAGrid* obj = new AccessibilityARIAGrid(renderer); 65 obj->init(); 66 return adoptRef(obj); 59 return adoptRef(new AccessibilityARIAGrid(renderer)); 67 60 } 68 61 -
trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.h
r123182 r123219 45 45 static PassRefPtr<AccessibilityARIAGrid> create(RenderObject*); 46 46 virtual ~AccessibilityARIAGrid(); 47 48 virtual void init();49 47 50 48 virtual bool isAriaTable() const { return true; } -
trunk/Source/WebCore/accessibility/AccessibilityARIAGridCell.cpp
r123182 r123219 49 49 PassRefPtr<AccessibilityARIAGridCell> AccessibilityARIAGridCell::create(RenderObject* renderer) 50 50 { 51 AccessibilityARIAGridCell* obj = new AccessibilityARIAGridCell(renderer); 52 obj->init(); 53 return adoptRef(obj); 51 return adoptRef(new AccessibilityARIAGridCell(renderer)); 54 52 } 55 53 -
trunk/Source/WebCore/accessibility/AccessibilityARIAGridRow.cpp
r123182 r123219 49 49 PassRefPtr<AccessibilityARIAGridRow> AccessibilityARIAGridRow::create(RenderObject* renderer) 50 50 { 51 AccessibilityARIAGridRow* obj = new AccessibilityARIAGridRow(renderer); 52 obj->init(); 53 return adoptRef(obj); 51 return adoptRef(new AccessibilityARIAGridRow(renderer)); 54 52 } 55 53 -
trunk/Source/WebCore/accessibility/AccessibilityAllInOne.cpp
r123182 r123219 35 35 #include "AccessibilityListBoxOption.cpp" 36 36 #include "AccessibilityMediaControls.cpp" 37 #include "AccessibilityNodeObject.cpp"38 37 #include "AccessibilityObject.cpp" 39 38 #include "AccessibilityRenderObject.cpp" -
trunk/Source/WebCore/accessibility/AccessibilityList.cpp
r123182 r123219 51 51 PassRefPtr<AccessibilityList> AccessibilityList::create(RenderObject* renderer) 52 52 { 53 AccessibilityList* obj = new AccessibilityList(renderer); 54 obj->init(); 55 return adoptRef(obj); 53 return adoptRef(new AccessibilityList(renderer)); 56 54 } 57 55 -
trunk/Source/WebCore/accessibility/AccessibilityListBox.cpp
r123182 r123219 55 55 PassRefPtr<AccessibilityListBox> AccessibilityListBox::create(RenderObject* renderer) 56 56 { 57 AccessibilityListBox* obj = new AccessibilityListBox(renderer); 58 obj->init(); 59 return adoptRef(obj); 57 return adoptRef(new AccessibilityListBox(renderer)); 60 58 } 61 59 -
trunk/Source/WebCore/accessibility/AccessibilityMediaControls.cpp
r123182 r123219 68 68 return AccessibilityMediaControlsContainer::create(renderer); 69 69 70 default: { 71 AccessibilityMediaControl* obj = new AccessibilityMediaControl(renderer); 72 obj->init(); 73 return adoptRef(obj); 74 } 70 default: 71 return adoptRef(new AccessibilityMediaControl(renderer)); 75 72 } 76 73 } … … 211 208 PassRefPtr<AccessibilityObject> AccessibilityMediaControlsContainer::create(RenderObject* renderer) 212 209 { 213 AccessibilityMediaControlsContainer* obj = new AccessibilityMediaControlsContainer(renderer); 214 obj->init(); 215 return adoptRef(obj); 210 return adoptRef(new AccessibilityMediaControlsContainer(renderer)); 216 211 } 217 212 … … 257 252 PassRefPtr<AccessibilityObject> AccessibilityMediaTimeline::create(RenderObject* renderer) 258 253 { 259 AccessibilityMediaTimeline* obj = new AccessibilityMediaTimeline(renderer); 260 obj->init(); 261 return adoptRef(obj); 254 return adoptRef(new AccessibilityMediaTimeline(renderer)); 262 255 } 263 256 … … 289 282 PassRefPtr<AccessibilityObject> AccessibilityMediaTimeDisplay::create(RenderObject* renderer) 290 283 { 291 AccessibilityMediaTimeDisplay* obj = new AccessibilityMediaTimeDisplay(renderer); 292 obj->init(); 293 return adoptRef(obj); 284 return adoptRef(new AccessibilityMediaTimeDisplay(renderer)); 294 285 } 295 286 -
trunk/Source/WebCore/accessibility/AccessibilityMenuList.cpp
r123182 r123219 36 36 : AccessibilityRenderObject(renderer) 37 37 { 38 }39 40 PassRefPtr<AccessibilityMenuList> AccessibilityMenuList::create(RenderMenuList* renderer)41 {42 AccessibilityMenuList* obj = new AccessibilityMenuList(renderer);43 obj->init();44 return adoptRef(obj);45 38 } 46 39 -
trunk/Source/WebCore/accessibility/AccessibilityMenuList.h
r123182 r123219 38 38 class AccessibilityMenuList : public AccessibilityRenderObject { 39 39 public: 40 static PassRefPtr<AccessibilityMenuList> create(RenderMenuList* renderer) ;40 static PassRefPtr<AccessibilityMenuList> create(RenderMenuList* renderer) { return adoptRef(new AccessibilityMenuList(renderer)); } 41 41 42 42 virtual bool isCollapsed() const; -
trunk/Source/WebCore/accessibility/AccessibilityObject.h
r123182 r123219 318 318 typedef Vector<RefPtr<AccessibilityObject> > AccessibilityChildrenVector; 319 319 320 virtual bool isAccessibilityNodeObject() const { return false; }321 320 virtual bool isAccessibilityRenderObject() const { return false; } 322 321 virtual bool isAccessibilityScrollbar() const { return false; } -
trunk/Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp
r123182 r123219 42 42 PassRefPtr<AccessibilityProgressIndicator> AccessibilityProgressIndicator::create(RenderProgress* renderer) 43 43 { 44 AccessibilityProgressIndicator* obj = new AccessibilityProgressIndicator(renderer); 45 obj->init(); 46 return adoptRef(obj); 44 return adoptRef(new AccessibilityProgressIndicator(renderer)); 47 45 } 48 46 -
trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp
r123182 r123219 94 94 95 95 AccessibilityRenderObject::AccessibilityRenderObject(RenderObject* renderer) 96 : Accessibility NodeObject(renderer->node())96 : AccessibilityObject() 97 97 , m_renderer(renderer) 98 { 98 , m_ariaRole(UnknownRole) 99 , m_childrenDirty(false) 100 , m_roleForMSAA(UnknownRole) 101 { 102 m_role = determineAccessibilityRole(); 103 99 104 #ifndef NDEBUG 100 105 m_renderer->setHasAXObject(true); … … 107 112 } 108 113 109 void AccessibilityRenderObject::init()110 {111 AccessibilityNodeObject::init();112 }113 114 114 PassRefPtr<AccessibilityRenderObject> AccessibilityRenderObject::create(RenderObject* renderer) 115 115 { 116 AccessibilityRenderObject* obj = new AccessibilityRenderObject(renderer); 117 obj->init(); 118 return adoptRef(obj); 116 return adoptRef(new AccessibilityRenderObject(renderer)); 119 117 } 120 118 121 119 void AccessibilityRenderObject::detach() 122 120 { 123 AccessibilityNodeObject::detach(); 121 clearChildren(); 122 AccessibilityObject::detach(); 124 123 125 124 #ifndef NDEBUG … … 127 126 m_renderer->setHasAXObject(false); 128 127 #endif 129 m_renderer = 0; 128 m_renderer = 0; 130 129 } 131 130 … … 135 134 return 0; 136 135 return toRenderBoxModelObject(m_renderer); 137 }138 139 void AccessibilityRenderObject::setRenderer(RenderObject* renderer)140 {141 m_renderer = renderer;142 setNode(renderer->node());143 136 } 144 137 … … 3092 3085 } 3093 3086 3087 AccessibilityRole AccessibilityRenderObject::remapAriaRoleDueToParent(AccessibilityRole role) const 3088 { 3089 // Some objects change their role based on their parent. 3090 // However, asking for the unignoredParent calls accessibilityIsIgnored(), which can trigger a loop. 3091 // While inside the call stack of creating an element, we need to avoid accessibilityIsIgnored(). 3092 // https://bugs.webkit.org/show_bug.cgi?id=65174 3093 3094 if (role != ListBoxOptionRole && role != MenuItemRole) 3095 return role; 3096 3097 for (AccessibilityObject* parent = parentObject(); parent && !parent->accessibilityIsIgnored(); parent = parent->parentObject()) { 3098 AccessibilityRole parentAriaRole = parent->ariaRoleAttribute(); 3099 3100 // Selects and listboxes both have options as child roles, but they map to different roles within WebCore. 3101 if (role == ListBoxOptionRole && parentAriaRole == MenuRole) 3102 return MenuItemRole; 3103 // An aria "menuitem" may map to MenuButton or MenuItem depending on its parent. 3104 if (role == MenuItemRole && parentAriaRole == GroupRole) 3105 return MenuButtonRole; 3106 3107 // If the parent had a different role, then we don't need to continue searching up the chain. 3108 if (parentAriaRole) 3109 break; 3110 } 3111 3112 return role; 3113 } 3114 3115 AccessibilityRole AccessibilityRenderObject::determineAriaRoleAttribute() const 3116 { 3117 const AtomicString& ariaRole = getAttribute(roleAttr); 3118 if (ariaRole.isNull() || ariaRole.isEmpty()) 3119 return UnknownRole; 3120 3121 AccessibilityRole role = ariaRoleToWebCoreRole(ariaRole); 3122 3123 // ARIA states if an item can get focus, it should not be presentational. 3124 if (role == PresentationalRole && canSetFocusAttribute()) 3125 return UnknownRole; 3126 3127 if (role == ButtonRole && ariaHasPopup()) 3128 role = PopUpButtonRole; 3129 3130 if (role == TextAreaRole && !ariaIsMultiline()) 3131 role = TextFieldRole; 3132 3133 role = remapAriaRoleDueToParent(role); 3134 3135 if (role) 3136 return role; 3137 3138 return UnknownRole; 3139 } 3140 3141 AccessibilityRole AccessibilityRenderObject::ariaRoleAttribute() const 3142 { 3143 return m_ariaRole; 3144 } 3145 3146 void AccessibilityRenderObject::updateAccessibilityRole() 3147 { 3148 bool ignoredStatus = accessibilityIsIgnored(); 3149 m_role = determineAccessibilityRole(); 3150 3151 // The AX hierarchy only needs to be updated if the ignored status of an element has changed. 3152 if (ignoredStatus != accessibilityIsIgnored()) 3153 childrenChanged(); 3154 } 3155 3094 3156 bool AccessibilityRenderObject::isDescendantOfElementType(const QualifiedName& tagName) const 3095 3157 { … … 3328 3390 } 3329 3391 3392 bool AccessibilityRenderObject::canSetFocusAttribute() const 3393 { 3394 Node* node = this->node(); 3395 3396 if (isWebArea()) 3397 return true; 3398 3399 // NOTE: It would be more accurate to ask the document whether setFocusedNode() would 3400 // do anything. For example, setFocusedNode() will do nothing if the current focused 3401 // node will not relinquish the focus. 3402 if (!node) 3403 return false; 3404 3405 if (node->isElementNode() && !static_cast<Element*>(node)->isEnabledFormControl()) 3406 return false; 3407 3408 return node->supportsFocus(); 3409 } 3410 3330 3411 bool AccessibilityRenderObject::canSetExpandedAttribute() const 3331 3412 { … … 3374 3455 } 3375 3456 3457 void AccessibilityRenderObject::childrenChanged() 3458 { 3459 // This method is meant as a quick way of marking a portion of the accessibility tree dirty. 3460 if (!m_renderer) 3461 return; 3462 3463 axObjectCache()->postNotification(this, document(), AXObjectCache::AXChildrenChanged, true); 3464 3465 // Go up the accessibility parent chain, but only if the element already exists. This method is 3466 // called during render layouts, minimal work should be done. 3467 // If AX elements are created now, they could interrogate the render tree while it's in a funky state. 3468 // At the same time, process ARIA live region changes. 3469 for (AccessibilityObject* parent = this; parent; parent = parent->parentObjectIfExists()) { 3470 parent->setNeedsToUpdateChildren(); 3471 3472 // These notifications always need to be sent because screenreaders are reliant on them to perform. 3473 // In other words, they need to be sent even when the screen reader has not accessed this live region since the last update. 3474 3475 // If this element supports ARIA live regions, then notify the AT of changes. 3476 if (parent->supportsARIALiveRegion()) 3477 axObjectCache()->postNotification(parent, parent->document(), AXObjectCache::AXLiveRegionChanged, true); 3478 3479 // If this element is an ARIA text control, notify the AT of changes. 3480 if (parent->isARIATextControl() && !parent->isNativeTextControl() && !parent->node()->rendererIsEditable()) 3481 axObjectCache()->postNotification(parent, parent->document(), AXObjectCache::AXValueChanged, true); 3482 } 3483 } 3484 3376 3485 bool AccessibilityRenderObject::canHaveChildren() const 3377 3486 { … … 3379 3488 return false; 3380 3489 3381 // Canvas is a special case; its role is ImageRole but it is allowed to have children.3382 if (node() && node()->hasTagName(canvasTag))3383 return true;3384 3385 3490 // Elements that should not have children 3386 3491 switch (roleValue()) { … … 3455 3560 } 3456 3561 3457 void AccessibilityRenderObject::addCanvasChildren()3458 {3459 // If it's a canvas, it won't have rendered children, but it might have accessible fallback content.3460 if (node() && node()->hasTagName(canvasTag)) {3461 AccessibilityNodeObject::addChildren();3462 return;3463 }3464 }3465 3466 3562 void AccessibilityRenderObject::addAttachmentChildren() 3467 3563 { … … 3500 3596 // childrenChanged should have been called, leaving the object with no children. 3501 3597 ASSERT(!m_haveChildren); 3502 3598 3599 // nothing to add if there is no RenderObject 3600 if (!m_renderer) 3601 return; 3602 3503 3603 m_haveChildren = true; 3504 3604 … … 3508 3608 // add all unignored acc children 3509 3609 for (RefPtr<AccessibilityObject> obj = firstChild(); obj; obj = obj->nextSibling()) { 3610 3510 3611 // If the parent is asking for this child's children, then either it's the first time (and clearing is a no-op), 3511 3612 // or its visibility has changed. In the latter case, this child may have a stale child cached. … … 3527 3628 addImageMapChildren(); 3528 3629 addTextFieldChildren(); 3529 addCanvasChildren();3530 3630 3531 3631 #if PLATFORM(MAC) -
trunk/Source/WebCore/accessibility/AccessibilityRenderObject.h
r123182 r123219 30 30 #define AccessibilityRenderObject_h 31 31 32 #include "Accessibility NodeObject.h"32 #include "AccessibilityObject.h" 33 33 #include "LayoutTypes.h" 34 34 #include <wtf/Forward.h> … … 56 56 class Widget; 57 57 58 class AccessibilityRenderObject : public Accessibility NodeObject {58 class AccessibilityRenderObject : public AccessibilityObject { 59 59 protected: 60 60 AccessibilityRenderObject(RenderObject*); … … 64 64 65 65 virtual bool isAccessibilityRenderObject() const { return true; } 66 67 virtual void init();68 66 69 67 virtual bool isAnchor() const; … … 114 112 virtual bool hasUnderline() const; 115 113 114 virtual bool canSetFocusAttribute() const; 116 115 virtual bool canSetTextRangeAttributes() const; 117 116 virtual bool canSetValueAttribute() const; … … 151 150 virtual void ariaOwnsElements(AccessibilityChildrenVector&) const; 152 151 virtual bool supportsARIAOwns() const; 152 virtual AccessibilityRole ariaRoleAttribute() const; 153 153 virtual bool isPresentationalChildOfAriaRole() const; 154 154 virtual bool ariaRoleHasPresentationalChildren() const; 155 void updateAccessibilityRole(); 155 156 156 157 // Should be called on the root accessibility object to kick off a hit test. … … 168 169 virtual IntPoint clickPoint(); 169 170 170 void setRenderer(RenderObject* );171 void setRenderer(RenderObject* renderer) { m_renderer = renderer; } 171 172 virtual RenderObject* renderer() const { return m_renderer; } 172 173 RenderBoxModelObject* renderBoxModelObject() const; 173 174 virtual Node* node() const; 174 175 175 virtual Document* document() const;176 177 176 RenderView* topRenderer() const; 178 177 RenderTextControl* textControl() const; 178 Document* document() const; 179 179 FrameView* topDocumentFrameView() const; 180 180 Document* topDocument() const; … … 215 215 216 216 virtual void detach(); 217 virtual void childrenChanged(); 217 218 virtual void contentChanged(); 218 219 virtual void addChildren(); … … 260 261 protected: 261 262 RenderObject* m_renderer; 263 AccessibilityRole m_ariaRole; 264 bool m_childrenDirty; 262 265 263 266 void setRenderObject(RenderObject* renderer) { m_renderer = renderer; } … … 268 271 269 272 virtual bool isDetached() const { return !m_renderer; } 270 271 virtual AccessibilityRole determineAccessibilityRole();272 273 273 274 private: … … 286 287 Element* menuElementForMenuButton() const; 287 288 Element* menuItemElementForMenu() const; 289 AccessibilityRole determineAccessibilityRole(); 290 AccessibilityRole determineAriaRoleAttribute() const; 291 AccessibilityRole remapAriaRoleDueToParent(AccessibilityRole) const; 288 292 289 293 bool isTabItemSelected() const; … … 302 306 void addTextFieldChildren(); 303 307 void addImageMapChildren(); 304 void addCanvasChildren();305 308 void addAttachmentChildren(); 306 309 #if PLATFORM(MAC) … … 326 329 327 330 bool inheritsPresentationalRole() const; 331 332 mutable AccessibilityRole m_roleForMSAA; 328 333 }; 329 334 -
trunk/Source/WebCore/accessibility/AccessibilitySlider.cpp
r123182 r123219 48 48 PassRefPtr<AccessibilitySlider> AccessibilitySlider::create(RenderObject* renderer) 49 49 { 50 AccessibilitySlider* obj = new AccessibilitySlider(renderer); 51 obj->init(); 52 return adoptRef(obj); 50 return adoptRef(new AccessibilitySlider(renderer)); 53 51 } 54 52 -
trunk/Source/WebCore/accessibility/AccessibilityTable.cpp
r123182 r123219 52 52 m_headerContainer(0) 53 53 { 54 }55 56 AccessibilityTable::~AccessibilityTable()57 {58 }59 60 void AccessibilityTable::init()61 {62 AccessibilityRenderObject::init();63 54 #if ACCESSIBILITY_TABLES 64 55 m_isAccessibilityTable = isTableExposableThroughAccessibility(); … … 68 59 } 69 60 61 AccessibilityTable::~AccessibilityTable() 62 { 63 } 64 70 65 PassRefPtr<AccessibilityTable> AccessibilityTable::create(RenderObject* renderer) 71 66 { 72 AccessibilityTable* obj = new AccessibilityTable(renderer); 73 obj->init(); 74 return adoptRef(obj); 67 return adoptRef(new AccessibilityTable(renderer)); 75 68 } 76 69 -
trunk/Source/WebCore/accessibility/AccessibilityTable.h
r123182 r123219 51 51 virtual ~AccessibilityTable(); 52 52 53 virtual void init();54 55 53 virtual bool isAccessibilityTable() const; 56 54 virtual bool isDataTable() const; -
trunk/Source/WebCore/accessibility/AccessibilityTableCell.cpp
r123182 r123219 52 52 PassRefPtr<AccessibilityTableCell> AccessibilityTableCell::create(RenderObject* renderer) 53 53 { 54 AccessibilityTableCell* obj = new AccessibilityTableCell(renderer); 55 obj->init(); 56 return adoptRef(obj); 54 return adoptRef(new AccessibilityTableCell(renderer)); 57 55 } 58 56 -
trunk/Source/WebCore/accessibility/AccessibilityTableRow.cpp
r123182 r123219 55 55 PassRefPtr<AccessibilityTableRow> AccessibilityTableRow::create(RenderObject* renderer) 56 56 { 57 AccessibilityTableRow* obj = new AccessibilityTableRow(renderer); 58 obj->init(); 59 return adoptRef(obj); 57 return adoptRef(new AccessibilityTableRow(renderer)); 60 58 } 61 59
Note: See TracChangeset
for help on using the changeset viewer.