Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Unified Diff: webkit/glue/webaccessibility.cc

Issue 1637018: Reimplement web content accessibility by caching in browser process (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/glue/webaccessibility.h ('k') | webkit/glue/webaccessibilitymanager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/glue/webaccessibility.cc
===================================================================
--- webkit/glue/webaccessibility.cc (revision 46908)
+++ webkit/glue/webaccessibility.cc (working copy)
@@ -1,4 +1,4 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -7,16 +7,11 @@
#include "third_party/WebKit/WebKit/chromium/public/WebAccessibilityCache.h"
#include "third_party/WebKit/WebKit/chromium/public/WebAccessibilityObject.h"
#include "third_party/WebKit/WebKit/chromium/public/WebAccessibilityRole.h"
-#include "third_party/WebKit/WebKit/chromium/public/WebPoint.h"
-#include "third_party/WebKit/WebKit/chromium/public/WebRect.h"
#include "third_party/WebKit/WebKit/chromium/public/WebString.h"
using WebKit::WebAccessibilityCache;
using WebKit::WebAccessibilityRole;
using WebKit::WebAccessibilityObject;
-using WebKit::WebPoint;
-using WebKit::WebRect;
-using WebKit::WebString;
namespace webkit_glue {
@@ -101,240 +96,82 @@
}
}
-long ConvertState(const WebAccessibilityObject& o) {
- long state = 0;
+uint32 ConvertState(const WebAccessibilityObject& o) {
+ uint32 state = 0;
if (o.isChecked())
- state |= static_cast<long>(1 << WebAccessibility::STATE_CHECKED);
+ state |= (1 << WebAccessibility::STATE_CHECKED);
if (o.canSetFocusAttribute())
- state |= static_cast<long>(1 << WebAccessibility::STATE_FOCUSABLE);
+ state |= (1 << WebAccessibility::STATE_FOCUSABLE);
if (o.isFocused())
- state |= static_cast<long>(1 << WebAccessibility::STATE_FOCUSED);
+ state |= (1 << WebAccessibility::STATE_FOCUSED);
if (o.isHovered())
- state |= static_cast<long>(1 << WebAccessibility::STATE_HOTTRACKED);
+ state |= (1 << WebAccessibility::STATE_HOTTRACKED);
if (o.isIndeterminate())
- state |= static_cast<long>(1 << WebAccessibility::STATE_INDETERMINATE);
+ state |= (1 << WebAccessibility::STATE_INDETERMINATE);
if (o.isAnchor())
- state |= static_cast<long>(1 << WebAccessibility::STATE_LINKED);
+ state |= (1 << WebAccessibility::STATE_LINKED);
if (o.isMultiSelectable())
- state |= static_cast<long>(1 << WebAccessibility::STATE_MULTISELECTABLE);
+ state |= (1 << WebAccessibility::STATE_MULTISELECTABLE);
if (o.isOffScreen())
- state |= static_cast<long>(1 << WebAccessibility::STATE_OFFSCREEN);
+ state |= (1 << WebAccessibility::STATE_OFFSCREEN);
if (o.isPressed())
- state |= static_cast<long>(1 << WebAccessibility::STATE_PRESSED);
+ state |= (1 << WebAccessibility::STATE_PRESSED);
if (o.isPasswordField())
- state |= static_cast<long>(1 << WebAccessibility::STATE_PROTECTED);
+ state |= (1 << WebAccessibility::STATE_PROTECTED);
if (o.isReadOnly())
- state |= static_cast<long>(1 << WebAccessibility::STATE_READONLY);
+ state |= (1 << WebAccessibility::STATE_READONLY);
if (o.isVisited())
- state |= static_cast<long>(1 << WebAccessibility::STATE_TRAVERSED);
+ state |= (1 << WebAccessibility::STATE_TRAVERSED);
if (!o.isEnabled())
- state |= static_cast<long>(1 << WebAccessibility::STATE_UNAVAILABLE);
+ state |= (1 << WebAccessibility::STATE_UNAVAILABLE);
return state;
}
-int32 WebAccessibility::GetAccObjInfo(WebAccessibilityCache* cache,
- const WebAccessibility::InParams& in_params,
- WebAccessibility::OutParams* out_params) {
- // Find object requested by |object_id|.
- WebAccessibilityObject active_acc_obj;
+WebAccessibility::WebAccessibility()
+ : id(-1),
+ role(ROLE_NONE),
+ state(-1) {
+}
- // Since ids assigned by Chrome starts at 1000, whereas platform-specific ids
- // used to reference a child will be in a wholly different range, we know
- // that any id that high should be treated as a non-direct descendant.
- bool local_child = false;
- if (cache->isValidId(in_params.child_id)) {
- // Object is not a direct child, re-map the input parameters accordingly.
- // The object to be retrieved is referred to by the |in_params.child_id|, as
- // a result of e.g. a focus event.
- active_acc_obj = cache->getObjectById(in_params.child_id);
- } else {
- local_child = true;
+WebAccessibility::WebAccessibility(const WebKit::WebAccessibilityObject& src,
+ WebKit::WebAccessibilityCache* cache) {
+ Init(src, cache);
+}
- active_acc_obj = cache->getObjectById(in_params.object_id);
- if (active_acc_obj.isNull())
- return RETURNCODE_FAIL;
+void WebAccessibility::Init(const WebKit::WebAccessibilityObject& src,
+ WebKit::WebAccessibilityCache* cache) {
+ name = src.title();
+ value = src.stringValue();
+ action = src.actionVerb();
+ description = src.accessibilityDescription();
+ help = src.helpText();
+ shortcut = src.keyboardShortcut();
+ role = ConvertRole(src.roleValue());
+ state = ConvertState(src);
+ location = src.boundingBoxRect();
- // child_id == 0 means self. Otherwise, it's a local child - 1.
- if (in_params.child_id > 0) {
- unsigned index = in_params.child_id - 1;
- if (index >= active_acc_obj.childCount())
- return RETURNCODE_FAIL;
+ // Add the source object to the cache and store its id.
+ id = cache->addOrGetId(src);
- active_acc_obj = active_acc_obj.childAt(index);
- }
+ // Recursively create children.
+ int child_count = src.childCount();
+ children.resize(child_count);
+ for (int i = 0; i < child_count; i++) {
+ children[i].Init(src.childAt(i), cache);
}
-
- if (active_acc_obj.isNull())
- return RETURNCODE_FAIL;
-
- // Temp paramters for holding output information.
- WebAccessibilityObject out_acc_obj;
- string16 out_string;
-
- switch (in_params.function_id) {
- case WebAccessibility::FUNCTION_DODEFAULTACTION: {
- if (!active_acc_obj.performDefaultAction())
- return RETURNCODE_FALSE;
- break;
- }
- case WebAccessibility::FUNCTION_HITTEST: {
- WebPoint point(in_params.input_long1, in_params.input_long2);
- out_acc_obj = active_acc_obj.hitTest(point);
- if (out_acc_obj.isNull())
- return RETURNCODE_FALSE;
- break;
- }
- case WebAccessibility::FUNCTION_LOCATION: {
- WebRect rect = active_acc_obj.boundingBoxRect();
- out_params->output_long1 = rect.x;
- out_params->output_long2 = rect.y;
- out_params->output_long3 = rect.width;
- out_params->output_long4 = rect.height;
- break;
- }
- case WebAccessibility::FUNCTION_NAVIGATE: {
- WebAccessibility::Direction dir =
- static_cast<WebAccessibility::Direction>(in_params.input_long1);
- switch (dir) {
- case WebAccessibility::DIRECTION_DOWN:
- case WebAccessibility::DIRECTION_UP:
- case WebAccessibility::DIRECTION_LEFT:
- case WebAccessibility::DIRECTION_RIGHT:
- // These directions are not implemented, matching Mozilla and IE.
- return RETURNCODE_FALSE;
- case WebAccessibility::DIRECTION_LASTCHILD:
- case WebAccessibility::DIRECTION_FIRSTCHILD:
- // MSDN states that navigating to first/last child can only be from
- // self.
- if (!local_child)
- return RETURNCODE_FALSE;
-
- if (dir == WebAccessibility::DIRECTION_FIRSTCHILD) {
- out_acc_obj = active_acc_obj.firstChild();
- } else {
- out_acc_obj = active_acc_obj.lastChild();
- }
- break;
- case WebAccessibility::DIRECTION_NEXT:
- case WebAccessibility::DIRECTION_PREVIOUS: {
- if (dir == WebAccessibility::DIRECTION_NEXT) {
- out_acc_obj = active_acc_obj.nextSibling();
- } else {
- out_acc_obj = active_acc_obj.previousSibling();
- }
- break;
- }
- default:
- return RETURNCODE_FALSE;
- }
-
- if (out_acc_obj.isNull())
- return RETURNCODE_FALSE;
-
- break;
- }
- case WebAccessibility::FUNCTION_GETCHILD: {
- out_params->object_id = in_params.object_id;
- out_acc_obj = active_acc_obj;
- break;
- }
- case WebAccessibility::FUNCTION_CHILDCOUNT: {
- out_params->output_long1 = active_acc_obj.childCount();
- break;
- }
- case WebAccessibility::FUNCTION_DEFAULTACTION: {
- out_string = active_acc_obj.actionVerb();
- if (out_string.empty())
- return RETURNCODE_FALSE;
- break;
- }
- case WebAccessibility::FUNCTION_DESCRIPTION: {
- out_string = active_acc_obj.accessibilityDescription();
- if (out_string.empty())
- return RETURNCODE_FALSE;
- // From the Mozilla MSAA implementation:
- // "Signal to screen readers that this description is speakable and is not
- // a formatted positional information description. Don't localize the
- // 'Description: ' part of this string, it will be parsed out by assistive
- // technologies."
- out_string = L"Description: " + out_string;
- break;
- }
- case WebAccessibility::FUNCTION_GETFOCUSEDCHILD: {
- out_acc_obj = active_acc_obj.focusedChild();
- if (out_acc_obj.isNull())
- return RETURNCODE_FALSE;
- break;
- }
- case WebAccessibility::FUNCTION_HELPTEXT: {
- out_string = active_acc_obj.helpText();
- if (out_string.empty())
- return RETURNCODE_FALSE;
- break;
- }
- case WebAccessibility::FUNCTION_KEYBOARDSHORTCUT: {
- out_string = active_acc_obj.keyboardShortcut();
- if (out_string.empty())
- return RETURNCODE_FALSE;
- break;
- }
- case WebAccessibility::FUNCTION_NAME: {
- out_string = active_acc_obj.title();
- if (out_string.empty())
- return RETURNCODE_FALSE;
- break;
- }
- case WebAccessibility::FUNCTION_GETPARENT: {
- out_acc_obj = active_acc_obj.parentObject();
- if (out_acc_obj.isNull())
- return RETURNCODE_FALSE;
- break;
- }
- case WebAccessibility::FUNCTION_ROLE: {
- out_params->output_long1 = ConvertRole(active_acc_obj.roleValue());
- break;
- }
- case WebAccessibility::FUNCTION_STATE: {
- out_params->output_long1 = ConvertState(active_acc_obj);
- break;
- }
- case WebAccessibility::FUNCTION_VALUE: {
- out_string = active_acc_obj.stringValue();
- if (out_string.empty())
- return RETURNCODE_FALSE;
- break;
- }
- default:
- // Non-supported function id.
- return RETURNCODE_FAIL;
- }
-
- // Output and hashmap assignments, as appropriate.
- if (!out_string.empty())
- out_params->output_string = out_string;
-
- if (out_acc_obj.isNull())
- return RETURNCODE_TRUE;
-
- int id = cache->addOrGetId(out_acc_obj);
- out_params->object_id = id;
- out_params->output_long1 = -1;
-
- // TODO(ctguil): Handle simple objects returned.
- return RETURNCODE_TRUE;
}
} // namespace webkit_glue
« no previous file with comments | « webkit/glue/webaccessibility.h ('k') | webkit/glue/webaccessibilitymanager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698