Index: media/midi/midi_manager.cc |
diff --git a/media/midi/midi_manager.cc b/media/midi/midi_manager.cc |
index b0439ec326addd1da7187c0b07b520618e584b89..d0eb50f50908e42106e1e77245eb2fb01febb79c 100644 |
--- a/media/midi/midi_manager.cc |
+++ b/media/midi/midi_manager.cc |
@@ -77,8 +77,10 @@ void MidiManager::StartSession(MidiManagerClient* client) { |
MidiResult result; |
{ |
base::AutoLock auto_lock(lock_); |
- if (result_ == MIDI_OK) |
+ if (result_ == MIDI_OK) { |
+ AddInitialPorts(client); |
clients_.insert(client); |
+ } |
result = result_; |
} |
client->CompleteStartSession(result); |
@@ -115,11 +117,17 @@ void MidiManager::CompleteInitialization(MidiResult result) { |
} |
void MidiManager::AddInputPort(const MidiPortInfo& info) { |
+ base::AutoLock auto_lock(lock_); |
input_ports_.push_back(info); |
+ for (auto client : clients_) |
+ client->AddInputPort(info); |
} |
void MidiManager::AddOutputPort(const MidiPortInfo& info) { |
+ base::AutoLock auto_lock(lock_); |
output_ports_.push_back(info); |
+ for (auto client : clients_) |
+ client->AddOutputPort(info); |
} |
void MidiManager::ReceiveMidiData( |
@@ -129,7 +137,7 @@ void MidiManager::ReceiveMidiData( |
double timestamp) { |
base::AutoLock auto_lock(lock_); |
- for (MidiManagerClient* client : clients_) |
+ for (auto client : clients_) |
client->ReceiveMidiData(port_index, data, length, timestamp); |
} |
@@ -142,12 +150,23 @@ void MidiManager::CompleteInitializationInternal(MidiResult result) { |
initialized_ = true; |
result_ = result; |
- for (MidiManagerClient* client : pending_clients_) { |
- if (result_ == MIDI_OK) |
+ for (auto client : pending_clients_) { |
+ if (result_ == MIDI_OK) { |
+ AddInitialPorts(client); |
clients_.insert(client); |
+ } |
client->CompleteStartSession(result_); |
} |
pending_clients_.clear(); |
} |
+void MidiManager::AddInitialPorts(MidiManagerClient* client) { |
+ lock_.AssertAcquired(); |
+ |
+ for (const auto& info : input_ports_) |
+ client->AddInputPort(info); |
+ for (const auto& info : output_ports_) |
+ client->AddOutputPort(info); |
+} |
+ |
} // namespace media |