Index: media/midi/midi_manager.cc |
diff --git a/media/midi/midi_manager.cc b/media/midi/midi_manager.cc |
index d72dbe292db5abf6f33d34c7bdbe43b6d4725137..cd148a9e6fdaf907a4e960a666dd59cd3d4e480f 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); |
@@ -113,11 +115,17 @@ void MidiManager::CompleteInitialization(MidiResult result) { |
} |
void MidiManager::AddInputPort(const MidiPortInfo& info) { |
+ base::AutoLock auto_lock(lock_); |
input_ports_.push_back(info); |
+ for (ClientSet::iterator it = clients_.begin(); it != clients_.end(); ++it) |
+ (*it)->AddInputPort(info); |
} |
void MidiManager::AddOutputPort(const MidiPortInfo& info) { |
+ base::AutoLock auto_lock(lock_); |
output_ports_.push_back(info); |
+ for (ClientSet::iterator it = clients_.begin(); it != clients_.end(); ++it) |
+ (*it)->AddOutputPort(info); |
} |
void MidiManager::ReceiveMidiData( |
@@ -141,11 +149,26 @@ void MidiManager::CompleteInitializationInternal(MidiResult result) { |
result_ = result; |
for (MidiManagerClient* client : pending_clients_) { |
- if (result_ == MIDI_OK) |
+ if (result_ == MIDI_OK) { |
+ AddInitialPorts(client); |
clients_.insert(client); |
+ } |
client->CompleteStartSession(result_); |
} |
pending_clients_.clear(); |
} |
+void MidiManager::AddInitialPorts(MidiManagerClient* client) { |
+ lock_.AssertAcquired(); |
+ |
+ for (MidiPortInfoList::iterator it = input_ports_.begin(); |
+ it != input_ports_.end(); ++it) { |
+ client->AddInputPort(*it); |
+ } |
+ for (MidiPortInfoList::iterator it = output_ports_.begin(); |
+ it != output_ports_.end(); ++it) { |
+ client->AddOutputPort(*it); |
+ } |
+} |
+ |
} // namespace media |