Changeset 53644 in webkit


Ignore:
Timestamp:
Jan 21, 2010 1:31:39 PM (14 years ago)
Author:
Beth Dakin
Message:

WebCore: Fix for https://bugs.webkit.org/show_bug.cgi?id=33923 REGRESSION
(Safari 4): AXValueChanged no longer sent for text area scrollbars
-and corresponding-
<rdar://problem/6942686>

Reviewed by Oliver Hunt.

New class AccessibilityScrollbar inherits directly from
AccessibilityObject.

  • accessibility/AccessibilityScrollbar.cpp: Added.

(WebCore::AccessibilityScrollbar::AccessibilityScrollbar):
(WebCore::AccessibilityScrollbar::create):
(WebCore::AccessibilityScrollbar::valueForRange):

  • accessibility/AccessibilityScrollbar.h: Added.

(WebCore::AccessibilityScrollbar::setScrollbar):
(WebCore::AccessibilityScrollbar::roleValue):
(WebCore::AccessibilityScrollbar::accessibilityIsIgnored):
(WebCore::AccessibilityScrollbar::size):
(WebCore::AccessibilityScrollbar::elementRect):
(WebCore::AccessibilityScrollbar::parentObject):

AXObjectCache::getOrCreate() now has a case for ScrollBarRole,
which will create a new AccessibilityScrollbar. I also added a new
version of postNotification() that does not require a renderer. The
old postNotification() calls the new one.

  • accessibility/AXObjectCache.cpp:

(WebCore::AXObjectCache::getOrCreate):
(WebCore::AXObjectCache::postNotification):

  • accessibility/AXObjectCache.h:

When AX is enabled, getOrCreate an AccessibilityScrollbar and send
a notification.

  • platform/Scrollbar.cpp:

(WebCore::Scrollbar::scroll):

Fix project files.

  • GNUmakefile.am:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
  • WebCoreSources.bkl:

LayoutTests: Test for https://bugs.webkit.org/show_bug.cgi?id=33923 REGRESSION
(Safari 4): AXValueChanged no longer sent for text area scrollbars
-and corresponding-
<rdar://problem/6942686>

Reviewed by Oliver Hunt.

  • platform/mac/accessibility/change-notification-on-scroll-expected.txt: Added.
  • platform/mac/accessibility/change-notification-on-scroll.html: Added.
Location:
trunk
Files:
4 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r53643 r53644  
     12010-01-21  Beth Dakin  <bdakin@apple.com>
     2
     3        Reviewed by Oliver Hunt.
     4
     5        Test for https://bugs.webkit.org/show_bug.cgi?id=33923 REGRESSION
     6        (Safari 4): AXValueChanged no longer sent for text area scrollbars
     7        -and corresponding-
     8        <rdar://problem/6942686>
     9
     10        * platform/mac/accessibility/change-notification-on-scroll-expected.txt: Added.
     11        * platform/mac/accessibility/change-notification-on-scroll.html: Added.
     12
    1132010-01-21  Simon Fraser  <simon.fraser@apple.com>
    214
  • trunk/WebCore/ChangeLog

    r53641 r53644  
     12010-01-21  Beth Dakin  <bdakin@apple.com>
     2
     3        Reviewed by Oliver Hunt.
     4
     5        Fix for https://bugs.webkit.org/show_bug.cgi?id=33923 REGRESSION
     6        (Safari 4): AXValueChanged no longer sent for text area scrollbars
     7        -and corresponding-
     8        <rdar://problem/6942686>
     9
     10        New class AccessibilityScrollbar inherits directly from
     11        AccessibilityObject.
     12        * accessibility/AccessibilityScrollbar.cpp: Added.
     13        (WebCore::AccessibilityScrollbar::AccessibilityScrollbar):
     14        (WebCore::AccessibilityScrollbar::create):
     15        (WebCore::AccessibilityScrollbar::valueForRange):
     16        * accessibility/AccessibilityScrollbar.h: Added.
     17        (WebCore::AccessibilityScrollbar::setScrollbar):
     18        (WebCore::AccessibilityScrollbar::roleValue):
     19        (WebCore::AccessibilityScrollbar::accessibilityIsIgnored):
     20        (WebCore::AccessibilityScrollbar::size):
     21        (WebCore::AccessibilityScrollbar::elementRect):
     22        (WebCore::AccessibilityScrollbar::parentObject):
     23
     24        AXObjectCache::getOrCreate() now has a case for ScrollBarRole,
     25        which will create a new AccessibilityScrollbar. I also added a new
     26        version of postNotification() that does not require a renderer. The
     27        old postNotification() calls the new one.
     28        * accessibility/AXObjectCache.cpp:
     29        (WebCore::AXObjectCache::getOrCreate):
     30        (WebCore::AXObjectCache::postNotification):
     31        * accessibility/AXObjectCache.h:
     32
     33        When AX is enabled, getOrCreate an AccessibilityScrollbar and send
     34        a notification.
     35        * platform/Scrollbar.cpp:
     36        (WebCore::Scrollbar::scroll):
     37
     38        Fix project files.
     39        * GNUmakefile.am:
     40        * WebCore.vcproj/WebCore.vcproj:
     41        * WebCore.xcodeproj/project.pbxproj:
     42        * WebCoreSources.bkl:
     43
    1442010-01-21  Eric Uhrhane  <ericu@chromium.org>
    245
  • trunk/WebCore/GNUmakefile.am

    r53621 r53644  
    329329        WebCore/accessibility/AccessibilityRenderObject.cpp \
    330330        WebCore/accessibility/AccessibilityRenderObject.h \
     331        WebCore/accessibility/AccessibilityScrollbar.cpp \
     332        WebCore/accessibility/AccessibilityScrollbar.h \
    331333        WebCore/accessibility/AccessibilitySlider.cpp \
    332334        WebCore/accessibility/AccessibilitySlider.h \
  • trunk/WebCore/WebCore.vcproj/WebCore.vcproj

    r53628 r53644  
    2013020130                        </File>
    2013120131                        <File
     20132                                RelativePath="..\accessibility\AccessibilityScrollbar.cpp"
     20133                                >
     20134                                <FileConfiguration
     20135                                        Name="Debug|Win32"
     20136                                        ExcludedFromBuild="true"
     20137                                        >
     20138                                        <Tool
     20139                                                Name="VCCLCompilerTool"
     20140                                        />
     20141                                </FileConfiguration>
     20142                                <FileConfiguration
     20143                                        Name="Release|Win32"
     20144                                        ExcludedFromBuild="true"
     20145                                        >
     20146                                        <Tool
     20147                                                Name="VCCLCompilerTool"
     20148                                        />
     20149                                </FileConfiguration>
     20150                                <FileConfiguration
     20151                                        Name="Debug_Internal|Win32"
     20152                                        ExcludedFromBuild="true"
     20153                                        >
     20154                                        <Tool
     20155                                                Name="VCCLCompilerTool"
     20156                                        />
     20157                                </FileConfiguration>
     20158                                <FileConfiguration
     20159                                        Name="Debug_Cairo|Win32"
     20160                                        ExcludedFromBuild="true"
     20161                                        >
     20162                                        <Tool
     20163                                                Name="VCCLCompilerTool"
     20164                                        />
     20165                                </FileConfiguration>
     20166                                <FileConfiguration
     20167                                        Name="Release_Cairo|Win32"
     20168                                        ExcludedFromBuild="true"
     20169                                        >
     20170                                        <Tool
     20171                                                Name="VCCLCompilerTool"
     20172                                        />
     20173                                </FileConfiguration>
     20174                                <FileConfiguration
     20175                                        Name="Debug_All|Win32"
     20176                                        ExcludedFromBuild="true"
     20177                                        >
     20178                                        <Tool
     20179                                                Name="VCCLCompilerTool"
     20180                                        />
     20181                                </FileConfiguration>
     20182                        </File>
     20183                        <File
     20184                                RelativePath="..\accessibility\AccessibilityScrollbar.h"
     20185                                >
     20186                        </File>
     20187                        <File
    2013220188                                RelativePath="..\accessibility\AccessibilitySlider.cpp"
    2013320189                                >
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r53621 r53644  
    23542354                93C441F00F813A1A00C1A634 /* CollectionCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C441EE0F813A1A00C1A634 /* CollectionCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
    23552355                93C442000F813AE100C1A634 /* CollectionType.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C441FF0F813AE100C1A634 /* CollectionType.h */; settings = {ATTRIBUTES = (Private, ); }; };
     2356                93C4F6EA1108F9A50099D0DB /* AccessibilityScrollbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93C4F6E81108F9A50099D0DB /* AccessibilityScrollbar.cpp */; };
     2357                93C4F6EB1108F9A50099D0DB /* AccessibilityScrollbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C4F6E91108F9A50099D0DB /* AccessibilityScrollbar.h */; };
    23562358                93C841F809CE855C00DFF5E5 /* DOMImplementationFront.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C841F709CE855C00DFF5E5 /* DOMImplementationFront.h */; };
    23572359                93C841FF09CE858300DFF5E5 /* DOMImplementationFront.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93C841FE09CE858300DFF5E5 /* DOMImplementationFront.cpp */; };
     
    77017703                93C441EE0F813A1A00C1A634 /* CollectionCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollectionCache.h; sourceTree = "<group>"; };
    77027704                93C441FF0F813AE100C1A634 /* CollectionType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollectionType.h; sourceTree = "<group>"; };
     7705                93C4F6E81108F9A50099D0DB /* AccessibilityScrollbar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityScrollbar.cpp; sourceTree = "<group>"; };
     7706                93C4F6E91108F9A50099D0DB /* AccessibilityScrollbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityScrollbar.h; sourceTree = "<group>"; };
    77037707                93C841F709CE855C00DFF5E5 /* DOMImplementationFront.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMImplementationFront.h; sourceTree = "<group>"; };
    77047708                93C841FE09CE858300DFF5E5 /* DOMImplementationFront.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DOMImplementationFront.cpp; sourceTree = "<group>"; };
     
    1064110645                                76CDD2EC1103DA6600680521 /* AccessibilityMenuList.cpp */,
    1064210646                                76CDD2ED1103DA6600680521 /* AccessibilityMenuList.h */,
     10647                                76CDD2F01103DA6600680521 /* AccessibilityMenuListOption.cpp */,
     10648                                76CDD2F11103DA6600680521 /* AccessibilityMenuListOption.h */,
    1064310649                                76CDD2EE1103DA6600680521 /* AccessibilityMenuListPopup.cpp */,
    1064410650                                76CDD2EF1103DA6600680521 /* AccessibilityMenuListPopup.h */,
    10645                                 76CDD2F01103DA6600680521 /* AccessibilityMenuListOption.cpp */,
    10646                                 76CDD2F11103DA6600680521 /* AccessibilityMenuListOption.h */,
    1064710651                                29A8121E0FBB9C1D00510293 /* AccessibilityObject.cpp */,
    1064810652                                29A812180FBB9C1D00510293 /* AccessibilityObject.h */,
    1064910653                                29A812080FBB9C1D00510293 /* AccessibilityRenderObject.cpp */,
    1065010654                                29A8121B0FBB9C1D00510293 /* AccessibilityRenderObject.h */,
     10655                                93C4F6E81108F9A50099D0DB /* AccessibilityScrollbar.cpp */,
     10656                                93C4F6E91108F9A50099D0DB /* AccessibilityScrollbar.h */,
    1065110657                                0709FC4B1025DED80059CDBA /* AccessibilitySlider.cpp */,
    1065210658                                0709FC4D1025DEE30059CDBA /* AccessibilitySlider.h */,
     
    1844118447                                2E2D99EA10E2BC3800496337 /* DOMBlobInternal.h in Headers */,
    1844218448                                59B5977511086579007159E8 /* BridgeJSC.h in Headers */,
     18449                                93C4F6EB1108F9A50099D0DB /* AccessibilityScrollbar.h in Headers */,
    1844318450                        );
    1844418451                        runOnlyForDeploymentPostprocessing = 0;
     
    2061420621                                2E2D99E810E2BC1C00496337 /* DOMBlob.mm in Sources */,
    2061520622                                59B597731108656B007159E8 /* BridgeJSC.cpp in Sources */,
     20623                                93C4F6EA1108F9A50099D0DB /* AccessibilityScrollbar.cpp in Sources */,
    2061620624                        );
    2061720625                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/WebCore/WebCoreSources.bkl

    r53620 r53644  
    4444        accessibility/AccessibilityListBoxOption.cpp
    4545        accessibility/AccessibilityRenderObject.cpp
     46        accessibility/AccessibilityScrollbar.cpp
    4647        accessibility/AccessibilitySlider.cpp
    4748        accessibility/AccessibilityTable.cpp
  • trunk/WebCore/accessibility/AXObjectCache.cpp

    r53512 r53644  
    4242#include "AccessibilityMenuListOption.h"
    4343#include "AccessibilityRenderObject.h"
     44#include "AccessibilityScrollbar.h"
    4445#include "AccessibilitySlider.h"
    4546#include "AccessibilityTable.h"
     
    221222        obj = AccessibilityMenuListOption::create();
    222223        break;
     224    case ScrollBarRole:
     225        obj = AccessibilityScrollbar::create();
     226        break;
    223227    default:
    224228        obj = 0;
     
    369373    // Get an accessibility object that already exists. One should not be created here
    370374    // because a render update may be in progress and creating an AX object can re-trigger a layout
    371     RefPtr<AccessibilityObject> obj = get(renderer);
    372     while (!obj && renderer) {
     375    RefPtr<AccessibilityObject> object = get(renderer);
     376    while (!object && renderer) {
    373377        renderer = renderer->parent();
    374         obj = get(renderer);
    375     }
    376    
    377     if (!renderer)
    378         return;
    379 
    380     if (obj && !postToElement)
    381         obj = obj->observableObject();
    382    
    383     Document* document = renderer->document();
    384     if (!obj && document)
    385         obj = get(document->renderer());
    386    
    387     if (!obj)
     378        object = get(renderer);
     379    }
     380   
     381    if (!renderer)
     382        return;
     383   
     384    postNotification(object.get(), renderer->document(), notification, postToElement, postType);
     385}
     386
     387void AXObjectCache::postNotification(AccessibilityObject* object, Document* document, AXNotification notification, bool postToElement, PostType postType)
     388{
     389    if (object && !postToElement)
     390        object = object->observableObject();
     391
     392    if (!object && document)
     393        object = get(document->renderer());
     394
     395    if (!object)
    388396        return;
    389397
    390398    if (postType == PostAsynchronously) {
    391         m_notificationsToPost.append(make_pair(obj, notification));
     399        m_notificationsToPost.append(make_pair(object, notification));
    392400        if (!m_notificationPostTimer.isActive())
    393401            m_notificationPostTimer.startOneShot(0);
    394402    } else
    395         postPlatformNotification(obj.get(), notification);
     403        postPlatformNotification(object, notification);
    396404}
    397405
  • trunk/WebCore/accessibility/AXObjectCache.h

    r52786 r53644  
    119119
    120120    void postNotification(RenderObject*, AXNotification, bool postToElement, PostType = PostAsynchronously);
     121    void postNotification(AccessibilityObject*, Document*, AXNotification, bool postToElement, PostType = PostAsynchronously);
    121122
    122123protected:
  • trunk/WebCore/platform/Scrollbar.cpp

    r47737 r53644  
    2727#include "Scrollbar.h"
    2828
     29#include "AccessibilityScrollbar.h"
     30#include "AXObjectCache.h"
    2931#include "EventHandler.h"
    3032#include "Frame.h"
     
    118120bool Scrollbar::scroll(ScrollDirection direction, ScrollGranularity granularity, float multiplier)
    119121{
     122    if (AXObjectCache::accessibilityEnabled()) {
     123        if (parent() && parent()->isFrameView()) {
     124            Document* document = static_cast<FrameView*>(parent())->frame()->document();
     125            AXObjectCache* cache = document->axObjectCache();
     126            AccessibilityScrollbar* axObject = static_cast<AccessibilityScrollbar*>(cache->getOrCreate(ScrollBarRole));
     127            axObject->setScrollbar(this);
     128            cache->postNotification(axObject, document, AXObjectCache::AXValueChanged, true);
     129        }
     130    }
     131
    120132    float step = 0;
    121133    if ((direction == ScrollUp && m_orientation == VerticalScrollbar) || (direction == ScrollLeft && m_orientation == HorizontalScrollbar))
Note: See TracChangeset for help on using the changeset viewer.