mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-16 14:55:47 +00:00
ce22c0902d
The goal is to make sure that several pages have a coherent view of potentially shared port. If both page A and page B open an input port they should both receive messages. If page B closes it, then port A will keep receiving messages and still see the port open, but B won't and will see it closed. This is achieved by sending status changes based on the parent objects of every DOM midi port instead of broadcasting them to every port. Additionally the midir implementation now counts the number of times a port has been opened so that it won't open the same twice or close one too soon. Differential Revision: https://phabricator.services.mozilla.com/D136224
50 lines
1.4 KiB
C++
50 lines
1.4 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim:set ts=2 sw=2 sts=2 et cindent: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "mozilla/dom/MIDIPlatformRunnables.h"
|
|
#include "mozilla/dom/MIDIPlatformService.h"
|
|
#include "mozilla/dom/MIDIPortParent.h"
|
|
#include "mozilla/ipc/BackgroundParent.h"
|
|
|
|
namespace mozilla::dom {
|
|
|
|
NS_IMETHODIMP
|
|
MIDIBackgroundRunnable::Run() {
|
|
::mozilla::ipc::AssertIsOnBackgroundThread();
|
|
if (!MIDIPlatformService::IsRunning()) {
|
|
return NS_OK;
|
|
}
|
|
RunInternal();
|
|
return NS_OK;
|
|
}
|
|
|
|
void ReceiveRunnable::RunInternal() {
|
|
MIDIPlatformService::Get()->CheckAndReceive(mPortId, mMsgs);
|
|
}
|
|
|
|
void AddPortRunnable::RunInternal() {
|
|
MIDIPlatformService::Get()->AddPortInfo(mPortInfo);
|
|
}
|
|
|
|
void RemovePortRunnable::RunInternal() {
|
|
MIDIPlatformService::Get()->RemovePortInfo(mPortInfo);
|
|
}
|
|
|
|
void SetStatusRunnable::RunInternal() {
|
|
MIDIPlatformService::Get()->UpdateStatus(mPort, mState, mConnection);
|
|
}
|
|
|
|
void SendPortListRunnable::RunInternal() {
|
|
// Unlike other runnables, SendPortListRunnable should just exit quietly if
|
|
// the service has died.
|
|
if (!MIDIPlatformService::IsRunning()) {
|
|
return;
|
|
}
|
|
MIDIPlatformService::Get()->SendPortList();
|
|
}
|
|
|
|
} // namespace mozilla::dom
|