// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_SPEECH_SPEECH_INPUT_EXTENSION_API_H_ #define CHROME_BROWSER_SPEECH_SPEECH_INPUT_EXTENSION_API_H_ #include "chrome/browser/extensions/extension_function.h" #include "content/public/browser/notification_observer.h" // Handles asynchronous operations such as starting or stopping speech // recognition in the framework of the extension API state machine. class SpeechInputAsyncFunction : public AsyncExtensionFunction, public content::NotificationObserver { public: // content::NotificationObserver. virtual void Observe(int type, const content::NotificationSource& source, const content::NotificationDetails& details) OVERRIDE; protected: SpeechInputAsyncFunction(int start_state, int transition_state, int end_state, int transition_notification); virtual ~SpeechInputAsyncFunction(); // ExtensionFunction: virtual void Run() OVERRIDE; virtual bool RunImpl() = 0; private: // To be defined on construction by derived classes. int start_state_; int transition_state_; int end_state_; int transition_notification_; content::NotificationRegistrar registrar_; bool expecting_transition_; bool failed_; }; // Implements experimental.speechInput.start. class StartSpeechInputFunction : public SpeechInputAsyncFunction { public: DECLARE_EXTENSION_FUNCTION_NAME("experimental.speechInput.start"); StartSpeechInputFunction(); protected: // SpeechInputAsyncFunction: virtual bool RunImpl() OVERRIDE; private: virtual ~StartSpeechInputFunction() {} }; // Implements experimental.speechInput.stop. class StopSpeechInputFunction : public SpeechInputAsyncFunction { public: DECLARE_EXTENSION_FUNCTION_NAME("experimental.speechInput.stop"); StopSpeechInputFunction(); protected: // SpeechInputAsyncFunction: virtual bool RunImpl() OVERRIDE; private: virtual ~StopSpeechInputFunction() {} }; // Implements experimental.speechInput.isRecording. class IsRecordingSpeechInputFunction : public SyncExtensionFunction { public: DECLARE_EXTENSION_FUNCTION_NAME("experimental.speechInput.isRecording"); // Called back from SpeechInputExtensionManager in the UI thread. void SetIsRecordingResult(bool result); protected: // ExtensionFunction: virtual void Run() OVERRIDE; virtual bool RunImpl() OVERRIDE; private: virtual ~IsRecordingSpeechInputFunction() {} }; #endif // CHROME_BROWSER_SPEECH_SPEECH_INPUT_EXTENSION_API_H_