Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / media / audio / test_audio_input_controller_factory.h
1 // Copyright (c) 2012 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 MEDIA_AUDIO_TEST_AUDIO_INPUT_CONTROLLER_FACTORY_H_
6 #define MEDIA_AUDIO_TEST_AUDIO_INPUT_CONTROLLER_FACTORY_H_
7
8 #include "base/bind.h"
9 #include "media/audio/audio_input_controller.h"
10
11 namespace media {
12
13 class UserInputMonitor;
14 class TestAudioInputControllerFactory;
15
16 // TestAudioInputController and TestAudioInputControllerFactory are used for
17 // testing consumers of AudioInputController. TestAudioInputControllerFactory
18 // is a AudioInputController::Factory that creates TestAudioInputControllers.
19 //
20 // TestAudioInputController::Record and Close are overriden to do nothing. It is
21 // expected that you'll grab the EventHandler from the TestAudioInputController
22 // and invoke the callback methods when appropriate. In this way it's easy to
23 // mock a AudioInputController.
24 //
25 // Typical usage:
26 //   // Create and register factory.
27 //   TestAudioInputControllerFactory factory;
28 //   AudioInputController::set_factory_for_testing(&factory);
29 //
30 //   // Do something that triggers creation of an AudioInputController.
31 //   TestAudioInputController* controller = factory.last_controller();
32 //   DCHECK(controller);
33 //
34 //   // Notify event handler with whatever data you want.
35 //   controller->event_handler()->OnCreated(...);
36 //
37 //   // Do something that triggers AudioInputController::Record to be called.
38 //   controller->event_handler()->OnData(...);
39 //   controller->event_handler()->OnError(...);
40 //
41 //   // Make sure consumer of AudioInputController does the right thing.
42 //   ...
43 //   // Reset factory.
44 //   AudioInputController::set_factory_for_testing(NULL);
45
46 class TestAudioInputController : public AudioInputController {
47  public:
48   class Delegate {
49    public:
50     virtual void TestAudioControllerOpened(
51         TestAudioInputController* controller) = 0;
52     virtual void TestAudioControllerClosed(
53         TestAudioInputController* controller) = 0;
54   };
55
56   TestAudioInputController(TestAudioInputControllerFactory* factory,
57                            AudioManager* audio_manager,
58                            const AudioParameters& audio_parameters,
59                            EventHandler* event_handler,
60                            SyncWriter* sync_writer,
61                            UserInputMonitor* user_input_monitor);
62
63   // Returns the event handler installed on the AudioInputController.
64   EventHandler* event_handler() const { return event_handler_; }
65
66   // Notifies the TestAudioControllerOpened() event to the delegate (if any).
67   void Record() override;
68
69   // Ensure that the closure is run on the audio-manager thread.
70   void Close(const base::Closure& closed_task) override;
71
72   const AudioParameters& audio_parameters() const {
73     return audio_parameters_;
74   }
75
76  protected:
77   ~TestAudioInputController() override;
78
79  private:
80   AudioParameters audio_parameters_;
81
82   // These are not owned by us and expected to be valid for this object's
83   // lifetime.
84   TestAudioInputControllerFactory* factory_;
85   EventHandler* event_handler_;
86
87   DISALLOW_COPY_AND_ASSIGN(TestAudioInputController);
88 };
89
90 typedef TestAudioInputController::Delegate TestAudioInputControllerDelegate;
91
92 // Simple AudioInputController::Factory method that creates
93 // TestAudioInputControllers.
94 class TestAudioInputControllerFactory : public AudioInputController::Factory {
95  public:
96   TestAudioInputControllerFactory();
97   ~TestAudioInputControllerFactory() override;
98
99   // AudioInputController::Factory methods.
100   AudioInputController* Create(
101       AudioManager* audio_manager,
102       AudioInputController::EventHandler* event_handler,
103       AudioParameters params,
104       UserInputMonitor* user_input_monitor) override;
105
106   void set_delegate(TestAudioInputControllerDelegate* delegate) {
107     delegate_ = delegate;
108   }
109
110   TestAudioInputController* controller() const { return controller_; }
111
112  private:
113   friend class TestAudioInputController;
114
115   // Invoked by a TestAudioInputController when it gets destroyed.
116   void OnTestAudioInputControllerDestroyed(
117       TestAudioInputController* controller);
118
119   // The caller of Create owns this object.
120   TestAudioInputController* controller_;
121
122   // The delegate for tests for receiving audio controller events.
123   TestAudioInputControllerDelegate* delegate_;
124
125   DISALLOW_COPY_AND_ASSIGN(TestAudioInputControllerFactory);
126 };
127
128 }  // namespace media
129
130 #endif  // MEDIA_AUDIO_TEST_AUDIO_INPUT_CONTROLLER_FACTORY_H_