From c245754f1344546f6598c752e0b959f59f281dc2 Mon Sep 17 00:00:00 2001 From: Tom Schuster Date: Mon, 27 Apr 2026 08:51:02 +0000 Subject: [PATCH] Bug 2033697 - Cleanup MIDI IPC. r=gsvelto Differential Revision: https://phabricator.services.mozilla.com/D295469 --- dom/midi/MIDIAccess.cpp | 2 +- dom/midi/MIDIIPCUtils.h | 29 +++++++++++++++++++++++++++ dom/midi/MIDIInput.cpp | 3 +-- dom/midi/MIDIOutput.cpp | 3 +-- dom/midi/MIDIPortChild.cpp | 7 ++++--- dom/midi/MIDIPortChild.h | 5 +++-- dom/midi/MIDIPortInterface.cpp | 2 +- dom/midi/MIDIPortParent.cpp | 4 +--- dom/midi/MIDITypes.ipdlh | 8 ++++++-- dom/midi/PMIDIPort.ipdl | 4 +--- dom/midi/TestMIDIPlatformService.cpp | 10 ++++----- dom/midi/midirMIDIPlatformService.cpp | 4 ++-- dom/midi/moz.build | 1 + 13 files changed, 56 insertions(+), 26 deletions(-) create mode 100644 dom/midi/MIDIIPCUtils.h diff --git a/dom/midi/MIDIAccess.cpp b/dom/midi/MIDIAccess.cpp index df30ba3d7cbb..3a8854586a5a 100644 --- a/dom/midi/MIDIAccess.cpp +++ b/dom/midi/MIDIAccess.cpp @@ -142,7 +142,7 @@ void MIDIAccess::FireConnectionEvent(MIDIPort* aPort) { void MIDIAccess::MaybeCreateMIDIPort(const MIDIPortInfo& aInfo, ErrorResult& aRv) { nsAutoString id(aInfo.id()); - MIDIPortType type = static_cast(aInfo.type()); + MIDIPortType type = aInfo.type(); RefPtr port; if (type == MIDIPortType::Input) { if (mInputMap->Has(id) || NS_WARN_IF(aRv.Failed())) { diff --git a/dom/midi/MIDIIPCUtils.h b/dom/midi/MIDIIPCUtils.h new file mode 100644 index 000000000000..4a1b37bbd402 --- /dev/null +++ b/dom/midi/MIDIIPCUtils.h @@ -0,0 +1,29 @@ +/* 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/. */ + +#ifndef mozilla_dom_MIDIIPCUtils_h +#define mozilla_dom_MIDIIPCUtils_h + +#include "mozilla/dom/BindingIPCUtils.h" +#include "mozilla/dom/MIDIPortBinding.h" + +namespace IPC { + +template <> +struct ParamTraits + : public mozilla::dom::WebIDLEnumSerializer {}; + +template <> +struct ParamTraits + : public mozilla::dom::WebIDLEnumSerializer< + mozilla::dom::MIDIPortDeviceState> {}; + +template <> +struct ParamTraits + : public mozilla::dom::WebIDLEnumSerializer< + mozilla::dom::MIDIPortConnectionState> {}; + +} // namespace IPC + +#endif // mozilla_dom_MIDIIPCUtils_h diff --git a/dom/midi/MIDIInput.cpp b/dom/midi/MIDIInput.cpp index 03f9a4fe5d83..deed449bceb3 100644 --- a/dom/midi/MIDIInput.cpp +++ b/dom/midi/MIDIInput.cpp @@ -22,8 +22,7 @@ RefPtr MIDIInput::Create(nsPIDOMWindowInner* aWindow, MIDIAccess* aMIDIAccessParent, const MIDIPortInfo& aPortInfo, const bool aSysexEnabled) { - MOZ_ASSERT(static_cast(aPortInfo.type()) == - MIDIPortType::Input); + MOZ_ASSERT(aPortInfo.type() == MIDIPortType::Input); RefPtr port = new MIDIInput(aWindow); if (!port->Initialize(aPortInfo, aSysexEnabled, aMIDIAccessParent)) { return nullptr; diff --git a/dom/midi/MIDIOutput.cpp b/dom/midi/MIDIOutput.cpp index b8afa8621cdd..981b563cddba 100644 --- a/dom/midi/MIDIOutput.cpp +++ b/dom/midi/MIDIOutput.cpp @@ -24,8 +24,7 @@ RefPtr MIDIOutput::Create(nsPIDOMWindowInner* aWindow, MIDIAccess* aMIDIAccessParent, const MIDIPortInfo& aPortInfo, const bool aSysexEnabled) { - MOZ_ASSERT(static_cast(aPortInfo.type()) == - MIDIPortType::Output); + MOZ_ASSERT(aPortInfo.type() == MIDIPortType::Output); RefPtr port = new MIDIOutput(aWindow); if (NS_WARN_IF( !port->Initialize(aPortInfo, aSysexEnabled, aMIDIAccessParent))) { diff --git a/dom/midi/MIDIPortChild.cpp b/dom/midi/MIDIPortChild.cpp index 5efe2cb9c721..f5e2b3f5817e 100644 --- a/dom/midi/MIDIPortChild.cpp +++ b/dom/midi/MIDIPortChild.cpp @@ -32,14 +32,15 @@ mozilla::ipc::IPCResult MIDIPortChild::RecvReceive( } mozilla::ipc::IPCResult MIDIPortChild::RecvUpdateStatus( - const uint32_t& aDeviceState, const uint32_t& aConnectionState) { + const MIDIPortDeviceState& aDeviceState, + const MIDIPortConnectionState& aConnectionState) { // Either a device is connected, and can have any connection state, or a // device is disconnected, and can only be closed or pending. MOZ_ASSERT(mDeviceState == MIDIPortDeviceState::Connected || (mConnectionState == MIDIPortConnectionState::Closed || mConnectionState == MIDIPortConnectionState::Pending)); - mDeviceState = static_cast(aDeviceState); - mConnectionState = static_cast(aConnectionState); + mDeviceState = aDeviceState; + mConnectionState = aConnectionState; if (mDOMPort) { RefPtr self(mDOMPort); self->FireStateChangeEvent(); diff --git a/dom/midi/MIDIPortChild.h b/dom/midi/MIDIPortChild.h index 2f2ae12be3c8..a44881a41cef 100644 --- a/dom/midi/MIDIPortChild.h +++ b/dom/midi/MIDIPortChild.h @@ -26,8 +26,9 @@ class MIDIPortChild final : public PMIDIPortChild, public MIDIPortInterface { virtual void ActorDestroy(ActorDestroyReason aWhy) override; - mozilla::ipc::IPCResult RecvUpdateStatus(const uint32_t& aDeviceState, - const uint32_t& aConnectionState); + mozilla::ipc::IPCResult RecvUpdateStatus( + const MIDIPortDeviceState& aDeviceState, + const MIDIPortConnectionState& aConnectionState); MIDIPortChild(const MIDIPortInfo& aPortInfo, bool aSysexEnabled, MIDIPort* aPort); diff --git a/dom/midi/MIDIPortInterface.cpp b/dom/midi/MIDIPortInterface.cpp index 2cd198a93909..57d19a3c526d 100644 --- a/dom/midi/MIDIPortInterface.cpp +++ b/dom/midi/MIDIPortInterface.cpp @@ -14,7 +14,7 @@ mozilla::dom::MIDIPortInterface::MIDIPortInterface( mManufacturer(aPortInfo.manufacturer()), mVersion(aPortInfo.version()), mSysexEnabled(aSysexEnabled), - mType((MIDIPortType)aPortInfo.type()), + mType(aPortInfo.type()), // We'll never initialize a port object that's not connected mDeviceState(MIDIPortDeviceState::Connected), mConnectionState(MIDIPortConnectionState::Closed), diff --git a/dom/midi/MIDIPortParent.cpp b/dom/midi/MIDIPortParent.cpp index 36a57c732f06..5a392090fae3 100644 --- a/dom/midi/MIDIPortParent.cpp +++ b/dom/midi/MIDIPortParent.cpp @@ -89,9 +89,7 @@ bool MIDIPortParent::SendUpdateStatus( } mMessageQueue.Clear(); } - return PMIDIPortParent::SendUpdateStatus( - static_cast(mDeviceState), - static_cast(mConnectionState)); + return PMIDIPortParent::SendUpdateStatus(mDeviceState, mConnectionState); } MIDIPortParent::MIDIPortParent(const MIDIPortInfo& aPortInfo, diff --git a/dom/midi/MIDITypes.ipdlh b/dom/midi/MIDITypes.ipdlh index dcc193365617..02917b61daf3 100644 --- a/dom/midi/MIDITypes.ipdlh +++ b/dom/midi/MIDITypes.ipdlh @@ -2,7 +2,12 @@ * 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/MIDIIPCUtils.h"; + using mozilla::TimeStamp from "mozilla/TimeStamp.h"; +using mozilla::dom::MIDIPortType from "mozilla/dom/MIDIPortBinding.h"; +using mozilla::dom::MIDIPortDeviceState from "mozilla/dom/MIDIPortBinding.h"; +using mozilla::dom::MIDIPortConnectionState from "mozilla/dom/MIDIPortBinding.h"; namespace mozilla { namespace dom { @@ -12,8 +17,7 @@ namespace dom { nsString name; nsString manufacturer; nsString version; - //Actually a MIDIPortType enum - uint32_t type; + MIDIPortType type; }; struct MIDIMessage { diff --git a/dom/midi/PMIDIPort.ipdl b/dom/midi/PMIDIPort.ipdl index 050da56004f3..c43628a6bfbf 100644 --- a/dom/midi/PMIDIPort.ipdl +++ b/dom/midi/PMIDIPort.ipdl @@ -18,9 +18,7 @@ parent: async Clear(); child: async Receive(MIDIMessage[] msg); - // Actually takes a MIDIDeviceConnectionState and MIDIPortConnectionState - // respectively. - async UpdateStatus(uint32_t deviceState, uint32_t connectionState); + async UpdateStatus(MIDIPortDeviceState deviceState, MIDIPortConnectionState connectionState); }; } diff --git a/dom/midi/TestMIDIPlatformService.cpp b/dom/midi/TestMIDIPlatformService.cpp index 70e0448ef9a9..f69a37653f88 100644 --- a/dom/midi/TestMIDIPlatformService.cpp +++ b/dom/midi/TestMIDIPlatformService.cpp @@ -68,23 +68,23 @@ TestMIDIPlatformService::TestMIDIPlatformService() : mControlInputPort(u"b744eebe-f7d8-499b-872b-958f63c8f522"_ns, u"Test Control MIDI Device Input Port"_ns, u"Test Manufacturer"_ns, u"1.0.0"_ns, - static_cast(MIDIPortType::Input)), + MIDIPortType::Input), mControlOutputPort(u"ab8e7fe8-c4de-436a-a960-30898a7c9a3d"_ns, u"Test Control MIDI Device Output Port"_ns, u"Test Manufacturer"_ns, u"1.0.0"_ns, - static_cast(MIDIPortType::Output)), + MIDIPortType::Output), mStateTestInputPort(u"a9329677-8588-4460-a091-9d4a7f629a48"_ns, u"Test State MIDI Device Input Port"_ns, u"Test Manufacturer"_ns, u"1.0.0"_ns, - static_cast(MIDIPortType::Input)), + MIDIPortType::Input), mStateTestOutputPort(u"478fa225-b5fc-4fa6-a543-d32d9cb651e7"_ns, u"Test State MIDI Device Output Port"_ns, u"Test Manufacturer"_ns, u"1.0.0"_ns, - static_cast(MIDIPortType::Output)), + MIDIPortType::Output), mAlwaysClosedTestOutputPort(u"f87d0c76-3c68-49a9-a44f-700f1125c07a"_ns, u"Always Closed MIDI Device Output Port"_ns, u"Test Manufacturer"_ns, u"1.0.0"_ns, - static_cast(MIDIPortType::Output)), + MIDIPortType::Output), mDoRefresh(false), mIsInitialized(false) { MIDIPlatformService::AssertThread(); diff --git a/dom/midi/midirMIDIPlatformService.cpp b/dom/midi/midirMIDIPlatformService.cpp index 32793728af91..3f5106bfe8c6 100644 --- a/dom/midi/midirMIDIPlatformService.cpp +++ b/dom/midi/midirMIDIPlatformService.cpp @@ -75,7 +75,7 @@ midirMIDIPlatformService::~midirMIDIPlatformService() { void midirMIDIPlatformService::AddPort(const nsString* aId, const nsString* aName, bool aInput) { MIDIPortType type = aInput ? MIDIPortType::Input : MIDIPortType::Output; - MIDIPortInfo port(*aId, *aName, u""_ns, u""_ns, static_cast(type)); + MIDIPortInfo port(*aId, *aName, u""_ns, u""_ns, type); MIDIPlatformService::Get()->AddPortInfo(port); } @@ -83,7 +83,7 @@ void midirMIDIPlatformService::AddPort(const nsString* aId, void midirMIDIPlatformService::RemovePort(const nsString* aId, const nsString* aName, bool aInput) { MIDIPortType type = aInput ? MIDIPortType::Input : MIDIPortType::Output; - MIDIPortInfo port(*aId, *aName, u""_ns, u""_ns, static_cast(type)); + MIDIPortInfo port(*aId, *aName, u""_ns, u""_ns, type); MIDIPlatformService::Get()->RemovePortInfo(port); } diff --git a/dom/midi/moz.build b/dom/midi/moz.build index c437cd2b0483..b11037460627 100644 --- a/dom/midi/moz.build +++ b/dom/midi/moz.build @@ -16,6 +16,7 @@ EXPORTS.mozilla.dom += [ "MIDIAccessManager.h", "MIDIInput.h", "MIDIInputMap.h", + "MIDIIPCUtils.h", "MIDIManagerChild.h", "MIDIManagerParent.h", "MIDIMessageEvent.h",