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

Unified Diff: content/renderer/media/midi_message_filter.cc

Issue 664843002: Web MIDI: distributes MIDIPort information asynchronously (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lifecycle
Patch Set: . => -> Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/media/midi_message_filter.h ('k') | media/midi/midi_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/media/midi_message_filter.cc
diff --git a/content/renderer/media/midi_message_filter.cc b/content/renderer/media/midi_message_filter.cc
index 8f08ff4dd356f655bf96d8c093c6771c61bb43f8..982281f72d60ef5af1058fb7dccd7fa7377a4e1e 100644
--- a/content/renderer/media/midi_message_filter.cc
+++ b/content/renderer/media/midi_message_filter.cc
@@ -27,7 +27,7 @@ namespace content {
// TODO(crbug.com/425389): Rewrite this class as a RenderFrameObserver.
MidiMessageFilter::MidiMessageFilter(
const scoped_refptr<base::MessageLoopProxy>& io_message_loop)
- : sender_(NULL),
+ : sender_(nullptr),
io_message_loop_(io_message_loop),
main_message_loop_(base::MessageLoopProxy::current()),
session_result_(media::MIDI_NOT_INITIALIZED),
@@ -58,6 +58,8 @@ void MidiMessageFilter::RemoveClient(blink::WebMIDIAccessorClient* client) {
clients_waiting_session_queue_.erase(it);
if (clients_.empty() && clients_waiting_session_queue_.empty()) {
session_result_ = media::MIDI_NOT_INITIALIZED;
+ inputs_.clear();
+ outputs_.clear();
io_message_loop_->PostTask(FROM_HERE,
base::Bind(&MidiMessageFilter::EndSessionOnIOThread, this));
}
@@ -112,6 +114,8 @@ bool MidiMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(MidiMessageFilter, message)
IPC_MESSAGE_HANDLER(MidiMsg_SessionStarted, OnSessionStarted)
+ IPC_MESSAGE_HANDLER(MidiMsg_AddInputPort, OnAddInputPort)
+ IPC_MESSAGE_HANDLER(MidiMsg_AddOutputPort, OnAddOutputPort)
IPC_MESSAGE_HANDLER(MidiMsg_DataReceived, OnDataReceived)
IPC_MESSAGE_HANDLER(MidiMsg_AcknowledgeSentData, OnAcknowledgeSentData)
IPC_MESSAGE_UNHANDLED(handled = false)
@@ -133,26 +137,32 @@ void MidiMessageFilter::OnFilterRemoved() {
void MidiMessageFilter::OnChannelClosing() {
DCHECK(io_message_loop_->BelongsToCurrentThread());
- sender_ = NULL;
+ sender_ = nullptr;
}
-void MidiMessageFilter::OnSessionStarted(media::MidiResult result,
- MidiPortInfoList inputs,
- MidiPortInfoList outputs) {
+void MidiMessageFilter::OnSessionStarted(media::MidiResult result) {
TRACE_EVENT0("midi", "MidiMessageFilter::OnSessionStarted");
DCHECK(io_message_loop_->BelongsToCurrentThread());
- // TODO(toyoshim): |inputs_| and |outputs_| should not be updated on
- // |io_message_loop_|. This should be fixed in a following change not to
- // distribute MidiPortInfo via OnSessionStarted().
- // For now, this is safe because these are not updated later.
- inputs_ = inputs;
- outputs_ = outputs;
// Handle on the main JS thread.
main_message_loop_->PostTask(
FROM_HERE,
base::Bind(&MidiMessageFilter::HandleClientAdded, this, result));
}
+void MidiMessageFilter::OnAddInputPort(media::MidiPortInfo info) {
+ DCHECK(io_message_loop_->BelongsToCurrentThread());
+ main_message_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&MidiMessageFilter::HandleAddInputPort, this, info));
+}
+
+void MidiMessageFilter::OnAddOutputPort(media::MidiPortInfo info) {
+ DCHECK(io_message_loop_->BelongsToCurrentThread());
+ main_message_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&MidiMessageFilter::HandleAddOutputPort, this, info));
+}
+
void MidiMessageFilter::OnDataReceived(uint32 port,
const std::vector<uint8>& data,
double timestamp) {
@@ -225,6 +235,18 @@ void MidiMessageFilter::HandleClientAdded(media::MidiResult result) {
clients_waiting_session_queue_.clear();
}
+void MidiMessageFilter::HandleAddInputPort(media::MidiPortInfo info) {
+ DCHECK(main_message_loop_->BelongsToCurrentThread());
+ inputs_.push_back(info);
+ // TODO(toyoshim): Notify to clients that were already added.
+}
+
+void MidiMessageFilter::HandleAddOutputPort(media::MidiPortInfo info) {
+ DCHECK(main_message_loop_->BelongsToCurrentThread());
+ outputs_.push_back(info);
+ // TODO(toyoshim): Notify to clients that were already added.
+}
+
void MidiMessageFilter::HandleDataReceived(uint32 port,
const std::vector<uint8>& data,
double timestamp) {
« no previous file with comments | « content/renderer/media/midi_message_filter.h ('k') | media/midi/midi_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698