Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CONTENT_RENDERER_ACCESSIBILITY_BLINK_AX_TREE_SOURCE_H_ | 5 #ifndef CONTENT_RENDERER_ACCESSIBILITY_BLINK_AX_TREE_SOURCE_H_ |
| 6 #define CONTENT_RENDERER_ACCESSIBILITY_BLINK_AX_TREE_SOURCE_H_ | 6 #define CONTENT_RENDERER_ACCESSIBILITY_BLINK_AX_TREE_SOURCE_H_ |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include "content/common/ax_content_node_data.h" | 10 #include "content/common/ax_content_node_data.h" |
| 11 #include "third_party/WebKit/public/web/WebAXObject.h" | 11 #include "third_party/WebKit/public/web/WebAXObject.h" |
| 12 #include "third_party/WebKit/public/web/WebDocument.h" | |
| 12 #include "ui/accessibility/ax_node_data.h" | 13 #include "ui/accessibility/ax_node_data.h" |
| 13 #include "ui/accessibility/ax_tree_source.h" | 14 #include "ui/accessibility/ax_tree_source.h" |
| 14 | 15 |
| 15 namespace content { | 16 namespace content { |
| 16 | 17 |
| 18 class BlinkAXTreeSource; | |
| 17 class RenderFrameImpl; | 19 class RenderFrameImpl; |
| 18 | 20 |
| 21 // Create this on the stack to freeze BlinkAXTreeSource and automatically | |
| 22 // un-freeze it when it goes out of scope. | |
| 23 class ScopedFreezeBlinkAXTreeSource { | |
| 24 public: | |
| 25 explicit ScopedFreezeBlinkAXTreeSource(BlinkAXTreeSource* tree_source); | |
| 26 ~ScopedFreezeBlinkAXTreeSource(); | |
| 27 | |
| 28 private: | |
| 29 BlinkAXTreeSource* tree_source_; | |
| 30 | |
| 31 DISALLOW_COPY_AND_ASSIGN(ScopedFreezeBlinkAXTreeSource); | |
| 32 }; | |
| 33 | |
| 19 class BlinkAXTreeSource | 34 class BlinkAXTreeSource |
| 20 : public ui::AXTreeSource<blink::WebAXObject, | 35 : public ui::AXTreeSource<blink::WebAXObject, |
| 21 AXContentNodeData, | 36 AXContentNodeData, |
| 22 AXContentTreeData> { | 37 AXContentTreeData> { |
| 23 public: | 38 public: |
| 24 BlinkAXTreeSource(RenderFrameImpl* render_frame); | 39 BlinkAXTreeSource(RenderFrameImpl* render_frame); |
| 25 ~BlinkAXTreeSource() override; | 40 ~BlinkAXTreeSource() override; |
| 26 | 41 |
| 42 // Freeze caches the document, accessibility root, and current focused | |
| 43 // object for fast retrieval during a batch of operations. Use | |
| 44 // ScopedFreezeBlinkAXTreeSource on the stack rather than calling | |
| 45 // these directly. | |
| 46 void Freeze(); | |
| 47 void Thaw(); | |
| 48 | |
| 27 // It may be necessary to call SetRoot if you're using a WebScopedAXContext, | 49 // It may be necessary to call SetRoot if you're using a WebScopedAXContext, |
| 28 // because BlinkAXTreeSource can't get the root of the tree from the | 50 // because BlinkAXTreeSource can't get the root of the tree from the |
| 29 // WebDocument if accessibility isn't enabled globally. | 51 // WebDocument if accessibility isn't enabled globally. |
| 30 void SetRoot(blink::WebAXObject root); | 52 void SetRoot(blink::WebAXObject root); |
| 31 | 53 |
| 32 // Walks up the ancestor chain to see if this is a descendant of the root. | 54 // Walks up the ancestor chain to see if this is a descendant of the root. |
| 33 bool IsInTree(blink::WebAXObject node) const; | 55 bool IsInTree(blink::WebAXObject node) const; |
| 34 | 56 |
| 35 // Set the id of the node with accessibility focus. The node with | 57 // Set the id of the node with accessibility focus. The node with |
| 36 // accessibility focus will force loading inline text box children, | 58 // accessibility focus will force loading inline text box children, |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 51 AXContentNodeData* out_data) const override; | 73 AXContentNodeData* out_data) const override; |
| 52 bool IsValid(blink::WebAXObject node) const override; | 74 bool IsValid(blink::WebAXObject node) const override; |
| 53 bool IsEqual(blink::WebAXObject node1, | 75 bool IsEqual(blink::WebAXObject node1, |
| 54 blink::WebAXObject node2) const override; | 76 blink::WebAXObject node2) const override; |
| 55 blink::WebAXObject GetNull() const override; | 77 blink::WebAXObject GetNull() const override; |
| 56 | 78 |
| 57 blink::WebDocument GetMainDocument() const; | 79 blink::WebDocument GetMainDocument() const; |
| 58 | 80 |
| 59 private: | 81 private: |
| 60 RenderFrameImpl* render_frame_; | 82 RenderFrameImpl* render_frame_; |
| 83 | |
| 84 // An explicit root to use, otherwise it's taken from the WebDocument. | |
| 85 blink::WebAXObject explicit_root_; | |
| 86 | |
| 87 // The id of the object with accessibility focus. | |
| 88 int accessibility_focus_id_; | |
|
David Tseng
2016/09/07 18:59:27
Can you remove this now that you keep around |focu
dmazzoni
2016/09/08 05:26:43
No, because on Android we still use accessibility
| |
| 89 | |
| 90 // These are updated when calling |Freeze|. | |
| 91 bool frozen_; | |
| 92 blink::WebDocument document_; | |
| 61 blink::WebAXObject root_; | 93 blink::WebAXObject root_; |
| 62 | 94 blink::WebAXObject focus_; |
|
David Tseng
2016/09/07 18:59:27
Suggestion: can we get a property accesser for thi
dmazzoni
2016/09/08 05:26:43
Sure, good idea
| |
| 63 int accessibility_focus_id_; | |
| 64 }; | 95 }; |
| 65 | 96 |
| 66 } // namespace content | 97 } // namespace content |
| 67 | 98 |
| 68 #endif // CONTENT_RENDERER_ACCESSIBILITY_BLINK_AX_TREE_SOURCE_H_ | 99 #endif // CONTENT_RENDERER_ACCESSIBILITY_BLINK_AX_TREE_SOURCE_H_ |
| OLD | NEW |