Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(147)

Side by Side Diff: chrome/browser/speech/speech_recognition_bubble_controller.h

Issue 260903010: Start removing support for the experimental x-webkit-speech API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Don't touch histograms.xml Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_SPEECH_SPEECH_RECOGNITION_BUBBLE_CONTROLLER_H_
6 #define CHROME_BROWSER_SPEECH_SPEECH_RECOGNITION_BUBBLE_CONTROLLER_H_
7
8 #include "base/basictypes.h"
9 #include "base/memory/ref_counted.h"
10 #include "base/synchronization/lock.h"
11 #include "chrome/browser/speech/speech_recognition_bubble.h"
12 #include "ui/gfx/rect.h"
13
14 namespace speech {
15
16 // This class handles the speech recognition popup UI on behalf of
17 // SpeechRecognitionManager, which invokes methods on the IO thread, processing
18 // those requests on the UI thread. At most one bubble can be active.
19 class SpeechRecognitionBubbleController
20 : public base::RefCountedThreadSafe<SpeechRecognitionBubbleController>,
21 public SpeechRecognitionBubbleDelegate {
22 public:
23 // All methods of this delegate are called on the IO thread.
24 class Delegate {
25 public:
26 // Invoked when the user clicks on a button in the speech recognition UI.
27 virtual void InfoBubbleButtonClicked(
28 int session_id, SpeechRecognitionBubble::Button button) = 0;
29
30 // Invoked when the user clicks outside the speech recognition info bubble
31 // causing it to close and input focus to change.
32 virtual void InfoBubbleFocusChanged(int session_id) = 0;
33
34 protected:
35 virtual ~Delegate() {}
36 };
37
38 explicit SpeechRecognitionBubbleController(Delegate* delegate);
39
40 // Creates and shows a new speech recognition UI bubble in warmup mode.
41 void CreateBubble(int session_id,
42 int render_process_id,
43 int render_view_id,
44 const gfx::Rect& element_rect);
45
46 // Indicates to the user that audio recording is in progress.
47 void SetBubbleRecordingMode();
48
49 // Indicates to the user that recognition is in progress.
50 void SetBubbleRecognizingMode();
51
52 // Displays the given string with the 'Try again' and 'Cancel' buttons.
53 void SetBubbleMessage(const base::string16& text);
54
55 // Checks whether the bubble is active and is showing a message.
56 bool IsShowingMessage() const;
57
58 // Updates the current captured audio volume displayed on screen.
59 void SetBubbleInputVolume(float volume, float noise_volume);
60
61 // Closes the bubble.
62 void CloseBubble();
63
64 // This is the only method that can be called from the UI thread.
65 void CloseBubbleForRenderViewOnUIThread(int render_process_id,
66 int render_view_id);
67
68 // Retrieves the session ID associated to the active bubble (if any).
69 // Returns 0 if no bubble is currently shown.
70 int GetActiveSessionID();
71
72 // SpeechRecognitionBubble::Delegate methods.
73 virtual void InfoBubbleButtonClicked(
74 SpeechRecognitionBubble::Button button) OVERRIDE;
75 virtual void InfoBubbleFocusChanged() OVERRIDE;
76
77 private:
78 friend class base::RefCountedThreadSafe<SpeechRecognitionBubbleController>;
79
80 // The various calls received by this object and handled on the UI thread.
81 enum RequestType {
82 REQUEST_CREATE,
83 REQUEST_SET_RECORDING_MODE,
84 REQUEST_SET_RECOGNIZING_MODE,
85 REQUEST_SET_MESSAGE,
86 REQUEST_SET_INPUT_VOLUME,
87 REQUEST_CLOSE,
88 };
89
90 struct UIRequest {
91 RequestType type;
92 base::string16 message;
93 gfx::Rect element_rect;
94 float volume;
95 float noise_volume;
96 int render_process_id;
97 int render_view_id;
98
99 explicit UIRequest(RequestType type_value);
100 ~UIRequest();
101 };
102
103 virtual ~SpeechRecognitionBubbleController();
104
105 void InvokeDelegateButtonClicked(SpeechRecognitionBubble::Button button);
106 void InvokeDelegateFocusChanged();
107 void ProcessRequestInUiThread(const UIRequest& request);
108
109 // The following are accessed only on the IO thread.
110 Delegate* delegate_;
111 RequestType last_request_issued_;
112
113 // The following are accessed only on the UI thread.
114 scoped_ptr<SpeechRecognitionBubble> bubble_;
115
116 // The following are accessed on both IO and UI threads.
117 base::Lock lock_;
118
119 // The session id for currently visible bubble.
120 int current_bubble_session_id_;
121
122 // The render process and view ids for the currently visible bubble.
123 int current_bubble_render_process_id_;
124 int current_bubble_render_view_id_;
125 };
126
127 // This typedef is to workaround the issue with certain versions of
128 // Visual Studio where it gets confused between multiple Delegate
129 // classes and gives a C2500 error. (I saw this error on the try bots -
130 // the workaround was not needed for my machine).
131 typedef SpeechRecognitionBubbleController::Delegate
132 SpeechRecognitionBubbleControllerDelegate;
133
134 } // namespace speech
135
136 #endif // CHROME_BROWSER_SPEECH_SPEECH_RECOGNITION_BUBBLE_CONTROLLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698