text: // Copyright 2020 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 CHROME_BROWSER_ASH_ACCESSIBILITY_ACCESSIBILITY_EVENT_REWRITER_DELEGATE_IMPL_H_
  #define CHROME_BROWSER_ASH_ACCESSIBILITY_ACCESSIBILITY_EVENT_REWRITER_DELEGATE_IMPL_H_
  
  #include <memory>
  
  #include "ash/public/cpp/accessibility_event_rewriter_delegate.h"
  #include "base/macros.h"
  #include "content/public/browser/web_contents_delegate.h"
  #include "ui/gfx/geometry/point_f.h"
  
  namespace ash {
  enum class MagnifierCommand;
  enum class SwitchAccessCommand;
  
  // Passes key events from Ash's EventRewriter to accessibility component
  // extension code. Used by ChromeVox and Switch Access. Reports ChromeVox's
  // unhandled key events back to Ash for continued dispatch.
  // TODO(http://crbug.com/839541): Avoid reposting unhandled events.
  class AccessibilityEventRewriterDelegateImpl
      : public AccessibilityEventRewriterDelegate,
        public content::WebContentsDelegate {
   public:
    AccessibilityEventRewriterDelegateImpl();
    AccessibilityEventRewriterDelegateImpl(
        const AccessibilityEventRewriterDelegateImpl&) = delete;
    AccessibilityEventRewriterDelegateImpl& operator=(
        const AccessibilityEventRewriterDelegateImpl&) = delete;
    ~AccessibilityEventRewriterDelegateImpl() override;
  
    // AccessibilityEventRewriterDelegate:
    void DispatchKeyEventToChromeVox(std::unique_ptr<ui::Event> event,
                                     bool capture) override;
    void DispatchMouseEvent(std::unique_ptr<ui::Event> event) override;
    void SendSwitchAccessCommand(SwitchAccessCommand command) override;
    void SendPointScanPoint(const gfx::PointF& point) override;
    void SendMagnifierCommand(MagnifierCommand command) override;
  
   private:
    // Reports unhandled key events to the EventRewriterController for dispatch.
    void OnUnhandledSpokenFeedbackEvent(std::unique_ptr<ui::Event> event) const;
  
    // WebContentsDelegate:
    bool HandleKeyboardEvent(
        content::WebContents* source,
        const content::NativeWebKeyboardEvent& event) override;
  };
  
  }  // namespace ash
  
  #endif  // CHROME_BROWSER_ASH_ACCESSIBILITY_ACCESSIBILITY_EVENT_REWRITER_DELEGATE_IMPL_H_
  