Changeset 123219 in webkit


Ignore:
Timestamp:
Jul 20, 2012 7:57:55 AM (12 years ago)
Author:
commit-queue@webkit.org
Message:

Unreviewed, rolling out r123182.
http://trac.webkit.org/changeset/123182
https://bugs.webkit.org/show_bug.cgi?id=91863

Causing ASSERT crashes in tests accessibility/canvas.html and
accessibility/canvas-accessibilitynodeobject.html (Requested
by jernoble on #webkit).

Patch by Sheriff Bot <webkit.review.bot@gmail.com> on 2012-07-20

Source/WebCore:

  • CMakeLists.txt:
  • GNUmakefile.list.am:
  • Target.pri:
  • WebCore.gypi:
  • accessibility/AXObjectCache.cpp:

(WebCore):

  • accessibility/AXObjectCache.h:

(AXObjectCache):

  • accessibility/AccessibilityARIAGrid.cpp:

(WebCore::AccessibilityARIAGrid::AccessibilityARIAGrid):
(WebCore::AccessibilityARIAGrid::~AccessibilityARIAGrid):
(WebCore):
(WebCore::AccessibilityARIAGrid::create):

  • accessibility/AccessibilityARIAGrid.h:

(AccessibilityARIAGrid):

  • accessibility/AccessibilityARIAGridCell.cpp:

(WebCore::AccessibilityARIAGridCell::create):

  • accessibility/AccessibilityARIAGridRow.cpp:

(WebCore::AccessibilityARIAGridRow::create):

  • accessibility/AccessibilityAllInOne.cpp:
  • accessibility/AccessibilityList.cpp:

(WebCore::AccessibilityList::create):

  • accessibility/AccessibilityListBox.cpp:

(WebCore::AccessibilityListBox::create):

  • accessibility/AccessibilityMediaControls.cpp:

(WebCore::AccessibilityMediaControl::create):
(WebCore::AccessibilityMediaControlsContainer::create):
(WebCore::AccessibilityMediaTimeline::create):
(WebCore::AccessibilityMediaTimeDisplay::create):

  • accessibility/AccessibilityMenuList.cpp:
  • accessibility/AccessibilityMenuList.h:

(WebCore::AccessibilityMenuList::create):

  • accessibility/AccessibilityNodeObject.cpp: Removed.
  • accessibility/AccessibilityNodeObject.h: Removed.
  • accessibility/AccessibilityObject.h:

(AccessibilityObject):

  • accessibility/AccessibilityProgressIndicator.cpp:

(WebCore::AccessibilityProgressIndicator::create):

  • accessibility/AccessibilityRenderObject.cpp:

(WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
(WebCore::AccessibilityRenderObject::create):
(WebCore::AccessibilityRenderObject::detach):
(WebCore::AccessibilityRenderObject::remapAriaRoleDueToParent):
(WebCore):
(WebCore::AccessibilityRenderObject::determineAriaRoleAttribute):
(WebCore::AccessibilityRenderObject::ariaRoleAttribute):
(WebCore::AccessibilityRenderObject::updateAccessibilityRole):
(WebCore::AccessibilityRenderObject::canSetFocusAttribute):
(WebCore::AccessibilityRenderObject::childrenChanged):
(WebCore::AccessibilityRenderObject::canHaveChildren):
(WebCore::AccessibilityRenderObject::addChildren):

  • accessibility/AccessibilityRenderObject.h:

(AccessibilityRenderObject):
(WebCore::AccessibilityRenderObject::setRenderer):

  • accessibility/AccessibilitySlider.cpp:

(WebCore::AccessibilitySlider::create):

  • accessibility/AccessibilityTable.cpp:

(WebCore::AccessibilityTable::AccessibilityTable):
(WebCore::AccessibilityTable::~AccessibilityTable):
(WebCore):
(WebCore::AccessibilityTable::create):

  • accessibility/AccessibilityTable.h:

(AccessibilityTable):

  • accessibility/AccessibilityTableCell.cpp:

(WebCore::AccessibilityTableCell::create):

  • accessibility/AccessibilityTableRow.cpp:

(WebCore::AccessibilityTableRow::create):

LayoutTests:

  • accessibility/canvas-accessibilitynodeobject-expected.txt: Removed.
  • accessibility/canvas-accessibilitynodeobject.html: Removed.
Location:
trunk
Files:
4 deleted
27 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r123217 r123219  
     12012-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
    1142012-07-20  Stephen Chenney  <schenney@chromium.org>
    215
  • trunk/Source/WebCore/CMakeLists.txt

    r123182 r123219  
    936936    accessibility/AccessibilityMenuListPopup.cpp
    937937    accessibility/AccessibilityMockObject.cpp
    938     accessibility/AccessibilityNodeObject.cpp
    939938    accessibility/AccessibilityObject.cpp
    940939    accessibility/AccessibilityProgressIndicator.cpp
  • trunk/Source/WebCore/ChangeLog

    r123218 r123219  
     12012-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
    1792012-07-20  Christophe Dumez  <christophe.dumez@intel.com>
    280
  • trunk/Source/WebCore/GNUmakefile.list.am

    r123182 r123219  
    13181318        Source/WebCore/accessibility/AccessibilityMockObject.cpp \
    13191319        Source/WebCore/accessibility/AccessibilityMockObject.h \
    1320         Source/WebCore/accessibility/AccessibilityNodeObject.cpp \
    1321         Source/WebCore/accessibility/AccessibilityNodeObject.h \
    13221320        Source/WebCore/accessibility/AccessibilityObject.cpp \
    13231321        Source/WebCore/accessibility/AccessibilityObject.h \
  • trunk/Source/WebCore/Target.pri

    r123182 r123219  
    5353    accessibility/AccessibilityListBox.cpp \
    5454    accessibility/AccessibilityListBoxOption.cpp \
    55     accessibility/AccessibilityNodeObject.cpp \
    5655    accessibility/AccessibilityProgressIndicator.cpp \
    5756    accessibility/AccessibilityRenderObject.cpp \
  • trunk/Source/WebCore/WebCore.gypi

    r123182 r123219  
    17931793            'accessibility/AccessibilityMockObject.cpp',
    17941794            'accessibility/AccessibilityMockObject.h',
    1795             'accessibility/AccessibilityNodeObject.cpp',
    1796             'accessibility/AccessibilityNodeObject.h',
    17971795            'accessibility/AccessibilityObject.cpp',
    17981796            'accessibility/AccessibilityProgressIndicator.cpp',
  • trunk/Source/WebCore/accessibility/AXObjectCache.cpp

    r123182 r123219  
    189189}
    190190
    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 
    208191// FIXME: This probably belongs on Node.
    209192// FIXME: This should take a const char*, but one caller passes nullAtom.
     
    270253}
    271254
    272 static PassRefPtr<AccessibilityObject> createFromNode(Node* node)
    273 {
    274     return AccessibilityNodeObject::create(node);
    275 }
    276 
    277255AccessibilityObject* AXObjectCache::getOrCreate(Widget* widget)
    278256{
     
    296274    return newObj.get();
    297275}
    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   
    324277AccessibilityObject* AXObjectCache::getOrCreate(RenderObject* renderer)
    325278{
     
    436389}
    437390
    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 
    456391void AXObjectCache::remove(Widget* view)
    457392{
  • trunk/Source/WebCore/accessibility/AXObjectCache.h

    r123182 r123219  
    7171    AccessibilityObject* getOrCreate(RenderObject*);
    7272    AccessibilityObject* getOrCreate(Widget*);
    73     AccessibilityObject* getOrCreate(Node*);
    7473
    7574    // used for objects without backing elements
     
    7978    AccessibilityObject* get(RenderObject*);
    8079    AccessibilityObject* get(Widget*);
    81     AccessibilityObject* get(Node*);
    8280   
    8381    void remove(RenderObject*);
    84     void remove(Node*);
    8582    void remove(Widget*);
    8683    void remove(AXID);
     
    186183    HashMap<RenderObject*, AXID> m_renderObjectMapping;
    187184    HashMap<Widget*, AXID> m_widgetObjectMapping;
    188     HashMap<Node*, AXID> m_nodeObjectMapping;
    189185    HashSet<Node*> m_textMarkerNodes;
    190186    static bool gAccessibilityEnabled;
     
    209205inline AccessibilityObject* AXObjectCache::focusedUIElementForPage(const Page*) { return 0; }
    210206inline AccessibilityObject* AXObjectCache::get(RenderObject*) { return 0; }
    211 inline AccessibilityObject* AXObjectCache::get(Node*) { return 0; }
    212207inline AccessibilityObject* AXObjectCache::get(Widget*) { return 0; }
    213208inline AccessibilityObject* AXObjectCache::getOrCreate(AccessibilityRole) { return 0; }
    214209inline AccessibilityObject* AXObjectCache::getOrCreate(RenderObject*) { return 0; }
    215 inline AccessibilityObject* AXObjectCache::getOrCreate(Node*) { return 0; }
    216210inline AccessibilityObject* AXObjectCache::getOrCreate(Widget*) { return 0; }
    217211inline AccessibilityObject* AXObjectCache::rootObject() { return 0; }
     
    240234inline void AXObjectCache::remove(AXID) { }
    241235inline void AXObjectCache::remove(RenderObject*) { }
    242 inline void AXObjectCache::remove(Node*) { }
    243236inline void AXObjectCache::remove(Widget*) { }
    244237inline void AXObjectCache::selectedChildrenChanged(RenderObject*) { }
  • trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.cpp

    r123182 r123219  
    4444    : AccessibilityTable(renderer)
    4545{
    46 }
    47 
    48 AccessibilityARIAGrid::~AccessibilityARIAGrid()
    49 {
    50 }
    51 
    52 void AccessibilityARIAGrid::init()
    53 {
    54     AccessibilityTable::init();
    5546#if ACCESSIBILITY_TABLES
    5647    m_isAccessibilityTable = true;
     
    6051}
    6152
     53AccessibilityARIAGrid::~AccessibilityARIAGrid()
     54{
     55}
     56
    6257PassRefPtr<AccessibilityARIAGrid> AccessibilityARIAGrid::create(RenderObject* renderer)
    6358{
    64     AccessibilityARIAGrid* obj = new AccessibilityARIAGrid(renderer);
    65     obj->init();
    66     return adoptRef(obj);
     59    return adoptRef(new AccessibilityARIAGrid(renderer));
    6760}
    6861
  • trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.h

    r123182 r123219  
    4545    static PassRefPtr<AccessibilityARIAGrid> create(RenderObject*);
    4646    virtual ~AccessibilityARIAGrid();
    47 
    48     virtual void init();
    4947   
    5048    virtual bool isAriaTable() const { return true; }   
  • trunk/Source/WebCore/accessibility/AccessibilityARIAGridCell.cpp

    r123182 r123219  
    4949PassRefPtr<AccessibilityARIAGridCell> AccessibilityARIAGridCell::create(RenderObject* renderer)
    5050{
    51     AccessibilityARIAGridCell* obj = new AccessibilityARIAGridCell(renderer);
    52     obj->init();
    53     return adoptRef(obj);
     51    return adoptRef(new AccessibilityARIAGridCell(renderer));
    5452}
    5553
  • trunk/Source/WebCore/accessibility/AccessibilityARIAGridRow.cpp

    r123182 r123219  
    4949PassRefPtr<AccessibilityARIAGridRow> AccessibilityARIAGridRow::create(RenderObject* renderer)
    5050{
    51     AccessibilityARIAGridRow* obj = new AccessibilityARIAGridRow(renderer);
    52     obj->init();
    53     return adoptRef(obj);
     51    return adoptRef(new AccessibilityARIAGridRow(renderer));
    5452}
    5553
  • trunk/Source/WebCore/accessibility/AccessibilityAllInOne.cpp

    r123182 r123219  
    3535#include "AccessibilityListBoxOption.cpp"
    3636#include "AccessibilityMediaControls.cpp"
    37 #include "AccessibilityNodeObject.cpp"
    3837#include "AccessibilityObject.cpp"
    3938#include "AccessibilityRenderObject.cpp"
  • trunk/Source/WebCore/accessibility/AccessibilityList.cpp

    r123182 r123219  
    5151PassRefPtr<AccessibilityList> AccessibilityList::create(RenderObject* renderer)
    5252{
    53     AccessibilityList* obj = new AccessibilityList(renderer);
    54     obj->init();
    55     return adoptRef(obj);
     53    return adoptRef(new AccessibilityList(renderer));
    5654}
    5755
  • trunk/Source/WebCore/accessibility/AccessibilityListBox.cpp

    r123182 r123219  
    5555PassRefPtr<AccessibilityListBox> AccessibilityListBox::create(RenderObject* renderer)
    5656{
    57     AccessibilityListBox* obj = new AccessibilityListBox(renderer);
    58     obj->init();
    59     return adoptRef(obj);
     57    return adoptRef(new AccessibilityListBox(renderer));
    6058}
    6159   
  • trunk/Source/WebCore/accessibility/AccessibilityMediaControls.cpp

    r123182 r123219  
    6868        return AccessibilityMediaControlsContainer::create(renderer);
    6969
    70     default: {
    71         AccessibilityMediaControl* obj = new AccessibilityMediaControl(renderer);
    72         obj->init();
    73         return adoptRef(obj);
    74         }
     70    default:
     71        return adoptRef(new AccessibilityMediaControl(renderer));
    7572    }
    7673}
     
    211208PassRefPtr<AccessibilityObject> AccessibilityMediaControlsContainer::create(RenderObject* renderer)
    212209{
    213     AccessibilityMediaControlsContainer* obj = new AccessibilityMediaControlsContainer(renderer);
    214     obj->init();
    215     return adoptRef(obj);
     210    return adoptRef(new AccessibilityMediaControlsContainer(renderer));
    216211}
    217212
     
    257252PassRefPtr<AccessibilityObject> AccessibilityMediaTimeline::create(RenderObject* renderer)
    258253{
    259     AccessibilityMediaTimeline* obj = new AccessibilityMediaTimeline(renderer);
    260     obj->init();
    261     return adoptRef(obj);
     254    return adoptRef(new AccessibilityMediaTimeline(renderer));
    262255}
    263256
     
    289282PassRefPtr<AccessibilityObject> AccessibilityMediaTimeDisplay::create(RenderObject* renderer)
    290283{
    291     AccessibilityMediaTimeDisplay* obj = new AccessibilityMediaTimeDisplay(renderer);
    292     obj->init();
    293     return adoptRef(obj);
     284    return adoptRef(new AccessibilityMediaTimeDisplay(renderer));
    294285}
    295286
  • trunk/Source/WebCore/accessibility/AccessibilityMenuList.cpp

    r123182 r123219  
    3636    : AccessibilityRenderObject(renderer)
    3737{
    38 }
    39 
    40 PassRefPtr<AccessibilityMenuList> AccessibilityMenuList::create(RenderMenuList* renderer)
    41 {
    42     AccessibilityMenuList* obj = new AccessibilityMenuList(renderer);
    43     obj->init();
    44     return adoptRef(obj);
    4538}
    4639
  • trunk/Source/WebCore/accessibility/AccessibilityMenuList.h

    r123182 r123219  
    3838class AccessibilityMenuList : public AccessibilityRenderObject {
    3939public:
    40     static PassRefPtr<AccessibilityMenuList> create(RenderMenuList* renderer);
     40    static PassRefPtr<AccessibilityMenuList> create(RenderMenuList* renderer) { return adoptRef(new AccessibilityMenuList(renderer)); }
    4141
    4242    virtual bool isCollapsed() const;
  • trunk/Source/WebCore/accessibility/AccessibilityObject.h

    r123182 r123219  
    318318    typedef Vector<RefPtr<AccessibilityObject> > AccessibilityChildrenVector;
    319319   
    320     virtual bool isAccessibilityNodeObject() const { return false; }   
    321320    virtual bool isAccessibilityRenderObject() const { return false; }
    322321    virtual bool isAccessibilityScrollbar() const { return false; }
  • trunk/Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp

    r123182 r123219  
    4242PassRefPtr<AccessibilityProgressIndicator> AccessibilityProgressIndicator::create(RenderProgress* renderer)
    4343{
    44     AccessibilityProgressIndicator* obj = new AccessibilityProgressIndicator(renderer);
    45     obj->init();
    46     return adoptRef(obj);
     44    return adoptRef(new AccessibilityProgressIndicator(renderer));
    4745}
    4846
  • trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp

    r123182 r123219  
    9494
    9595AccessibilityRenderObject::AccessibilityRenderObject(RenderObject* renderer)
    96     : AccessibilityNodeObject(renderer->node())
     96    : AccessibilityObject()
    9797    , m_renderer(renderer)
    98 {
     98    , m_ariaRole(UnknownRole)
     99    , m_childrenDirty(false)
     100    , m_roleForMSAA(UnknownRole)
     101{
     102    m_role = determineAccessibilityRole();
     103
    99104#ifndef NDEBUG
    100105    m_renderer->setHasAXObject(true);
     
    107112}
    108113
    109 void AccessibilityRenderObject::init()
    110 {
    111     AccessibilityNodeObject::init();
    112 }
    113 
    114114PassRefPtr<AccessibilityRenderObject> AccessibilityRenderObject::create(RenderObject* renderer)
    115115{
    116     AccessibilityRenderObject* obj = new AccessibilityRenderObject(renderer);
    117     obj->init();
    118     return adoptRef(obj);
     116    return adoptRef(new AccessibilityRenderObject(renderer));
    119117}
    120118
    121119void AccessibilityRenderObject::detach()
    122120{
    123     AccessibilityNodeObject::detach();
     121    clearChildren();
     122    AccessibilityObject::detach();
    124123   
    125124#ifndef NDEBUG
     
    127126        m_renderer->setHasAXObject(false);
    128127#endif
    129     m_renderer = 0;
     128    m_renderer = 0;   
    130129}
    131130
     
    135134        return 0;
    136135    return toRenderBoxModelObject(m_renderer);
    137 }
    138 
    139 void AccessibilityRenderObject::setRenderer(RenderObject* renderer)
    140 {
    141     m_renderer = renderer;
    142     setNode(renderer->node());
    143136}
    144137
     
    30923085}
    30933086
     3087AccessibilityRole 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   
     3115AccessibilityRole 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
     3141AccessibilityRole AccessibilityRenderObject::ariaRoleAttribute() const
     3142{
     3143    return m_ariaRole;
     3144}
     3145   
     3146void 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   
    30943156bool AccessibilityRenderObject::isDescendantOfElementType(const QualifiedName& tagName) const
    30953157{
     
    33283390}
    33293391
     3392bool 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   
    33303411bool AccessibilityRenderObject::canSetExpandedAttribute() const
    33313412{
     
    33743455}
    33753456   
     3457void 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   
    33763485bool AccessibilityRenderObject::canHaveChildren() const
    33773486{
     
    33793488        return false;
    33803489   
    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 
    33853490    // Elements that should not have children
    33863491    switch (roleValue()) {
     
    34553560}
    34563561
    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 
    34663562void AccessibilityRenderObject::addAttachmentChildren()
    34673563{
     
    35003596    // childrenChanged should have been called, leaving the object with no children.
    35013597    ASSERT(!m_haveChildren);
    3502 
     3598   
     3599    // nothing to add if there is no RenderObject
     3600    if (!m_renderer)
     3601        return;
     3602   
    35033603    m_haveChildren = true;
    35043604   
     
    35083608    // add all unignored acc children
    35093609    for (RefPtr<AccessibilityObject> obj = firstChild(); obj; obj = obj->nextSibling()) {
     3610       
    35103611        // If the parent is asking for this child's children, then either it's the first time (and clearing is a no-op),
    35113612        // or its visibility has changed. In the latter case, this child may have a stale child cached.
     
    35273628    addImageMapChildren();
    35283629    addTextFieldChildren();
    3529     addCanvasChildren();
    35303630
    35313631#if PLATFORM(MAC)
  • trunk/Source/WebCore/accessibility/AccessibilityRenderObject.h

    r123182 r123219  
    3030#define AccessibilityRenderObject_h
    3131
    32 #include "AccessibilityNodeObject.h"
     32#include "AccessibilityObject.h"
    3333#include "LayoutTypes.h"
    3434#include <wtf/Forward.h>
     
    5656class Widget;
    5757   
    58 class AccessibilityRenderObject : public AccessibilityNodeObject {
     58class AccessibilityRenderObject : public AccessibilityObject {
    5959protected:
    6060    AccessibilityRenderObject(RenderObject*);
     
    6464   
    6565    virtual bool isAccessibilityRenderObject() const { return true; }
    66 
    67     virtual void init();
    6866   
    6967    virtual bool isAnchor() const;
     
    114112    virtual bool hasUnderline() const;
    115113
     114    virtual bool canSetFocusAttribute() const;
    116115    virtual bool canSetTextRangeAttributes() const;
    117116    virtual bool canSetValueAttribute() const;
     
    151150    virtual void ariaOwnsElements(AccessibilityChildrenVector&) const;
    152151    virtual bool supportsARIAOwns() const;
     152    virtual AccessibilityRole ariaRoleAttribute() const;
    153153    virtual bool isPresentationalChildOfAriaRole() const;
    154154    virtual bool ariaRoleHasPresentationalChildren() const;
     155    void updateAccessibilityRole();
    155156   
    156157    // Should be called on the root accessibility object to kick off a hit test.
     
    168169    virtual IntPoint clickPoint();
    169170   
    170     void setRenderer(RenderObject*);
     171    void setRenderer(RenderObject* renderer) { m_renderer = renderer; }
    171172    virtual RenderObject* renderer() const { return m_renderer; }
    172173    RenderBoxModelObject* renderBoxModelObject() const;
    173174    virtual Node* node() const;
    174175
    175     virtual Document* document() const;
    176 
    177176    RenderView* topRenderer() const;
    178177    RenderTextControl* textControl() const;
     178    Document* document() const;
    179179    FrameView* topDocumentFrameView() const; 
    180180    Document* topDocument() const;
     
    215215   
    216216    virtual void detach();
     217    virtual void childrenChanged();
    217218    virtual void contentChanged();
    218219    virtual void addChildren();
     
    260261protected:
    261262    RenderObject* m_renderer;
     263    AccessibilityRole m_ariaRole;
     264    bool m_childrenDirty;
    262265   
    263266    void setRenderObject(RenderObject* renderer) { m_renderer = renderer; }
     
    268271   
    269272    virtual bool isDetached() const { return !m_renderer; }
    270 
    271     virtual AccessibilityRole determineAccessibilityRole();
    272273
    273274private:
     
    286287    Element* menuElementForMenuButton() const;
    287288    Element* menuItemElementForMenu() const;
     289    AccessibilityRole determineAccessibilityRole();
     290    AccessibilityRole determineAriaRoleAttribute() const;
     291    AccessibilityRole remapAriaRoleDueToParent(AccessibilityRole) const;
    288292
    289293    bool isTabItemSelected() const;
     
    302306    void addTextFieldChildren();
    303307    void addImageMapChildren();
    304     void addCanvasChildren();
    305308    void addAttachmentChildren();
    306309#if PLATFORM(MAC)
     
    326329   
    327330    bool inheritsPresentationalRole() const;
     331   
     332    mutable AccessibilityRole m_roleForMSAA;
    328333};
    329334
  • trunk/Source/WebCore/accessibility/AccessibilitySlider.cpp

    r123182 r123219  
    4848PassRefPtr<AccessibilitySlider> AccessibilitySlider::create(RenderObject* renderer)
    4949{
    50     AccessibilitySlider* obj = new AccessibilitySlider(renderer);
    51     obj->init();
    52     return adoptRef(obj);
     50    return adoptRef(new AccessibilitySlider(renderer));
    5351}
    5452
  • trunk/Source/WebCore/accessibility/AccessibilityTable.cpp

    r123182 r123219  
    5252    m_headerContainer(0)
    5353{
    54 }
    55 
    56 AccessibilityTable::~AccessibilityTable()
    57 {
    58 }
    59 
    60 void AccessibilityTable::init()
    61 {
    62     AccessibilityRenderObject::init();
    6354#if ACCESSIBILITY_TABLES
    6455    m_isAccessibilityTable = isTableExposableThroughAccessibility();
     
    6859}
    6960
     61AccessibilityTable::~AccessibilityTable()
     62{
     63}
     64
    7065PassRefPtr<AccessibilityTable> AccessibilityTable::create(RenderObject* renderer)
    7166{
    72     AccessibilityTable* obj = new AccessibilityTable(renderer);
    73     obj->init();
    74     return adoptRef(obj);
     67    return adoptRef(new AccessibilityTable(renderer));
    7568}
    7669
  • trunk/Source/WebCore/accessibility/AccessibilityTable.h

    r123182 r123219  
    5151    virtual ~AccessibilityTable();
    5252
    53     virtual void init();
    54 
    5553    virtual bool isAccessibilityTable() const;
    5654    virtual bool isDataTable() const;
  • trunk/Source/WebCore/accessibility/AccessibilityTableCell.cpp

    r123182 r123219  
    5252PassRefPtr<AccessibilityTableCell> AccessibilityTableCell::create(RenderObject* renderer)
    5353{
    54     AccessibilityTableCell* obj = new AccessibilityTableCell(renderer);
    55     obj->init();
    56     return adoptRef(obj);
     54    return adoptRef(new AccessibilityTableCell(renderer));
    5755}
    5856
  • trunk/Source/WebCore/accessibility/AccessibilityTableRow.cpp

    r123182 r123219  
    5555PassRefPtr<AccessibilityTableRow> AccessibilityTableRow::create(RenderObject* renderer)
    5656{
    57     AccessibilityTableRow* obj = new AccessibilityTableRow(renderer);
    58     obj->init();
    59     return adoptRef(obj);
     57    return adoptRef(new AccessibilityTableRow(renderer));
    6058}
    6159
Note: See TracChangeset for help on using the changeset viewer.