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

Unified Diff: chrome/browser/browser_accessibility.h

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 | « no previous file | chrome/browser/browser_accessibility.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/browser_accessibility.h
===================================================================
--- chrome/browser/browser_accessibility.h (revision 46908)
+++ chrome/browser/browser_accessibility.h (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,9 +7,13 @@
#include <atlbase.h>
#include <atlcom.h>
-
#include <oleacc.h>
+#include <vector>
+
+#include "base/scoped_comptr_win.h"
+#include "chrome/browser/browser_accessibility_manager.h"
+#include "ia2_api_all.h" // Generated
#include "webkit/glue/webaccessibility.h"
using webkit_glue::WebAccessibility;
@@ -25,30 +29,59 @@
////////////////////////////////////////////////////////////////////////////////
class ATL_NO_VTABLE BrowserAccessibility
: public CComObjectRootEx<CComMultiThreadModel>,
- public IDispatchImpl<IAccessible, &IID_IAccessible, &LIBID_Accessibility> {
+ public IDispatchImpl<IAccessible2, &IID_IAccessible2,
+ &LIBID_IAccessible2Lib>,
+ public IServiceProvider {
public:
BEGIN_COM_MAP(BrowserAccessibility)
- COM_INTERFACE_ENTRY2(IDispatch, IAccessible)
- COM_INTERFACE_ENTRY(IAccessible)
+ COM_INTERFACE_ENTRY2(IDispatch, IAccessible2)
+ COM_INTERFACE_ENTRY2(IAccessible, IAccessible2)
+ COM_INTERFACE_ENTRY(IAccessible2)
+ COM_INTERFACE_ENTRY(IServiceProvider)
END_COM_MAP()
- BrowserAccessibility()
- : iaccessible_id_(-1),
- routing_id_(-1),
- process_id_(-1),
- parent_hwnd_(NULL),
- instance_active_(false) {
- }
+ BrowserAccessibility();
- ~BrowserAccessibility() {}
+ virtual ~BrowserAccessibility();
- HRESULT Initialize(int iaccessible_id,
- int routing_id,
- int process_id,
- HWND parent_hwnd);
+ // Initialize this object and mark it as active.
+ void Initialize(BrowserAccessibilityManager* manager,
+ BrowserAccessibility* parent,
+ LONG child_id,
+ LONG index_in_parent,
+ const webkit_glue::WebAccessibility& src);
- // Supported IAccessible methods.
+ // Add a child of this object.
+ void AddChild(BrowserAccessibility* child);
+ // Mark this object as inactive, and remove references to all children.
+ // When no other clients hold any references to this object it will be
+ // deleted, and in the meantime, calls to any methods will return E_FAIL.
+ void InactivateTree();
+
+ // Return true if this object is equal to or a descendant of |ancestor|.
+ bool IsDescendantOf(BrowserAccessibility* ancestor);
+
+ // Return the previous sibling of this object, or NULL if it's the first
+ // child of its parent.
+ BrowserAccessibility* GetPreviousSibling();
+
+ // Return the next sibling of this object, or NULL if it's the last child
+ // of its parent.
+ BrowserAccessibility* GetNextSibling();
+
+ // Accessors
+ LONG child_id() { return child_id_; }
+
+ // Add one to the reference count and return the same object. Always
+ // use this method when returning a BrowserAccessibility object as
+ // an output parameter to a COM interface, never use it otherwise.
+ BrowserAccessibility* NewReference();
+
+ //
+ // IAccessible methods.
+ //
+
// Performs the default action on a given object.
STDMETHODIMP accDoDefaultAction(VARIANT var_id);
@@ -101,8 +134,8 @@
// Returns the value associated with the object.
STDMETHODIMP get_accValue(VARIANT var_id, BSTR* value);
- // Non-supported (by WebKit) IAccessible methods.
- STDMETHODIMP accSelect(LONG flags_sel, VARIANT var_id) { return E_NOTIMPL; }
+ // Make an object take focus or extend the selection.
+ STDMETHODIMP accSelect(LONG flags_sel, VARIANT var_id);
STDMETHODIMP get_accHelpTopic(BSTR* help_file,
VARIANT var_id,
@@ -110,77 +143,143 @@
STDMETHODIMP get_accSelection(VARIANT* selected);
- // Deprecated functions, not implemented here.
- STDMETHODIMP put_accName(VARIANT var_id, BSTR put_name) { return E_NOTIMPL; }
- STDMETHODIMP put_accValue(VARIANT var_id, BSTR put_val) { return E_NOTIMPL; }
+ // Deprecated methods, not implemented.
+ STDMETHODIMP put_accName(VARIANT var_id, BSTR put_name) {
+ return E_NOTIMPL;
+ }
+ STDMETHODIMP put_accValue(VARIANT var_id, BSTR put_val) {
+ return E_NOTIMPL;
+ }
- // Accessors/mutators.
- HWND parent_hwnd() const { return parent_hwnd_;}
+ //
+ // IAccessible2 methods.
+ //
- // Modify/retrieve the state (active/inactive) of this instance.
- void set_instance_active(bool instance_active) {
- instance_active_ = instance_active;
- }
- int instance_active() const { return instance_active_; }
+ // Returns role from a longer list of possible roles.
+ STDMETHODIMP role(LONG* role);
- int routing_id() const { return routing_id_; }
+ // Returns the state bitmask from a larger set of possible states.
+ STDMETHODIMP get_states(AccessibleStates* states);
- private:
- // Creates a VARIANT that will reference the current accessibility
- // object, not a child accessibility object.
- VARIANT ChildSelfVariant() const {
- VARIANT var;
- V_VT(&var) = VT_I4;
- V_I4(&var) = CHILDID_SELF;
- return var;
+ // Get the unique ID of this object so that the client knows if it's
+ // been encountered previously.
+ STDMETHODIMP get_uniqueID(LONG* unique_id);
+
+ // Get the window handle of the enclosing window.
+ STDMETHODIMP get_windowHandle(HWND* window_handle);
+
+ // Get this object's index in its parent object.
+ STDMETHODIMP get_indexInParent(LONG* index_in_parent);
+
+ // IAccessible2 methods not implemented.
+ STDMETHODIMP get_extendedRole(BSTR* extended_role) {
+ return E_NOTIMPL;
}
+ STDMETHODIMP get_nRelations(LONG* n_relations) {
+ return E_NOTIMPL;
+ }
+ STDMETHODIMP get_relation(LONG relation_index,
+ IAccessibleRelation** relation) {
+ return E_NOTIMPL;
+ }
+ STDMETHODIMP get_relations(LONG max_relations,
+ IAccessibleRelation** relations,
+ LONG *n_relations) {
+ return E_NOTIMPL;
+ }
+ STDMETHODIMP scrollTo(enum IA2ScrollType scroll_type) {
+ return E_NOTIMPL;
+ }
+ STDMETHODIMP scrollToPoint(enum IA2CoordinateType coordinate_type,
+ LONG x,
+ LONG y) {
+ return E_NOTIMPL;
+ }
+ STDMETHODIMP get_groupPosition(LONG* group_level,
+ LONG* similar_items_in_group,
+ LONG* position_in_group) {
+ return E_NOTIMPL;
+ }
+ STDMETHODIMP get_localizedExtendedRole(BSTR* localized_extended_role) {
+ return E_NOTIMPL;
+ }
+ STDMETHODIMP get_nExtendedStates(LONG* n_extended_states) {
+ return E_NOTIMPL;
+ }
+ STDMETHODIMP get_extendedStates(LONG max_extended_states,
+ BSTR** extended_states,
+ LONG* n_extended_states) {
+ return E_NOTIMPL;
+ }
+ STDMETHODIMP get_localizedExtendedStates(LONG max_localized_extended_states,
+ BSTR** localized_extended_states,
+ LONG* n_localized_extended_states) {
+ return E_NOTIMPL;
+ }
+ STDMETHODIMP get_locale(IA2Locale* locale) {
+ return E_NOTIMPL;
+ }
+ STDMETHODIMP get_attributes(BSTR* attributes) {
+ return E_NOTIMPL;
+ }
- // Wrapper functions, calling through to singleton instance of
- // BrowserAccessibilityManager.
+ //
+ // IServiceProvider methods.
+ //
- // Creates an instance of BrowserAccessibility, initializes it and sets the
- // [iaccessible_id] and [parent_id].
- STDMETHODIMP CreateInstance(REFIID iid,
- int iaccessible_id,
- void** interface_ptr);
+ STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, void** object);
- // Composes and sends a message for requesting needed accessibility
- // information. Unused LONG input parameters should be NULL, and the VARIANT
- // an empty, valid instance.
- bool RequestAccessibilityInfo(int iaccessible_func_id,
- VARIANT var_id,
- LONG input1, LONG input2);
+ private:
+ // Many MSAA methods take a var_id parameter indicating that the operation
+ // should be performed on a particular child ID, rather than this object.
+ // This method tries to figure out the target object from |var_id| and
+ // returns a pointer to the target object if it exists, otherwise NULL.
+ // Does not return a new reference.
+ BrowserAccessibility* GetTargetFromChildID(const VARIANT& var_id);
- // Accessors.
- const WebAccessibility::OutParams& response();
-
// Returns a conversion from the BrowserAccessibilityRole (as defined in
// webkit/glue/webaccessibility.h) to an MSAA role.
- long MSAARole(long browser_accessibility_role);
+ LONG MSAARole(LONG browser_accessibility_role);
// Returns a conversion from the BrowserAccessibilityState (as defined in
// webkit/glue/webaccessibility.h) to MSAA states set.
- long MSAAState(long browser_accessibility_state);
+ LONG MSAAState(LONG browser_accessibility_state);
- // Id to uniquely distinguish this instance in the render-side caching,
- // mapping it to the correct IAccessible on that side. Initialized to -1.
- int iaccessible_id_;
+ // The manager of this tree of accessibility objects; needed for
+ // global operations like focus tracking.
+ BrowserAccessibilityManager* manager_;
+ // The parent of this object, may be NULL if we're the root object.
+ BrowserAccessibility* parent_;
+ // The ID of this object; globally unique within the browser process.
+ LONG child_id_;
+ // The index of this within its parent object.
+ LONG index_in_parent_;
+ // The ID of this object in the renderer process.
+ int32 renderer_id_;
- // The unique ids of this IAccessible instance. Used to help
- // BrowserAccessibilityManager instance retrieve the correct member
- // variables for this process.
- int routing_id_;
- int process_id_;
+ // The children of this object.
+ std::vector<BrowserAccessibility*> children_;
- HWND parent_hwnd_;
+ // Accessibility metadata from the renderer, used to respond to MSAA
+ // events.
+ string16 name_;
+ string16 value_;
+ string16 action_;
+ string16 description_;
+ string16 help_;
+ string16 shortcut_;
+ LONG role_;
+ LONG state_;
+ WebKit::WebRect location_;
- // The instance should only be active if there is a non-terminated
- // RenderProcessHost associated with it. The BrowserAccessibilityManager keeps
- // track of this state, and sets it to false to disable all calls into the
- // renderer from this instance of BroweserAccessibility, and have all
- // IAccessible functions return E_FAIL.
+ // COM objects are reference-counted. When we're done with this object
+ // and it's removed from our accessibility tree, a client may still be
+ // holding onto a pointer to this object, so we mark it as inactive
+ // so that calls to any of this object's methods immediately return
+ // failure.
bool instance_active_;
DISALLOW_COPY_AND_ASSIGN(BrowserAccessibility);
};
+
#endif // CHROME_BROWSER_BROWSER_ACCESSIBILITY_H_
« no previous file with comments | « no previous file | chrome/browser/browser_accessibility.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698