OLD | NEW |
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" |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 void MidiMessageFilter::OnAcknowledgeSentData(size_t bytes_sent) { | 195 void MidiMessageFilter::OnAcknowledgeSentData(size_t bytes_sent) { |
196 DCHECK(io_task_runner_->BelongsToCurrentThread()); | 196 DCHECK(io_task_runner_->BelongsToCurrentThread()); |
197 main_task_runner_->PostTask( | 197 main_task_runner_->PostTask( |
198 FROM_HERE, base::Bind(&MidiMessageFilter::HandleAckknowledgeSentData, | 198 FROM_HERE, base::Bind(&MidiMessageFilter::HandleAckknowledgeSentData, |
199 this, bytes_sent)); | 199 this, bytes_sent)); |
200 } | 200 } |
201 | 201 |
202 void MidiMessageFilter::HandleClientAdded(media::midi::Result result) { | 202 void MidiMessageFilter::HandleClientAdded(media::midi::Result result) { |
203 TRACE_EVENT0("midi", "MidiMessageFilter::HandleClientAdded"); | 203 TRACE_EVENT0("midi", "MidiMessageFilter::HandleClientAdded"); |
204 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 204 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
205 session_result_ = result; | |
206 std::string error; | |
207 std::string message; | |
208 switch (result) { | |
209 case media::midi::Result::OK: | |
210 break; | |
211 case media::midi::Result::NOT_SUPPORTED: | |
212 error = "NotSupportedError"; | |
213 break; | |
214 case media::midi::Result::INITIALIZATION_ERROR: | |
215 error = "InvalidStateError"; | |
216 message = "Platform dependent initialization failed."; | |
217 break; | |
218 default: | |
219 NOTREACHED(); | |
220 error = "InvalidStateError"; | |
221 message = "Unknown internal error occurred."; | |
222 break; | |
223 } | |
224 base::string16 error16 = base::UTF8ToUTF16(error); | |
225 base::string16 message16 = base::UTF8ToUTF16(message); | |
226 | 205 |
227 // 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 |
228 // |clients_waiting_session_queue_| in callbacks. | 207 // |clients_waiting_session_queue_| in callbacks. |
229 while (!clients_waiting_session_queue_.empty()) { | 208 while (!clients_waiting_session_queue_.empty()) { |
230 auto* client = clients_waiting_session_queue_.back(); | 209 auto* client = clients_waiting_session_queue_.back(); |
231 clients_waiting_session_queue_.pop_back(); | 210 clients_waiting_session_queue_.pop_back(); |
232 if (result == media::midi::Result::OK) { | 211 if (result == media::midi::Result::OK) { |
233 // Add the client's input and output ports. | 212 // Add the client's input and output ports. |
234 for (const auto& info : inputs_) { | 213 for (const auto& info : inputs_) { |
235 client->didAddInputPort( | 214 client->didAddInputPort( |
236 base::UTF8ToUTF16(info.id), | 215 base::UTF8ToUTF16(info.id), |
237 base::UTF8ToUTF16(info.manufacturer), | 216 base::UTF8ToUTF16(info.manufacturer), |
238 base::UTF8ToUTF16(info.name), | 217 base::UTF8ToUTF16(info.name), |
239 base::UTF8ToUTF16(info.version), | 218 base::UTF8ToUTF16(info.version), |
240 ToBlinkState(info.state)); | 219 ToBlinkState(info.state)); |
241 } | 220 } |
242 | 221 |
243 for (const auto& info : outputs_) { | 222 for (const auto& info : outputs_) { |
244 client->didAddOutputPort( | 223 client->didAddOutputPort( |
245 base::UTF8ToUTF16(info.id), | 224 base::UTF8ToUTF16(info.id), |
246 base::UTF8ToUTF16(info.manufacturer), | 225 base::UTF8ToUTF16(info.manufacturer), |
247 base::UTF8ToUTF16(info.name), | 226 base::UTF8ToUTF16(info.name), |
248 base::UTF8ToUTF16(info.version), | 227 base::UTF8ToUTF16(info.version), |
249 ToBlinkState(info.state)); | 228 ToBlinkState(info.state)); |
250 } | 229 } |
251 } | 230 } |
252 client->didStartSession(result == media::midi::Result::OK, error16, | 231 client->didStartSession(result); |
253 message16); | |
254 clients_.insert(client); | 232 clients_.insert(client); |
255 } | 233 } |
256 } | 234 } |
257 | 235 |
258 void MidiMessageFilter::HandleAddInputPort(media::midi::MidiPortInfo info) { | 236 void MidiMessageFilter::HandleAddInputPort(media::midi::MidiPortInfo info) { |
259 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 237 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
260 inputs_.push_back(info); | 238 inputs_.push_back(info); |
261 const base::string16 id = base::UTF8ToUTF16(info.id); | 239 const base::string16 id = base::UTF8ToUTF16(info.id); |
262 const base::string16 manufacturer = base::UTF8ToUTF16(info.manufacturer); | 240 const base::string16 manufacturer = base::UTF8ToUTF16(info.manufacturer); |
263 const base::string16 name = base::UTF8ToUTF16(info.name); | 241 const base::string16 name = base::UTF8ToUTF16(info.name); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 void MidiMessageFilter::HandleSetOutputPortState( | 289 void MidiMessageFilter::HandleSetOutputPortState( |
312 uint32_t port, | 290 uint32_t port, |
313 media::midi::MidiPortState state) { | 291 media::midi::MidiPortState state) { |
314 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 292 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
315 outputs_[port].state = state; | 293 outputs_[port].state = state; |
316 for (auto* client : clients_) | 294 for (auto* client : clients_) |
317 client->didSetOutputPortState(port, ToBlinkState(state)); | 295 client->didSetOutputPortState(port, ToBlinkState(state)); |
318 } | 296 } |
319 | 297 |
320 } // namespace content | 298 } // namespace content |
OLD | NEW |