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

Unified Diff: chrome/browser/browser_accessibility.cc

Issue 115374: Adds propagation and handling of render-side focus events, for the benefit of... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 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
Index: chrome/browser/browser_accessibility.cc
===================================================================
--- chrome/browser/browser_accessibility.cc (revision 16095)
+++ chrome/browser/browser_accessibility.cc (working copy)
@@ -9,15 +9,29 @@
using webkit_glue::WebAccessibility;
-BrowserAccessibility::BrowserAccessibility()
- : iaccessible_id_(-1),
- instance_active_(true) {
+HRESULT BrowserAccessibility::Initialize(int iaccessible_id, int routing_id,
+ int process_id, HWND parent_hwnd) {
+ if (!parent_hwnd || iaccessible_id < 0)
+ return E_INVALIDARG;
+
+ iaccessible_id_ = iaccessible_id;
+ routing_id_ = routing_id;
+ process_id_ = process_id;
+ parent_hwnd_ = parent_hwnd;
+
+ // Mark instance as active.
+ instance_active_ = true;
+
+ // Treat child ids intitially as referring to direct children of the object.
+ direct_descendant_ = true;
+
+ return S_OK;
}
HRESULT BrowserAccessibility::accDoDefaultAction(VARIANT var_id) {
if (!instance_active()) {
// Instance no longer active, fail gracefully.
- // TODO(klink): Once we have MSAA events, change these fails for having
+ // TODO(klink): Once we have MSAA events, change these fails to having
// BrowserAccessibilityManager firing the right event.
return E_FAIL;
}
@@ -46,7 +60,7 @@
if (!child)
return E_INVALIDARG;
- if (!parent_hwnd()) {
+ if (!parent_hwnd_) {
// Parent HWND needed for coordinate conversion.
return E_FAIL;
}
@@ -54,7 +68,7 @@
// Convert coordinates to test from screen into client window coordinates, to
// maintain sandbox functionality on renderer side.
POINT p = {x_left, y_top};
- ::ScreenToClient(parent_hwnd(), &p);
+ ::ScreenToClient(parent_hwnd_, &p);
if (!RequestAccessibilityInfo(WebAccessibility::FUNCTION_HITTEST,
EmptyVariant(), p.x, p.y)) {
@@ -93,7 +107,7 @@
}
if (var_id.vt != VT_I4 || !x_left || !y_top || !width || !height ||
- !parent_hwnd()) {
+ !parent_hwnd_) {
return E_INVALIDARG;
}
@@ -106,7 +120,7 @@
// Find the top left corner of the containing window in screen coords, and
// adjust the output position by this amount.
- ::ClientToScreen(parent_hwnd(), &top_left);
+ ::ClientToScreen(parent_hwnd_, &top_left);
*x_left = response().output_long1 + top_left.x;
*y_top = response().output_long2 + top_left.y;
@@ -393,15 +407,15 @@
return E_FAIL;
}
- if (!disp_parent || !parent_hwnd())
+ if (!disp_parent || !parent_hwnd_)
return E_INVALIDARG;
// Root node's parent is the containing HWND's IAccessible.
- if (iaccessible_id() == 0) {
+ if (iaccessible_id_ == 0) {
// For an object that has no parent (e.g. root), point the accessible parent
// to the default implementation.
HRESULT hr =
- ::CreateStdAccessibleObject(parent_hwnd(), OBJID_WINDOW,
+ ::CreateStdAccessibleObject(parent_hwnd_, OBJID_WINDOW,
IID_IAccessible,
reinterpret_cast<void**>(disp_parent));
@@ -498,20 +512,15 @@
return S_OK;
}
-STDMETHODIMP BrowserAccessibility::accSelect(LONG flags_select,
- VARIANT var_id) {
- return E_NOTIMPL;
-}
-
STDMETHODIMP BrowserAccessibility::get_accHelpTopic(BSTR* help_file,
VARIANT var_id,
LONG* topic_id) {
- if (help_file) {
+ if (help_file)
*help_file = NULL;
- }
- if (topic_id) {
+
+ if (topic_id)
*topic_id = static_cast<LONG>(-1);
- }
+
return E_NOTIMPL;
}
@@ -522,38 +531,38 @@
return E_NOTIMPL;
}
-STDMETHODIMP BrowserAccessibility::put_accName(VARIANT var_id, BSTR put_name) {
- return E_NOTIMPL;
-}
-
-STDMETHODIMP BrowserAccessibility::put_accValue(VARIANT var_id, BSTR put_val) {
- return E_NOTIMPL;
-}
-
STDMETHODIMP BrowserAccessibility::CreateInstance(REFIID iid,
int iaccessible_id,
void** interface_ptr) {
return BrowserAccessibilityManager::GetInstance()->
- CreateAccessibilityInstance(iid, iaccessible_id, instance_id(),
- interface_ptr);
+ CreateAccessibilityInstance(iid, iaccessible_id, routing_id_,
+ process_id_, parent_hwnd_, interface_ptr);
}
bool BrowserAccessibility::RequestAccessibilityInfo(int iaccessible_func_id,
VARIANT var_id, LONG input1,
LONG input2) {
- return BrowserAccessibilityManager::GetInstance()->RequestAccessibilityInfo(
- iaccessible_id(), instance_id(), iaccessible_func_id, var_id.lVal, input1,
- input2);
+ // Create and populate IPC message structure, for retrieval of accessibility
+ // information from the renderer.
+ WebAccessibility::InParams in_params;
+ in_params.object_id = iaccessible_id_;
+ in_params.function_id = iaccessible_func_id;
+ in_params.child_id = var_id.lVal;
+ in_params.direct_descendant = direct_descendant();
+ in_params.input_long1 = input1;
+ in_params.input_long2 = input2;
+
+ if (!direct_descendant())
+ set_direct_descendant(true);
+
+ return BrowserAccessibilityManager::GetInstance()->
+ RequestAccessibilityInfo(&in_params, routing_id_, process_id_);
}
const WebAccessibility::OutParams& BrowserAccessibility::response() {
return BrowserAccessibilityManager::GetInstance()->response();
}
-HWND BrowserAccessibility::parent_hwnd() {
- return BrowserAccessibilityManager::GetInstance()->parent_hwnd(instance_id());
-}
-
long BrowserAccessibility::MSAARole(long browser_accessibility_role) {
switch (browser_accessibility_role) {
case WebAccessibility::ROLE_PUSHBUTTON :

Powered by Google App Engine
This is Rietveld 408576698