diff options
Diffstat (limited to 'content/browser/speech/speech_recognition_request.h')
-rw-r--r-- | content/browser/speech/speech_recognition_request.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/content/browser/speech/speech_recognition_request.h b/content/browser/speech/speech_recognition_request.h new file mode 100644 index 0000000..3036d59 --- /dev/null +++ b/content/browser/speech/speech_recognition_request.h @@ -0,0 +1,82 @@ +// 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 <string> + +#include "base/basictypes.h" +#include "base/ref_counted.h" +#include "base/scoped_ptr.h" +#include "chrome/common/net/url_fetcher.h" +#include "chrome/common/speech_input_result.h" +#include "googleurl/src/gurl.h" + +class URLFetcher; +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(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. + bool Send(const std::string& language, + const std::string& grammar, + const std::string& hardware_info, + const std::string& origin_url, + const std::string& content_type, + const std::string& audio_data); + + 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 ResponseCookies& cookies, + const std::string& data); + + private: + scoped_refptr<URLRequestContextGetter> url_context_; + Delegate* delegate_; + scoped_ptr<URLFetcher> 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_ |