1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef CHROME_RENDERER_TTS_DISPATCHER_H_ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CHROME_RENDERER_TTS_DISPATCHER_H_ 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector> 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/basictypes.h" 11b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "base/compiler_specific.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/containers/hash_tables.h" 13b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/public/renderer/render_process_observer.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebSpeechSynthesizer.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebSpeechSynthesizerClient.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)namespace IPC { 18b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)class Message; 19b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 20b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct TtsVoice; 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// TtsDispatcher is a delegate for methods used by Blink for speech synthesis 240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// APIs. It's the complement of TtsDispatcherHost (owned by RenderViewHost). 250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Each TtsDispatcher is owned by the WebSpeechSynthesizerClient in Blink; 260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// it registers itself to listen to IPC upon construction and unregisters 270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// itself when deleted. There can be multiple TtsDispatchers alive at once, 280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// so each one routes IPC messages to its WebSpeechSynthesizerClient only if 290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// the utterance id (which is globally unique) matches. 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class TtsDispatcher 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : public blink::WebSpeechSynthesizer, 32b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) public content::RenderProcessObserver { 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) explicit TtsDispatcher(blink::WebSpeechSynthesizerClient* client); 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~TtsDispatcher(); 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 39b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // RenderProcessObserver override. 40b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) virtual bool OnControlMessageReceived(const IPC::Message& message) OVERRIDE; 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // blink::WebSpeechSynthesizer implementation. 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void updateVoiceList() OVERRIDE; 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void speak(const blink::WebSpeechSynthesisUtterance& utterance) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OVERRIDE; 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void pause() OVERRIDE; 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void resume() OVERRIDE; 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void cancel() OVERRIDE; 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebSpeechSynthesisUtterance FindUtterance(int utterance_id); 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnSetVoiceList(const std::vector<TtsVoice>& voices); 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnDidStartSpeaking(int utterance_id); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnDidFinishSpeaking(int utterance_id); 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnDidPauseSpeaking(int utterance_id); 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnDidResumeSpeaking(int utterance_id); 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnWordBoundary(int utterance_id, int char_index); 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnSentenceBoundary(int utterance_id, int char_index); 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnMarkerEvent(int utterance_id, int char_index); 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnWasInterrupted(int utterance_id); 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnWasCancelled(int utterance_id); 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnSpeakingErrorOccurred(int utterance_id, 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& error_message); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The WebKit client class that we use to send events back to the JS world. 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Weak reference, this will be valid as long as this object exists. 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebSpeechSynthesizerClient* synthesizer_client_; 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Next utterance id, used to map response IPCs to utterance objects. 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static int next_utterance_id_; 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Map from id to utterance objects. 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::hash_map<int, blink::WebSpeechSynthesisUtterance> utterance_id_map_; 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TtsDispatcher); 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // CHROME_RENDERER_TTS_DISPATCHER_H_ 79