1 // Copyright (c) 2013 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_RENDERER_TTS_DISPATCHER_H_
6 #define CHROME_RENDERER_TTS_DISPATCHER_H_
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12 #include "base/containers/hash_tables.h"
13 #include "content/public/renderer/render_process_observer.h"
14 #include "third_party/WebKit/public/platform/WebSpeechSynthesizer.h"
15 #include "third_party/WebKit/public/platform/WebSpeechSynthesizerClient.h"
23 // TtsDispatcher is a delegate for methods used by Blink for speech synthesis
24 // APIs. It's the complement of TtsDispatcherHost (owned by RenderViewHost).
25 // Each TtsDispatcher is owned by the WebSpeechSynthesizerClient in Blink;
26 // it registers itself to listen to IPC upon construction and unregisters
27 // itself when deleted. There can be multiple TtsDispatchers alive at once,
28 // so each one routes IPC messages to its WebSpeechSynthesizerClient only if
29 // the utterance id (which is globally unique) matches.
31 : public blink::WebSpeechSynthesizer
,
32 public content::RenderProcessObserver
{
34 explicit TtsDispatcher(blink::WebSpeechSynthesizerClient
* client
);
37 virtual ~TtsDispatcher();
39 // RenderProcessObserver override.
40 virtual bool OnControlMessageReceived(const IPC::Message
& message
) OVERRIDE
;
42 // blink::WebSpeechSynthesizer implementation.
43 virtual void updateVoiceList() OVERRIDE
;
44 virtual void speak(const blink::WebSpeechSynthesisUtterance
& utterance
)
46 virtual void pause() OVERRIDE
;
47 virtual void resume() OVERRIDE
;
48 virtual void cancel() OVERRIDE
;
50 blink::WebSpeechSynthesisUtterance
FindUtterance(int utterance_id
);
52 void OnSetVoiceList(const std::vector
<TtsVoice
>& voices
);
53 void OnDidStartSpeaking(int utterance_id
);
54 void OnDidFinishSpeaking(int utterance_id
);
55 void OnDidPauseSpeaking(int utterance_id
);
56 void OnDidResumeSpeaking(int utterance_id
);
57 void OnWordBoundary(int utterance_id
, int char_index
);
58 void OnSentenceBoundary(int utterance_id
, int char_index
);
59 void OnMarkerEvent(int utterance_id
, int char_index
);
60 void OnWasInterrupted(int utterance_id
);
61 void OnWasCancelled(int utterance_id
);
62 void OnSpeakingErrorOccurred(int utterance_id
,
63 const std::string
& error_message
);
65 // The WebKit client class that we use to send events back to the JS world.
66 // Weak reference, this will be valid as long as this object exists.
67 blink::WebSpeechSynthesizerClient
* synthesizer_client_
;
69 // Next utterance id, used to map response IPCs to utterance objects.
70 static int next_utterance_id_
;
72 // Map from id to utterance objects.
73 base::hash_map
<int, blink::WebSpeechSynthesisUtterance
> utterance_id_map_
;
75 DISALLOW_COPY_AND_ASSIGN(TtsDispatcher
);
78 #endif // CHROME_RENDERER_TTS_DISPATCHER_H_