Update mojo surfaces bindings and mojo/cc/ glue
[chromium-blink-merge.git] / chrome / browser / speech / tts_controller_impl.h
blobae3ad6c7f4020097821f939c09f71d94d086e148
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.
5 #ifndef CHROME_BROWSER_SPEECH_TTS_CONTROLLER_IMPL_H_
6 #define CHROME_BROWSER_SPEECH_TTS_CONTROLLER_IMPL_H_
8 #include <queue>
9 #include <set>
10 #include <string>
11 #include <vector>
13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/singleton.h"
15 #include "base/memory/weak_ptr.h"
16 #include "chrome/browser/speech/tts_controller.h"
17 #include "url/gurl.h"
19 namespace content {
20 class BrowserContext;
23 // Singleton class that manages text-to-speech for the TTS and TTS engine
24 // extension APIs, maintaining a queue of pending utterances and keeping
25 // track of all state.
26 class TtsControllerImpl : public TtsController {
27 public:
28 // Get the single instance of this class.
29 static TtsControllerImpl* GetInstance();
31 // TtsController methods
32 virtual bool IsSpeaking() OVERRIDE;
33 virtual void SpeakOrEnqueue(Utterance* utterance) OVERRIDE;
34 virtual void Stop() OVERRIDE;
35 virtual void Pause() OVERRIDE;
36 virtual void Resume() OVERRIDE;
37 virtual void OnTtsEvent(int utterance_id,
38 TtsEventType event_type,
39 int char_index,
40 const std::string& error_message) OVERRIDE;
41 virtual void GetVoices(content::BrowserContext* browser_context,
42 std::vector<VoiceData>* out_voices) OVERRIDE;
43 virtual void VoicesChanged() OVERRIDE;
44 virtual void AddVoicesChangedDelegate(
45 VoicesChangedDelegate* delegate) OVERRIDE;
46 virtual void RemoveVoicesChangedDelegate(
47 VoicesChangedDelegate* delegate) OVERRIDE;
48 virtual void SetTtsEngineDelegate(TtsEngineDelegate* delegate) OVERRIDE;
49 virtual TtsEngineDelegate* GetTtsEngineDelegate() OVERRIDE;
50 virtual void SetPlatformImpl(TtsPlatformImpl* platform_impl) OVERRIDE;
51 virtual int QueueSize() OVERRIDE;
53 protected:
54 TtsControllerImpl();
55 virtual ~TtsControllerImpl();
57 private:
58 // Get the platform TTS implementation (or injected mock).
59 TtsPlatformImpl* GetPlatformImpl();
61 // Start speaking the given utterance. Will either take ownership of
62 // |utterance| or delete it if there's an error. Returns true on success.
63 void SpeakNow(Utterance* utterance);
65 // Clear the utterance queue. If send_events is true, will send
66 // TTS_EVENT_CANCELLED events on each one.
67 void ClearUtteranceQueue(bool send_events);
69 // Finalize and delete the current utterance.
70 void FinishCurrentUtterance();
72 // Start speaking the next utterance in the queue.
73 void SpeakNextUtterance();
75 // Given an utterance and a vector of voices, return the
76 // index of the voice that best matches the utterance.
77 int GetMatchingVoice(const Utterance* utterance,
78 std::vector<VoiceData>& voices);
80 friend struct DefaultSingletonTraits<TtsControllerImpl>;
82 // The current utterance being spoken.
83 Utterance* current_utterance_;
85 // Whether the queue is paused or not.
86 bool paused_;
88 // A queue of utterances to speak after the current one finishes.
89 std::queue<Utterance*> utterance_queue_;
91 // A set of delegates that want to be notified when the voices change.
92 std::set<VoicesChangedDelegate*> voices_changed_delegates_;
94 // A pointer to the platform implementation of text-to-speech, for
95 // dependency injection.
96 TtsPlatformImpl* platform_impl_;
98 // The delegate that processes TTS requests with user-installed extensions.
99 TtsEngineDelegate* tts_engine_delegate_;
101 DISALLOW_COPY_AND_ASSIGN(TtsControllerImpl);
104 #endif // CHROME_BROWSER_SPEECH_TTS_CONTROLLER_IMPL_H_