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
3 // found in the LICENSE file.
4 
5 #ifndef ASH_EVENTS_EVENT_REWRITER_CONTROLLER_IMPL_H_
6 #define ASH_EVENTS_EVENT_REWRITER_CONTROLLER_IMPL_H_
7 
8 #include <memory>
9 #include <vector>
10 
11 #include "ash/ash_export.h"
12 #include "ash/public/cpp/event_rewriter_controller.h"
13 #include "base/macros.h"
14 #include "ui/aura/env_observer.h"
15 
16 namespace ui {
17 class EventRewriter;
18 }  // namespace ui
19 
20 namespace ash {
21 
22 class AccessibilityEventRewriter;
23 class KeyboardDrivenEventRewriter;
24 
25 // Owns ui::EventRewriters and ensures that they are added to each root window
26 // EventSource, current and future, in the order that they are added to this.
27 class ASH_EXPORT EventRewriterControllerImpl : public EventRewriterController,
28                                                public aura::EnvObserver {
29  public:
30   EventRewriterControllerImpl();
31   ~EventRewriterControllerImpl() override;
32 
33   // EventRewriterController:
34   void Initialize(ui::EventRewriterChromeOS::Delegate* event_rewriter_delegate,
35                   AccessibilityEventRewriterDelegate*
36                       accessibility_event_rewriter_delegate) override;
37   void AddEventRewriter(std::unique_ptr<ui::EventRewriter> rewriter) override;
38   void SetKeyboardDrivenEventRewriterEnabled(bool enabled) override;
39   void SetArrowToTabRewritingEnabled(bool enabled) override;
40   void OnUnhandledSpokenFeedbackEvent(
41       std::unique_ptr<ui::Event> event) override;
42   void CaptureAllKeysForSpokenFeedback(bool capture) override;
43   void SetSendMouseEventsToDelegate(bool value) override;
44 
45   // aura::EnvObserver:
46   void OnHostInitialized(aura::WindowTreeHost* host) override;
47 
48  private:
49   // The |EventRewriter|s managed by this controller.
50   std::vector<std::unique_ptr<ui::EventRewriter>> rewriters_;
51 
52   // Owned by |rewriters_|.
53   AccessibilityEventRewriter* accessibility_event_rewriter_ = nullptr;
54   KeyboardDrivenEventRewriter* keyboard_driven_event_rewriter_ = nullptr;
55 
56   DISALLOW_COPY_AND_ASSIGN(EventRewriterControllerImpl);
57 };
58 
59 }  // namespace ash
60 
61 #endif  // ASH_EVENTS_EVENT_REWRITER_CONTROLLER_IMPL_H_
62