|  | // Copyright 2013 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_TEST_MOCK_GOOGLE_STREAMING_SERVER_H_ | 
|  | #define CONTENT_TEST_MOCK_GOOGLE_STREAMING_SERVER_H_ | 
|  |  | 
|  | #include "base/compiler_specific.h" | 
|  | #include "base/macros.h" | 
|  | #include "content/public/common/speech_recognition_result.h" | 
|  | #include "net/url_request/test_url_fetcher_factory.h" | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | struct SpeechRecognitionResult; | 
|  |  | 
|  | // Provides a mock implementation of the Google remote streaming speech | 
|  | // recognition webservice, exploiting the TestURLFetcher to extract request | 
|  | // parameters and provide forged JSON responses back to the client. | 
|  | // It is intended for closing the server-side loop in speech tests that involve | 
|  | // the SpeechRecognitionEngine client. | 
|  | class MockGoogleStreamingServer : public net::TestURLFetcherDelegateForTests { | 
|  | public: | 
|  | class Delegate { | 
|  | public: | 
|  | virtual void OnClientConnected() = 0; | 
|  | virtual void OnClientAudioUpload() = 0; | 
|  | virtual void OnClientAudioUploadComplete() = 0; | 
|  | virtual void OnClientDisconnected() = 0; | 
|  | }; | 
|  |  | 
|  | explicit MockGoogleStreamingServer(Delegate* delegate); | 
|  | virtual ~MockGoogleStreamingServer(); | 
|  |  | 
|  | // net::TestURLFetcherDelegateForTests implementation. | 
|  | void OnRequestStart(int fetcher_id) override; | 
|  | void OnChunkUpload(int fetcher_id) override; | 
|  | void OnRequestEnd(int fetcher_id) override; | 
|  |  | 
|  | void SimulateResult(const content::SpeechRecognitionResult& result); | 
|  | void SimulateServerFailure(); | 
|  | void SimulateMalformedResponse(); | 
|  |  | 
|  | // Retrieves the language parmeter for the request (e.g., lang=en-US). | 
|  | const std::string& GetRequestLanguage() const; | 
|  |  | 
|  | // Retrieves the grammar parmeter for the request (e.g., lm=http://url/g.xml). | 
|  | const std::string& GetRequestGrammar() const; | 
|  |  | 
|  | private: | 
|  | void SimulateServerResponse(bool success, const std::string& http_response); | 
|  | net::TestURLFetcher* GetURLFetcher(bool downstream) const; | 
|  |  | 
|  | Delegate* delegate_; | 
|  | int kDownstreamUrlFetcherId; | 
|  | int kUpstreamUrlFetcherId; | 
|  | net::TestURLFetcherFactory url_fetcher_factory_; | 
|  |  | 
|  | // Request arguments extracted by the HTTP query string. | 
|  | std::string request_language; | 
|  | std::string request_grammar; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(MockGoogleStreamingServer); | 
|  | }; | 
|  |  | 
|  | }  // namespace content | 
|  |  | 
|  | #endif  // CONTENT_TEST_MOCK_GOOGLE_STREAMING_SERVER_H_ |