| 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 |