1/*
2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1.  Redistributions of source code must retain the above copyright
9 *     notice, this list of conditions and the following disclaimer.
10 * 2.  Redistributions in binary form must reproduce the above copyright
11 *     notice, this list of conditions and the following disclaimer in the
12 *     documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#ifndef MockWebSpeechInputController_h
27#define MockWebSpeechInputController_h
28
29#include "TestCommon.h"
30#include "public/platform/WebRect.h"
31#include "public/testing/WebTask.h"
32#include "public/web/WebSpeechInputController.h"
33#include "public/web/WebSpeechInputResult.h"
34#include <map>
35#include <string>
36#include <vector>
37
38namespace WebKit {
39class WebSecurityOrigin;
40class WebSpeechInputListener;
41class WebString;
42}
43
44namespace WebTestRunner {
45
46class WebTestDelegate;
47
48class MockWebSpeechInputController : public WebKit::WebSpeechInputController {
49public:
50    explicit MockWebSpeechInputController(WebKit::WebSpeechInputListener*);
51    ~MockWebSpeechInputController();
52
53    void addMockRecognitionResult(const WebKit::WebString& result, double confidence, const WebKit::WebString& language);
54    void setDumpRect(bool);
55    void clearResults();
56    void setDelegate(WebTestDelegate*);
57
58    // WebSpeechInputController implementation:
59    virtual bool startRecognition(int requestId, const WebKit::WebRect& elementRect, const WebKit::WebString& language, const WebKit::WebString& grammar, const WebKit::WebSecurityOrigin&) OVERRIDE;
60    virtual void cancelRecognition(int requestId) OVERRIDE;
61    virtual void stopRecording(int requestId) OVERRIDE;
62
63    WebTaskList* taskList() { return &m_taskList; }
64
65private:
66    void speechTaskFired();
67
68    class SpeechTask : public WebMethodTask<MockWebSpeechInputController> {
69    public:
70        SpeechTask(MockWebSpeechInputController*);
71        void stop();
72
73    private:
74        virtual void runIfValid() OVERRIDE;
75    };
76
77    WebKit::WebSpeechInputListener* m_listener;
78
79    WebTaskList m_taskList;
80    SpeechTask* m_speechTask;
81
82    bool m_recording;
83    int m_requestId;
84    WebKit::WebRect m_requestRect;
85    std::string m_language;
86
87    std::map<std::string, std::vector<WebKit::WebSpeechInputResult> > m_recognitionResults;
88    std::vector<WebKit::WebSpeechInputResult> m_resultsForEmptyLanguage;
89    bool m_dumpRect;
90
91    WebTestDelegate* m_delegate;
92};
93
94}
95
96#endif // MockWebSpeechInputController_h
97