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

Side by Side Diff: content/renderer/media/midi_message_filter.cc

Issue 2422163002: Web MIDI: use midi_service.mojom for media::midi::PortState (Closed)
Patch Set: gn --check fix Created 4 years, 2 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
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/midi_message_filter.h" 5 #include "content/renderer/media/midi_message_filter.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
11 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
12 #include "base/trace_event/trace_event.h" 12 #include "base/trace_event/trace_event.h"
13 #include "content/common/media/midi_messages.h" 13 #include "content/common/media/midi_messages.h"
14 #include "content/renderer/render_thread_impl.h" 14 #include "content/renderer/render_thread_impl.h"
15 #include "ipc/ipc_logging.h" 15 #include "ipc/ipc_logging.h"
16 16
17 using base::AutoLock; 17 using base::AutoLock;
18 using midi::mojom::PortState;
18 using midi::mojom::Result; 19 using midi::mojom::Result;
19 20
20 // The maximum number of bytes which we're allowed to send to the browser 21 // The maximum number of bytes which we're allowed to send to the browser
21 // before getting acknowledgement back from the browser that they've been 22 // before getting acknowledgement back from the browser that they've been
22 // successfully sent. 23 // successfully sent.
23 static const size_t kMaxUnacknowledgedBytesSent = 10 * 1024 * 1024; // 10 MB. 24 static const size_t kMaxUnacknowledgedBytesSent = 10 * 1024 * 1024; // 10 MB.
24 25
25 namespace content { 26 namespace content {
26 27
27 MidiMessageFilter::MidiMessageFilter( 28 MidiMessageFilter::MidiMessageFilter(
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 base::Bind(&MidiMessageFilter::HandleAddInputPort, this, info)); 159 base::Bind(&MidiMessageFilter::HandleAddInputPort, this, info));
159 } 160 }
160 161
161 void MidiMessageFilter::OnAddOutputPort(midi::MidiPortInfo info) { 162 void MidiMessageFilter::OnAddOutputPort(midi::MidiPortInfo info) {
162 DCHECK(io_task_runner_->BelongsToCurrentThread()); 163 DCHECK(io_task_runner_->BelongsToCurrentThread());
163 main_task_runner_->PostTask( 164 main_task_runner_->PostTask(
164 FROM_HERE, 165 FROM_HERE,
165 base::Bind(&MidiMessageFilter::HandleAddOutputPort, this, info)); 166 base::Bind(&MidiMessageFilter::HandleAddOutputPort, this, info));
166 } 167 }
167 168
168 void MidiMessageFilter::OnSetInputPortState(uint32_t port, 169 void MidiMessageFilter::OnSetInputPortState(uint32_t port, PortState state) {
169 midi::MidiPortState state) {
170 DCHECK(io_task_runner_->BelongsToCurrentThread()); 170 DCHECK(io_task_runner_->BelongsToCurrentThread());
171 main_task_runner_->PostTask( 171 main_task_runner_->PostTask(
172 FROM_HERE, base::Bind(&MidiMessageFilter::HandleSetInputPortState, this, 172 FROM_HERE, base::Bind(&MidiMessageFilter::HandleSetInputPortState, this,
173 port, state)); 173 port, state));
174 } 174 }
175 175
176 void MidiMessageFilter::OnSetOutputPortState(uint32_t port, 176 void MidiMessageFilter::OnSetOutputPortState(uint32_t port, PortState state) {
177 midi::MidiPortState state) {
178 DCHECK(io_task_runner_->BelongsToCurrentThread()); 177 DCHECK(io_task_runner_->BelongsToCurrentThread());
179 main_task_runner_->PostTask( 178 main_task_runner_->PostTask(
180 FROM_HERE, base::Bind(&MidiMessageFilter::HandleSetOutputPortState, this, 179 FROM_HERE, base::Bind(&MidiMessageFilter::HandleSetOutputPortState, this,
181 port, state)); 180 port, state));
182 } 181 }
183 182
184 void MidiMessageFilter::OnDataReceived(uint32_t port, 183 void MidiMessageFilter::OnDataReceived(uint32_t port,
185 const std::vector<uint8_t>& data, 184 const std::vector<uint8_t>& data,
186 double timestamp) { 185 double timestamp) {
187 TRACE_EVENT0("midi", "MidiMessageFilter::OnDataReceived"); 186 TRACE_EVENT0("midi", "MidiMessageFilter::OnDataReceived");
(...skipping 17 matching lines...) Expand all
205 session_result_ = result; 204 session_result_ = result;
206 205
207 // A for-loop using iterators does not work because |client| may touch 206 // A for-loop using iterators does not work because |client| may touch
208 // |clients_waiting_session_queue_| in callbacks. 207 // |clients_waiting_session_queue_| in callbacks.
209 while (!clients_waiting_session_queue_.empty()) { 208 while (!clients_waiting_session_queue_.empty()) {
210 auto* client = clients_waiting_session_queue_.back(); 209 auto* client = clients_waiting_session_queue_.back();
211 clients_waiting_session_queue_.pop_back(); 210 clients_waiting_session_queue_.pop_back();
212 if (result == Result::OK) { 211 if (result == Result::OK) {
213 // Add the client's input and output ports. 212 // Add the client's input and output ports.
214 for (const auto& info : inputs_) { 213 for (const auto& info : inputs_) {
215 client->didAddInputPort( 214 client->didAddInputPort(base::UTF8ToUTF16(info.id),
216 base::UTF8ToUTF16(info.id), 215 base::UTF8ToUTF16(info.manufacturer),
217 base::UTF8ToUTF16(info.manufacturer), 216 base::UTF8ToUTF16(info.name),
218 base::UTF8ToUTF16(info.name), 217 base::UTF8ToUTF16(info.version),
219 base::UTF8ToUTF16(info.version), 218 ToBlinkState(info.state));
220 ToBlinkState(info.state));
221 } 219 }
222 220
223 for (const auto& info : outputs_) { 221 for (const auto& info : outputs_) {
224 client->didAddOutputPort( 222 client->didAddOutputPort(base::UTF8ToUTF16(info.id),
225 base::UTF8ToUTF16(info.id), 223 base::UTF8ToUTF16(info.manufacturer),
226 base::UTF8ToUTF16(info.manufacturer), 224 base::UTF8ToUTF16(info.name),
227 base::UTF8ToUTF16(info.name), 225 base::UTF8ToUTF16(info.version),
228 base::UTF8ToUTF16(info.version), 226 ToBlinkState(info.state));
229 ToBlinkState(info.state));
230 } 227 }
231 } 228 }
232 client->didStartSession(result); 229 client->didStartSession(result);
233 clients_.insert(client); 230 clients_.insert(client);
234 } 231 }
235 } 232 }
236 233
237 void MidiMessageFilter::HandleAddInputPort(midi::MidiPortInfo info) { 234 void MidiMessageFilter::HandleAddInputPort(midi::MidiPortInfo info) {
238 DCHECK(main_task_runner_->BelongsToCurrentThread()); 235 DCHECK(main_task_runner_->BelongsToCurrentThread());
239 inputs_.push_back(info); 236 inputs_.push_back(info);
240 const base::string16 id = base::UTF8ToUTF16(info.id); 237 const base::string16 id = base::UTF8ToUTF16(info.id);
241 const base::string16 manufacturer = base::UTF8ToUTF16(info.manufacturer); 238 const base::string16 manufacturer = base::UTF8ToUTF16(info.manufacturer);
242 const base::string16 name = base::UTF8ToUTF16(info.name); 239 const base::string16 name = base::UTF8ToUTF16(info.name);
243 const base::string16 version = base::UTF8ToUTF16(info.version); 240 const base::string16 version = base::UTF8ToUTF16(info.version);
244 const blink::WebMIDIAccessorClient::MIDIPortState state = 241 const PortState state = ToBlinkState(info.state);
245 ToBlinkState(info.state);
246 for (auto* client : clients_) 242 for (auto* client : clients_)
247 client->didAddInputPort(id, manufacturer, name, version, state); 243 client->didAddInputPort(id, manufacturer, name, version, state);
248 } 244 }
249 245
250 void MidiMessageFilter::HandleAddOutputPort(midi::MidiPortInfo info) { 246 void MidiMessageFilter::HandleAddOutputPort(midi::MidiPortInfo info) {
251 DCHECK(main_task_runner_->BelongsToCurrentThread()); 247 DCHECK(main_task_runner_->BelongsToCurrentThread());
252 outputs_.push_back(info); 248 outputs_.push_back(info);
253 const base::string16 id = base::UTF8ToUTF16(info.id); 249 const base::string16 id = base::UTF8ToUTF16(info.id);
254 const base::string16 manufacturer = base::UTF8ToUTF16(info.manufacturer); 250 const base::string16 manufacturer = base::UTF8ToUTF16(info.manufacturer);
255 const base::string16 name = base::UTF8ToUTF16(info.name); 251 const base::string16 name = base::UTF8ToUTF16(info.name);
256 const base::string16 version = base::UTF8ToUTF16(info.version); 252 const base::string16 version = base::UTF8ToUTF16(info.version);
257 const blink::WebMIDIAccessorClient::MIDIPortState state = 253 const PortState state = ToBlinkState(info.state);
258 ToBlinkState(info.state);
259 for (auto* client : clients_) 254 for (auto* client : clients_)
260 client->didAddOutputPort(id, manufacturer, name, version, state); 255 client->didAddOutputPort(id, manufacturer, name, version, state);
261 } 256 }
262 257
263 void MidiMessageFilter::HandleDataReceived(uint32_t port, 258 void MidiMessageFilter::HandleDataReceived(uint32_t port,
264 const std::vector<uint8_t>& data, 259 const std::vector<uint8_t>& data,
265 double timestamp) { 260 double timestamp) {
266 TRACE_EVENT0("midi", "MidiMessageFilter::HandleDataReceived"); 261 TRACE_EVENT0("midi", "MidiMessageFilter::HandleDataReceived");
267 DCHECK(main_task_runner_->BelongsToCurrentThread()); 262 DCHECK(main_task_runner_->BelongsToCurrentThread());
268 DCHECK(!data.empty()); 263 DCHECK(!data.empty());
269 264
270 for (auto* client : clients_) 265 for (auto* client : clients_)
271 client->didReceiveMIDIData(port, &data[0], data.size(), timestamp); 266 client->didReceiveMIDIData(port, &data[0], data.size(), timestamp);
272 } 267 }
273 268
274 void MidiMessageFilter::HandleAckknowledgeSentData(size_t bytes_sent) { 269 void MidiMessageFilter::HandleAckknowledgeSentData(size_t bytes_sent) {
275 DCHECK(main_task_runner_->BelongsToCurrentThread()); 270 DCHECK(main_task_runner_->BelongsToCurrentThread());
276 DCHECK_GE(unacknowledged_bytes_sent_, bytes_sent); 271 DCHECK_GE(unacknowledged_bytes_sent_, bytes_sent);
277 if (unacknowledged_bytes_sent_ >= bytes_sent) 272 if (unacknowledged_bytes_sent_ >= bytes_sent)
278 unacknowledged_bytes_sent_ -= bytes_sent; 273 unacknowledged_bytes_sent_ -= bytes_sent;
279 } 274 }
280 275
281 void MidiMessageFilter::HandleSetInputPortState( 276 void MidiMessageFilter::HandleSetInputPortState(uint32_t port,
282 uint32_t port, 277 PortState state) {
283 midi::MidiPortState state) {
284 DCHECK(main_task_runner_->BelongsToCurrentThread()); 278 DCHECK(main_task_runner_->BelongsToCurrentThread());
285 inputs_[port].state = state; 279 inputs_[port].state = state;
286 for (auto* client : clients_) 280 for (auto* client : clients_)
287 client->didSetInputPortState(port, ToBlinkState(state)); 281 client->didSetInputPortState(port, ToBlinkState(state));
288 } 282 }
289 283
290 void MidiMessageFilter::HandleSetOutputPortState( 284 void MidiMessageFilter::HandleSetOutputPortState(uint32_t port,
291 uint32_t port, 285 PortState state) {
292 midi::MidiPortState state) {
293 DCHECK(main_task_runner_->BelongsToCurrentThread()); 286 DCHECK(main_task_runner_->BelongsToCurrentThread());
294 outputs_[port].state = state; 287 outputs_[port].state = state;
295 for (auto* client : clients_) 288 for (auto* client : clients_)
296 client->didSetOutputPortState(port, ToBlinkState(state)); 289 client->didSetOutputPortState(port, ToBlinkState(state));
297 } 290 }
298 291
299 } // namespace content 292 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/midi_message_filter.h ('k') | content/renderer/media/midi_message_filter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698