Changeset 75031 in webkit


Ignore:
Timestamp:
Jan 4, 2011 5:07:44 PM (13 years ago)
Author:
Chris Fleizach
Message:

WK2: Support Accessibility
https://bugs.webkit.org/show_bug.cgi?id=51859

Reviewed by Sam Weinig.

Tools:

Use rootObject() method to get top of accessibility tree.

  • DumpRenderTree/mac/AccessibilityControllerMac.mm:

(AccessibilityController::focusedElement):
(AccessibilityController::rootElement):

WebCore:

WK2 doesn't use platform scroll views anymore. Accessibility code
needs to have its own scroll views.

Test: platform/mac/accessibility/webkit-scrollarea.html

  • CMakeLists.txt:
  • GNUmakefile.am:
  • WebCore.exp.in:
  • WebCore.gypi:
  • WebCore.pro:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
  • accessibility/AXObjectCache.cpp:

(WebCore::AXObjectCache::AXObjectCache):
(WebCore::AXObjectCache::get):
(WebCore::AXObjectCache::getOrCreate):
(WebCore::AXObjectCache::rootObject):
(WebCore::AXObjectCache::remove):
(WebCore::AXObjectCache::handleScrollbarUpdate):

  • accessibility/AXObjectCache.h:

(WebCore::AXObjectCache::handleScrollbarUpdate):

  • accessibility/AccessibilityARIAGrid.h:
  • accessibility/AccessibilityAllInOne.cpp:
  • accessibility/AccessibilityImageMapLink.cpp:
  • accessibility/AccessibilityImageMapLink.h:
  • accessibility/AccessibilityListBoxOption.cpp:
  • accessibility/AccessibilityListBoxOption.h:
  • accessibility/AccessibilityObject.cpp:

(WebCore::AccessibilityObject::updateChildrenIfNecessary):
(WebCore::AccessibilityObject::elementAccessibilityHitTest):
(WebCore::AccessibilityObject::axObjectCache):
(WebCore::AccessibilityObject::focusedUIElement):

  • accessibility/AccessibilityObject.h:

(WebCore::AccessibilityObject::isAccessibilityScrollView):
(WebCore::AccessibilityObject::isScrollView):
(WebCore::AccessibilityObject::canSetNumericValue):
(WebCore::AccessibilityObject::scrollBar):
(WebCore::AccessibilityObject::size):
(WebCore::AccessibilityObject::setValue):

  • accessibility/AccessibilityRenderObject.cpp:

(WebCore::AccessibilityRenderObject::parentObject):
(WebCore::AccessibilityRenderObject::accessibilityHitTest):
(WebCore::AccessibilityRenderObject::updateChildrenIfNecessary):
(WebCore::AccessibilityRenderObject::addChildren):

  • accessibility/AccessibilityRenderObject.h:
  • accessibility/AccessibilityScrollView.cpp: Added.

(WebCore::AccessibilityScrollView::AccessibilityScrollView):
(WebCore::AccessibilityScrollView::create):
(WebCore::AccessibilityScrollView::scrollBar):
(WebCore::AccessibilityScrollView::children):
(WebCore::AccessibilityScrollView::updateChildrenIfNecessary):
(WebCore::AccessibilityScrollView::removeChildScrollbar):
(WebCore::AccessibilityScrollView::addChildScrollbar):
(WebCore::AccessibilityScrollView::addChildren):
(WebCore::AccessibilityScrollView::webAreaObject):
(WebCore::AccessibilityScrollView::accessibilityHitTest):
(WebCore::AccessibilityScrollView::document):
(WebCore::AccessibilityScrollView::elementRect):
(WebCore::AccessibilityScrollView::parentObject):

  • accessibility/AccessibilityScrollView.h: Added.

(WebCore::AccessibilityScrollView::roleValue):
(WebCore::AccessibilityScrollView::scrollView):
(WebCore::AccessibilityScrollView::accessibilityIsIgnored):
(WebCore::AccessibilityScrollView::isAccessibilityScrollView):
(WebCore::toAccessibilityScrollView):

  • accessibility/AccessibilityScrollbar.cpp:

(WebCore::AccessibilityScrollbar::AccessibilityScrollbar):
(WebCore::AccessibilityScrollbar::create):
(WebCore::AccessibilityScrollbar::elementRect):
(WebCore::AccessibilityScrollbar::document):
(WebCore::AccessibilityScrollbar::orientation):
(WebCore::AccessibilityScrollbar::isEnabled):
(WebCore::AccessibilityScrollbar::valueForRange):
(WebCore::AccessibilityScrollbar::setValue):

  • accessibility/AccessibilityScrollbar.h:

(WebCore::AccessibilityScrollbar::setParent):
(WebCore::AccessibilityScrollbar::canSetValueAttribute):
(WebCore::AccessibilityScrollbar::canSetNumericValue):
(WebCore::AccessibilityScrollbar::isAccessibilityScrollbar):
(WebCore::AccessibilityScrollbar::parentObject):
(WebCore::AccessibilityScrollbar::roleValue):

  • accessibility/mac/AccessibilityObjectMac.mm:

(WebCore::AccessibilityObject::accessibilityIgnoreAttachment):

  • accessibility/mac/AccessibilityObjectWrapper.mm:

(-[AccessibilityObjectWrapper accessibilityAttributeNames]):
(-[AccessibilityObjectWrapper remoteAccessibilityParentObject]):
(-[AccessibilityObjectWrapper position]):
(-[AccessibilityObjectWrapper scrollViewParent]):
(-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
(-[AccessibilityObjectWrapper accessibilityHitTest:]):
(-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):

  • dom/Document.cpp:

(WebCore::Document::axObjectCache):

  • loader/EmptyClients.h:

(WebCore::EmptyFrameLoaderClient::accessibilityRemoteObject):

  • loader/FrameLoaderClient.h:
  • page/FrameView.cpp:

(WebCore::FrameView::~FrameView):
(WebCore::FrameView::axObjectCache):

  • page/FrameView.h:
  • platform/ScrollView.cpp:

(WebCore::ScrollView::setHasHorizontalScrollbar):
(WebCore::ScrollView::setHasVerticalScrollbar):

  • platform/Scrollbar.cpp:

(WebCore::Scrollbar::~Scrollbar):
(WebCore::Scrollbar::scroll):
(WebCore::Scrollbar::axObjectCache):

  • platform/Scrollbar.h:
  • platform/Widget.h:

(WebCore::Widget::axObjectCache):

WebKit/gtk:

Use rootObject() method to get top of ax tree.

  • WebCoreSupport/DumpRenderTreeSupportGtk.cpp:

(DumpRenderTreeSupportGtk::getFocusedAccessibleElement):

  • webkit/webkitwebview.cpp:

(webkit_web_view_get_accessible):

WebKit/mac:

Use rootObject() method to get top of AX tree.

  • WebCoreSupport/WebFrameLoaderClient.h:

(WebFrameLoaderClient::accessibilityRemoteObject):

  • WebView/WebFrame.mm:

(-[WebFrame setAccessibleName:]):
(-[WebFrame accessibilityRoot]):

  • WebView/WebFrameInternal.h:
  • WebView/WebFramePrivate.h:
  • WebView/WebHTMLView.mm:

(-[WebHTMLView accessibilityAttributeValue:]):
(-[WebHTMLView accessibilityFocusedUIElement]):
(-[WebHTMLView accessibilityHitTest:]):
(-[WebHTMLView _accessibilityParentForSubview:]):

WebKit/win:

Use rootObject() method to get the top of the AX tree.

  • AccessibleDocument.cpp:

(AccessibleDocument::AccessibleDocument):

WebKit2:

Implement remote accessibility API to support cross process accessibility
on the Mac platform.

  • Shared/WebProcessCreationParameters.cpp:

(WebKit::WebProcessCreationParameters::encode):
(WebKit::WebProcessCreationParameters::decode):

  • Shared/WebProcessCreationParameters.h:
  • UIProcess/API/mac/PageClientImpl.h:
  • UIProcess/API/mac/PageClientImpl.mm:

(WebKit::PageClientImpl::accessibilityChildTokenReceived):

  • UIProcess/API/mac/WKView.mm:

(-[WKView initWithFrame:contextRef:pageGroupRef:]):
(-[WKView _updateWindowAndViewFrames]):
(-[WKView _setAccessibilityChildToken:]):
(-[WKView accessibilityIsIgnored]):
(-[WKView accessibilityHitTest:]):
(-[WKView accessibilityAttributeValue:]):

  • UIProcess/API/mac/WKViewInternal.h:
  • UIProcess/PageClient.h:
  • UIProcess/WebContext.cpp:

(WebKit::WebContext::ensureWebProcess):

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::windowAndViewFramesChanged):
(WebKit::WebPageProxy::didReceiveAccessibilityPageToken):
(WebKit::WebPageProxy::sendAccessibilityPresenterToken):

  • UIProcess/WebPageProxy.h:
  • UIProcess/WebPageProxy.messages.in:
  • WebKit2.xcodeproj/project.pbxproj:
  • WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:

(WebKit::WebFrameLoaderClient::accessibilityRemoteObject):

  • WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::windowAndViewFramesChanged):

  • WebProcess/WebPage/WebPage.h:

(WebKit::WebPage::accessibilityPosition):

  • WebProcess/WebPage/WebPage.messages.in:
  • WebProcess/WebPage/mac/AccessibilityWebPageObject.h: Added.
  • WebProcess/WebPage/mac/AccessibilityWebPageObject.mm: Added.

(-[AccessibilityWebPageObject setWebPage:]):
(-[AccessibilityWebPageObject setRemoteParent:]):
(-[AccessibilityWebPageObject dealloc]):
(-[AccessibilityWebPageObject accessibilityIsIgnored]):
(-[AccessibilityWebPageObject accessibilityAttributeNames]):
(-[AccessibilityWebPageObject accessibilityIsAttributeSettable:]):
(-[AccessibilityWebPageObject accessibilitySetValue:forAttribute:]):
(-[AccessibilityWebPageObject accessibilityActionNames]):
(-[AccessibilityWebPageObject accessibilityChildren]):
(-[AccessibilityWebPageObject accessibilityAttributeValue:]):
(-[AccessibilityWebPageObject accessibilityShouldUseUniqueId]):
(-[AccessibilityWebPageObject accessibilityHitTest:]):
(-[AccessibilityWebPageObject accessibilityFocusedUIElement]):

  • WebProcess/WebPage/mac/WebPageMac.mm:

(WebKit::WebPage::platformInitialize):
(WebKit::WebPage::sendAccessibilityPresenterToken):
(WebKit::WebPage::accessibilityRemoteObject):

  • WebProcess/WebProcess.cpp:

(WebKit::WebProcess::initializeWebProcess):

  • WebProcess/WebProcess.h:

(WebKit::WebProcess::presenterApplicationPid):

  • WebProcess/mac/WebProcessMainMac.mm:

(WebKit::WebProcessMain):

LayoutTests:

  • platform/mac/accessibility/webkit-scrollarea-expected.txt: Added.
  • platform/mac/accessibility/webkit-scrollarea.html: Added.
Location:
trunk
Files:
6 added
69 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r75029 r75031  
     12011-01-04  Chris Fleizach  <cfleizach@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        WK2: Support Accessibility
     6        https://bugs.webkit.org/show_bug.cgi?id=51859
     7
     8        * platform/mac/accessibility/webkit-scrollarea-expected.txt: Added.
     9        * platform/mac/accessibility/webkit-scrollarea.html: Added.
     10
    1112011-01-04  Kent Tamura  <tkent@chromium.org>
    212
  • trunk/Tools/ChangeLog

    r75009 r75031  
     12011-01-04  Chris Fleizach  <cfleizach@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        WK2: Support Accessibility
     6        https://bugs.webkit.org/show_bug.cgi?id=51859
     7
     8        Use rootObject() method to get top of accessibility tree.
     9
     10        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
     11        (AccessibilityController::focusedElement):
     12        (AccessibilityController::rootElement):
     13
    1142011-01-03  Martin Robinson  <mrobinson@igalia.com>
    215
  • trunk/Tools/DumpRenderTree/mac/AccessibilityControllerMac.mm

    r55730 r75031  
    2929
    3030#import "AccessibilityUIElement.h"
     31#import <AppKit/NSColor.h>
    3132#import <Foundation/Foundation.h>
    3233#import <WebKit/WebFrame.h>
     34#import <WebKit/WebFramePrivate.h>
    3335#import <WebKit/WebHTMLView.h>
    3436
     
    5052{
    5153    // FIXME: we could do some caching here.
    52     id accessibilityObject = [[[mainFrame frameView] documentView] accessibilityFocusedUIElement];
     54    id accessibilityObject = [[mainFrame accessibilityRoot] accessibilityFocusedUIElement];
    5355    return AccessibilityUIElement(accessibilityObject);
    5456}
     
    5759{
    5860    // FIXME: we could do some caching here.
    59     id accessibilityObject = [[mainFrame frameView] documentView];
     61    id accessibilityObject = [mainFrame accessibilityRoot];
    6062    return AccessibilityUIElement(accessibilityObject);
    6163}
  • trunk/WebCore/CMakeLists.txt

    r74916 r75031  
    576576    accessibility/AccessibilityRenderObject.cpp
    577577    accessibility/AccessibilityScrollbar.cpp
     578    accessibility/AccessibilityScrollView.cpp
    578579    accessibility/AccessibilitySlider.cpp
    579580    accessibility/AccessibilityTable.cpp
  • trunk/WebCore/ChangeLog

    r75030 r75031  
     12011-01-04  Chris Fleizach  <cfleizach@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        WK2: Support Accessibility
     6        https://bugs.webkit.org/show_bug.cgi?id=51859
     7
     8        WK2 doesn't use platform scroll views anymore. Accessibility code
     9        needs to have its own scroll views.
     10
     11        Test: platform/mac/accessibility/webkit-scrollarea.html
     12
     13        * CMakeLists.txt:
     14        * GNUmakefile.am:
     15        * WebCore.exp.in:
     16        * WebCore.gypi:
     17        * WebCore.pro:
     18        * WebCore.vcproj/WebCore.vcproj:
     19        * WebCore.xcodeproj/project.pbxproj:
     20        * accessibility/AXObjectCache.cpp:
     21        (WebCore::AXObjectCache::AXObjectCache):
     22        (WebCore::AXObjectCache::get):
     23        (WebCore::AXObjectCache::getOrCreate):
     24        (WebCore::AXObjectCache::rootObject):
     25        (WebCore::AXObjectCache::remove):
     26        (WebCore::AXObjectCache::handleScrollbarUpdate):
     27        * accessibility/AXObjectCache.h:
     28        (WebCore::AXObjectCache::handleScrollbarUpdate):
     29        * accessibility/AccessibilityARIAGrid.h:
     30        * accessibility/AccessibilityAllInOne.cpp:
     31        * accessibility/AccessibilityImageMapLink.cpp:
     32        * accessibility/AccessibilityImageMapLink.h:
     33        * accessibility/AccessibilityListBoxOption.cpp:
     34        * accessibility/AccessibilityListBoxOption.h:
     35        * accessibility/AccessibilityObject.cpp:
     36        (WebCore::AccessibilityObject::updateChildrenIfNecessary):
     37        (WebCore::AccessibilityObject::elementAccessibilityHitTest):
     38        (WebCore::AccessibilityObject::axObjectCache):
     39        (WebCore::AccessibilityObject::focusedUIElement):
     40        * accessibility/AccessibilityObject.h:
     41        (WebCore::AccessibilityObject::isAccessibilityScrollView):
     42        (WebCore::AccessibilityObject::isScrollView):
     43        (WebCore::AccessibilityObject::canSetNumericValue):
     44        (WebCore::AccessibilityObject::scrollBar):
     45        (WebCore::AccessibilityObject::size):
     46        (WebCore::AccessibilityObject::setValue):
     47        * accessibility/AccessibilityRenderObject.cpp:
     48        (WebCore::AccessibilityRenderObject::parentObject):
     49        (WebCore::AccessibilityRenderObject::accessibilityHitTest):
     50        (WebCore::AccessibilityRenderObject::updateChildrenIfNecessary):
     51        (WebCore::AccessibilityRenderObject::addChildren):
     52        * accessibility/AccessibilityRenderObject.h:
     53        * accessibility/AccessibilityScrollView.cpp: Added.
     54        (WebCore::AccessibilityScrollView::AccessibilityScrollView):
     55        (WebCore::AccessibilityScrollView::create):
     56        (WebCore::AccessibilityScrollView::scrollBar):
     57        (WebCore::AccessibilityScrollView::children):
     58        (WebCore::AccessibilityScrollView::updateChildrenIfNecessary):
     59        (WebCore::AccessibilityScrollView::removeChildScrollbar):
     60        (WebCore::AccessibilityScrollView::addChildScrollbar):
     61        (WebCore::AccessibilityScrollView::addChildren):
     62        (WebCore::AccessibilityScrollView::webAreaObject):
     63        (WebCore::AccessibilityScrollView::accessibilityHitTest):
     64        (WebCore::AccessibilityScrollView::document):
     65        (WebCore::AccessibilityScrollView::elementRect):
     66        (WebCore::AccessibilityScrollView::parentObject):
     67        * accessibility/AccessibilityScrollView.h: Added.
     68        (WebCore::AccessibilityScrollView::roleValue):
     69        (WebCore::AccessibilityScrollView::scrollView):
     70        (WebCore::AccessibilityScrollView::accessibilityIsIgnored):
     71        (WebCore::AccessibilityScrollView::isAccessibilityScrollView):
     72        (WebCore::toAccessibilityScrollView):
     73        * accessibility/AccessibilityScrollbar.cpp:
     74        (WebCore::AccessibilityScrollbar::AccessibilityScrollbar):
     75        (WebCore::AccessibilityScrollbar::create):
     76        (WebCore::AccessibilityScrollbar::elementRect):
     77        (WebCore::AccessibilityScrollbar::document):
     78        (WebCore::AccessibilityScrollbar::orientation):
     79        (WebCore::AccessibilityScrollbar::isEnabled):
     80        (WebCore::AccessibilityScrollbar::valueForRange):
     81        (WebCore::AccessibilityScrollbar::setValue):
     82        * accessibility/AccessibilityScrollbar.h:
     83        (WebCore::AccessibilityScrollbar::setParent):
     84        (WebCore::AccessibilityScrollbar::canSetValueAttribute):
     85        (WebCore::AccessibilityScrollbar::canSetNumericValue):
     86        (WebCore::AccessibilityScrollbar::isAccessibilityScrollbar):
     87        (WebCore::AccessibilityScrollbar::parentObject):
     88        (WebCore::AccessibilityScrollbar::roleValue):
     89        * accessibility/mac/AccessibilityObjectMac.mm:
     90        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
     91        * accessibility/mac/AccessibilityObjectWrapper.mm:
     92        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
     93        (-[AccessibilityObjectWrapper remoteAccessibilityParentObject]):
     94        (-[AccessibilityObjectWrapper position]):
     95        (-[AccessibilityObjectWrapper scrollViewParent]):
     96        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
     97        (-[AccessibilityObjectWrapper accessibilityHitTest:]):
     98        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
     99        * dom/Document.cpp:
     100        (WebCore::Document::axObjectCache):
     101        * loader/EmptyClients.h:
     102        (WebCore::EmptyFrameLoaderClient::accessibilityRemoteObject):
     103        * loader/FrameLoaderClient.h:
     104        * page/FrameView.cpp:
     105        (WebCore::FrameView::~FrameView):
     106        (WebCore::FrameView::axObjectCache):
     107        * page/FrameView.h:
     108        * platform/ScrollView.cpp:
     109        (WebCore::ScrollView::setHasHorizontalScrollbar):
     110        (WebCore::ScrollView::setHasVerticalScrollbar):
     111        * platform/Scrollbar.cpp:
     112        (WebCore::Scrollbar::~Scrollbar):
     113        (WebCore::Scrollbar::scroll):
     114        (WebCore::Scrollbar::axObjectCache):
     115        * platform/Scrollbar.h:
     116        * platform/Widget.h:
     117        (WebCore::Widget::axObjectCache):
     118
    11192011-01-04  W. James MacLean  <wjmaclean@chromium.org>
    2120
  • trunk/WebCore/GNUmakefile.am

    r74851 r75031  
    663663        WebCore/accessibility/AccessibilityScrollbar.cpp \
    664664        WebCore/accessibility/AccessibilityScrollbar.h \
     665        WebCore/accessibility/AccessibilityScrollView.cpp \
     666        WebCore/accessibility/AccessibilityScrollView.h \
    665667        WebCore/accessibility/AccessibilitySlider.cpp \
    666668        WebCore/accessibility/AccessibilitySlider.h \
  • trunk/WebCore/WebCore.exp.in

    r75020 r75031  
    291291__ZN7WebCore12gcControllerEv
    292292__ZN7WebCore12iconDatabaseEv
    293 __ZN7WebCore13AXObjectCache11getOrCreateEPNS_12RenderObjectE
     293__ZN7WebCore13AXObjectCache10rootObjectEv
    294294__ZN7WebCore13AXObjectCache21gAccessibilityEnabledE
    295295__ZN7WebCore13AXObjectCache42gAccessibilityEnhancedUserInterfaceEnabledE
  • trunk/WebCore/WebCore.gypi

    r75006 r75031  
    519519            'accessibility/AccessibilityScrollbar.cpp',
    520520            'accessibility/AccessibilityScrollbar.h',
     521            'accessibility/AccessibilityScrollView.cpp',
     522            'accessibility/AccessibilityScrollView.h',
    521523            'accessibility/AccessibilitySlider.cpp',
    522524            'accessibility/AccessibilitySlider.h',
  • trunk/WebCore/WebCore.pro

    r75006 r75031  
    322322    accessibility/AccessibilityRenderObject.cpp \   
    323323    accessibility/AccessibilityScrollbar.cpp \
     324    accessibility/AccessibilityScrollView.cpp \
    324325    accessibility/AccessibilitySlider.cpp \   
    325326    accessibility/AccessibilityARIAGrid.cpp \   
     
    13991400    accessibility/AccessibilityRenderObject.h \
    14001401    accessibility/AccessibilityScrollbar.h \
     1402    accessibility/AccessibilityScrollView.h \
    14011403    accessibility/AccessibilitySlider.h \
    14021404    accessibility/AccessibilityTableCell.h \
  • trunk/WebCore/WebCore.vcproj/WebCore.vcproj

    r75006 r75031  
    2375523755                        </File>
    2375623756                        <File
     23757                                RelativePath="..\accessibility\AccessibilityScrollView.cpp"
     23758                                >
     23759                                <FileConfiguration
     23760                                        Name="Debug|Win32"
     23761                                        ExcludedFromBuild="true"
     23762                                        >
     23763                                        <Tool
     23764                                                Name="VCCLCompilerTool"
     23765                                        />
     23766                                </FileConfiguration>
     23767                                <FileConfiguration
     23768                                        Name="Release|Win32"
     23769                                        ExcludedFromBuild="true"
     23770                                        >
     23771                                        <Tool
     23772                                                Name="VCCLCompilerTool"
     23773                                        />
     23774                                </FileConfiguration>
     23775                                <FileConfiguration
     23776                                        Name="Debug_Cairo_CFLite|Win32"
     23777                                        ExcludedFromBuild="true"
     23778                                        >
     23779                                        <Tool
     23780                                                Name="VCCLCompilerTool"
     23781                                        />
     23782                                </FileConfiguration>
     23783                                <FileConfiguration
     23784                                        Name="Release_Cairo_CFLite|Win32"
     23785                                        ExcludedFromBuild="true"
     23786                                        >
     23787                                        <Tool
     23788                                                Name="VCCLCompilerTool"
     23789                                        />
     23790                                </FileConfiguration>
     23791                                <FileConfiguration
     23792                                        Name="Debug_All|Win32"
     23793                                        ExcludedFromBuild="true"
     23794                                        >
     23795                                        <Tool
     23796                                                Name="VCCLCompilerTool"
     23797                                        />
     23798                                </FileConfiguration>
     23799                                <FileConfiguration
     23800                                        Name="Release_LTCG|Win32"
     23801                                        ExcludedFromBuild="true"
     23802                                        >
     23803                                        <Tool
     23804                                                Name="VCCLCompilerTool"
     23805                                        />
     23806                                </FileConfiguration>
     23807                        </File>
     23808                        <File
     23809                                RelativePath="..\accessibility\AccessibilityScrollView.h"
     23810                                >
     23811                        </File>
     23812                        <File
    2375723813                                RelativePath="..\accessibility\AccessibilitySlider.cpp"
    2375823814                                >
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r75006 r75031  
    694694                2542F4DA1166C25A00E89A86 /* UserGestureIndicator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2542F4D81166C25A00E89A86 /* UserGestureIndicator.cpp */; };
    695695                2542F4DB1166C25A00E89A86 /* UserGestureIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2542F4D91166C25A00E89A86 /* UserGestureIndicator.h */; settings = {ATTRIBUTES = (Private, ); }; };
     696                29489FC712C00F0300D83F0F /* AccessibilityScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 29489FC512C00F0300D83F0F /* AccessibilityScrollView.h */; };
     697                29489FC812C00F0300D83F0F /* AccessibilityScrollView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29489FC612C00F0300D83F0F /* AccessibilityScrollView.cpp */; };
    696698                29A812260FBB9C1D00510293 /* AccessibilityRenderObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A812080FBB9C1D00510293 /* AccessibilityRenderObject.cpp */; };
    697699                29A812270FBB9C1D00510293 /* AccessibilityTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29A812090FBB9C1D00510293 /* AccessibilityTable.cpp */; };
     
    69976999                2542F4D81166C25A00E89A86 /* UserGestureIndicator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserGestureIndicator.cpp; sourceTree = "<group>"; };
    69987000                2542F4D91166C25A00E89A86 /* UserGestureIndicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserGestureIndicator.h; sourceTree = "<group>"; };
     7001                29489FC512C00F0300D83F0F /* AccessibilityScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityScrollView.h; sourceTree = "<group>"; };
     7002                29489FC612C00F0300D83F0F /* AccessibilityScrollView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityScrollView.cpp; sourceTree = "<group>"; };
    69997003                29A812080FBB9C1D00510293 /* AccessibilityRenderObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityRenderObject.cpp; sourceTree = "<group>"; };
    70007004                29A812090FBB9C1D00510293 /* AccessibilityTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityTable.cpp; sourceTree = "<group>"; };
     
    1293912943                                29A812080FBB9C1D00510293 /* AccessibilityRenderObject.cpp */,
    1294012944                                29A8121B0FBB9C1D00510293 /* AccessibilityRenderObject.h */,
     12945                                29489FC612C00F0300D83F0F /* AccessibilityScrollView.cpp */,
     12946                                29489FC512C00F0300D83F0F /* AccessibilityScrollView.h */,
    1294112947                                93C4F6E81108F9A50099D0DB /* AccessibilityScrollbar.cpp */,
    1294212948                                93C4F6E91108F9A50099D0DB /* AccessibilityScrollbar.h */,
     
    2226622272                                E1BE512E0CF6C512002EA959 /* XSLTUnicodeSort.h in Headers */,
    2226722273                                97DD4D870FDF4D6E00ECF9A4 /* XSSAuditor.h in Headers */,
     22274                                29489FC712C00F0300D83F0F /* AccessibilityScrollView.h in Headers */,
    2226822275                                7EE6846012D26E3800E79415 /* AuthenticationCF.h in Headers */,
    2226922276                                7EE6846112D26E3800E79415 /* AuthenticationChallenge.h in Headers */,
     
    2494424951                                E1BE512D0CF6C512002EA959 /* XSLTUnicodeSort.cpp in Sources */,
    2494524952                                97DD4D860FDF4D6E00ECF9A4 /* XSSAuditor.cpp in Sources */,
     24953                                29489FC812C00F0300D83F0F /* AccessibilityScrollView.cpp in Sources */,
    2494624954                                7EE6845F12D26E3800E79415 /* AuthenticationCF.cpp in Sources */,
    2494724955                                7EE6846212D26E3800E79415 /* CookieJarCFNet.cpp in Sources */,
  • trunk/WebCore/accessibility/AXObjectCache.cpp

    r70469 r75031  
    4343#include "AccessibilityProgressIndicator.h"
    4444#include "AccessibilityRenderObject.h"
     45#include "AccessibilityScrollView.h"
    4546#include "AccessibilityScrollbar.h"
    4647#include "AccessibilitySlider.h"
     
    5051#include "AccessibilityTableHeaderContainer.h"
    5152#include "AccessibilityTableRow.h"
     53#include "Document.h"
    5254#include "FocusController.h"
    5355#include "Frame.h"
     
    6264#include "RenderListBox.h"
    6365#include "RenderMenuList.h"
     66#include "RenderProgress.h"
     67#include "RenderSlider.h"
    6468#include "RenderTable.h"
    6569#include "RenderTableCell.h"
    6670#include "RenderTableRow.h"
    67 #include "RenderProgress.h"
    68 #include "RenderSlider.h"
    6971#include "RenderView.h"
     72#include "ScrollView.h"
    7073
    7174#include <wtf/PassRefPtr.h>
     
    7881bool AXObjectCache::gAccessibilityEnhancedUserInterfaceEnabled = false;
    7982
    80 AXObjectCache::AXObjectCache()
     83AXObjectCache::AXObjectCache(const Document* doc)
    8184    : m_notificationPostTimer(this, &AXObjectCache::notificationPostTimerFired)
    8285{
     86    m_document = const_cast<Document*>(doc);
    8387}
    8488
     
    152156}
    153157
     158AccessibilityObject* AXObjectCache::get(Widget* widget)
     159{
     160    if (!widget)
     161        return 0;
     162       
     163    AXID axID = m_widgetObjectMapping.get(widget);
     164    ASSERT(!HashTraits<AXID>::isDeletedValue(axID));
     165    if (!axID)
     166        return 0;
     167   
     168    return m_objects.get(axID).get();   
     169}
     170   
    154171AccessibilityObject* AXObjectCache::get(RenderObject* renderer)
    155172{
     
    157174        return 0;
    158175   
    159     AccessibilityObject* obj = 0;
    160176    AXID axID = m_renderObjectMapping.get(renderer);
    161177    ASSERT(!HashTraits<AXID>::isDeletedValue(axID));
    162 
    163     if (axID)
    164         obj = m_objects.get(axID).get();
    165    
    166     return obj;
     178    if (!axID)
     179        return 0;
     180   
     181    return m_objects.get(axID).get();   
    167182}
    168183
     
    231246}
    232247
     248AccessibilityObject* AXObjectCache::getOrCreate(Widget* widget)
     249{
     250    if (!widget)
     251        return 0;
     252
     253    if (AccessibilityObject* obj = get(widget))
     254        return obj;
     255   
     256    RefPtr<AccessibilityObject> newObj = 0;
     257    if (widget->isFrameView())
     258        newObj = AccessibilityScrollView::create(static_cast<ScrollView*>(widget));
     259    else if (widget->isScrollbar())
     260        newObj = AccessibilityScrollbar::create(static_cast<Scrollbar*>(widget));
     261       
     262    getAXID(newObj.get());
     263   
     264    m_widgetObjectMapping.set(widget, newObj->axObjectID());
     265    m_objects.set(newObj->axObjectID(), newObj);   
     266    attachWrapper(newObj.get());
     267    return newObj.get();
     268}
     269   
    233270AccessibilityObject* AXObjectCache::getOrCreate(RenderObject* renderer)
    234271{
     
    247284    attachWrapper(newObj.get());
    248285    return newObj.get();
     286}
     287   
     288AccessibilityObject* AXObjectCache::rootObject()
     289{
     290    return getOrCreate(m_document->view());
    249291}
    250292
     
    276318        obj = AccessibilityMenuListOption::create();
    277319        break;
    278     case ScrollBarRole:
    279         obj = AccessibilityScrollbar::create();
    280         break;
    281320    default:
    282321        obj = 0;
     
    324363}
    325364
     365void AXObjectCache::remove(Widget* view)
     366{
     367    if (!view)
     368        return;
     369       
     370    AXID axID = m_widgetObjectMapping.get(view);
     371    remove(axID);
     372    m_widgetObjectMapping.remove(view);
     373}
     374   
     375   
    326376#if !PLATFORM(WIN) || OS(WINCE)
    327377AXID AXObjectCache::platformGenerateAXID() const
     
    479529
    480530#if HAVE(ACCESSIBILITY)
     531
     532void AXObjectCache::handleScrollbarUpdate(ScrollView* view)
     533{
     534    if (!view)
     535        return;
     536   
     537    // We don't want to create a scroll view from this method, only update an existing one.
     538    AccessibilityObject* scrollViewObject = get(view);
     539    if (scrollViewObject)
     540        scrollViewObject->updateChildrenIfNecessary();
     541}
     542   
    481543void AXObjectCache::handleAriaExpandedChange(RenderObject *renderer)
    482544{
  • trunk/WebCore/accessibility/AXObjectCache.h

    r73983 r75031  
    11/*
    2  * Copyright (C) 2003, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
     2 * Copyright (C) 2003, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4343namespace WebCore {
    4444
     45class Document;
    4546class HTMLAreaElement;
    4647class Node;
    4748class Page;
    4849class RenderObject;
     50class ScrollView;
    4951class VisiblePosition;
     52class Widget;
    5053
    5154struct TextMarkerData {
     
    6063class AXObjectCache : public Noncopyable {
    6164public:
    62     AXObjectCache();
     65    AXObjectCache(const Document*);
    6366    ~AXObjectCache();
    6467
    6568    static AccessibilityObject* focusedUIElementForPage(const Page*);
    6669
    67     // to be used with render objects
     70    AccessibilityObject* rootObject();
     71   
     72    // For AX objects with elements that back them.
    6873    AccessibilityObject* getOrCreate(RenderObject*);
    69    
     74    AccessibilityObject* getOrCreate(Widget*);
     75
    7076    // used for objects without backing elements
    7177    AccessibilityObject* getOrCreate(AccessibilityRole);
     
    7581   
    7682    void remove(RenderObject*);
     83    void remove(Widget*);
    7784    void remove(AXID);
    7885
     
    8996    void handleScrolledToAnchor(const Node* anchorNode);
    9097    void handleAriaExpandedChange(RenderObject*);
     98    void handleScrollbarUpdate(ScrollView*);
    9199   
    92100    static void enableAccessibility() { gAccessibilityEnabled = true; }
     
    146154
    147155private:
     156    Document* m_document;
    148157    HashMap<AXID, RefPtr<AccessibilityObject> > m_objects;
    149158    HashMap<RenderObject*, AXID> m_renderObjectMapping;
     159    HashMap<Widget*, AXID> m_widgetObjectMapping;
    150160    HashSet<Node*> m_textMarkerNodes;
    151161    static bool gAccessibilityEnabled;
     
    161171   
    162172    AXID getAXID(AccessibilityObject*);
     173    AccessibilityObject* get(Widget*);
    163174};
    164175
     
    180191inline void AXObjectCache::contentChanged(RenderObject*) { }
    181192inline void AXObjectCache::handleAriaExpandedChange(RenderObject*) { }
     193inline void AXObjectCache::handleScrollbarUpdate(ScrollView*) { }
    182194#endif
    183195
  • trunk/WebCore/accessibility/AccessibilityARIAGrid.h

    r65021 r75031  
    5656    virtual bool supportsSelectedRows() { return true; }   
    5757
    58     void addChild(AccessibilityObject* object, HashSet<AccessibilityObject*>& appendedRows, unsigned& columnCount);
     58    void addChild(AccessibilityObject*, HashSet<AccessibilityObject*>& appendedRows, unsigned& columnCount);
    5959};
    6060
  • trunk/WebCore/accessibility/AccessibilityAllInOne.cpp

    r73912 r75031  
    3737#include <AccessibilityObject.cpp>
    3838#include <AccessibilityRenderObject.cpp>
     39#include <AccessibilityScrollView.cpp>
    3940#include <AccessibilityScrollbar.cpp>
    4041#include <AccessibilitySlider.cpp>
  • trunk/WebCore/accessibility/AccessibilityImageMapLink.cpp

    r72969 r75031  
    137137}
    138138   
    139 IntSize AccessibilityImageMapLink::size() const
    140 {
    141     return elementRect().size();
    142 }
    143 
    144139String AccessibilityImageMapLink::stringValueForMSAA() const
    145140{
  • trunk/WebCore/accessibility/AccessibilityImageMapLink.h

    r72969 r75031  
    6969    virtual String nameForMSAA() const;
    7070
    71     virtual IntSize size() const;
    7271    virtual IntRect elementRect() const;
    7372
  • trunk/WebCore/accessibility/AccessibilityListBoxOption.cpp

    r70792 r75031  
    153153}
    154154
    155 IntSize AccessibilityListBoxOption::size() const
    156 {
    157     return elementRect().size();
    158 }
    159 
    160155Element* AccessibilityListBoxOption::actionElement() const
    161156{
  • trunk/WebCore/accessibility/AccessibilityListBoxOption.h

    r65021 r75031  
    6262
    6363    virtual IntRect elementRect() const;
    64     virtual IntSize size() const;
    6564    virtual AccessibilityObject* parentObject() const;
    6665    bool isListBoxOption() const { return true; }
     
    7372    int listBoxOptionIndex() const;
    7473    IntRect listBoxOptionRect() const;
    75     AccessibilityObject* listBoxOptionAccessibilityObject(HTMLElement* element) const;
     74    AccessibilityObject* listBoxOptionAccessibilityObject(HTMLElement*) const;
    7675};
    7776   
  • trunk/WebCore/accessibility/AccessibilityObject.cpp

    r74501 r75031  
    730730
    731731    return object->documentFrameView();
     732}
     733   
     734void AccessibilityObject::updateChildrenIfNecessary()
     735{
     736    if (!hasChildren())
     737        addChildren();   
    732738}
    733739
     
    10021008    return equalIgnoringCase(liveRegion, "polite") || equalIgnoringCase(liveRegion, "assertive");
    10031009}
     1010
     1011AccessibilityObject* AccessibilityObject::elementAccessibilityHitTest(const IntPoint& point) const
     1012{
     1013    // Send the hit test back into the sub-frame if necessary.
     1014    if (isAttachment()) {
     1015        Widget* widget = widgetForAttachmentView();
     1016        if (widget && widget->isFrameView())
     1017            return axObjectCache()->getOrCreate(static_cast<ScrollView*>(widget))->accessibilityHitTest(point);
     1018    }
     1019
     1020    return const_cast<AccessibilityObject*>(this);
     1021}
     1022   
     1023AXObjectCache* AccessibilityObject::axObjectCache() const
     1024{
     1025    Document* doc = document();
     1026    if (doc)
     1027        return doc->axObjectCache();
     1028    return 0;
     1029}
     1030   
     1031AccessibilityObject* AccessibilityObject::focusedUIElement() const
     1032{
     1033    Document* doc = document();
     1034    if (!doc)
     1035        return 0;
     1036   
     1037    Page* page = doc->page();
     1038    if (!page)
     1039        return 0;
     1040   
     1041    return AXObjectCache::focusedUIElementForPage(page);
     1042}
    10041043   
    10051044AccessibilityButtonState AccessibilityObject::checkboxOrRadioValue() const
  • trunk/WebCore/accessibility/AccessibilityObject.h

    r74492 r75031  
    261261    virtual bool isAccessibilityRenderObject() const { return false; }
    262262    virtual bool isAccessibilityScrollbar() const { return false; }
     263    virtual bool isAccessibilityScrollView() const { return false; }
     264   
    263265    virtual bool isAnchor() const { return false; }
    264266    virtual bool isAttachment() const { return false; }
     
    310312    bool isListItem() const { return roleValue() == ListItemRole; }
    311313    bool isCheckboxOrRadio() const { return isCheckbox() || isRadioButton(); }
     314    bool isScrollView() const { return roleValue() == ScrollAreaRole; }
    312315   
    313316    virtual bool isChecked() const { return false; }
     
    333336    virtual bool canSetTextRangeAttributes() const { return false; }
    334337    virtual bool canSetValueAttribute() const { return false; }
     338    virtual bool canSetNumericValue() const { return false; }
    335339    virtual bool canSetSelectedAttribute() const { return false; }
    336340    virtual bool canSetSelectedChildrenAttribute() const { return false; }
     
    374378    virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const { return 0; }
    375379    // Called on the AX object after the render tree determines which is the right AccessibilityRenderObject.
    376     virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const { return const_cast<AccessibilityObject*>(this); }
    377 
    378     virtual AccessibilityObject* focusedUIElement() const { return 0; }
     380    virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const;
     381
     382    virtual AccessibilityObject* focusedUIElement() const;
    379383
    380384    virtual AccessibilityObject* firstChild() const { return 0; }
     
    392396    virtual bool exposesTitleUIElement() const { return true; }
    393397    virtual AccessibilityObject* correspondingControlForLabelElement() const { return 0; }
    394 
     398    virtual AccessibilityObject* scrollBar(AccessibilityOrientation) const { return 0; }
     399   
    395400    virtual AccessibilityRole ariaRoleAttribute() const { return UnknownRole; }
    396401    virtual bool isPresentationalChildOfAriaRole() const { return false; }
     
    403408    virtual String accessibilityDescription() const { return String(); }
    404409
    405     virtual AXObjectCache* axObjectCache() const { return 0; }
     410    virtual AXObjectCache* axObjectCache() const;
    406411    AXID axObjectID() const { return m_id; }
    407412    void setAXObjectID(AXID axObjectID) { m_id = axObjectID; }
     
    412417    virtual IntRect boundingBoxRect() const { return IntRect(); }
    413418    virtual IntRect elementRect() const = 0;
    414     virtual IntSize size() const = 0;
     419    virtual IntSize size() const { return elementRect().size(); }
    415420    virtual IntPoint clickPoint() const;
    416421
     
    443448    virtual void setSelectedTextRange(const PlainTextRange&) { }
    444449    virtual void setValue(const String&) { }
     450    virtual void setValue(float) { }
    445451    virtual void setSelected(bool) { }
    446452    virtual void setSelectedRows(AccessibilityChildrenVector&) { }
     
    460466    virtual bool canHaveChildren() const { return true; }
    461467    virtual bool hasChildren() const { return m_haveChildren; }
    462     virtual void updateChildrenIfNecessary() { }
     468    virtual void updateChildrenIfNecessary();
    463469    virtual void selectedChildren(AccessibilityChildrenVector&) { }
    464470    virtual void visibleChildren(AccessibilityChildrenVector&) { }
  • trunk/WebCore/accessibility/AccessibilityRenderObject.cpp

    r74920 r75031  
    435435    }
    436436   
    437     return axObjectCache()->getOrCreate(renderParentObject());
     437    RenderObject* parentObj = renderParentObject();
     438    if (parentObj)
     439        return axObjectCache()->getOrCreate(parentObj);
     440   
     441    // WebArea's parent should be the scroll view containing it.
     442    if (isWebArea())
     443        return axObjectCache()->getOrCreate(m_renderer->frame()->view());
     444   
     445    return 0;
    438446}
    439447
     
    23172325}
    23182326
    2319 AXObjectCache* AccessibilityRenderObject::axObjectCache() const
    2320 {
    2321     ASSERT(m_renderer);
    2322     return m_renderer->document()->axObjectCache();
    2323 }
    2324 
    23252327AccessibilityObject* AccessibilityRenderObject::accessibilityParentForImageMap(HTMLMapElement* map) const
    23262328{
     
    27402742    RenderLayer* layer = toRenderBox(m_renderer)->layer();
    27412743     
    2742     HitTestRequest request(HitTestRequest::ReadOnly |
    2743                            HitTestRequest::Active);
     2744    HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active);
    27442745    HitTestResult hitTestResult = HitTestResult(point);
    27452746    layer->hitTest(request, hitTestResult);
     
    27742775
    27752776    return result;
    2776 }
    2777 
    2778 AccessibilityObject* AccessibilityRenderObject::focusedUIElement() const
    2779 {
    2780     Page* page = m_renderer->document()->page();
    2781     if (!page)
    2782         return 0;
    2783 
    2784     return AXObjectCache::focusedUIElementForPage(page);
    27852777}
    27862778
     
    33163308        clearChildren();       
    33173309   
    3318     if (!hasChildren())
    3319         addChildren();   
     3310    AccessibilityObject::updateChildrenIfNecessary();
    33203311}
    33213312   
     
    33543345            m_children.append(obj);
    33553346        }
     3347    }
     3348   
     3349    // FrameView's need to be inserted into the AX hierarchy when encountered.
     3350    if (isAttachment()) {
     3351        Widget* widget = widgetForAttachmentView();
     3352        if (widget && widget->isFrameView())
     3353            m_children.append(axObjectCache()->getOrCreate(widget));
    33563354    }
    33573355   
  • trunk/WebCore/accessibility/AccessibilityRenderObject.h

    r74492 r75031  
    127127    virtual double estimatedLoadingProgress() const;
    128128   
    129     virtual AccessibilityObject* focusedUIElement() const;
    130129    virtual AccessibilityObject* firstChild() const;
    131130    virtual AccessibilityObject* lastChild() const;
     
    148147    void updateAccessibilityRole();
    149148   
    150     virtual AXObjectCache* axObjectCache() const;
    151 
    152149    // Should be called on the root accessibility object to kick off a hit test.
    153150    virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const;
     
    291288    AccessibilityObject* internalLinkElement() const;
    292289    AccessibilityObject* accessibilityImageMapHitTest(HTMLAreaElement*, const IntPoint&) const;
    293     AccessibilityObject* accessibilityParentForImageMap(HTMLMapElement* map) const;
     290    AccessibilityObject* accessibilityParentForImageMap(HTMLMapElement*) const;
    294291    bool renderObjectIsObservable(RenderObject*) const;
    295292    RenderObject* renderParentObject() const;
     
    301298   
    302299    String accessibilityDescriptionForElements(Vector<Element*> &elements) const;
    303     void elementsFromAttribute(Vector<Element*>& elements, const QualifiedName& name) const;
     300    void elementsFromAttribute(Vector<Element*>& elements, const QualifiedName&) const;
    304301    String ariaAccessibilityDescription() const;
    305302   
  • trunk/WebCore/accessibility/AccessibilityScrollbar.cpp

    r53644 r75031  
    3030#include "AccessibilityScrollbar.h"
    3131
     32#include "AXObjectCache.h"
     33#include "FrameView.h"
     34#include "ScrollView.h"
    3235#include "Scrollbar.h"
    3336
    3437namespace WebCore {
    3538
    36 AccessibilityScrollbar::AccessibilityScrollbar()
    37     : m_scrollbar(0)
     39AccessibilityScrollbar::AccessibilityScrollbar(Scrollbar* scrollbar)
     40    : m_scrollbar(scrollbar)
     41    , m_parent(0)
    3842{
     43    ASSERT(scrollbar);
    3944}
    4045
    41 PassRefPtr<AccessibilityScrollbar> AccessibilityScrollbar::create()
     46PassRefPtr<AccessibilityScrollbar> AccessibilityScrollbar::create(Scrollbar* scrollbar)
    4247{
    43     return adoptRef(new AccessibilityScrollbar);
     48    return adoptRef(new AccessibilityScrollbar(scrollbar));
     49}
     50   
     51IntRect AccessibilityScrollbar::elementRect() const
     52{
     53    if (!m_scrollbar)
     54        return IntRect();
     55   
     56    return m_scrollbar->frameRect();
     57}
     58   
     59Document* AccessibilityScrollbar::document() const
     60{
     61    AccessibilityObject* parent = parentObject();
     62    if (!parent)
     63        return 0;
     64    return parent->document();
    4465}
    4566
     67AccessibilityOrientation AccessibilityScrollbar::orientation() const
     68{
     69    if (!m_scrollbar)
     70        return AccessibilityOrientationHorizontal;
     71
     72    if (m_scrollbar->orientation() == HorizontalScrollbar)
     73        return AccessibilityOrientationHorizontal;
     74    if (m_scrollbar->orientation() == VerticalScrollbar)
     75        return AccessibilityOrientationVertical;
     76
     77    return AccessibilityOrientationHorizontal;
     78}
     79
     80bool AccessibilityScrollbar::isEnabled() const
     81{
     82    if (!m_scrollbar)
     83        return false;
     84    return m_scrollbar->enabled();
     85}
     86   
    4687float AccessibilityScrollbar::valueForRange() const
    4788{
    4889    if (!m_scrollbar)
    4990        return 0;
    50     return m_scrollbar->currentPos();
     91
     92    return m_scrollbar->currentPos() / m_scrollbar->maximum();
    5193}
    5294
     95void AccessibilityScrollbar::setValue(float value)
     96{
     97    if (!m_scrollbar)
     98        return;
     99   
     100    float newValue = value * m_scrollbar->maximum();
     101   
     102    m_scrollbar->setValue(newValue, Scrollbar::NotFromScrollAnimator);   
     103}
     104   
    53105} // namespace WebCore
  • trunk/WebCore/accessibility/AccessibilityScrollbar.h

    r71445 r75031  
    3838class AccessibilityScrollbar : public AccessibilityObject {
    3939public:
    40     static PassRefPtr<AccessibilityScrollbar> create();
    41 
    42     void setScrollbar(Scrollbar* scrollbar) { m_scrollbar = scrollbar; }
     40    static PassRefPtr<AccessibilityScrollbar> create(Scrollbar*);
    4341
    4442    Scrollbar* scrollbar() const { return m_scrollbar.get(); }
     43    void setParent(AccessibilityObject* parent) { m_parent = parent; }
     44   
     45private:
     46    AccessibilityScrollbar(Scrollbar*);
     47
     48    virtual bool accessibilityIsIgnored() const { return false; }
     49    virtual bool canSetValueAttribute() const { return true; }
     50    virtual bool canSetNumericValue() const { return true; }
    4551
    4652    virtual bool isAccessibilityScrollbar() const { return true; }
    47 
     53    virtual AccessibilityObject* parentObject() const { return m_parent; }
     54    virtual IntRect elementRect() const;
     55   
    4856    virtual AccessibilityRole roleValue() const { return ScrollBarRole; }
    49 
     57    virtual AccessibilityOrientation orientation() const;
     58    virtual Document* document() const;
     59    virtual bool isEnabled() const;
     60   
     61    // Assumes float [0..1]
     62    virtual void setValue(float);
    5063    virtual float valueForRange() const;
    5164
    52 private:
    53     AccessibilityScrollbar();
    54 
    55     virtual bool accessibilityIsIgnored() const { return false; }
    56 
    57     // These should never be reached since the AccessibilityScrollbar is not part of
    58     // the accessibility tree.
    59     virtual IntSize size() const { ASSERT_NOT_REACHED(); return IntSize(); }
    60     virtual IntRect elementRect() const { ASSERT_NOT_REACHED(); return IntRect(); }
    61     virtual AccessibilityObject* parentObject() const { ASSERT_NOT_REACHED(); return 0; }
    62 
    6365    RefPtr<Scrollbar> m_scrollbar;
     66    AccessibilityOrientation m_orientation;
     67    AccessibilityObject* m_parent;
    6468};
    6569
  • trunk/WebCore/accessibility/mac/AccessibilityObjectMac.mm

    r64517 r75031  
    3030
    3131#import "AccessibilityObjectWrapper.h"
     32#import "Widget.h"
    3233
    3334namespace WebCore {
     
    3536bool AccessibilityObject::accessibilityIgnoreAttachment() const
    3637{
    37     NSView* attachment = [wrapper() attachmentView];
    38     if (!attachment)
     38    // FrameView attachments are now handled by AccessibilityScrollView,
     39    // so if this is the attachment, it should be ignored.
     40    Widget* widget = 0;
     41    if (isAttachment() && (widget = widgetForAttachmentView()) && widget->isFrameView())
    3942        return true;
     43
     44    if ([wrapper() attachmentView])
     45        return [[wrapper() attachmentView] accessibilityIsIgnored];
    4046   
    41     return [attachment accessibilityIsIgnored];
     47    // Attachments are ignored by default (unless we determine that we should expose them).
     48    return true;
    4249}
    4350
  • trunk/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm

    r73983 r75031  
    11/*
    2  * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
     2 * Copyright (C) 2008, 2009, 2010 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3737#import "AccessibilityList.h"
    3838#import "AccessibilityRenderObject.h"
     39#import "AccessibilityScrollView.h"
    3940#import "AccessibilityTable.h"
    4041#import "AccessibilityTableCell.h"
     
    4445#import "EditorClient.h"
    4546#import "Frame.h"
     47#import "FrameLoaderClient.h"
    4648#import "HTMLAnchorElement.h"
    4749#import "HTMLAreaElement.h"
     
    5456#import "RenderView.h"
    5557#import "RenderWidget.h"
     58#import "ScrollView.h"
    5659#import "SelectionController.h"
    5760#import "SimpleFontData.h"
     
    705708    static NSArray* outlineRowAttrs = nil;
    706709    static NSArray* buttonAttrs = nil;
     710    static NSArray* scrollViewAttrs = nil;
    707711    NSMutableArray* tempArray;
    708712    if (attributes == nil) {
     
    945949        [tempArray release];
    946950    }
     951    if (scrollViewAttrs == nil) {
     952        tempArray = [[NSMutableArray alloc] initWithArray:attributes];
     953        [tempArray addObject:NSAccessibilityContentsAttribute];
     954        [tempArray addObject:NSAccessibilityHorizontalScrollBarAttribute];
     955        [tempArray addObject:NSAccessibilityVerticalScrollBarAttribute];
     956        scrollViewAttrs = [[NSArray alloc] initWithArray:tempArray];
     957        [tempArray release];
     958    }
    947959   
    948960    NSArray *objectAttributes = attributes;
     
    10021014    else if (m_object->isTabList())
    10031015        objectAttributes = tabListAttrs;
     1016    else if (m_object->isScrollView())
     1017        objectAttributes = scrollViewAttrs;
    10041018   
    10051019    else if (m_object->isMenu())
     
    10111025    else if (m_object->isMenuItem())
    10121026        objectAttributes = menuItemAttrs;
    1013 
     1027   
    10141028    NSArray *additionalAttributes = [self additionalAccessibilityAttributeNames];
    10151029    if ([additionalAttributes count])
     
    10331047        return nil;
    10341048    return [(widget->platformWidget()) accessibilityAttributeValue: NSAccessibilityChildrenAttribute];
     1049}
     1050
     1051- (id)remoteAccessibilityParentObject
     1052{
     1053    if (!m_object || !m_object->document())
     1054        return nil;
     1055   
     1056    return m_object->document()->frame()->loader()->client()->accessibilityRemoteObject();
    10351057}
    10361058
     
    10761098{
    10771099    IntRect rect = m_object->elementRect();
    1078    
    1079     // The Cocoa accessibility API wants the lower-left corner.
    1080     NSPoint point = NSMakePoint(rect.x(), rect.bottom());
     1100    NSPoint point;
     1101   
    10811102    FrameView* frameView = m_object->documentFrameView();
    1082     if (frameView) {
    1083         NSView* view = frameView->documentView();
    1084         point = [[view window] convertBaseToScreen: [view convertPoint: point toView:nil]];
    1085     }
    1086 
    1087     return [NSValue valueWithPoint: point];
     1103    id remoteParent = [self remoteAccessibilityParentObject];
     1104    if (remoteParent) {
     1105        point = NSMakePoint(rect.x(), rect.y());
     1106       
     1107        NSPoint remotePosition = [[remoteParent accessibilityAttributeValue:NSAccessibilityPositionAttribute] pointValue];
     1108        NSSize remoteSize = [[remoteParent accessibilityAttributeValue:NSAccessibilitySizeAttribute] sizeValue];
     1109
     1110        // Get the y position of the WKView (we have to screen-flip and go from bottom left to top left).
     1111        CGFloat screenHeight = [[[NSScreen screens] objectAtIndex:0] frame].size.height;
     1112        remotePosition.y = (screenHeight - remotePosition.y) - remoteSize.height;
     1113       
     1114        NSPoint scrollPosition = NSMakePoint(0, 0);
     1115        if (frameView && !m_object->isScrollbar() && !m_object->isScrollView()) {
     1116            IntPoint frameScrollPos = frameView->scrollPosition();
     1117            scrollPosition = NSMakePoint(frameScrollPos.x(), frameScrollPos.y());
     1118        }
     1119       
     1120        point.x += remotePosition.x - scrollPosition.x;
     1121        // Set the new position, which means getting bottom y, and then flipping to screen coordinates.
     1122        point.y = screenHeight - (point.y + remotePosition.y + rect.height() - scrollPosition.y);
     1123    } else {
     1124        // The Cocoa accessibility API wants the lower-left corner.
     1125        point = NSMakePoint(rect.x(), rect.bottom());
     1126       
     1127        if (frameView) {
     1128            NSView* view = frameView->documentView();
     1129            point = [[view window] convertBaseToScreen:[view convertPoint: point toView:nil]];
     1130        }
     1131    }
     1132
     1133    return [NSValue valueWithPoint:point];
    10881134}
    10891135
     
    13911437}
    13921438
     1439- (id)scrollViewParent
     1440{
     1441    if (!m_object || !m_object->isAccessibilityScrollView())
     1442        return nil;
     1443   
     1444    // If this scroll view provides it's parent object (because it's a sub-frame), then
     1445    // we should not find the remoteAccessibilityParent.
     1446    if (m_object->parentObject())
     1447        return nil;
     1448   
     1449    AccessibilityScrollView* scrollView = toAccessibilityScrollView(m_object);
     1450    ScrollView* scroll = scrollView->scrollView();
     1451    if (!scroll)
     1452        return nil;
     1453   
     1454    if (scroll->platformWidget())
     1455        return scroll->platformWidget();
     1456
     1457    return [self remoteAccessibilityParentObject];
     1458}
     1459
    13931460// FIXME: split up this function in a better way. 
    13941461// suggestions: Use a hash table that maps attribute names to function calls,
     
    14091476
    14101477    if ([attributeName isEqualToString: NSAccessibilityParentAttribute]) {
    1411         if (m_object->isAccessibilityRenderObject()) {
    1412             FrameView* fv = static_cast<AccessibilityRenderObject*>(m_object)->frameViewIfRenderView();
    1413             if (fv)
    1414                 return fv->platformWidget();
    1415         }
     1478
     1479        // This will return the parent of the AXWebArea, if this is a web area.
     1480        id scrollViewParent = [self scrollViewParent];
     1481        if (scrollViewParent)
     1482            return scrollViewParent;
    14161483       
    14171484        // Tree item (changed to AXRows) can only report the tree (AXOutline) as its parent.
     
    14251492        }
    14261493       
    1427         return m_object->parentObjectUnignored()->wrapper();
     1494        AccessibilityObject* parent = m_object->parentObjectUnignored();
     1495        if (parent)
     1496            return parent->wrapper();
     1497        return nil;
    14281498    }
    14291499
     
    16141684    if ([attributeName isEqualToString: NSAccessibilityWindowAttribute] ||
    16151685        [attributeName isEqualToString: NSAccessibilityTopLevelUIElementAttribute]) {
     1686       
     1687        id remoteParent = [self remoteAccessibilityParentObject];
     1688        if (remoteParent)
     1689            return [remoteParent accessibilityAttributeValue:attributeName];
     1690       
    16161691        FrameView* fv = m_object->documentFrameView();
    16171692        if (fv)
     
    16491724            }
    16501725            return convertToNSArray(contents);
     1726        } else if (m_object->isScrollView()) {
     1727            AccessibilityObject::AccessibilityChildrenVector children = m_object->children();
     1728           
     1729            // A scrollView's contents are everything except the scroll bars.
     1730            AccessibilityObject::AccessibilityChildrenVector contents;
     1731            unsigned childrenSize = children.size();
     1732            for (unsigned k = 0; k < childrenSize; ++k) {
     1733                if (!children[k]->isScrollbar())
     1734                    contents.append(children[k]);
     1735            }
     1736            return convertToNSArray(contents);           
    16511737        }
    16521738    }   
     
    18751961    }
    18761962   
     1963    if ([attributeName isEqualToString:NSAccessibilityHorizontalScrollBarAttribute]) {
     1964        AccessibilityObject* scrollBar = m_object->scrollBar(AccessibilityOrientationHorizontal);
     1965        if (scrollBar)
     1966            return scrollBar->wrapper();
     1967        return nil;
     1968    }
     1969    if ([attributeName isEqualToString:NSAccessibilityVerticalScrollBarAttribute]) {
     1970        AccessibilityObject* scrollBar = m_object->scrollBar(AccessibilityOrientationVertical);
     1971        if (scrollBar)
     1972            return scrollBar->wrapper();
     1973        return nil;
     1974    }
     1975   
    18771976    if ([attributeName isEqualToString:NSAccessibilityLanguageAttribute])
    18781977        return m_object->language();
     
    19682067        return nil;
    19692068
     2069    m_object->updateChildrenIfNecessary();
    19702070    RefPtr<AccessibilityObject> axObject = m_object->accessibilityHitTest(IntPoint(point));
    19712071    if (axObject)
     
    22402340        m_object->setFocused([number intValue] != 0);
    22412341    } else if ([attributeName isEqualToString: NSAccessibilityValueAttribute]) {
    2242         if (!string)
    2243             return;
    2244         m_object->setValue(string);
     2342        if (number && m_object->canSetNumericValue())
     2343            m_object->setValue([number floatValue]);
     2344        else if (string)
     2345            m_object->setValue(string);
    22452346    } else if ([attributeName isEqualToString: NSAccessibilitySelectedAttribute]) {
    22462347        if (!number)
  • trunk/WebCore/dom/Document.cpp

    r74969 r75031  
    19161916   
    19171917    // this is the top-level document, so install a new cache
    1918     m_axObjectCache = new AXObjectCache;
     1918    m_axObjectCache = new AXObjectCache(this);
    19191919    return m_axObjectCache;
    19201920}
  • trunk/WebCore/loader/EmptyClients.h

    r74571 r75031  
    378378
    379379#if PLATFORM(MAC)
     380    virtual RemoteAXObjectRef accessibilityRemoteObject() { return 0; }
    380381    virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long, NSCachedURLResponse* response) const { return response; }
    381382#endif
  • trunk/WebCore/loader/FrameLoaderClient.h

    r74571 r75031  
    3535#include <wtf/Vector.h>
    3636
     37#if PLATFORM(MAC)
     38#ifdef __OBJC__
     39#import <Foundation/Foundation.h>
     40typedef id RemoteAXObjectRef;
     41#else
     42typedef void* RemoteAXObjectRef;
     43#endif
     44#endif
     45
    3746typedef class _jobject* jobject;
    3847
     
    266275       
    267276#if PLATFORM(MAC)
     277        // Allow an accessibility object to retrieve a Frame parent if there's no PlatformWidget.
     278        virtual RemoteAXObjectRef accessibilityRemoteObject() = 0;
    268279#if ENABLE(JAVA_BRIDGE)
    269280        virtual jobject javaApplet(NSView*) { return 0; }
  • trunk/WebCore/page/FrameView.cpp

    r74969 r75031  
    162162        m_enqueueEvents = 0;
    163163    }
    164 
     164   
     165    if (AXObjectCache::accessibilityEnabled() && axObjectCache())
     166        axObjectCache()->remove(this);
     167   
    165168    resetScrollbars();
    166169
     
    24832486}
    24842487   
     2488AXObjectCache* FrameView::axObjectCache() const
     2489{
     2490    return frame()->document()->axObjectCacheExists() ? frame()->document()->axObjectCache() : 0;
     2491}
     2492   
    24852493} // namespace WebCore
  • trunk/WebCore/page/FrameView.h

    r74524 r75031  
    309309    virtual void paintScrollCorner(GraphicsContext*, const IntRect& cornerRect);
    310310
     311    virtual AXObjectCache* axObjectCache() const;
    311312    void notifyWidgetsInAllFrames(WidgetNotification);
    312313   
  • trunk/WebCore/platform/ScrollView.cpp

    r74568 r75031  
    2727#include "ScrollView.h"
    2828
     29#include "AXObjectCache.h"
    2930#include "GraphicsContext.h"
    3031#include "HostWindow.h"
     
    9798        m_horizontalScrollbar = 0;
    9899    }
     100   
     101    if (AXObjectCache::accessibilityEnabled() && axObjectCache())
     102        axObjectCache()->handleScrollbarUpdate(this);
    99103}
    100104
     
    112116        m_verticalScrollbar = 0;
    113117    }
     118   
     119    if (AXObjectCache::accessibilityEnabled() && axObjectCache())
     120        axObjectCache()->handleScrollbarUpdate(this);
    114121}
    115122
  • trunk/WebCore/platform/Scrollbar.cpp

    r68112 r75031  
    9797Scrollbar::~Scrollbar()
    9898{
     99    if (AXObjectCache::accessibilityEnabled() && axObjectCache())
     100        axObjectCache()->remove(this);
     101   
    99102    stopTimerIfNeeded();
    100103   
     
    132135{
    133136#if HAVE(ACCESSIBILITY)
    134     if (AXObjectCache::accessibilityEnabled()) {
    135         if (parent() && parent()->isFrameView()) {
    136             Document* document = static_cast<FrameView*>(parent())->frame()->document();
    137             AXObjectCache* cache = document->axObjectCache();
    138             AccessibilityScrollbar* axObject = static_cast<AccessibilityScrollbar*>(cache->getOrCreate(ScrollBarRole));
    139             axObject->setScrollbar(this);
    140             cache->postNotification(axObject, document, AXObjectCache::AXValueChanged, true);
    141         }
    142     }
     137    if (AXObjectCache::accessibilityEnabled() && axObjectCache())
     138        axObjectCache()->postNotification(axObjectCache()->getOrCreate(this), 0, AXObjectCache::AXValueChanged, true);
    143139#endif
    144140
     
    476472    return m_client && m_client->isActive();
    477473}
    478  
     474   
     475AXObjectCache* Scrollbar::axObjectCache() const
     476{
     477    if (!parent() || !parent()->isFrameView())
     478        return 0;
     479   
     480    Document* document = static_cast<FrameView*>(parent())->frame()->document();
     481    return document->axObjectCache();
     482}
     483
    479484void Scrollbar::invalidateRect(const IntRect& rect)
    480485{
  • trunk/WebCore/platform/Scrollbar.h

    r67001 r75031  
    172172private:
    173173    virtual bool isScrollbar() const { return true; }
     174    virtual AXObjectCache* axObjectCache() const;
    174175
    175176    bool setCurrentPos(float pos, ScrollSource source);
  • trunk/WebCore/platform/Widget.h

    r74909 r75031  
    104104namespace WebCore {
    105105
     106class AXObjectCache;
    106107class Cursor;
    107108class Event;
     
    247248    virtual IntPoint convertFromContainingView(const IntPoint&) const;
    248249
     250    // A means to access the AX cache when this object can get a pointer to it.
     251    virtual AXObjectCache* axObjectCache() const { return 0; }
     252   
    249253private:
    250254    void init(PlatformWidget); // Must be called by all Widget constructors to initialize cross-platform data.
  • trunk/WebKit/gtk/ChangeLog

    r75009 r75031  
     12011-01-04  Chris Fleizach  <cfleizach@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        WK2: Support Accessibility
     6        https://bugs.webkit.org/show_bug.cgi?id=51859
     7
     8        Use rootObject() method to get top of ax tree.
     9
     10        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
     11        (DumpRenderTreeSupportGtk::getFocusedAccessibleElement):
     12        * webkit/webkitwebview.cpp:
     13        (webkit_web_view_get_accessible):
     14
    1152011-01-03  Martin Robinson  <mrobinson@igalia.com>
    216
  • trunk/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp

    r74933 r75031  
    426426        return 0;
    427427
    428     RenderView* root = toRenderView(priv->coreFrame->document()->renderer());
    429     if (!root)
    430         return 0;
    431 
    432     AtkObject* wrapper =  priv->coreFrame->document()->axObjectCache()->getOrCreate(root)->wrapper();
     428    AtkObject* wrapper =  priv->coreFrame->document()->axObjectCache()->rootObject()->wrapper();
    433429    if (!wrapper)
    434430        return 0;
  • trunk/WebKit/gtk/webkit/webkitwebview.cpp

    r75009 r75031  
    14531453        return NULL;
    14541454
    1455     AccessibilityObject* coreAccessible = doc->axObjectCache()->getOrCreate(doc->renderer());
     1455    AccessibilityObject* coreAccessible = doc->axObjectCache()->rootObject();
    14561456    if (!coreAccessible || !coreAccessible->wrapper())
    14571457        return NULL;
  • trunk/WebKit/mac/ChangeLog

    r74996 r75031  
     12011-01-04  Chris Fleizach  <cfleizach@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        WK2: Support Accessibility
     6        https://bugs.webkit.org/show_bug.cgi?id=51859
     7
     8        Use rootObject() method to get top of AX tree.
     9
     10        * WebCoreSupport/WebFrameLoaderClient.h:
     11        (WebFrameLoaderClient::accessibilityRemoteObject):
     12        * WebView/WebFrame.mm:
     13        (-[WebFrame setAccessibleName:]):
     14        (-[WebFrame accessibilityRoot]):
     15        * WebView/WebFrameInternal.h:
     16        * WebView/WebFramePrivate.h:
     17        * WebView/WebHTMLView.mm:
     18        (-[WebHTMLView accessibilityAttributeValue:]):
     19        (-[WebHTMLView accessibilityFocusedUIElement]):
     20        (-[WebHTMLView accessibilityHitTest:]):
     21        (-[WebHTMLView _accessibilityParentForSubview:]):
     22
    1232011-01-04  David Kilzer  <ddkilzer@apple.com>
    224
  • trunk/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h

    r74571 r75031  
    228228#endif
    229229
     230#if PLATFORM(MAC)
     231    virtual RemoteAXObjectRef accessibilityRemoteObject() { return 0; }
     232#endif
     233   
    230234    void setOriginalURLForDownload(WebDownload *, const WebCore::ResourceRequest&) const;
    231235
  • trunk/WebKit/mac/WebView/WebFrame.mm

    r74969 r75031  
    690690}
    691691
    692 - (id)_accessibilityTree
    693 {
    694 #if HAVE(ACCESSIBILITY)
    695     if (!AXObjectCache::accessibilityEnabled()) {
    696         AXObjectCache::enableAccessibility();
    697         if ([[NSApp accessibilityAttributeValue:NSAccessibilityEnhancedUserInterfaceAttribute] boolValue])
    698             AXObjectCache::enableEnhancedUserInterfaceAccessibility();
    699     }
    700 
    701     if (!_private->coreFrame || !_private->coreFrame->document())
    702         return nil;
    703     RenderView* root = toRenderView(_private->coreFrame->document()->renderer());
    704     if (!root)
    705         return nil;
    706     return _private->coreFrame->document()->axObjectCache()->getOrCreate(root)->wrapper();
    707 #else
    708     return nil;
    709 #endif
    710 }
    711 
    712692- (DOMRange *)_rangeByAlteringCurrentSelection:(SelectionController::EAlteration)alteration direction:(SelectionDirection)direction granularity:(TextGranularity)granularity
    713693{
     
    13401320        return;
    13411321   
    1342     RenderView* root = toRenderView(_private->coreFrame->document()->renderer());
    1343     if (!root)
     1322    if (!_private->coreFrame || !_private->coreFrame->document())
    13441323        return;
    13451324   
    1346     AccessibilityObject* rootObject = _private->coreFrame->document()->axObjectCache()->getOrCreate(root);
    1347     String strName(name);
    1348     rootObject->setAccessibleName(strName);
     1325    AccessibilityObject* rootObject = _private->coreFrame->document()->axObjectCache()->rootObject();
     1326    if (rootObject) {
     1327        String strName(name);
     1328        rootObject->setAccessibleName(strName);
     1329    }
    13491330#endif
    13501331}
     
    13651346        return NO;
    13661347    return coreFrame->editor()->selectionStartHasSpellingMarkerFor(from, length);
     1348}
     1349
     1350- (id)accessibilityRoot
     1351{
     1352#if HAVE(ACCESSIBILITY)
     1353    if (!AXObjectCache::accessibilityEnabled()) {
     1354        AXObjectCache::enableAccessibility();
     1355        if ([[NSApp accessibilityAttributeValue:NSAccessibilityEnhancedUserInterfaceAttribute] boolValue])
     1356            AXObjectCache::enableEnhancedUserInterfaceAccessibility();
     1357    }
     1358   
     1359    if (!_private->coreFrame || !_private->coreFrame->document())
     1360        return nil;
     1361   
     1362    AccessibilityObject* rootObject = _private->coreFrame->document()->axObjectCache()->rootObject();
     1363    if (rootObject)
     1364        return rootObject->wrapper();
     1365    return nil;
     1366#else
     1367    return nil;
     1368#endif
    13671369}
    13681370
  • trunk/WebKit/mac/WebView/WebFrameInternal.h

    r74566 r75031  
    139139- (void)_scrollDOMRangeToVisible:(DOMRange *)range;
    140140
    141 - (id)_accessibilityTree;
    142 
    143141- (DOMRange *)_rangeByAlteringCurrentSelection:(WebCore::SelectionController::EAlteration)alteration direction:(WebCore::SelectionDirection)direction granularity:(WebCore::TextGranularity)granularity;
    144142- (NSRange)_convertToNSRange:(WebCore::Range*)range;
  • trunk/WebKit/mac/WebView/WebFramePrivate.h

    r69549 r75031  
    143143- (BOOL)hasSpellingMarker:(int)location length:(int)length;
    144144
     145// The top of the accessibility tree.
     146- (id)accessibilityRoot;
     147
    145148@end
  • trunk/WebKit/mac/WebView/WebHTMLView.mm

    r74969 r75031  
    42754275{
    42764276    if ([attributeName isEqualToString: NSAccessibilityChildrenAttribute]) {
    4277         id accTree = [[self _frame] _accessibilityTree];
     4277        id accTree = [[self _frame] accessibilityRoot];
    42784278        if (accTree)
    42794279            return [NSArray arrayWithObject:accTree];
     
    42854285- (id)accessibilityFocusedUIElement
    42864286{
    4287     id accTree = [[self _frame] _accessibilityTree];
     4287    id accTree = [[self _frame] accessibilityRoot];
    42884288    if (accTree)
    42894289        return [accTree accessibilityFocusedUIElement];
     
    42934293- (id)accessibilityHitTest:(NSPoint)point
    42944294{
    4295     id accTree = [[self _frame] _accessibilityTree];
     4295    id accTree = [[self _frame] accessibilityRoot];
    42964296    if (accTree) {
    42974297        NSPoint windowCoord = [[self window] convertScreenToBase:point];
     
    43034303- (id)_accessibilityParentForSubview:(NSView *)subview
    43044304{
    4305     id accTree = [[self _frame] _accessibilityTree];
     4305    id accTree = [[self _frame] accessibilityRoot];
    43064306    if (!accTree)
    43074307        return self;
  • trunk/WebKit/win/AccessibleDocument.cpp

    r43018 r75031  
    3535// AccessibleDocument
    3636AccessibleDocument::AccessibleDocument(Document* doc)
    37     : AccessibleBase(doc->axObjectCache()->getOrCreate(doc->renderer()))
     37    : AccessibleBase(doc->axObjectCache()->rootObject())
    3838{
    3939}
  • trunk/WebKit/win/ChangeLog

    r74855 r75031  
     12011-01-04  Chris Fleizach  <cfleizach@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        WK2: Support Accessibility
     6        https://bugs.webkit.org/show_bug.cgi?id=51859
     7
     8        Use rootObject() method to get the top of the AX tree.
     9
     10        * AccessibleDocument.cpp:
     11        (AccessibleDocument::AccessibleDocument):
     12
    1132011-01-01  Adam Barth  <abarth@webkit.org>
    214
  • trunk/WebKit2/ChangeLog

    r75022 r75031  
     12011-01-04  Chris Fleizach  <cfleizach@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        WK2: Support Accessibility
     6        https://bugs.webkit.org/show_bug.cgi?id=51859
     7
     8        Implement remote accessibility API to support cross process accessibility
     9        on the Mac platform.
     10
     11        * Shared/WebProcessCreationParameters.cpp:
     12        (WebKit::WebProcessCreationParameters::encode):
     13        (WebKit::WebProcessCreationParameters::decode):
     14        * Shared/WebProcessCreationParameters.h:
     15        * UIProcess/API/mac/PageClientImpl.h:
     16        * UIProcess/API/mac/PageClientImpl.mm:
     17        (WebKit::PageClientImpl::accessibilityChildTokenReceived):
     18        * UIProcess/API/mac/WKView.mm:
     19        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
     20        (-[WKView _updateWindowAndViewFrames]):
     21        (-[WKView _setAccessibilityChildToken:]):
     22        (-[WKView accessibilityIsIgnored]):
     23        (-[WKView accessibilityHitTest:]):
     24        (-[WKView accessibilityAttributeValue:]):
     25        * UIProcess/API/mac/WKViewInternal.h:
     26        * UIProcess/PageClient.h:
     27        * UIProcess/WebContext.cpp:
     28        (WebKit::WebContext::ensureWebProcess):
     29        * UIProcess/WebPageProxy.cpp:
     30        (WebKit::WebPageProxy::windowAndViewFramesChanged):
     31        (WebKit::WebPageProxy::didReceiveAccessibilityPageToken):
     32        (WebKit::WebPageProxy::sendAccessibilityPresenterToken):
     33        * UIProcess/WebPageProxy.h:
     34        * UIProcess/WebPageProxy.messages.in:
     35        * WebKit2.xcodeproj/project.pbxproj:
     36        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
     37        (WebKit::WebFrameLoaderClient::accessibilityRemoteObject):
     38        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
     39        * WebProcess/WebPage/WebPage.cpp:
     40        (WebKit::WebPage::windowAndViewFramesChanged):
     41        * WebProcess/WebPage/WebPage.h:
     42        (WebKit::WebPage::accessibilityPosition):
     43        * WebProcess/WebPage/WebPage.messages.in:
     44        * WebProcess/WebPage/mac/AccessibilityWebPageObject.h: Added.
     45        * WebProcess/WebPage/mac/AccessibilityWebPageObject.mm: Added.
     46        (-[AccessibilityWebPageObject setWebPage:]):
     47        (-[AccessibilityWebPageObject setRemoteParent:]):
     48        (-[AccessibilityWebPageObject dealloc]):
     49        (-[AccessibilityWebPageObject accessibilityIsIgnored]):
     50        (-[AccessibilityWebPageObject accessibilityAttributeNames]):
     51        (-[AccessibilityWebPageObject accessibilityIsAttributeSettable:]):
     52        (-[AccessibilityWebPageObject accessibilitySetValue:forAttribute:]):
     53        (-[AccessibilityWebPageObject accessibilityActionNames]):
     54        (-[AccessibilityWebPageObject accessibilityChildren]):
     55        (-[AccessibilityWebPageObject accessibilityAttributeValue:]):
     56        (-[AccessibilityWebPageObject accessibilityShouldUseUniqueId]):
     57        (-[AccessibilityWebPageObject accessibilityHitTest:]):
     58        (-[AccessibilityWebPageObject accessibilityFocusedUIElement]):
     59        * WebProcess/WebPage/mac/WebPageMac.mm:
     60        (WebKit::WebPage::platformInitialize):
     61        (WebKit::WebPage::sendAccessibilityPresenterToken):
     62        (WebKit::WebPage::accessibilityRemoteObject):
     63        * WebProcess/WebProcess.cpp:
     64        (WebKit::WebProcess::initializeWebProcess):
     65        * WebProcess/WebProcess.h:
     66        (WebKit::WebProcess::presenterApplicationPid):
     67        * WebProcess/mac/WebProcessMainMac.mm:
     68        (WebKit::WebProcessMain):
     69
    1702011-01-04  Brady Eidson  <beidson@apple.com>
    271
  • trunk/WebKit2/Shared/WebProcessCreationParameters.cpp

    r75010 r75031  
    5757    encoder->encode(textCheckerState);
    5858#if PLATFORM(MAC)
     59    encoder->encode(presenterApplicationPid);
    5960    encoder->encode(nsURLCachePath);
    6061    encoder->encode(nsURLCacheMemoryCapacity);
     
    9495
    9596#if PLATFORM(MAC)
     97    if (!decoder->decode(parameters.presenterApplicationPid))
     98        return false;
    9699    if (!decoder->decode(parameters.nsURLCachePath))
    97100        return false;
  • trunk/WebKit2/Shared/WebProcessCreationParameters.h

    r75010 r75031  
    7474
    7575#if PLATFORM(MAC)
     76    pid_t presenterApplicationPid;
    7677    String nsURLCachePath;
    7778    uint64_t nsURLCacheMemoryCapacity;
  • trunk/WebKit2/UIProcess/API/mac/PageClientImpl.h

    r74582 r75031  
    7676#endif
    7777
     78    virtual void accessibilityChildTokenReceived(const CoreIPC::DataReference&);   
    7879    virtual void setComplexTextInputEnabled(uint64_t pluginComplexTextInputIdentifier, bool complexTextInputEnabled);
    7980
  • trunk/WebKit2/UIProcess/API/mac/PageClientImpl.mm

    r74582 r75031  
    2727#import "PageClientImpl.h"
    2828
     29#import "DataReference.h"
    2930#import "FindIndicator.h"
    3031#import "WKAPICast.h"
     
    258259}
    259260
     261void PageClientImpl::accessibilityChildTokenReceived(const CoreIPC::DataReference& data)
     262{
     263    NSData* remoteToken = [NSData dataWithBytes:data.data() length:data.size()];
     264    [m_wkView _setAccessibilityChildToken:remoteToken];
     265}
     266   
    260267#if USE(ACCELERATED_COMPOSITING)
    261268void PageClientImpl::pageDidEnterAcceleratedCompositing()
  • trunk/WebKit2/UIProcess/API/mac/WKView.mm

    r75010 r75031  
    2727
    2828#import "ChunkedUpdateDrawingAreaProxy.h"
     29#import "DataReference.h"
    2930#import "FindIndicator.h"
    3031#import "FindIndicatorWindow.h"
     
    5354#import <WebCore/KeyboardEvent.h>
    5455#import <WebCore/PlatformScreen.h>
     56#import <WebKitSystemInterface.h>
    5557#import <wtf/RefPtr.h>
    5658#import <wtf/RetainPtr.h>
     
    99101#endif
    100102
     103    RetainPtr<id> _remoteAccessibilityChild;
     104   
    101105    // For asynchronous validation.
    102106    ValidationMap _validationMap;
     
    167171    WebContext::statistics().wkViewCount++;
    168172
     173#if !defined(BUILDING_ON_SNOW_LEOPARD)
     174    NSData *remoteToken = (NSData *)WKAXRemoteTokenForElement(self);
     175    CoreIPC::DataReference dataToken = CoreIPC::DataReference(reinterpret_cast<const uint8_t*>([remoteToken bytes]), [remoteToken length]);
     176    _data->_page->sendAccessibilityPresenterToken(dataToken);
     177#endif
     178   
    169179    return self;
    170180}
     
    248258    NSRect windowFrameInScreenCoordinates = [window frame];
    249259    NSRect viewFrameInWindowCoordinates = [self convertRect:[self frame] toView:nil];
    250    
    251     _data->_page->windowAndViewFramesChanged(enclosingIntRect(windowFrameInScreenCoordinates), enclosingIntRect(viewFrameInWindowCoordinates));
     260    NSPoint accessibilityPosition = [[self accessibilityAttributeValue:NSAccessibilityPositionAttribute] pointValue];
     261   
     262    _data->_page->windowAndViewFramesChanged(enclosingIntRect(windowFrameInScreenCoordinates), enclosingIntRect(viewFrameInWindowCoordinates), IntPoint(accessibilityPosition));
    252263}
    253264
     
    953964{
    954965    [self _updateVisibility];
     966}
     967
     968- (void)_setAccessibilityChildToken:(NSData *)data
     969{
     970#if !defined(BUILDING_ON_SNOW_LEOPARD)
     971    _data->_remoteAccessibilityChild = WKAXRemoteElementForToken((CFDataRef)data);
     972    WKAXInitializeRemoteElementWithWindow(_data->_remoteAccessibilityChild.get(), [self window]);
     973#endif
     974}
     975
     976- (BOOL)accessibilityIsIgnored
     977{
     978    return NO;
     979}
     980
     981- (id)accessibilityHitTest:(NSPoint)point
     982{
     983    return _data->_remoteAccessibilityChild.get();
     984}
     985
     986- (id)accessibilityAttributeValue:(NSString*)attribute
     987{
     988    if ([attribute isEqualToString:NSAccessibilityChildrenAttribute]) {
     989        if (!_data->_remoteAccessibilityChild)
     990            return nil;
     991        return [NSArray arrayWithObject:_data->_remoteAccessibilityChild.get()];
     992    }
     993    if ([attribute isEqualToString:NSAccessibilityRoleAttribute])
     994        return NSAccessibilityGroupRole;
     995    if ([attribute isEqualToString:NSAccessibilityRoleDescriptionAttribute])
     996        return NSAccessibilityRoleDescription(NSAccessibilityGroupRole, nil);
     997    if ([attribute isEqualToString:NSAccessibilityParentAttribute])
     998        return NSAccessibilityUnignoredAncestor([self superview]);
     999    if ([attribute isEqualToString:NSAccessibilityEnabledAttribute])
     1000        return [NSNumber numberWithBool:YES];
     1001   
     1002    return [super accessibilityAttributeValue:attribute];
    9551003}
    9561004
  • trunk/WebKit2/UIProcess/API/mac/WKViewInternal.h

    r74582 r75031  
    5353#endif
    5454
     55- (void)_setAccessibilityChildToken:(NSData *)data;
    5556- (void)_setComplexTextInputEnabled:(BOOL)complexTextInputEnabled pluginComplexTextInputIdentifier:(uint64_t)pluginComplexTextInputIdentifier;
    5657
  • trunk/WebKit2/UIProcess/PageClient.h

    r74582 r75031  
    7070    virtual void setEditCommandState(const String& commandName, bool isEnabled, int state) = 0;
    7171#if PLATFORM(MAC)
     72    virtual void accessibilityChildTokenReceived(const CoreIPC::DataReference&) = 0;
    7273    virtual void interceptKeyEvent(const NativeWebKeyboardEvent&, Vector<WebCore::KeypressCommand>&, uint32_t, uint32_t, Vector<WebCore::CompositionUnderline>&) = 0;
    7374#endif
  • trunk/WebKit2/UIProcess/WebContext.cpp

    r75010 r75031  
    166166    parameters.clearResourceCaches = m_clearResourceCachesForNewWebProcess;
    167167    parameters.clearApplicationCache = m_clearApplicationCacheForNewWebProcess;
    168    
     168#if PLATFORM(MAC)
     169    parameters.presenterApplicationPid = getpid();
     170#endif
     171
    169172    m_clearResourceCachesForNewWebProcess = false;
    170173    m_clearApplicationCacheForNewWebProcess = false;
  • trunk/WebKit2/UIProcess/WebPageProxy.cpp

    r75022 r75031  
    495495}
    496496
    497 void WebPageProxy::windowAndViewFramesChanged(const IntRect& windowFrameInScreenCoordinates, const IntRect& viewFrameInWindowCoordinates)
    498 {
    499     if (!isValid())
    500         return;
    501 
    502     process()->send(Messages::WebPage::WindowAndViewFramesChanged(windowFrameInScreenCoordinates, viewFrameInWindowCoordinates), m_pageID);
     497void WebPageProxy::windowAndViewFramesChanged(const IntRect& windowFrameInScreenCoordinates, const IntRect& viewFrameInWindowCoordinates, const IntPoint& accessibilityViewCoordinates)
     498{
     499    if (!isValid())
     500        return;
     501
     502    process()->send(Messages::WebPage::WindowAndViewFramesChanged(windowFrameInScreenCoordinates, viewFrameInWindowCoordinates, accessibilityViewCoordinates), m_pageID);
    503503}
    504504
     
    11981198}
    11991199
     1200void WebPageProxy::didReceiveAccessibilityPageToken(const CoreIPC::DataReference& data)
     1201{
     1202#if PLATFORM(MAC)
     1203    m_pageClient->accessibilityChildTokenReceived(data);
     1204#endif
     1205}
     1206   
    12001207void WebPageProxy::frameDidBecomeFrameSet(uint64_t frameID, bool value)
    12011208{
     
    18511858}
    18521859
     1860#if PLATFORM(MAC)
     1861void WebPageProxy::sendAccessibilityPresenterToken(const CoreIPC::DataReference& token)
     1862{
     1863    if (!isValid())
     1864        return;
     1865
     1866    process()->send(Messages::WebPage::SendAccessibilityPresenterToken(token), m_pageID);
     1867}
     1868#endif
     1869
    18531870void WebPageProxy::focusedFrameChanged(uint64_t frameID)
    18541871{
  • trunk/WebKit2/UIProcess/WebPageProxy.h

    r74591 r75031  
    177177#if PLATFORM(MAC)
    178178    void updateWindowIsVisible(bool windowIsVisible);
    179     void windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates);
     179    void windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates, const WebCore::IntPoint& accessibilityViewCoordinates);
    180180    void getMarkedRange(uint64_t& location, uint64_t& length);
    181181    uint64_t characterIndexForPoint(const WebCore::IntPoint);
     
    231231    void scaleWebView(double scale, const WebCore::IntPoint& origin);
    232232    double viewScaleFactor() const { return m_viewScaleFactor; }
     233#if PLATFORM(MAC)
     234    void sendAccessibilityPresenterToken(const CoreIPC::DataReference&);
     235#endif
    233236
    234237    // Find.
     
    334337    void didChangeProgress(double);
    335338    void didFinishProgress();
     339    void didReceiveAccessibilityPageToken(const CoreIPC::DataReference&);
    336340   
    337341    void decidePolicyForNavigationAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, const String& url, uint64_t listenerID);
  • trunk/WebKit2/UIProcess/WebPageProxy.messages.in

    r74582 r75031  
    114114    StringCallback(WTF::String resultString, uint64_t callbackID)
    115115
     116    DidReceiveAccessibilityPageToken(CoreIPC::DataReference data)
     117
    116118#if PLATFORM(MAC)
    117119    # Keyboard support messages.
  • trunk/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r75020 r75031  
    211211                1CA8B946127C882A00576C2B /* WebInspectorProxyMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CA8B944127C882A00576C2B /* WebInspectorProxyMessages.h */; };
    212212                1CA8B954127C891500576C2B /* WebInspectorMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1C8E2DAD1278C5B200BC7BD0 /* WebInspectorMac.mm */; };
     213                29CD55AA128E294F00133C85 /* AccessibilityWebPageObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 29CD55A8128E294F00133C85 /* AccessibilityWebPageObject.h */; };
     214                29CD55AB128E294F00133C85 /* AccessibilityWebPageObject.mm in Sources */ = {isa = PBXBuildFile; fileRef = 29CD55A9128E294F00133C85 /* AccessibilityWebPageObject.mm */; };
    213215                37F623B812A57B6200E3FDF6 /* WKFindOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 37F623B712A57B6200E3FDF6 /* WKFindOptions.h */; settings = {ATTRIBUTES = (Public, ); }; };
    214216                51021E9C12B16788005C033C /* WebContextMenuClientMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51021E9B12B16788005C033C /* WebContextMenuClientMac.mm */; };
     
    888890                1CA8B943127C882A00576C2B /* WebInspectorProxyMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebInspectorProxyMessageReceiver.cpp; sourceTree = "<group>"; };
    889891                1CA8B944127C882A00576C2B /* WebInspectorProxyMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebInspectorProxyMessages.h; sourceTree = "<group>"; };
     892                29CD55A8128E294F00133C85 /* AccessibilityWebPageObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityWebPageObject.h; sourceTree = "<group>"; };
     893                29CD55A9128E294F00133C85 /* AccessibilityWebPageObject.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AccessibilityWebPageObject.mm; sourceTree = "<group>"; };
    890894                32DBCF5E0370ADEE00C91783 /* WebKit2Prefix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKit2Prefix.h; sourceTree = "<group>"; };
    891895                37F623B712A57B6200E3FDF6 /* WKFindOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKFindOptions.h; sourceTree = "<group>"; };
     
    23422346                        isa = PBXGroup;
    23432347                        children = (
     2348                                29CD55A9128E294F00133C85 /* AccessibilityWebPageObject.mm */,
     2349                                29CD55A8128E294F00133C85 /* AccessibilityWebPageObject.h */,
    23442350                                BC5F7BB8118237990052C02C /* ChunkedUpdateDrawingAreaMac.cpp */,
    23452351                                0F5265B511DD37700006D33C /* LayerBackedDrawingAreaMac.mm */,
     
    27892795                                ED82A7F2128C6FAF004477B3 /* WKBundlePageOverlay.h in Headers */,
    27902796                                1CA8B946127C882A00576C2B /* WebInspectorProxyMessages.h in Headers */,
     2797                                29CD55AA128E294F00133C85 /* AccessibilityWebPageObject.h in Headers */,
    27912798                                5153569D1291B1D2000749DC /* WebPageContextMenuClient.h in Headers */,
    27922799                                1AAB4A8D1296F0A20023952F /* SandboxExtension.h in Headers */,
     
    32233230                                1CA8B954127C891500576C2B /* WebInspectorMac.mm in Sources */,
    32243231                                EDCA71B7128DDA8C00201B26 /* WKBundlePageOverlay.cpp in Sources */,
     3232                                29CD55AB128E294F00133C85 /* AccessibilityWebPageObject.mm in Sources */,
    32253233                                5153569C1291B1D2000749DC /* WebPageContextMenuClient.cpp in Sources */,
    32263234                                1AAB4AAA1296F1540023952F /* SandboxExtensionMac.mm in Sources */,
  • trunk/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp

    r74657 r75031  
    12581258
    12591259#if PLATFORM(MAC)
     1260   
     1261RemoteAXObjectRef WebFrameLoaderClient::accessibilityRemoteObject()
     1262{
     1263    return m_frame->page()->accessibilityRemoteObject();
     1264}
     1265   
    12601266#if ENABLE(MAC_JAVA_BRIDGE)
    12611267jobject WebFrameLoaderClient::javaApplet(NSView*) { return 0; }
  • trunk/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h

    r74571 r75031  
    202202   
    203203#if PLATFORM(MAC)
     204    virtual RemoteAXObjectRef accessibilityRemoteObject();
     205   
    204206#if ENABLE(MAC_JAVA_BRIDGE)
    205207    virtual jobject javaApplet(NSView*);
  • trunk/WebKit2/WebProcess/WebPage/WebPage.cpp

    r74969 r75031  
    13131313}
    13141314
    1315 void WebPage::windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates)
     1315void WebPage::windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates, const WebCore::IntPoint& accessibilityViewCoordinates)
    13161316{
    13171317    m_windowFrameInScreenCoordinates = windowFrameInScreenCoordinates;
    13181318    m_viewFrameInWindowCoordinates = viewFrameInWindowCoordinates;
    1319 
     1319    m_accessibilityPosition = accessibilityViewCoordinates;
     1320   
    13201321    // Tell all our plug-in views that the window and view frames have changed.
    13211322    for (HashSet<PluginView*>::const_iterator it = m_pluginViews.begin(), end = m_pluginViews.end(); it != end; ++it)
  • trunk/WebKit2/WebProcess/WebPage/WebPage.h

    r74698 r75031  
    5353#endif
    5454
     55#if PLATFORM(MAC)
     56#include <wtf/RetainPtr.h>
     57#ifdef __OBJC__
     58@class AccessibilityWebPageObject;
     59#else
     60class AccessibilityWebPageObject;
     61#endif
     62#endif
     63
    5564namespace CoreIPC {
    5665    class ArgumentDecoder;
     
    254263
    255264#if PLATFORM(MAC)
     265    void sendAccessibilityPresenterToken(const CoreIPC::DataReference&);
     266    AccessibilityWebPageObject* accessibilityRemoteObject();
     267    WebCore::IntPoint accessibilityPosition() const { return m_accessibilityPosition; }   
     268   
    256269    void sendComplexTextInputToPlugin(uint64_t pluginComplexTextInputIdentifier, const String& textInput);
    257270
     
    341354#if PLATFORM(MAC)
    342355    void setWindowIsVisible(bool windowIsVisible);
    343     void windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates);
     356    void windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates, const WebCore::IntPoint& accessibilityViewCoordinates);
    344357#endif
    345358
     
    398411    WebCore::IntRect m_viewFrameInWindowCoordinates;
    399412
     413    // The accessibility position of the view.
     414    WebCore::IntPoint m_accessibilityPosition;
     415   
    400416    // All plug-in views on this web page.
    401417    HashSet<PluginView*> m_pluginViews;
     418   
     419    RetainPtr<AccessibilityWebPageObject> m_mockAccessibilityElement;
    402420#elif PLATFORM(WIN)
    403421    // Our view's window (in the UI process).
  • trunk/WebKit2/WebProcess/WebPage/WebPage.messages.in

    r74527 r75031  
    116116
    117117    SetWindowIsVisible(bool windowIsVisible)
    118     WindowAndViewFramesChanged(WebCore::IntRect windowFrameInScreenCoordinates, WebCore::IntRect viewFrameInWindowCoordinates)
     118    WindowAndViewFramesChanged(WebCore::IntRect windowFrameInScreenCoordinates, WebCore::IntRect viewFrameInWindowCoordinates, WebCore::IntPoint accessibilityViewCoordinates)
    119119    GetMarkedRange() -> (uint64_t location, uint64_t length)
    120120    CharacterIndexForPoint(WebCore::IntPoint point) -> (uint64_t result)
    121121    FirstRectForCharacterRange(uint64_t location, uint64_t length) -> (WebCore::IntRect resultRect)
     122    SendAccessibilityPresenterToken(CoreIPC::DataReference token)
    122123#endif
    123124#if PLATFORM(WIN)
  • trunk/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm

    r74582 r75031  
    2626#include "WebPage.h"
    2727
     28#include "AccessibilityWebPageObject.h"
     29#include "DataReference.h"
    2830#include "PluginView.h"
    2931#include "WebCoreArgumentCoders.h"
    3032#include "WebEvent.h"
     33#include "WebFrame.h"
    3134#include "WebPageProxyMessages.h"
    3235#include "WebProcess.h"
     36#include <WebCore/AXObjectCache.h>
    3337#include <WebCore/FocusController.h>
    3438#include <WebCore/Frame.h>
     
    4145#include <WebCore/TextIterator.h>
    4246#include <WebCore/WindowsKeyboardCodes.h>
     47#include <WebKitSystemInterface.h>
    4348
    4449using namespace WebCore;
     
    4954{
    5055    m_page->addSchedulePair(SchedulePair::create([NSRunLoop currentRunLoop], kCFRunLoopCommonModes));
     56
     57#if !defined(BUILDING_ON_SNOW_LEOPARD)
     58    AccessibilityWebPageObject* mockAccessibilityElement = [[[AccessibilityWebPageObject alloc] init] autorelease];
     59
     60    // Get the pid for the starting process.
     61    pid_t pid = WebProcess::shared().presenterApplicationPid();   
     62    WKAXInitializeElementWithPresenterPid(mockAccessibilityElement, pid);
     63    [mockAccessibilityElement setWebPage:this];
     64   
     65    // send data back over
     66    NSData* remoteToken = (NSData *)WKAXRemoteTokenForElement(mockAccessibilityElement);
     67    CoreIPC::DataReference dataToken = CoreIPC::DataReference(reinterpret_cast<const uint8_t*>([remoteToken bytes]), [remoteToken length]);
     68    send(Messages::WebPageProxy::DidReceiveAccessibilityPageToken(dataToken));
     69    m_mockAccessibilityElement = mockAccessibilityElement;
     70#endif
    5171}
    5272
     
    315335}
    316336
     337void WebPage::sendAccessibilityPresenterToken(const CoreIPC::DataReference& data)
     338{
     339#if !defined(BUILDING_ON_SNOW_LEOPARD)
     340    NSData* tokenData = [NSData dataWithBytes:data.data() length:data.size()];
     341    [m_mockAccessibilityElement.get() setRemoteParent:WKAXRemoteElementForToken((CFDataRef)tokenData)];
     342#endif
     343}
     344
     345AccessibilityWebPageObject* WebPage::accessibilityRemoteObject()
     346{
     347    return m_mockAccessibilityElement.get();
     348}
     349         
    317350bool WebPage::platformHasLocalDataForURL(const WebCore::KURL& url)
    318351{
  • trunk/WebKit2/WebProcess/WebProcess.cpp

    r75010 r75031  
    179179    if (parameters.clearApplicationCache)
    180180        clearApplicationCache();
     181   
     182#if PLATFORM(MAC)
     183    m_presenterApplicationPid = parameters.presenterApplicationPid;
     184#endif
    181185
    182186    if (parameters.shouldAlwaysUseComplexTextCodePath)
  • trunk/WebKit2/WebProcess/WebProcess.h

    r75010 r75031  
    9393    WebPageGroupProxy* webPageGroup(const WebPageGroupData&);
    9494    static WebCore::PageGroup* sharedPageGroup();
    95 
     95#if PLATFORM(MAC)
     96    pid_t presenterApplicationPid() const { return m_presenterApplicationPid; }
     97#endif
     98   
    9699#if PLATFORM(QT)
    97100    QNetworkAccessManager* networkAccessManager() { return m_networkAccessManager; }
     
    165168    mach_port_t m_compositingRenderServerPort;
    166169#endif
     170#if PLATFORM(MAC)
     171    pid_t m_presenterApplicationPid;
     172#endif
    167173
    168174#if PLATFORM(QT)
  • trunk/WebKit2/WebProcess/mac/WebProcessMainMac.mm

    r74657 r75031  
    134134    [NSApplication sharedApplication];
    135135
     136#if !defined(BUILDING_ON_SNOW_LEOPARD)
     137    WKAXRegisterRemoteApp();
     138#endif
     139   
    136140    RunLoop::run();
    137141
Note: See TracChangeset for help on using the changeset viewer.