Commit 9f607697 authored by Karl Tomlinson's avatar Karl Tomlinson
Browse files

Bug 1709474 move mozGetUserMediaDevices from Navigator to GetUserMediaRequest...

Bug 1709474 move mozGetUserMediaDevices from Navigator to GetUserMediaRequest r=jib,webidl,geckoview-reviewers,smaug,agi

Differential Revision: https://phabricator.services.mozilla.com/D111565
parent 2ec947a6
Loading
Loading
Loading
Loading
+8 −25
Original line number Diff line number Diff line
@@ -270,32 +270,15 @@ function handleGUMRequest(aSubject, aTopic, aData) {
  let isHandlingUserInput = aSubject.isHandlingUserInput;
  let contentWindow = Services.wm.getOuterWindowWithId(aSubject.windowID);

  contentWindow.navigator.mozGetUserMediaDevices(
    function(devices) {
      // If the window has been closed while we were waiting for the list of
      // devices, there's nothing to do in the callback anymore.
      if (contentWindow.closed) {
        return;
      }

  prompt(
    contentWindow,
    aSubject.windowID,
    aSubject.callID,
    constraints,
        devices,
    aSubject.devices,
    secure,
    isHandlingUserInput
  );
    },
    function(error) {
      // Device enumeration is done ahead of handleGUMRequest, so we're not
      // responsible for handling the NotFoundError spec case.
      denyGUMRequest({ callID: aSubject.callID });
    },
    aSubject.innerWindowID,
    aSubject.callID
  );
}

function prompt(
+0 −16
Original line number Diff line number Diff line
@@ -1325,22 +1325,6 @@ void Navigator::MozGetUserMedia(const MediaStreamConstraints& aConstraints,
      });
}

void Navigator::MozGetUserMediaDevices(
    MozGetUserMediaDevicesSuccessCallback& aOnSuccess,
    NavigatorUserMediaErrorCallback& aOnError, uint64_t aInnerWindowID,
    const nsAString& aCallID, ErrorResult& aRv) {
  if (!mWindow || !mWindow->GetOuterWindow() ||
      mWindow->GetOuterWindow()->GetCurrentInnerWindow() != mWindow) {
    aRv.Throw(NS_ERROR_NOT_AVAILABLE);
    return;
  }
  RefPtr<MediaManager> manager = MediaManager::Get();
  // XXXbz aOnError seems to be unused?
  nsCOMPtr<nsPIDOMWindowInner> window(mWindow);
  aRv =
      manager->GetUserMediaDevices(window, aOnSuccess, aInnerWindowID, aCallID);
}

//*****************************************************************************
//    Navigator::nsINavigatorBattery
//*****************************************************************************
+0 −6
Original line number Diff line number Diff line
@@ -67,7 +67,6 @@ class Gamepad;
class GamepadServiceTest;
class NavigatorUserMediaSuccessCallback;
class NavigatorUserMediaErrorCallback;
class MozGetUserMediaDevicesSuccessCallback;

struct MIDIOptions;

@@ -201,11 +200,6 @@ class Navigator final : public nsISupports, public nsWrapperCache {
                       NavigatorUserMediaSuccessCallback& aOnSuccess,
                       NavigatorUserMediaErrorCallback& aOnError,
                       CallerType aCallerType, ErrorResult& aRv);
  MOZ_CAN_RUN_SCRIPT
  void MozGetUserMediaDevices(MozGetUserMediaDevicesSuccessCallback& aOnSuccess,
                              NavigatorUserMediaErrorCallback& aOnError,
                              uint64_t aInnerWindowID, const nsAString& aCallID,
                              ErrorResult& aRv);

  already_AddRefed<ServiceWorkerContainer> ServiceWorker();

+2 −0
Original line number Diff line number Diff line
@@ -1922,6 +1922,8 @@ addExternalIface('nsIEventTarget', nativeType='nsIEventTarget', notflattened=Tru
addExternalIface('nsIFile', nativeType='nsIFile', notflattened=True)
addExternalIface('nsILoadGroup', nativeType='nsILoadGroup',
                 headerFile='nsILoadGroup.h', notflattened=True)
addExternalIface('nsIMediaDevice', nativeType='nsIMediaDevice',
                 notflattened=True)
addExternalIface('nsIPrintSettings', nativeType='nsIPrintSettings',
                 notflattened=True)
addExternalIface('nsISelectionListener', nativeType='nsISelectionListener')
+19 −0
Original line number Diff line number Diff line
@@ -5,9 +5,11 @@
#include "GetUserMediaRequest.h"

#include "base/basictypes.h"
#include "MediaManager.h"
#include "mozilla/dom/MediaDevicesBinding.h"
#include "mozilla/dom/MediaStreamBinding.h"
#include "mozilla/dom/GetUserMediaRequestBinding.h"
#include "nsIMediaDevice.h"
#include "nsIScriptGlobalObject.h"
#include "nsPIDOMWindow.h"

@@ -15,11 +17,13 @@ namespace mozilla::dom {

GetUserMediaRequest::GetUserMediaRequest(
    nsPIDOMWindowInner* aInnerWindow, const nsAString& aCallID,
    RefPtr<MediaDeviceSetRefCnt> aMediaDeviceSet,
    const MediaStreamConstraints& aConstraints, bool aIsSecure,
    bool aIsHandlingUserInput)
    : mInnerWindowID(aInnerWindow->WindowID()),
      mOuterWindowID(aInnerWindow->GetOuterWindow()->WindowID()),
      mCallID(aCallID),
      mMediaDeviceSet(std::move(aMediaDeviceSet)),
      mConstraints(new MediaStreamConstraints(aConstraints)),
      mType(GetUserMediaRequestType::Getusermedia),
      mIsSecure(aIsSecure),
@@ -27,11 +31,13 @@ GetUserMediaRequest::GetUserMediaRequest(

GetUserMediaRequest::GetUserMediaRequest(
    nsPIDOMWindowInner* aInnerWindow, const nsAString& aCallID,
    RefPtr<MediaDeviceSetRefCnt> aMediaDeviceSet,
    const AudioOutputOptions& aAudioOutputOptions, bool aIsSecure,
    bool aIsHandlingUserInput)
    : mInnerWindowID(aInnerWindow->WindowID()),
      mOuterWindowID(aInnerWindow->GetOuterWindow()->WindowID()),
      mCallID(aCallID),
      mMediaDeviceSet(std::move(aMediaDeviceSet)),
      mAudioOutputOptions(new AudioOutputOptions(aAudioOutputOptions)),
      mType(GetUserMediaRequestType::Selectaudiooutput),
      mIsSecure(aIsSecure),
@@ -53,6 +59,8 @@ GetUserMediaRequest::GetUserMediaRequest(nsPIDOMWindowInner* aInnerWindow,
  }
}

GetUserMediaRequest::~GetUserMediaRequest() = default;

NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_0(GetUserMediaRequest)
NS_IMPL_CYCLE_COLLECTING_ADDREF(GetUserMediaRequest)
NS_IMPL_CYCLE_COLLECTING_RELEASE(GetUserMediaRequest)
@@ -88,6 +96,17 @@ bool GetUserMediaRequest::IsHandlingUserInput() const {
  return mIsHandlingUserInput;
}

void GetUserMediaRequest::GetDevices(
    nsTArray<RefPtr<nsIMediaDevice>>& retval) const {
  MOZ_ASSERT(retval.Length() == 0);
  if (!mMediaDeviceSet) {
    return;
  }
  for (const auto& device : *mMediaDeviceSet) {
    retval.AppendElement(device);
  }
}

void GetUserMediaRequest::GetConstraints(MediaStreamConstraints& result) {
  MOZ_ASSERT(result.mAudio.IsBoolean() && !result.mAudio.GetAsBoolean() &&
                 result.mVideo.IsBoolean() && !result.mVideo.GetAsBoolean(),
Loading