Index: content/renderer/accessibility/renderer_accessibility_complete.h |
diff --git a/content/renderer/accessibility/renderer_accessibility_complete.h b/content/renderer/accessibility/renderer_accessibility_complete.h |
index 16eeeae5db631fc4f9c94cb2f625d9ce416fe99b..2511e3e89c2bfc4d82873e28f7381653e05bbd9b 100644 |
--- a/content/renderer/accessibility/renderer_accessibility_complete.h |
+++ b/content/renderer/accessibility/renderer_accessibility_complete.h |
@@ -11,12 +11,10 @@ |
#include "base/containers/hash_tables.h" |
#include "base/memory/weak_ptr.h" |
#include "content/public/renderer/render_view_observer.h" |
-#include "content/renderer/accessibility/blink_ax_tree_source.h" |
#include "content/renderer/accessibility/renderer_accessibility.h" |
#include "third_party/WebKit/public/web/WebAXEnums.h" |
#include "third_party/WebKit/public/web/WebAXObject.h" |
#include "ui/accessibility/ax_node_data.h" |
-#include "ui/accessibility/ax_tree_serializer.h" |
namespace blink { |
class WebDocument; |
@@ -52,6 +50,20 @@ |
void HandleAXEvent(const blink::WebAXObject& obj, ui::AXEvent event); |
+ // In order to keep track of what nodes the browser knows about, we keep a |
+ // representation of the browser tree - just IDs and parent/child |
+ // relationships. |
+ struct CONTENT_EXPORT BrowserTreeNode { |
+ BrowserTreeNode(); |
+ virtual ~BrowserTreeNode(); |
+ int32 id; |
+ gfx::Rect location; |
+ BrowserTreeNode* parent; |
+ std::vector<BrowserTreeNode*> children; |
+ }; |
+ |
+ virtual BrowserTreeNode* CreateBrowserTreeNode(); |
+ |
protected: |
// Send queued events from the renderer to the browser. |
void SendPendingAccessibilityEvents(); |
@@ -62,6 +74,19 @@ |
void SendLocationChanges(); |
private: |
+ // Serialize the given accessibility object |obj| and append it to |
+ // |dst|, and then recursively also serialize any *new* children of |
+ // |obj|, based on what object ids we know the browser already has. |
+ // The set of ids serialized is added to |ids_serialized|, and any |
+ // ids previously in that set are not serialized again. |
+ void SerializeChangedNodes(const blink::WebAXObject& obj, |
+ std::vector<ui::AXNodeData>* dst, |
+ std::set<int>* ids_serialized); |
+ |
+ // Clear the given node and recursively delete all of its descendants |
+ // from the browser tree. (Does not delete |browser_node|). |
+ void ClearBrowserTreeNode(BrowserTreeNode* browser_node); |
+ |
// Handlers for messages from the browser to the renderer. |
void OnDoDefaultAction(int acc_obj_id); |
void OnEventsAck(); |
@@ -82,6 +107,13 @@ |
const blink::WebAXObject& src, |
ui::AXNodeData* dst); |
+ // Build a tree of serializable ui::AXNodeData nodes to send to the |
+ // browser process, given a WebAXObject node from Blink. |
+ // Modifies |dst| in-place, it's assumed to be empty. |
+ void BuildAccessibilityTree(const blink::WebAXObject& src, |
+ bool include_children, |
+ ui::AXNodeData* dst); |
+ |
// So we can queue up tasks to be executed later. |
base::WeakPtrFactory<RendererAccessibilityComplete> weak_factory_; |
@@ -89,14 +121,11 @@ |
// sent to the browser. |
std::vector<AccessibilityHostMsg_EventParams> pending_events_; |
- // The adapter that exposes Blink's accessibility tree to AXTreeSerializer. |
- BlinkAXTreeSource tree_source_; |
+ // Our representation of the browser tree. |
+ BrowserTreeNode* browser_root_; |
- // The serializer that sends accessibility messages to the browser process. |
- ui::AXTreeSerializer<blink::WebAXObject> serializer_; |
- |
- // Current location of every object, so we can detect when it moves. |
- base::hash_map<int, gfx::Rect> locations_; |
+ // A map from IDs to nodes in the browser tree. |
+ base::hash_map<int32, BrowserTreeNode*> browser_id_map_; |
// The most recently observed scroll offset of the root document element. |
// TODO(dmazzoni): remove once https://bugs.webkit.org/show_bug.cgi?id=73460 |