Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(167)

Side by Side Diff: media/midi/midi_manager_usb.cc

Issue 1217853007: Web MIDI: add a new UMA entry for the final result code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review #16 Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "media/midi/midi_manager_usb.h" 5 #include "media/midi/midi_manager_usb.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "media/midi/midi_scheduler.h" 10 #include "media/midi/midi_scheduler.h"
11 #include "media/midi/usb_midi_descriptor_parser.h" 11 #include "media/midi/usb_midi_descriptor_parser.h"
12 12
13 namespace media { 13 namespace media {
14 namespace midi { 14 namespace midi {
15 15
16 MidiManagerUsb::MidiManagerUsb(scoped_ptr<UsbMidiDevice::Factory> factory) 16 MidiManagerUsb::MidiManagerUsb(scoped_ptr<UsbMidiDevice::Factory> factory)
17 : device_factory_(factory.Pass()) { 17 : device_factory_(factory.Pass()) {
18 } 18 }
19 19
20 MidiManagerUsb::~MidiManagerUsb() { 20 MidiManagerUsb::~MidiManagerUsb() {
21 } 21 }
22 22
23 void MidiManagerUsb::StartInitialization() { 23 void MidiManagerUsb::StartInitialization() {
24 Initialize( 24 Initialize(
25 base::Bind(&MidiManager::CompleteInitialization, base::Unretained(this))); 25 base::Bind(&MidiManager::CompleteInitialization, base::Unretained(this)));
26 } 26 }
27 27
28 void MidiManagerUsb::Initialize( 28 void MidiManagerUsb::Initialize(base::Callback<void(Result result)> callback) {
29 base::Callback<void(MidiResult result)> callback) {
30 initialize_callback_ = callback; 29 initialize_callback_ = callback;
31 scheduler_.reset(new MidiScheduler(this)); 30 scheduler_.reset(new MidiScheduler(this));
32 // This is safe because EnumerateDevices cancels the operation on destruction. 31 // This is safe because EnumerateDevices cancels the operation on destruction.
33 device_factory_->EnumerateDevices( 32 device_factory_->EnumerateDevices(
34 this, 33 this,
35 base::Bind(&MidiManagerUsb::OnEnumerateDevicesDone, 34 base::Bind(&MidiManagerUsb::OnEnumerateDevicesDone,
36 base::Unretained(this))); 35 base::Unretained(this)));
37 } 36 }
38 37
39 void MidiManagerUsb::DispatchSendMidiData(MidiManagerClient* client, 38 void MidiManagerUsb::DispatchSendMidiData(MidiManagerClient* client,
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 const uint8* data, 95 const uint8* data,
97 size_t size, 96 size_t size,
98 base::TimeTicks time) { 97 base::TimeTicks time) {
99 ReceiveMidiData(static_cast<uint32>(jack_index), data, size, time); 98 ReceiveMidiData(static_cast<uint32>(jack_index), data, size, time);
100 } 99 }
101 100
102 101
103 void MidiManagerUsb::OnEnumerateDevicesDone(bool result, 102 void MidiManagerUsb::OnEnumerateDevicesDone(bool result,
104 UsbMidiDevice::Devices* devices) { 103 UsbMidiDevice::Devices* devices) {
105 if (!result) { 104 if (!result) {
106 initialize_callback_.Run(MIDI_INITIALIZATION_ERROR); 105 initialize_callback_.Run(Result::INITIALIZATION_ERROR);
107 return; 106 return;
108 } 107 }
109 input_stream_.reset(new UsbMidiInputStream(this)); 108 input_stream_.reset(new UsbMidiInputStream(this));
110 devices->swap(devices_); 109 devices->swap(devices_);
111 for (size_t i = 0; i < devices_.size(); ++i) { 110 for (size_t i = 0; i < devices_.size(); ++i) {
112 if (!AddPorts(devices_[i], static_cast<int>(i))) { 111 if (!AddPorts(devices_[i], static_cast<int>(i))) {
113 initialize_callback_.Run(MIDI_INITIALIZATION_ERROR); 112 initialize_callback_.Run(Result::INITIALIZATION_ERROR);
114 return; 113 return;
115 } 114 }
116 } 115 }
117 initialize_callback_.Run(MIDI_OK); 116 initialize_callback_.Run(Result::OK);
118 } 117 }
119 118
120 bool MidiManagerUsb::AddPorts(UsbMidiDevice* device, int device_id) { 119 bool MidiManagerUsb::AddPorts(UsbMidiDevice* device, int device_id) {
121 UsbMidiDescriptorParser parser; 120 UsbMidiDescriptorParser parser;
122 std::vector<uint8> descriptor = device->GetDescriptors(); 121 std::vector<uint8> descriptor = device->GetDescriptors();
123 const uint8* data = descriptor.size() > 0 ? &descriptor[0] : NULL; 122 const uint8* data = descriptor.size() > 0 ? &descriptor[0] : NULL;
124 std::vector<UsbMidiJack> jacks; 123 std::vector<UsbMidiJack> jacks;
125 bool parse_result = parser.Parse(device, 124 bool parse_result = parser.Parse(device,
126 data, 125 data,
127 descriptor.size(), 126 descriptor.size(),
(...skipping 20 matching lines...) Expand all
148 input_stream_->Add(jacks[j]); 147 input_stream_->Add(jacks[j]);
149 AddInputPort(MidiPortInfo(id, manufacturer, product_name, version, 148 AddInputPort(MidiPortInfo(id, manufacturer, product_name, version,
150 MIDI_PORT_OPENED)); 149 MIDI_PORT_OPENED));
151 } 150 }
152 } 151 }
153 return true; 152 return true;
154 } 153 }
155 154
156 } // namespace midi 155 } // namespace midi
157 } // namespace media 156 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698