diff options
author | dglazkov@chromium.org <dglazkov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-13 16:09:08 +0000 |
---|---|---|
committer | dglazkov@chromium.org <dglazkov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-13 16:09:08 +0000 |
commit | cc0445fff1bc059231e7bd4772fe145105ea42cb (patch) | |
tree | 9509005c77ececab20ab81b05b3507cfd5ce4bf1 | |
parent | 86791755c084285f1f4a94c9a1ba32aff807af04 (diff) | |
download | chromium_src-cc0445fff1bc059231e7bd4772fe145105ea42cb.zip chromium_src-cc0445fff1bc059231e7bd4772fe145105ea42cb.tar.gz chromium_src-cc0445fff1bc059231e7bd4772fe145105ea42cb.tar.bz2 |
Implement WebAccessibility object, a wrapper for WebCore::AccessibilityObject.
R=darin
BUG=24596
TEST=none
Implement getter/setter-based bound properties for CppBoundClass.
This is necessary for AccessibilityController, which has non-trivial
property accessors.
R=darin
BUG=10322
TEST=CppBoundClassTest.SetAndGetPropertiesWithCallbacks
Review URL: http://codereview.chromium.org/272029
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@28821 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/renderer/print_web_view_helper.h | 2 | ||||
-rw-r--r-- | chrome/renderer/render_view.cc | 6 | ||||
-rw-r--r-- | chrome/renderer/render_view.h | 3 | ||||
-rwxr-xr-x | webkit/api/public/WebAccessibilityObject.h | 71 | ||||
-rw-r--r-- | webkit/api/public/WebView.h | 6 | ||||
-rw-r--r-- | webkit/api/public/WebViewClient.h | 7 | ||||
-rwxr-xr-x | webkit/api/src/WebAccessibilityObject.cpp | 80 | ||||
-rw-r--r-- | webkit/glue/chrome_client_impl.cc | 10 | ||||
-rw-r--r-- | webkit/glue/glue_util.cc | 14 | ||||
-rw-r--r-- | webkit/glue/glue_util.h | 8 | ||||
-rw-r--r-- | webkit/glue/webaccessibilitymanager.h | 6 | ||||
-rw-r--r-- | webkit/glue/webaccessibilitymanager_impl.cc | 16 | ||||
-rw-r--r-- | webkit/glue/webaccessibilitymanager_impl.h | 2 | ||||
-rw-r--r-- | webkit/glue/webview_delegate.h | 7 | ||||
-rw-r--r-- | webkit/glue/webview_impl.cc | 14 | ||||
-rw-r--r-- | webkit/glue/webview_impl.h | 2 | ||||
-rw-r--r-- | webkit/tools/test_shell/test_webview_delegate.h | 2 | ||||
-rw-r--r-- | webkit/webkit.gyp | 2 |
18 files changed, 237 insertions, 21 deletions
diff --git a/chrome/renderer/print_web_view_helper.h b/chrome/renderer/print_web_view_helper.h index 893552d..fee75f8 100644 --- a/chrome/renderer/print_web_view_helper.h +++ b/chrome/renderer/print_web_view_helper.h @@ -206,6 +206,8 @@ class PrintWebViewHelper : public WebViewDelegate { virtual int historyForwardListCount() { return 0; } virtual void didAddHistoryItem() {} virtual void didUpdateInspectorSettings() {} + virtual void focusAccessibilityObject( + const WebKit::WebAccessibilityObject& object) {} // WebKit::WebWidgetClient virtual void didInvalidateRect(const WebKit::WebRect&) {} diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 9600b8d..746aefc 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -59,6 +59,7 @@ #include "net/base/net_errors.h" #include "skia/ext/bitmap_platform_device.h" #include "skia/ext/image_operations.h" +#include "webkit/api/public/WebAccessibilityObject.h" #include "webkit/api/public/WebDataSource.h" #include "webkit/api/public/WebDragData.h" #include "webkit/api/public/WebForm.h" @@ -112,6 +113,7 @@ using webkit_glue::ImageResourceFetcher; using webkit_glue::PasswordForm; using webkit_glue::PasswordFormDomManager; using webkit_glue::SearchableFormData; +using WebKit::WebAccessibilityObject; using WebKit::WebColor; using WebKit::WebColorName; using WebKit::WebConsoleMessage; @@ -3532,8 +3534,8 @@ void RenderView::DumpLoadHistograms() const { navigation_state->set_load_histograms_recorded(true); } -void RenderView::FocusAccessibilityObject( - WebCore::AccessibilityObject* acc_obj) { +void RenderView::focusAccessibilityObject( + const WebAccessibilityObject& acc_obj) { #if defined(OS_WIN) if (!web_accessibility_manager_.get()) { web_accessibility_manager_.reset( diff --git a/chrome/renderer/render_view.h b/chrome/renderer/render_view.h index 72e8f6b..8a5b2cc 100644 --- a/chrome/renderer/render_view.h +++ b/chrome/renderer/render_view.h @@ -180,7 +180,6 @@ class RenderView : public RenderWidget, int status); virtual WebDevToolsAgentDelegate* GetWebDevToolsAgentDelegate(); virtual bool WasOpenedByUserGesture() const; - virtual void FocusAccessibilityObject(WebCore::AccessibilityObject* acc_obj); virtual void UserMetricsRecordAction(const std::wstring& action); virtual void DnsPrefetch(const std::vector<std::string>& host_names); @@ -260,6 +259,8 @@ class RenderView : public RenderWidget, virtual int historyForwardListCount(); virtual void didAddHistoryItem(); virtual void didUpdateInspectorSettings(); + virtual void focusAccessibilityObject( + const WebKit::WebAccessibilityObject& acc_obj); virtual WebKit::WebNotificationPresenter* GetNotificationPresenter() { return notification_provider_.get(); diff --git a/webkit/api/public/WebAccessibilityObject.h b/webkit/api/public/WebAccessibilityObject.h new file mode 100755 index 0000000..60142fa --- /dev/null +++ b/webkit/api/public/WebAccessibilityObject.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2009 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef WebAccessibilityObject_h +#define WebAccessibilityObject_h + +#include "WebCommon.h" + +#if WEBKIT_IMPLEMENTATION +namespace WebCore { class AccessibilityObject; } +namespace WTF { template <typename T> class PassRefPtr; } +#endif + +namespace WebKit { + class WebAccessibilityObjectPrivate; + + // A container for passing around a reference to AccessibilityObject. + class WebAccessibilityObject { + public: + ~WebAccessibilityObject() { reset(); } + + WebAccessibilityObject() : m_private(0) { } + WebAccessibilityObject(const WebAccessibilityObject& o) : m_private(0) { assign(o); } + WebAccessibilityObject& operator=(const WebAccessibilityObject& o) { assign(o); return *this; } + + WEBKIT_API void reset(); + WEBKIT_API void assign(const WebAccessibilityObject&); + + bool isNull() const { return m_private == 0; } + +#if WEBKIT_IMPLEMENTATION + WebAccessibilityObject(const WTF::PassRefPtr<WebCore::AccessibilityObject>&); + WebAccessibilityObject& operator=(const WTF::PassRefPtr<WebCore::AccessibilityObject>&); + operator WTF::PassRefPtr<WebCore::AccessibilityObject>() const; +#endif + + private: + void assign(WebAccessibilityObjectPrivate*); + WebAccessibilityObjectPrivate* m_private; + }; + +} // namespace WebKit + +#endif diff --git a/webkit/api/public/WebView.h b/webkit/api/public/WebView.h index 4b1437f..e7994a2 100644 --- a/webkit/api/public/WebView.h +++ b/webkit/api/public/WebView.h @@ -35,6 +35,7 @@ #include "WebWidget.h" namespace WebKit { + class WebAccessibilityObject; class WebDragData; class WebFrame; class WebFrameClient; @@ -201,6 +202,11 @@ namespace WebKit { virtual void setInspectorSettings(const WebString&) = 0; + // Accessibility ------------------------------------------------------- + + // Returns the accessibility object for this view. + virtual WebAccessibilityObject accessibilityObject() = 0; + // FIXME what about: // GetDelegate // AutofillSuggestionsForNode diff --git a/webkit/api/public/WebViewClient.h b/webkit/api/public/WebViewClient.h index 70e1db0..e613cac 100644 --- a/webkit/api/public/WebViewClient.h +++ b/webkit/api/public/WebViewClient.h @@ -40,6 +40,7 @@ class WebView; // FIXME: Move into the WebKit namespace. namespace WebKit { + class WebAccessibilityObject; class WebDragData; class WebFileChooserCompletion; class WebFrame; @@ -238,6 +239,12 @@ namespace WebKit { virtual void didAddHistoryItem() = 0; + // Accessibility ------------------------------------------------------- + + // Notifies embedder that the focus has changed to the given + // accessibility object. + virtual void focusAccessibilityObject(const WebAccessibilityObject&) = 0; + // Developer tools ----------------------------------------------------- // Called to notify the client that the inspector's settings were diff --git a/webkit/api/src/WebAccessibilityObject.cpp b/webkit/api/src/WebAccessibilityObject.cpp new file mode 100755 index 0000000..b53f890 --- /dev/null +++ b/webkit/api/src/WebAccessibilityObject.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2009 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "WebAccessibilityObject.h" + +#include "AccessibilityObject.h" + +using namespace WebCore; + +namespace WebKit { + +class WebAccessibilityObjectPrivate : public WebCore::AccessibilityObject { +}; + +void WebAccessibilityObject::reset() +{ + assign(0); +} + +void WebAccessibilityObject::assign(const WebKit::WebAccessibilityObject& other) +{ + WebAccessibilityObjectPrivate* p = const_cast<WebAccessibilityObjectPrivate*>(other.m_private); + if (p) + p->ref(); + assign(p); +} + +WebAccessibilityObject::WebAccessibilityObject(const WTF::PassRefPtr<WebCore::AccessibilityObject>& object) + : m_private(static_cast<WebAccessibilityObjectPrivate*>(object.releaseRef())) +{ +} + +WebAccessibilityObject& WebAccessibilityObject::operator=(const WTF::PassRefPtr<WebCore::AccessibilityObject>& object) +{ + assign(static_cast<WebAccessibilityObjectPrivate*>(object.releaseRef())); + return *this; +} + +WebAccessibilityObject::operator WTF::PassRefPtr<WebCore::AccessibilityObject>() const +{ + return PassRefPtr<WebCore::AccessibilityObject>(const_cast<WebAccessibilityObjectPrivate*>(m_private)); +} + +void WebAccessibilityObject::assign(WebAccessibilityObjectPrivate* p) +{ + // p is already ref'd for us by the caller + if (m_private) + m_private->deref(); + m_private = p; +} + +} // namespace WebKit diff --git a/webkit/glue/chrome_client_impl.cc b/webkit/glue/chrome_client_impl.cc index 5e5349f..2dba7b0 100644 --- a/webkit/glue/chrome_client_impl.cc +++ b/webkit/glue/chrome_client_impl.cc @@ -28,6 +28,7 @@ #endif #undef LOG +#include "webkit/api/public/WebAccessibilityObject.h" #include "webkit/api/public/WebConsoleMessage.h" #include "webkit/api/public/WebCursorInfo.h" #include "webkit/api/public/WebFileChooserCompletion.h" @@ -53,6 +54,7 @@ using WebCore::PopupContainer; using WebCore::PopupItem; +using WebKit::WebAccessibilityObject; using WebKit::WebConsoleMessage; using WebKit::WebCursorInfo; using WebKit::WebFileChooserCompletionImpl; @@ -70,6 +72,8 @@ using WebKit::WebViewClient; using WebKit::WebWidget; using WebKit::WrappedResourceRequest; +using webkit_glue::AccessibilityObjectToWebAccessibilityObject; + ChromeClientImpl::ChromeClientImpl(WebViewImpl* webview) : webview_(webview), toolbars_visible_(true), @@ -153,8 +157,10 @@ void ChromeClientImpl::focus() { doc->axObjectCache()->getOrCreate(focused_node->renderer()); // Alert assistive technology that focus changed. - if (focused_acc_obj) - webview_->delegate()->FocusAccessibilityObject(focused_acc_obj); + if (focused_acc_obj) { + webview_->client()->focusAccessibilityObject( + AccessibilityObjectToWebAccessibilityObject(focused_acc_obj)); + } } } diff --git a/webkit/glue/glue_util.cc b/webkit/glue/glue_util.cc index 1ae7ff6..cfe2fef 100644 --- a/webkit/glue/glue_util.cc +++ b/webkit/glue/glue_util.cc @@ -15,6 +15,7 @@ #include <string> +#include "AccessibilityObject.h" #include "ChromiumDataObject.h" #include "CString.h" #include "HistoryItem.h" @@ -35,6 +36,7 @@ #include "base/string_util.h" #include "base/sys_string_conversions.h" #include "googleurl/src/gurl.h" +#include "webkit/api/public/WebAccessibilityObject.h" #include "webkit/api/public/WebCursorInfo.h" #include "webkit/api/public/WebDragData.h" #include "webkit/api/public/WebForm.h" @@ -342,4 +344,16 @@ const WebCore::ResourceResponse* WebURLResponseToResourceResponse( return &response->toResourceResponse(); } +// WebAccessibilityObject conversions ------------------------------------------ + +WebKit::WebAccessibilityObject AccessibilityObjectToWebAccessibilityObject( + const WTF::PassRefPtr<WebCore::AccessibilityObject>& object) { + return object; +} + +WTF::PassRefPtr<WebCore::AccessibilityObject> WebAccessibilityObjectToAccessibilityObject( + const WebKit::WebAccessibilityObject& object) { + return object; +} + } // namespace webkit_glue diff --git a/webkit/glue/glue_util.h b/webkit/glue/glue_util.h index 99d3446..e5cc376 100644 --- a/webkit/glue/glue_util.h +++ b/webkit/glue/glue_util.h @@ -11,6 +11,7 @@ class GURL; namespace WebCore { +class AccessibilityObject; class ChromiumDataObject; class CString; class Cursor; @@ -31,6 +32,7 @@ struct ResourceRequest; } namespace WebKit { +class WebAccessibilityObject; class WebCString; class WebData; class WebDragData; @@ -176,6 +178,12 @@ WebCore::ResourceResponse* WebURLResponseToMutableResourceResponse( const WebCore::ResourceResponse* WebURLResponseToResourceResponse( const WebKit::WebURLResponse* resp); +// WebAccessibilityObject <-> AccessibilityObject +WebKit::WebAccessibilityObject AccessibilityObjectToWebAccessibilityObject( + const WTF::PassRefPtr<WebCore::AccessibilityObject>& o); +WTF::PassRefPtr<WebCore::AccessibilityObject> WebAccessibilityObjectToAccessibilityObject( + const WebKit::WebAccessibilityObject&); + } // namespace webkit_glue #endif // #ifndef WEBKIT_GLUE_GLUE_UTIL_H_ diff --git a/webkit/glue/webaccessibilitymanager.h b/webkit/glue/webaccessibilitymanager.h index c94fbb9..04c1685 100644 --- a/webkit/glue/webaccessibilitymanager.h +++ b/webkit/glue/webaccessibilitymanager.h @@ -7,8 +7,8 @@ #include "webkit/glue/webaccessibility.h" -namespace WebCore { -class AccessibilityObject; +namespace WebKit { +class WebAccessibilityObject; } class WebView; @@ -46,7 +46,7 @@ class WebAccessibilityManager { // Retrieves the id of the input AccessibilityObject, due to a focus event. // Returns an id greater than or equal to 0 if successful, -1 otherwise. - virtual int FocusAccObj(WebCore::AccessibilityObject* acc_obj) = 0; + virtual int FocusAccObj(const WebKit::WebAccessibilityObject& object) = 0; private: // Retrieves the RenderObject associated with this WebView, and uses it to diff --git a/webkit/glue/webaccessibilitymanager_impl.cc b/webkit/glue/webaccessibilitymanager_impl.cc index 5f2f2e3..be4e9a0 100644 --- a/webkit/glue/webaccessibilitymanager_impl.cc +++ b/webkit/glue/webaccessibilitymanager_impl.cc @@ -12,11 +12,14 @@ #include "webkit/glue/webaccessibilitymanager_impl.h" +#include "webkit/api/public/WebAccessibilityObject.h" #include "webkit/glue/glue_accessibility_object.h" #include "webkit/glue/glue_util.h" #include "webkit/glue/webframe_impl.h" #include "webkit/glue/webview_impl.h" +using WebKit::WebAccessibilityObject; + namespace webkit_glue { // struct WebAccessibilityManagerImpl::GlueAccessibilityObjectRoot @@ -258,13 +261,16 @@ bool WebAccessibilityManagerImpl::ClearAccObjMap(int acc_obj_id, } int WebAccessibilityManagerImpl::FocusAccObj( - WebCore::AccessibilityObject* acc_obj) { - if (!acc_obj) { + const WebAccessibilityObject& object) { + if (object.isNull()) { // Return with failure. return -1; } - AccObjToIntMap::iterator it = acc_obj_to_int_map_.find(acc_obj); + RefPtr<WebCore::AccessibilityObject> acc_obj = + WebAccessibilityObjectToAccessibilityObject(object); + + AccObjToIntMap::iterator it = acc_obj_to_int_map_.find(acc_obj.get()); if (it != acc_obj_to_int_map_.end()) return it->second; @@ -272,8 +278,8 @@ int WebAccessibilityManagerImpl::FocusAccObj( // Insert new accessibility object in hashmaps and return its newly // assigned accessibility object id. int_to_glue_acc_obj_map_[acc_obj_id_] = - GlueAccessibilityObject::CreateInstance(acc_obj); - acc_obj_to_int_map_[acc_obj] = acc_obj_id_; + GlueAccessibilityObject::CreateInstance(acc_obj.get()); + acc_obj_to_int_map_[acc_obj.get()] = acc_obj_id_; return acc_obj_id_++; } diff --git a/webkit/glue/webaccessibilitymanager_impl.h b/webkit/glue/webaccessibilitymanager_impl.h index be14bec..a92fd21 100644 --- a/webkit/glue/webaccessibilitymanager_impl.h +++ b/webkit/glue/webaccessibilitymanager_impl.h @@ -29,7 +29,7 @@ class WebAccessibilityManagerImpl : public WebAccessibilityManager { bool GetAccObjInfo(WebView* view, const WebAccessibility::InParams& in_params, WebAccessibility::OutParams* out_params); bool ClearAccObjMap(int acc_obj_id, bool clear_all); - int FocusAccObj(WebCore::AccessibilityObject* acc_obj); + int FocusAccObj(const WebKit::WebAccessibilityObject& object); protected: // Needed so WebAccessibilityManager::Create can call our constructor. diff --git a/webkit/glue/webview_delegate.h b/webkit/glue/webview_delegate.h index 0757b85..2263519 100644 --- a/webkit/glue/webview_delegate.h +++ b/webkit/glue/webview_delegate.h @@ -62,13 +62,6 @@ class WebViewDelegate : public WebKit::WebViewClient { return true; } - // Called by ChromeClientImpl::focus() if accessibility on the renderer side - // is enabled, and a focus change has occurred. Will retrieve the id of the - // input AccessibilityObject and send it through IPC for handling on the - // browser side. - virtual void FocusAccessibilityObject(WebCore::AccessibilityObject* acc_obj) { - } - // ChromeClient ------------------------------------------------------------ // Queries the browser for suggestions to be shown for the form text field diff --git a/webkit/glue/webview_impl.cc b/webkit/glue/webview_impl.cc index 3f86229..7508e67 100644 --- a/webkit/glue/webview_impl.cc +++ b/webkit/glue/webview_impl.cc @@ -7,6 +7,7 @@ #include "base/compiler_specific.h" MSVC_PUSH_WARNING_LEVEL(0); +#include "AXObjectCache.h" #include "CSSStyleSelector.h" #include "CSSValueKeywords.h" #include "Cursor.h" @@ -61,6 +62,7 @@ MSVC_POP_WARNING(); #include "base/keyboard_codes.h" #include "base/logging.h" #include "base/message_loop.h" +#include "webkit/api/public/WebAccessibilityObject.h" #include "webkit/api/public/WebDragData.h" #include "webkit/api/public/WebInputEvent.h" #include "webkit/api/public/WebMediaPlayerAction.h" @@ -91,6 +93,7 @@ using namespace WebCore; using WebKit::PlatformKeyboardEventBuilder; using WebKit::PlatformMouseEventBuilder; using WebKit::PlatformWheelEventBuilder; +using WebKit::WebAccessibilityObject; using WebKit::WebCanvas; using WebKit::WebCompositionCommand; using WebKit::WebCompositionCommandConfirm; @@ -121,6 +124,7 @@ using WebKit::WebTextDirectionRightToLeft; using WebKit::WebURL; using webkit_glue::ImageResourceFetcher; +using webkit_glue::AccessibilityObjectToWebAccessibilityObject; // Change the text zoom level by kTextSizeMultiplierRatio each time the user // zooms text in or out (ie., change by 20%). The min and max values limit @@ -1659,6 +1663,16 @@ void WebViewImpl::setInspectorSettings(const WebString& settings) { inspector_settings_ = settings; } +WebAccessibilityObject WebViewImpl::accessibilityObject() { + if (!main_frame()) + return WebAccessibilityObject(); + + WebCore::Document* document = main_frame()->frame()->document(); + + return AccessibilityObjectToWebAccessibilityObject( + document->axObjectCache()->getOrCreate(document->renderer())); +} + // WebView -------------------------------------------------------------------- bool WebViewImpl::setDropEffect(bool accept) { diff --git a/webkit/glue/webview_impl.h b/webkit/glue/webview_impl.h index 8dafde0..d1d3b9d 100644 --- a/webkit/glue/webview_impl.h +++ b/webkit/glue/webview_impl.h @@ -43,6 +43,7 @@ class Widget; } namespace WebKit { +class WebAccessibilityObject; class WebKeyboardEvent; class WebMouseEvent; class WebMouseWheelEvent; @@ -136,6 +137,7 @@ class WebViewImpl : public WebView, public base::RefCounted<WebViewImpl> { virtual void inspectElementAt(const WebKit::WebPoint& point); virtual WebKit::WebString inspectorSettings() const; virtual void setInspectorSettings(const WebKit::WebString& settings); + virtual WebKit::WebAccessibilityObject accessibilityObject(); // WebView methods: virtual void AutofillSuggestionsForNode( diff --git a/webkit/tools/test_shell/test_webview_delegate.h b/webkit/tools/test_shell/test_webview_delegate.h index a5fba55..f840b41 100644 --- a/webkit/tools/test_shell/test_webview_delegate.h +++ b/webkit/tools/test_shell/test_webview_delegate.h @@ -140,6 +140,8 @@ class TestWebViewDelegate : public WebViewDelegate, virtual int historyForwardListCount(); virtual void didAddHistoryItem() {} virtual void didUpdateInspectorSettings() {} + virtual void focusAccessibilityObject( + const WebKit::WebAccessibilityObject& object) {} // WebKit::WebWidgetClient virtual void didInvalidateRect(const WebKit::WebRect& rect); diff --git a/webkit/webkit.gyp b/webkit/webkit.gyp index 30268fc..81776fdc 100644 --- a/webkit/webkit.gyp +++ b/webkit/webkit.gyp @@ -76,6 +76,7 @@ 'api/public/x11/WebScreenInfoFactory.h', 'api/public/mac/WebInputEventFactory.h', 'api/public/mac/WebScreenInfoFactory.h', + 'api/public/WebAccessibilityObject.h', 'api/public/WebApplicationCacheHost.h', 'api/public/WebApplicationCacheHostClient.h', 'api/public/WebBindings.h', @@ -184,6 +185,7 @@ 'api/src/StorageNamespaceProxy.cpp', 'api/src/StorageNamespaceProxy.h', 'api/src/TemporaryGlue.h', + 'api/src/WebAccessibilityObject.cpp', 'api/src/WebBindings.cpp', 'api/src/WebCache.cpp', 'api/src/WebColor.cpp', |