Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / renderer / tts_dispatcher.h
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.
4
5 #ifndef CHROME_RENDERER_TTS_DISPATCHER_H_
6 #define CHROME_RENDERER_TTS_DISPATCHER_H_
7
8 #include <vector>
9
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"
16
17 namespace IPC {
18 class Message;
19 }
20
21 struct TtsVoice;
22
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.
30 class TtsDispatcher
31     : public blink::WebSpeechSynthesizer,
32       public content::RenderProcessObserver {
33  public:
34   explicit TtsDispatcher(blink::WebSpeechSynthesizerClient* client);
35
36  private:
37   virtual ~TtsDispatcher();
38
39   // RenderProcessObserver override.
40   bool OnControlMessageReceived(const IPC::Message& message) override;
41
42   // blink::WebSpeechSynthesizer implementation.
43   virtual void updateVoiceList() override;
44   virtual void speak(const blink::WebSpeechSynthesisUtterance& utterance)
45       override;
46   virtual void pause() override;
47   virtual void resume() override;
48   virtual void cancel() override;
49
50   blink::WebSpeechSynthesisUtterance FindUtterance(int utterance_id);
51
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);
64
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_;
68
69   // Next utterance id, used to map response IPCs to utterance objects.
70   static int next_utterance_id_;
71
72   // Map from id to utterance objects.
73   base::hash_map<int, blink::WebSpeechSynthesisUtterance> utterance_id_map_;
74
75   DISALLOW_COPY_AND_ASSIGN(TtsDispatcher);
76 };
77
78 #endif  // CHROME_RENDERER_TTS_DISPATCHER_H_