// Copyright 2017 The Chromium Embedded Framework Authors. Portions copyright // 2013 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. #ifndef CEF_TESTS_CEFCLIENT_BROWSER_OSR_ACCESSIBILITY_NODE_H_ #define CEF_TESTS_CEFCLIENT_BROWSER_OSR_ACCESSIBILITY_NODE_H_ #pragma once #include #include "include/cef_browser.h" #if defined(OS_MACOSX) typedef void CefNativeAccessible; #if __OBJC__ #if __has_feature(objc_arc) #define CAST_CEF_NATIVE_ACCESSIBLE_TO_NSOBJECT(accessible) \ (__bridge NSObject*)accessible #define CAST_NSOBJECT_TO_CEF_NATIVE_ACCESSIBLE(object) \ (__bridge CefNativeAccessible*)object #else // __has_feature(objc_arc) #define CAST_CEF_NATIVE_ACCESSIBLE_TO_NSOBJECT(accessible) (NSObject*)accessible #define CAST_NSOBJECT_TO_CEF_NATIVE_ACCESSIBLE(object) \ (__bridge CefNativeAccessible*)object #endif // __has_feature(objc_arc) #endif // __OBJC__ #elif defined(OS_WIN) struct IAccessible; typedef IAccessible CefNativeAccessible; #else #error "Unsupported platform" #endif namespace client { class OsrAccessibilityHelper; // OsrAXNode is the base class for implementation for the NSAccessibility // protocol for interacting with VoiceOver and other accessibility clients. class OsrAXNode { public: // Create and return the platform specific OsrAXNode Object. static OsrAXNode* CreateNode(const CefString& treeId, int nodeId, CefRefPtr value, OsrAccessibilityHelper* helper); // Update Value. void UpdateValue(CefRefPtr value); // UpdateLocation void UpdateLocation(CefRefPtr value); // Fire a platform-specific notification that an event has occurred on // this object. void NotifyAccessibilityEvent(std::string event_type) const; // Call Destroy rather than deleting this, because the subclass may // use reference counting. void Destroy(); // Return NSAccessibility Object for Mac/ IAccessible for Windows CefNativeAccessible* GetNativeAccessibleObject(OsrAXNode* parent); CefNativeAccessible* GetParentAccessibleObject() const { return parent_ ? parent_->platform_accessibility_ : nullptr; } OsrAccessibilityHelper* GetAccessibilityHelper() const { return accessibility_helper_; } int GetChildCount() const; // Return the Child at the specified index OsrAXNode* ChildAtIndex(int index) const; const CefString& AxRole() const { return role_; } const CefString& OsrAXTreeId() const { return tree_id_; } int OsrAXNodeId() const { return node_id_; } const CefString& AxValue() const { return value_; } const CefString& AxName() const { return name_; } const CefString& AxDescription() const { return description_; } CefRect AxLocation() const; CefWindowHandle GetWindowHandle() const; CefRefPtr GetBrowser() const; void SetParent(OsrAXNode* parent); protected: OsrAXNode(const CefString& treeId, int nodeId, CefRefPtr value, OsrAccessibilityHelper* helper); CefString tree_id_; int node_id_; CefString child_tree_id_; CefString role_; CefString value_; CefString name_; CefString description_; CefRect location_; CefPoint scroll_; std::vector child_ids_; CefNativeAccessible* platform_accessibility_; OsrAXNode* parent_; int offset_container_id_; OsrAccessibilityHelper* accessibility_helper_; CefRefPtr attributes_; }; } // namespace client #endif // CEF_TESTS_CEFCLIENT_BROWSER_OSR_ACCESSIBILITY_NODE_H_