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

Unified Diff: chrome/browser/accessibility/browser_accessibility_manager.h

Issue 3551015: Make BrowserAccessibilityManager cross platform. Step 2. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Addressing linux (shlib dbg) and mac (clang) buildbot compile errors. Created 10 years, 2 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/accessibility/browser_accessibility_manager.h
===================================================================
--- chrome/browser/accessibility/browser_accessibility_manager.h (revision 61758)
+++ chrome/browser/accessibility/browser_accessibility_manager.h (working copy)
@@ -6,19 +6,21 @@
#define CHROME_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_H_
#pragma once
-#include "build/build_config.h"
-
-#if defined(OS_WIN)
-#include <oleacc.h>
-#endif
-
#include <vector>
+#include "base/hash_tables.h"
+#include "base/scoped_ptr.h"
+#include "build/build_config.h"
+#include "chrome/common/render_messages_params.h"
#include "gfx/native_widget_types.h"
#include "webkit/glue/webaccessibility.h"
-struct ViewHostMsg_AccessibilityNotification_Params;
+class BrowserAccessibility;
+#if defined(OS_WIN)
+class BrowserAccessibilityManagerWin;
+#endif
+
using webkit_glue::WebAccessibility;
// Class that can perform actions on behalf of the BrowserAccessibilityManager.
@@ -30,53 +32,144 @@
virtual bool HasFocus() = 0;
};
+class BrowserAccessibilityFactory {
+ public:
+ virtual ~BrowserAccessibilityFactory() {}
+
+ // Create an instance of BrowserAccessibility and return a new
+ // reference to it.
+ virtual BrowserAccessibility* Create();
+};
+
// Manages a tree of BrowserAccessibility objects.
class BrowserAccessibilityManager {
public:
// Creates the platform specific BrowserAccessibilityManager. Ownership passes
// to the caller.
static BrowserAccessibilityManager* Create(
- gfx::NativeWindow parent_window,
- const webkit_glue::WebAccessibility& src,
- BrowserAccessibilityDelegate* delegate);
+ gfx::NativeView parent_view,
+ const WebAccessibility& src,
+ BrowserAccessibilityDelegate* delegate,
+ BrowserAccessibilityFactory* factory = new BrowserAccessibilityFactory());
virtual ~BrowserAccessibilityManager();
+ virtual void NotifyAccessibilityEvent(
+ ViewHostMsg_AccessibilityNotification_Params::NotificationType n,
+ BrowserAccessibility* node) = 0;
+
+ // Returns the next unique child id.
+ static int32 GetNextChildID();
+
+ // Return a pointer to the root of the tree, does not make a new reference.
+ BrowserAccessibility* GetRoot();
+
+ // Removes the BrowserAccessibility child_id from the manager.
+ void Remove(int32 child_id);
+
+ // Return a pointer to the object corresponding to the given child_id,
+ // does not make a new reference.
+ BrowserAccessibility* GetFromChildID(int32 child_id);
+
// Called to notify the accessibility manager that its associated native
- // window got focused.
- virtual void GotFocus() = 0;
+ // view got focused.
+ void GotFocus();
+ // Tell the renderer to set focus to this node.
+ void SetFocus(const BrowserAccessibility& node);
+
+ // Tell the renderer to do the default action for this node.
+ void DoDefaultAction(const BrowserAccessibility& node);
+
// Called when the renderer process has notified us of about tree changes.
// Send a notification to MSAA clients of the change.
void OnAccessibilityNotifications(
const std::vector<ViewHostMsg_AccessibilityNotification_Params>& params);
- gfx::NativeWindow GetParentWindow();
+ gfx::NativeView GetParentView();
#if defined(OS_WIN)
- virtual IAccessible* GetRootAccessible() = 0;
+ BrowserAccessibilityManagerWin* toBrowserAccessibilityManagerWin();
#endif
+ // Return the object that has focus, if it's a descandant of the
+ // given root (inclusive). Does not make a new reference.
+ BrowserAccessibility* GetFocus(BrowserAccessibility* root);
+
protected:
- explicit BrowserAccessibilityManager(gfx::NativeWindow parent_window);
+ BrowserAccessibilityManager(
+ gfx::NativeView parent_view,
+ const WebAccessibility& src,
+ BrowserAccessibilityDelegate* delegate,
+ BrowserAccessibilityFactory* factory);
- virtual void OnAccessibilityObjectStateChange(
- const webkit_glue::WebAccessibility& acc_obj) = 0;
- virtual void OnAccessibilityObjectChildrenChange(
- const webkit_glue::WebAccessibility& acc_obj) = 0;
- virtual void OnAccessibilityObjectFocusChange(
- const webkit_glue::WebAccessibility& acc_obj) = 0;
- virtual void OnAccessibilityObjectLoadComplete(
- const webkit_glue::WebAccessibility& acc_obj) = 0;
- virtual void OnAccessibilityObjectValueChange(
- const webkit_glue::WebAccessibility& acc_obj) = 0;
- virtual void OnAccessibilityObjectTextChange(
- const webkit_glue::WebAccessibility& acc_obj) = 0;
-
private:
- // The parent window.
- gfx::NativeWindow parent_window_;
+ void OnAccessibilityObjectStateChange(
+ const WebAccessibility& acc_obj);
+ void OnAccessibilityObjectChildrenChange(
+ const WebAccessibility& acc_obj);
+ void OnAccessibilityObjectFocusChange(
+ const WebAccessibility& acc_obj);
+ void OnAccessibilityObjectLoadComplete(
+ const WebAccessibility& acc_obj);
+ void OnAccessibilityObjectValueChange(
+ const WebAccessibility& acc_obj);
+ void OnAccessibilityObjectTextChange(
+ const WebAccessibility& acc_obj);
+ // Recursively compare the IDs of our subtree to a new subtree received
+ // from the renderer and return true if their IDs match exactly.
+ bool CanModifyTreeInPlace(
+ BrowserAccessibility* current_root,
+ const WebAccessibility& new_root);
+
+ // Recursively modify a subtree (by reinitializing) to match a new
+ // subtree received from the renderer process. Should only be called
+ // if CanModifyTreeInPlace returned true.
+ void ModifyTreeInPlace(
+ BrowserAccessibility* current_root,
+ const WebAccessibility& new_root);
+
+ // Update the accessibility tree with an updated WebAccessibility tree or
+ // subtree received from the renderer process. First attempts to modify
+ // the tree in place, and if that fails, replaces the entire subtree.
+ // Returns the updated node or NULL if no node was updated.
+ BrowserAccessibility* UpdateTree(
+ const WebAccessibility& acc_obj);
+
+ // Recursively build a tree of BrowserAccessibility objects from
+ // the WebAccessibility tree received from the renderer process.
+ BrowserAccessibility* CreateAccessibilityTree(
+ BrowserAccessibility* parent,
+ int child_id,
+ const WebAccessibility& src,
+ int index_in_parent);
+
+ protected:
+ // The next unique id for a BrowserAccessibility instance.
+ static int32 next_child_id_;
+
+ // The parent view.
+ gfx::NativeView parent_view_;
+
+ // The object that can perform actions on our behalf.
+ BrowserAccessibilityDelegate* delegate_;
+
+ // Factory to create BrowserAccessibility objects (for dependency injection).
+ scoped_ptr<BrowserAccessibilityFactory> factory_;
+
+ // The root of the tree of IAccessible objects and the element that
+ // currently has focus, if any.
+ BrowserAccessibility* root_;
+ BrowserAccessibility* focus_;
+
+ // A mapping from the IDs of objects in the renderer, to the child IDs
+ // we use internally here.
+ base::hash_map<int, int32> renderer_id_to_child_id_map_;
+
+ // A mapping from child IDs to BrowserAccessibility objects.
+ base::hash_map<int32, BrowserAccessibility*> child_id_map_;
+
DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManager);
};
« no previous file with comments | « chrome/browser/accessibility/browser_accessibility.cc ('k') | chrome/browser/accessibility/browser_accessibility_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698