From 5973df1a8c82c0576958bb43edefe5909f2f8cc5 Mon Sep 17 00:00:00 2001
From: Karl Tomlinson <karlt+@karlt.net>
Date: Thu, 30 Mar 2023 23:18:45 +0000
Subject: [PATCH] Bug 1801190 clarify that MockCubebStream needs the same
 memory layout as cubeb_stream r=padenot

to save problems if/when further members are added.

cubeb_stream_user_ptr() is not used/tested right now, but this change will
make that behave as expected.

Differential Revision: https://phabricator.services.mozilla.com/D173925
---
 dom/media/gtest/MockCubeb.cpp |  2 +-
 dom/media/gtest/MockCubeb.h   | 11 ++++++-----
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/dom/media/gtest/MockCubeb.cpp b/dom/media/gtest/MockCubeb.cpp
index 80975a5300189..10422c77571a8 100644
--- a/dom/media/gtest/MockCubeb.cpp
+++ b/dom/media/gtest/MockCubeb.cpp
@@ -146,6 +146,7 @@ MockCubebStream::MockCubebStream(cubeb* aContext, cubeb_devid aInputDevice,
                                  void* aUserPtr, SmartMockCubebStream* aSelf,
                                  bool aFrozenStart)
     : context(aContext),
+      mUserPtr(aUserPtr),
       mHasInput(aInputStreamParams),
       mHasOutput(aOutputStreamParams),
       mSelf(aSelf),
@@ -153,7 +154,6 @@ MockCubebStream::MockCubebStream(cubeb* aContext, cubeb_devid aInputDevice,
       mFrozenStart(aFrozenStart),
       mDataCallback(aDataCallback),
       mStateCallback(aStateCallback),
-      mUserPtr(aUserPtr),
       mInputDeviceID(aInputDevice),
       mOutputDeviceID(aOutputDevice),
       mAudioGenerator(aInputStreamParams ? aInputStreamParams->channels
diff --git a/dom/media/gtest/MockCubeb.h b/dom/media/gtest/MockCubeb.h
index 040b1dfb62243..4adaa4e02b335 100644
--- a/dom/media/gtest/MockCubeb.h
+++ b/dom/media/gtest/MockCubeb.h
@@ -137,6 +137,12 @@ class SmartMockCubebStream;
 // Represents the fake cubeb_stream. The context instance is needed to
 // provide access on cubeb_ops struct.
 class MockCubebStream {
+  // These members need to have the exact same memory layout as a real
+  // cubeb_stream, so that AsMock() returns a pointer to this that can be used
+  // as a cubeb_stream.
+  cubeb* context;
+  void* mUserPtr;
+
  public:
   MockCubebStream(cubeb* aContext, cubeb_devid aInputDevice,
                   cubeb_stream_params* aInputStreamParams,
@@ -194,9 +200,6 @@ class MockCubebStream {
 
   void Process10Ms();
 
- private:
-  cubeb* context = nullptr;
-
  public:
   const bool mHasInput;
   const bool mHasOutput;
@@ -229,8 +232,6 @@ class MockCubebStream {
   cubeb_state_callback mStateCallback = nullptr;
   // The device changed callback
   cubeb_device_changed_callback mDeviceChangedCallback = nullptr;
-  // Stream's user data
-  void* mUserPtr = nullptr;
   // The stream params
   cubeb_stream_params mOutputParams = {};
   cubeb_stream_params mInputParams = {};
-- 
GitLab