Index: ui/accessibility/platform/ax_platform_node_win.h |
diff --git a/ui/accessibility/platform/ax_platform_node_win.h b/ui/accessibility/platform/ax_platform_node_win.h |
index 495ddad7e9172ddd7716e5e8da467b364b0694d7..e85a3c1855b40020fa5903b64fb273f9c1ef8c93 100644 |
--- a/ui/accessibility/platform/ax_platform_node_win.h |
+++ b/ui/accessibility/platform/ax_platform_node_win.h |
@@ -8,10 +8,12 @@ |
#include <atlbase.h> |
#include <atlcom.h> |
#include <oleacc.h> |
+#include <vector> |
#include "base/compiler_specific.h" |
#include "base/metrics/histogram_macros.h" |
#include "base/observer_list.h" |
+#include "base/win/scoped_comptr.h" |
#include "third_party/iaccessible2/ia2_api_all.h" |
#include "ui/accessibility/ax_export.h" |
#include "ui/accessibility/ax_text_utils.h" |
@@ -189,6 +191,7 @@ enum { |
UMA_HISTOGRAM_ENUMERATION("Accessibility.WinAPIs", enum_value, UMA_API_MAX) |
namespace ui { |
+class AXPlatformNodeWin; |
// A simple interface for a class that wants to be notified when IAccessible2 |
// is used by a client, a strong indication that full accessibility support |
@@ -205,6 +208,45 @@ class AX_EXPORT IAccessible2UsageObserver { |
extern AX_EXPORT base::ObserverList<IAccessible2UsageObserver>& |
GetIAccessible2UsageObserverList(); |
+// |
+// AXPlatformNodeRelationWin |
+// |
+// A simple implementation of IAccessibleRelation, used to represent |
+// a relationship between two accessible nodes in the tree. |
+// |
+class AXPlatformNodeRelationWin : public CComObjectRootEx<CComMultiThreadModel>, |
+ public IAccessibleRelation { |
+ public: |
+ BEGIN_COM_MAP(AXPlatformNodeRelationWin) |
+ COM_INTERFACE_ENTRY(IAccessibleRelation) |
+ END_COM_MAP() |
+ |
+ AXPlatformNodeRelationWin(); |
+ virtual ~AXPlatformNodeRelationWin(); |
+ |
+ void Initialize(ui::AXPlatformNodeWin* owner, const base::string16& type); |
+ void AddTarget(int target_id); |
+ void RemoveTarget(int target_id); |
+ |
+ // IAccessibleRelation methods. |
+ STDMETHODIMP get_relationType(BSTR* relation_type) override; |
+ STDMETHODIMP get_nTargets(long* n_targets) override; |
+ STDMETHODIMP get_target(long target_index, IUnknown** target) override; |
+ STDMETHODIMP get_targets(long max_targets, |
+ IUnknown** targets, |
+ long* n_targets) override; |
+ STDMETHODIMP get_localizedRelationType(BSTR* relation_type) override; |
+ |
+ // Accessors. |
+ const base::string16& get_type() const { return type_; } |
+ const std::vector<int>& get_target_ids() const { return target_ids_; } |
+ |
+ private: |
+ base::string16 type_; |
+ base::win::ScopedComPtr<ui::AXPlatformNodeWin> owner_; |
+ std::vector<int> target_ids_; |
+}; |
+ |
class AX_EXPORT __declspec(uuid("26f5641a-246d-457b-a96d-07f3fae6acf2")) |
AXPlatformNodeWin |
: public NON_EXPORTED_BASE(CComObjectRootEx<CComMultiThreadModel>), |
@@ -233,6 +275,9 @@ class AX_EXPORT __declspec(uuid("26f5641a-246d-457b-a96d-07f3fae6acf2")) |
~AXPlatformNodeWin() override; |
+ // Clear node's current relationships and set them to the default values. |
+ void CalculateRelationships(); |
+ |
// AXPlatformNode overrides. |
gfx::NativeViewAccessible GetNativeViewAccessible() override; |
void NotifyAccessibilityEvent(ui::AXEvent event_type) override; |
@@ -331,18 +376,20 @@ class AX_EXPORT __declspec(uuid("26f5641a-246d-457b-a96d-07f3fae6acf2")) |
STDMETHODIMP get_indexInParent(LONG* index_in_parent) override; |
- // |
- // IAccessible2 methods not implemented. |
- // |
- |
- STDMETHODIMP get_attribute(BSTR name, VARIANT* attribute) override; |
- STDMETHODIMP get_extendedRole(BSTR* extended_role) override; |
STDMETHODIMP get_nRelations(LONG* n_relations) override; |
+ |
STDMETHODIMP get_relation(LONG relation_index, |
IAccessibleRelation** relation) override; |
+ |
STDMETHODIMP get_relations(LONG max_relations, |
IAccessibleRelation** relations, |
LONG* n_relations) override; |
+ // |
+ // IAccessible2 methods not implemented. |
+ // |
+ |
+ STDMETHODIMP get_attribute(BSTR name, VARIANT* attribute) override; |
+ STDMETHODIMP get_extendedRole(BSTR* extended_role) override; |
STDMETHODIMP scrollTo(enum IA2ScrollType scroll_type) override; |
STDMETHODIMP scrollToPoint(enum IA2CoordinateType coordinate_type, |
LONG x, |
@@ -668,6 +715,29 @@ class AX_EXPORT __declspec(uuid("26f5641a-246d-457b-a96d-07f3fae6acf2")) |
// Returns true if this node is in a treegrid. |
bool IsInTreeGrid(); |
+ |
+ // |
+ // For adding / removing IA2 relations. |
+ // |
+ void AddRelation(const base::string16& relation_type, int target_id); |
+ void AddBidirectionalRelations(const base::string16& relation_type, |
+ const base::string16& reverse_relation_type, |
+ ui::AXIntListAttribute attribute); |
+ void AddBidirectionalRelations(const base::string16& relation_type, |
+ const base::string16& reverse_relation_type, |
+ const std::vector<int32_t>& target_ids); |
+ // Clears all the forward relations from this object to any other object and |
+ // the associated reverse relations on the other objects, but leaves any |
+ // reverse relations on this object alone. |
+ void ClearOwnRelations(); |
+ void RemoveBidirectionalRelationsOfType( |
+ const base::string16& relation_type, |
+ const base::string16& reverse_relation_type); |
+ void RemoveTargetFromRelation(const base::string16& relation_type, |
+ int target_id); |
+ |
+ // Relationships between this node and other nodes. |
+ std::vector<ui::AXPlatformNodeRelationWin*> relations_; |
}; |
} // namespace ui |