summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authoryhirano <yhirano@chromium.org>2015-02-25 07:32:38 -0800
committerCommit bot <commit-bot@chromium.org>2015-02-25 15:33:25 +0000
commit34d00754b9a79bcec3099737c851a07c3cfaa7fd (patch)
tree11a8311c359896e2752d8be6a01db01ff24d1a68 /media
parent1075b2d37b3433f43f86ac09c74afd230e3e2abb (diff)
downloadchromium_src-34d00754b9a79bcec3099737c851a07c3cfaa7fd.zip
chromium_src-34d00754b9a79bcec3099737c851a07c3cfaa7fd.tar.gz
chromium_src-34d00754b9a79bcec3099737c851a07c3cfaa7fd.tar.bz2
MidiManagerUsb should be able to accept multiple devices.
This CL fixes MidiManagerUsb's bug which prevented the manager from listening input events coming from multiple MIDI devices. BUG=None R=toyoshim@chromium.org Review URL: https://codereview.chromium.org/943333006 Cr-Commit-Position: refs/heads/master@{#318048}
Diffstat (limited to 'media')
-rw-r--r--media/midi/midi_manager_usb.cc4
-rw-r--r--media/midi/midi_manager_usb_unittest.cc45
2 files changed, 47 insertions, 2 deletions
diff --git a/media/midi/midi_manager_usb.cc b/media/midi/midi_manager_usb.cc
index 67953e4..5e08d1d 100644
--- a/media/midi/midi_manager_usb.cc
+++ b/media/midi/midi_manager_usb.cc
@@ -83,6 +83,7 @@ void MidiManagerUsb::OnEnumerateDevicesDone(bool result,
return;
}
devices->swap(devices_);
+ std::vector<UsbMidiJack> input_jacks;
for (size_t i = 0; i < devices_.size(); ++i) {
UsbMidiDescriptorParser parser;
std::vector<uint8> descriptor = devices_[i]->GetDescriptor();
@@ -96,7 +97,6 @@ void MidiManagerUsb::OnEnumerateDevicesDone(bool result,
initialize_callback_.Run(MIDI_INITIALIZATION_ERROR);
return;
}
- std::vector<UsbMidiJack> input_jacks;
for (size_t j = 0; j < jacks.size(); ++j) {
if (jacks[j].direction() == UsbMidiJack::DIRECTION_OUT) {
output_streams_.push_back(new UsbMidiOutputStream(jacks[j]));
@@ -123,8 +123,8 @@ void MidiManagerUsb::OnEnumerateDevicesDone(bool result,
AddInputPort(port);
}
}
- input_stream_.reset(new UsbMidiInputStream(input_jacks, this));
}
+ input_stream_.reset(new UsbMidiInputStream(input_jacks, this));
initialize_callback_.Run(MIDI_OK);
}
diff --git a/media/midi/midi_manager_usb_unittest.cc b/media/midi/midi_manager_usb_unittest.cc
index d59f857..202bead 100644
--- a/media/midi/midi_manager_usb_unittest.cc
+++ b/media/midi/midi_manager_usb_unittest.cc
@@ -254,6 +254,51 @@ TEST_F(MidiManagerUsbTest, Initialize) {
EXPECT_EQ("UsbMidiDevice::GetDescriptor\n", logger_.TakeLog());
}
+TEST_F(MidiManagerUsbTest, InitializeMultipleDevices) {
+ scoped_ptr<FakeUsbMidiDevice> device1(new FakeUsbMidiDevice(&logger_));
+ scoped_ptr<FakeUsbMidiDevice> device2(new FakeUsbMidiDevice(&logger_));
+ uint8 descriptor[] = {
+ 0x12, 0x01, 0x10, 0x01, 0x00, 0x00, 0x00, 0x08, 0x86, 0x1a, 0x2d, 0x75,
+ 0x54, 0x02, 0x00, 0x02, 0x00, 0x01, 0x09, 0x02, 0x75, 0x00, 0x02, 0x01,
+ 0x00, 0x80, 0x30, 0x09, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
+ 0x09, 0x24, 0x01, 0x00, 0x01, 0x09, 0x00, 0x01, 0x01, 0x09, 0x04, 0x01,
+ 0x00, 0x02, 0x01, 0x03, 0x00, 0x00, 0x07, 0x24, 0x01, 0x00, 0x01, 0x51,
+ 0x00, 0x06, 0x24, 0x02, 0x01, 0x02, 0x00, 0x06, 0x24, 0x02, 0x01, 0x03,
+ 0x00, 0x06, 0x24, 0x02, 0x02, 0x06, 0x00, 0x09, 0x24, 0x03, 0x01, 0x07,
+ 0x01, 0x06, 0x01, 0x00, 0x09, 0x24, 0x03, 0x02, 0x04, 0x01, 0x02, 0x01,
+ 0x00, 0x09, 0x24, 0x03, 0x02, 0x05, 0x01, 0x03, 0x01, 0x00, 0x09, 0x05,
+ 0x02, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x06, 0x25, 0x01, 0x02, 0x02,
+ 0x03, 0x09, 0x05, 0x82, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25,
+ 0x01, 0x01, 0x07,
+ };
+ device1->SetDescriptor(ToVector(descriptor));
+ device2->SetDescriptor(ToVector(descriptor));
+
+ Initialize();
+ ScopedVector<UsbMidiDevice> devices;
+ devices.push_back(device1.release());
+ devices.push_back(device2.release());
+ EXPECT_FALSE(IsInitializationCallbackInvoked());
+ RunCallbackUntilCallbackInvoked(true, &devices);
+ EXPECT_EQ(MIDI_OK, GetInitializationResult());
+
+ ASSERT_EQ(2u, input_ports().size());
+ ASSERT_EQ(4u, output_ports().size());
+ ASSERT_TRUE(manager_->input_stream());
+ std::vector<UsbMidiInputStream::JackUniqueKey> keys =
+ manager_->input_stream()->RegisteredJackKeysForTesting();
+ ASSERT_EQ(4u, manager_->output_streams().size());
+ EXPECT_EQ(2u, manager_->output_streams()[0]->jack().jack_id);
+ EXPECT_EQ(3u, manager_->output_streams()[1]->jack().jack_id);
+ ASSERT_EQ(2u, keys.size());
+ EXPECT_EQ(2, keys[0].endpoint_number);
+
+ EXPECT_EQ(
+ "UsbMidiDevice::GetDescriptor\n"
+ "UsbMidiDevice::GetDescriptor\n",
+ logger_.TakeLog());
+}
+
TEST_F(MidiManagerUsbTest, InitializeFail) {
Initialize();