// Copyright (c) 2011 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 CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_REQUEST_H_ #define CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_REQUEST_H_ #pragma once #include #include "base/basictypes.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "content/common/speech_input_result.h" #include "content/common/url_fetcher.h" #include "googleurl/src/gurl.h" class URLFetcher; namespace net { class URLRequestContextGetter; } namespace speech_input { // Provides a simple interface for sending recorded speech data to the server // and get back recognition results. class SpeechRecognitionRequest : public URLFetcher::Delegate { public: // ID passed to URLFetcher::Create(). Used for testing. static int url_fetcher_id_for_tests; // Interface for receiving callbacks from this object. class Delegate { public: virtual void SetRecognitionResult( bool error, const SpeechInputResultArray& result) = 0; protected: virtual ~Delegate() {} }; // |url| is the server address to which the request wil be sent. SpeechRecognitionRequest(net::URLRequestContextGetter* context, Delegate* delegate); virtual ~SpeechRecognitionRequest(); // Sends a new request with the given audio data, returns true if successful. // The same object can be used to send multiple requests but only after the // previous request has completed. void Start(const std::string& language, const std::string& grammar, const std::string& hardware_info, const std::string& origin_url, const std::string& content_type); // Send a single chunk of audio immediately to the server. void UploadAudioChunk(const std::string& audio_data, bool is_last_chunk); bool HasPendingRequest() { return url_fetcher_ != NULL; } // URLFetcher::Delegate methods. virtual void OnURLFetchComplete(const URLFetcher* source, const GURL& url, const net::URLRequestStatus& status, int response_code, const net::ResponseCookies& cookies, const std::string& data); private: scoped_refptr url_context_; Delegate* delegate_; scoped_ptr url_fetcher_; DISALLOW_COPY_AND_ASSIGN(SpeechRecognitionRequest); }; // This typedef is to workaround the issue with certain versions of // Visual Studio where it gets confused between multiple Delegate // classes and gives a C2500 error. (I saw this error on the try bots - // the workaround was not needed for my machine). typedef SpeechRecognitionRequest::Delegate SpeechRecognitionRequestDelegate; } // namespace speech_input #endif // CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_REQUEST_H_