Bug 1698238 add a GetUserMediaRequest variant for selectAudioOutput() r=jib,emilio

Differential Revision: https://phabricator.services.mozilla.com/D108374
This commit is contained in:
Karl Tomlinson 2021-03-30 07:52:13 +00:00
Родитель 4d3822d024
Коммит e68c0357fc
3 изменённых файлов: 53 добавлений и 7 удалений

Просмотреть файл

@ -5,6 +5,7 @@
#include "GetUserMediaRequest.h"
#include "base/basictypes.h"
#include "mozilla/dom/MediaDevicesBinding.h"
#include "mozilla/dom/MediaStreamBinding.h"
#include "mozilla/dom/GetUserMediaRequestBinding.h"
#include "nsIScriptGlobalObject.h"
@ -20,6 +21,19 @@ GetUserMediaRequest::GetUserMediaRequest(
mOuterWindowID(aInnerWindow->GetOuterWindow()->WindowID()),
mCallID(aCallID),
mConstraints(new MediaStreamConstraints(aConstraints)),
mType(GetUserMediaRequestType::Getusermedia),
mIsSecure(aIsSecure),
mIsHandlingUserInput(aIsHandlingUserInput) {}
GetUserMediaRequest::GetUserMediaRequest(
nsPIDOMWindowInner* aInnerWindow, const nsAString& aCallID,
const AudioOutputOptions& aAudioOutputOptions, bool aIsSecure,
bool aIsHandlingUserInput)
: mInnerWindowID(aInnerWindow->WindowID()),
mOuterWindowID(aInnerWindow->GetOuterWindow()->WindowID()),
mCallID(aCallID),
mAudioOutputOptions(new AudioOutputOptions(aAudioOutputOptions)),
mType(GetUserMediaRequestType::Selectaudiooutput),
mIsSecure(aIsSecure),
mIsHandlingUserInput(aIsHandlingUserInput) {}
@ -31,6 +45,7 @@ GetUserMediaRequest::GetUserMediaRequest(nsPIDOMWindowInner* aInnerWindow,
mOuterWindowID(0),
mRawID(aRawId),
mMediaSource(aMediaSource),
mType(GetUserMediaRequestType::Recording_device_stopped),
mIsSecure(false),
mIsHandlingUserInput(aIsHandlingUserInput) {
if (aInnerWindow && aInnerWindow->GetOuterWindow()) {
@ -53,6 +68,8 @@ JSObject* GetUserMediaRequest::WrapObject(JSContext* aCx,
nsISupports* GetUserMediaRequest::GetParentObject() { return nullptr; }
GetUserMediaRequestType GetUserMediaRequest::Type() { return mType; }
void GetUserMediaRequest::GetCallID(nsString& retval) { retval = mCallID; }
void GetUserMediaRequest::GetRawID(nsString& retval) { retval = mRawID; }
@ -80,4 +97,12 @@ void GetUserMediaRequest::GetConstraints(MediaStreamConstraints& result) {
}
}
void GetUserMediaRequest::GetAudioOutputOptions(AudioOutputOptions& result) {
MOZ_ASSERT(result.mDeviceId.IsEmpty(),
"result should be default initialized");
if (mAudioOutputOptions) {
result = *mAudioOutputOptions;
}
}
} // namespace mozilla::dom

Просмотреть файл

@ -19,15 +19,22 @@ class nsPIDOMWindowInner;
namespace mozilla {
namespace dom {
struct AudioOutputOptions;
struct MediaStreamConstraints;
enum class GetUserMediaRequestType : uint8_t;
class GetUserMediaRequest : public nsISupports, public nsWrapperCache {
public:
// For "getUserMedia:request"
// For getUserMedia "getUserMedia:request"
GetUserMediaRequest(nsPIDOMWindowInner* aInnerWindow,
const nsAString& aCallID,
const MediaStreamConstraints& aConstraints,
bool aIsSecure, bool aIsHandlingUserInput);
// For selectAudioOutput "getUserMedia:request"
GetUserMediaRequest(nsPIDOMWindowInner* aInnerWindow,
const nsAString& aCallID,
const AudioOutputOptions& aAudioOutputOptions,
bool aIsSecure, bool aIsHandlingUserInput);
// For "recording-device-stopped"
GetUserMediaRequest(nsPIDOMWindowInner* aInnerWindow, const nsAString& aRawId,
const nsAString& aMediaSource, bool aIsHandlingUserInput);
@ -39,6 +46,7 @@ class GetUserMediaRequest : public nsISupports, public nsWrapperCache {
JS::Handle<JSObject*> aGivenProto) override;
nsISupports* GetParentObject();
GetUserMediaRequestType Type();
uint64_t WindowID();
uint64_t InnerWindowID();
bool IsSecure();
@ -47,6 +55,7 @@ class GetUserMediaRequest : public nsISupports, public nsWrapperCache {
void GetRawID(nsString& retval);
void GetMediaSource(nsString& retval);
void GetConstraints(MediaStreamConstraints& result);
void GetAudioOutputOptions(AudioOutputOptions& result);
private:
virtual ~GetUserMediaRequest() = default;
@ -56,6 +65,8 @@ class GetUserMediaRequest : public nsISupports, public nsWrapperCache {
const nsString mRawID;
const nsString mMediaSource;
UniquePtr<MediaStreamConstraints> mConstraints;
UniquePtr<AudioOutputOptions> mAudioOutputOptions;
GetUserMediaRequestType mType;
bool mIsSecure;
bool mIsHandlingUserInput;
};

Просмотреть файл

@ -6,22 +6,32 @@
* This is an internal IDL file
*/
// for gUM request start (getUserMedia:request) notification,
// rawID and mediaSource won't be set.
// for gUM request stop (recording-device-stopped) notification due to page reload,
// only windowID will be set.
// for gUM request stop (recording-device-stopped) notification due to track stop,
// only windowID, rawID and mediaSource will be set
// For gUM request start (getUserMedia:request) notification,
// rawID, mediaSource and audioOutputOptions won't be set.
// For selectAudioOutput request start (getUserMedia:request) notification,
// rawID, mediaSource and constraints won't be set.
// For gUM request stop (recording-device-stopped) notification due to page
// reload, only windowID will be set.
// For gUM request stop (recording-device-stopped) notification due to track
// stop, only type, windowID, rawID and mediaSource will be set
enum GetUserMediaRequestType {
"getusermedia",
"selectaudiooutput",
"recording-device-stopped"
};
[NoInterfaceObject,
Exposed=Window]
interface GetUserMediaRequest {
readonly attribute GetUserMediaRequestType type;
readonly attribute unsigned long long windowID;
readonly attribute unsigned long long innerWindowID;
readonly attribute DOMString callID;
readonly attribute DOMString rawID;
readonly attribute DOMString mediaSource;
MediaStreamConstraints getConstraints();
AudioOutputOptions getAudioOutputOptions();
readonly attribute boolean isSecure;
readonly attribute boolean isHandlingUserInput;
};