|  | // Copyright 2013 The Flutter 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 FLUTTER_SHELL_PLATFORM_WINDOWS_ACCESSIBILITY_BRIDGE_WINDOWS_H_ | 
|  | #define FLUTTER_SHELL_PLATFORM_WINDOWS_ACCESSIBILITY_BRIDGE_WINDOWS_H_ | 
|  |  | 
|  | #include "flutter/fml/macros.h" | 
|  | #include "flutter/shell/platform/common/accessibility_bridge.h" | 
|  | #include "flutter/third_party/accessibility/ax/platform/ax_fragment_root_delegate_win.h" | 
|  |  | 
|  | namespace flutter { | 
|  |  | 
|  | class FlutterWindowsEngine; | 
|  | class FlutterWindowsView; | 
|  | class FlutterPlatformNodeDelegateWindows; | 
|  |  | 
|  | // The Win32 implementation of AccessibilityBridge. | 
|  | // | 
|  | // This interacts with Windows accessibility APIs, which includes routing | 
|  | // accessibility events fired from the framework to Windows, routing native | 
|  | // Windows accessibility events to the framework, and creating Windows-specific | 
|  | // FlutterPlatformNodeDelegate objects for each node in the semantics tree. | 
|  | /// | 
|  | /// AccessibilityBridgeWindows must be created as a shared_ptr, since some | 
|  | /// methods acquires its weak_ptr. | 
|  | class AccessibilityBridgeWindows : public AccessibilityBridge, | 
|  | public ui::AXFragmentRootDelegateWin { | 
|  | public: | 
|  | AccessibilityBridgeWindows(FlutterWindowsView* view); | 
|  | virtual ~AccessibilityBridgeWindows() = default; | 
|  |  | 
|  | // |AccessibilityBridge| | 
|  | void DispatchAccessibilityAction(AccessibilityNodeId target, | 
|  | FlutterSemanticsAction action, | 
|  | fml::MallocMapping data) override; | 
|  |  | 
|  | // Dispatches a Windows accessibility event of the specified type, generated | 
|  | // by the accessibility node associated with the specified semantics node. | 
|  | // | 
|  | // This is a virtual method for the convenience of unit tests. | 
|  | virtual void DispatchWinAccessibilityEvent( | 
|  | std::shared_ptr<FlutterPlatformNodeDelegateWindows> node_delegate, | 
|  | ax::mojom::Event event_type); | 
|  |  | 
|  | // Sets the accessibility focus to the accessibility node associated with the | 
|  | // specified semantics node. | 
|  | // | 
|  | // This is a virtual method for the convenience of unit tests. | 
|  | virtual void SetFocus( | 
|  | std::shared_ptr<FlutterPlatformNodeDelegateWindows> node_delegate); | 
|  |  | 
|  | // |AXFragmentRootDelegateWin| | 
|  | gfx::NativeViewAccessible GetChildOfAXFragmentRoot() override; | 
|  |  | 
|  | // |AXFragmentRootDelegateWin| | 
|  | gfx::NativeViewAccessible GetParentOfAXFragmentRoot() override; | 
|  |  | 
|  | // |AXFragmentRootDelegateWin| | 
|  | bool IsAXFragmentRootAControlElement() override; | 
|  |  | 
|  | protected: | 
|  | // |AccessibilityBridge| | 
|  | void OnAccessibilityEvent( | 
|  | ui::AXEventGenerator::TargetedEvent targeted_event) override; | 
|  |  | 
|  | // |AccessibilityBridge| | 
|  | std::shared_ptr<FlutterPlatformNodeDelegate> | 
|  | CreateFlutterPlatformNodeDelegate() override; | 
|  |  | 
|  | // Retrieve the focused node for accessibility events. | 
|  | virtual std::weak_ptr<FlutterPlatformNodeDelegate> GetFocusedNode(); | 
|  |  | 
|  | private: | 
|  | FlutterWindowsView* view_; | 
|  |  | 
|  | FML_DISALLOW_COPY_AND_ASSIGN(AccessibilityBridgeWindows); | 
|  | }; | 
|  |  | 
|  | }  // namespace flutter | 
|  |  | 
|  | #endif  // FLUTTER_SHELL_PLATFORM_WINDOWS_ACCESSIBILITY_BRIDGE_WINDOWS_H_ |