summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordglazkov@chromium.org <dglazkov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-13 16:09:08 +0000
committerdglazkov@chromium.org <dglazkov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-13 16:09:08 +0000
commitcc0445fff1bc059231e7bd4772fe145105ea42cb (patch)
tree9509005c77ececab20ab81b05b3507cfd5ce4bf1
parent86791755c084285f1f4a94c9a1ba32aff807af04 (diff)
downloadchromium_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.h2
-rw-r--r--chrome/renderer/render_view.cc6
-rw-r--r--chrome/renderer/render_view.h3
-rwxr-xr-xwebkit/api/public/WebAccessibilityObject.h71
-rw-r--r--webkit/api/public/WebView.h6
-rw-r--r--webkit/api/public/WebViewClient.h7
-rwxr-xr-xwebkit/api/src/WebAccessibilityObject.cpp80
-rw-r--r--webkit/glue/chrome_client_impl.cc10
-rw-r--r--webkit/glue/glue_util.cc14
-rw-r--r--webkit/glue/glue_util.h8
-rw-r--r--webkit/glue/webaccessibilitymanager.h6
-rw-r--r--webkit/glue/webaccessibilitymanager_impl.cc16
-rw-r--r--webkit/glue/webaccessibilitymanager_impl.h2
-rw-r--r--webkit/glue/webview_delegate.h7
-rw-r--r--webkit/glue/webview_impl.cc14
-rw-r--r--webkit/glue/webview_impl.h2
-rw-r--r--webkit/tools/test_shell/test_webview_delegate.h2
-rw-r--r--webkit/webkit.gyp2
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',