summaryrefslogtreecommitdiffstats
path: root/chrome/browser/accessibility/browser_accessibility_win.cc
diff options
context:
space:
mode:
authorctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-03 19:10:00 +0000
committerctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-03 19:10:00 +0000
commit02747d4e2fcd7211cf2fe0851d15d7c8a9341b54 (patch)
tree9f3db8a5df43293cb5ac1f8612d48273009ff641 /chrome/browser/accessibility/browser_accessibility_win.cc
parent604890c160d3f9383907b80585491fa282abbbd8 (diff)
downloadchromium_src-02747d4e2fcd7211cf2fe0851d15d7c8a9341b54.zip
chromium_src-02747d4e2fcd7211cf2fe0851d15d7c8a9341b54.tar.gz
chromium_src-02747d4e2fcd7211cf2fe0851d15d7c8a9341b54.tar.bz2
Add basic support for accessibility hit testing within web contents.
BUG=59890 TEST=Manual. Inspect32. Review URL: http://codereview.chromium.org/4292001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@64943 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/accessibility/browser_accessibility_win.cc')
-rw-r--r--chrome/browser/accessibility/browser_accessibility_win.cc66
1 files changed, 24 insertions, 42 deletions
diff --git a/chrome/browser/accessibility/browser_accessibility_win.cc b/chrome/browser/accessibility/browser_accessibility_win.cc
index 8817dfa..63d2408 100644
--- a/chrome/browser/accessibility/browser_accessibility_win.cc
+++ b/chrome/browser/accessibility/browser_accessibility_win.cc
@@ -53,15 +53,31 @@ HRESULT BrowserAccessibilityWin::accDoDefaultAction(VARIANT var_id) {
return S_OK;
}
-STDMETHODIMP BrowserAccessibilityWin::accHitTest(LONG x_left, LONG y_top,
- VARIANT* child) {
+STDMETHODIMP BrowserAccessibilityWin::accHitTest(
+ LONG x_left, LONG y_top, VARIANT* child) {
if (!instance_active_)
return E_FAIL;
if (!child)
return E_INVALIDARG;
- return E_NOTIMPL;
+ gfx::Point point(x_left, y_top);
+ if (!GetBoundsRect().Contains(point)) {
+ // Return S_FALSE and VT_EMPTY when the outside the object's boundaries.
+ child->vt = VT_EMPTY;
+ return S_FALSE;
+ }
+
+ BrowserAccessibility* result = BrowserAccessibilityForPoint(point);
+ if (result == this) {
+ // Point is within this object.
+ child->vt = VT_I4;
+ child->lVal = CHILDID_SELF;
+ } else {
+ child->vt = VT_DISPATCH;
+ child->pdispVal = result->toBrowserAccessibilityWin()->NewReference();
+ }
+ return S_OK;
}
STDMETHODIMP BrowserAccessibilityWin::accLocation(LONG* x_left, LONG* y_top,
@@ -77,16 +93,11 @@ STDMETHODIMP BrowserAccessibilityWin::accLocation(LONG* x_left, LONG* y_top,
if (!target)
return E_INVALIDARG;
- // Find the top left corner of the containing window in screen coords, and
- // adjust the output position by this amount.
- HWND parent_hwnd = manager_->GetParentView();
- POINT top_left = {0, 0};
- ::ClientToScreen(parent_hwnd, &top_left);
-
- *x_left = target->location_.x + top_left.x;
- *y_top = target->location_.y + top_left.y;
- *width = target->location_.width;
- *height = target->location_.height;
+ gfx::Rect bounds = target->GetBoundsRect();
+ *x_left = bounds.x();
+ *y_top = bounds.y();
+ *width = bounds.width();
+ *height = bounds.height();
return S_OK;
}
@@ -1156,22 +1167,6 @@ BrowserAccessibilityWin* BrowserAccessibilityWin::GetTargetFromChildID(
return manager_->GetFromChildID(child_id)->toBrowserAccessibilityWin();
}
-bool BrowserAccessibilityWin::HasAttribute(
- WebAccessibility::Attribute attribute) {
- return (attributes_.find(attribute) != attributes_.end());
-}
-
-bool BrowserAccessibilityWin::GetAttribute(
- WebAccessibility::Attribute attribute, string16* value) {
- std::map<int32, string16>::iterator iter = attributes_.find(attribute);
- if (iter != attributes_.end()) {
- *value = iter->second;
- return true;
- }
-
- return false;
-}
-
HRESULT BrowserAccessibilityWin::GetAttributeAsBstr(
WebAccessibility::Attribute attribute, BSTR* value_bstr) {
string16 str;
@@ -1188,19 +1183,6 @@ HRESULT BrowserAccessibilityWin::GetAttributeAsBstr(
return S_OK;
}
-bool BrowserAccessibilityWin::GetAttributeAsInt(
- WebAccessibility::Attribute attribute, int* value_int) {
- string16 value_str;
-
- if (!GetAttribute(attribute, &value_str))
- return false;
-
- if (!base::StringToInt(value_str, value_int))
- return false;
-
- return true;
-}
-
string16 BrowserAccessibilityWin::Escape(string16 str) {
return EscapeQueryParamValueUTF8(str, false);
}