tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

GetUserMediaRequest.cpp (4644B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
      3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 #include "GetUserMediaRequest.h"
      6 
      7 #include "MediaManager.h"
      8 #include "base/basictypes.h"
      9 #include "mozilla/dom/GetUserMediaRequestBinding.h"
     10 #include "mozilla/dom/MediaDevicesBinding.h"
     11 #include "mozilla/dom/MediaStreamBinding.h"
     12 #include "nsIMediaDevice.h"
     13 #include "nsIScriptGlobalObject.h"
     14 #include "nsPIDOMWindow.h"
     15 
     16 namespace mozilla::dom {
     17 
     18 GetUserMediaRequest::GetUserMediaRequest(
     19    nsPIDOMWindowInner* aInnerWindow, const nsAString& aCallID,
     20    RefPtr<LocalMediaDeviceSetRefCnt> aMediaDeviceSet,
     21    const MediaStreamConstraints& aConstraints, bool aIsSecure,
     22    bool aIsHandlingUserInput)
     23    : mInnerWindowID(aInnerWindow->WindowID()),
     24      mOuterWindowID(aInnerWindow->GetOuterWindow()->WindowID()),
     25      mCallID(aCallID),
     26      mMediaDeviceSet(std::move(aMediaDeviceSet)),
     27      mConstraints(new MediaStreamConstraints(aConstraints)),
     28      mType(GetUserMediaRequestType::Getusermedia),
     29      mIsSecure(aIsSecure),
     30      mIsHandlingUserInput(aIsHandlingUserInput) {}
     31 
     32 GetUserMediaRequest::GetUserMediaRequest(
     33    nsPIDOMWindowInner* aInnerWindow, const nsAString& aCallID,
     34    RefPtr<LocalMediaDeviceSetRefCnt> aMediaDeviceSet,
     35    const AudioOutputOptions& aAudioOutputOptions, bool aIsSecure,
     36    bool aIsHandlingUserInput)
     37    : mInnerWindowID(aInnerWindow->WindowID()),
     38      mOuterWindowID(aInnerWindow->GetOuterWindow()->WindowID()),
     39      mCallID(aCallID),
     40      mMediaDeviceSet(std::move(aMediaDeviceSet)),
     41      mAudioOutputOptions(new AudioOutputOptions(aAudioOutputOptions)),
     42      mType(GetUserMediaRequestType::Selectaudiooutput),
     43      mIsSecure(aIsSecure),
     44      mIsHandlingUserInput(aIsHandlingUserInput) {}
     45 
     46 GetUserMediaRequest::GetUserMediaRequest(nsPIDOMWindowInner* aInnerWindow,
     47                                         const nsAString& aRawId,
     48                                         const nsAString& aMediaSource,
     49                                         bool aIsHandlingUserInput)
     50    : mInnerWindowID(0),
     51      mOuterWindowID(0),
     52      mRawID(aRawId),
     53      mMediaSource(aMediaSource),
     54      mType(GetUserMediaRequestType::Recording_device_stopped),
     55      mIsSecure(false),
     56      mIsHandlingUserInput(aIsHandlingUserInput) {
     57  if (aInnerWindow && aInnerWindow->GetOuterWindow()) {
     58    mOuterWindowID = aInnerWindow->GetOuterWindow()->WindowID();
     59  }
     60 }
     61 
     62 GetUserMediaRequest::~GetUserMediaRequest() = default;
     63 
     64 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_0(GetUserMediaRequest)
     65 NS_IMPL_CYCLE_COLLECTING_ADDREF(GetUserMediaRequest)
     66 NS_IMPL_CYCLE_COLLECTING_RELEASE(GetUserMediaRequest)
     67 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(GetUserMediaRequest)
     68  NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
     69  NS_INTERFACE_MAP_ENTRY(nsISupports)
     70 NS_INTERFACE_MAP_END
     71 
     72 JSObject* GetUserMediaRequest::WrapObject(JSContext* aCx,
     73                                          JS::Handle<JSObject*> aGivenProto) {
     74  return GetUserMediaRequest_Binding::Wrap(aCx, this, aGivenProto);
     75 }
     76 
     77 nsISupports* GetUserMediaRequest::GetParentObject() { return nullptr; }
     78 
     79 GetUserMediaRequestType GetUserMediaRequest::Type() { return mType; }
     80 
     81 void GetUserMediaRequest::GetCallID(nsString& retval) { retval = mCallID; }
     82 
     83 void GetUserMediaRequest::GetRawID(nsString& retval) { retval = mRawID; }
     84 
     85 void GetUserMediaRequest::GetMediaSource(nsString& retval) {
     86  retval = mMediaSource;
     87 }
     88 
     89 uint64_t GetUserMediaRequest::WindowID() { return mOuterWindowID; }
     90 
     91 uint64_t GetUserMediaRequest::InnerWindowID() { return mInnerWindowID; }
     92 
     93 bool GetUserMediaRequest::IsSecure() { return mIsSecure; }
     94 
     95 bool GetUserMediaRequest::IsHandlingUserInput() const {
     96  return mIsHandlingUserInput;
     97 }
     98 
     99 void GetUserMediaRequest::GetDevices(
    100    nsTArray<RefPtr<nsIMediaDevice>>& retval) const {
    101  MOZ_ASSERT(retval.Length() == 0);
    102  if (!mMediaDeviceSet) {
    103    return;
    104  }
    105  for (const auto& device : *mMediaDeviceSet) {
    106    retval.AppendElement(device);
    107  }
    108 }
    109 
    110 void GetUserMediaRequest::GetConstraints(MediaStreamConstraints& result) {
    111  MOZ_ASSERT(result.mAudio.IsBoolean() && !result.mAudio.GetAsBoolean() &&
    112                 result.mVideo.IsBoolean() && !result.mVideo.GetAsBoolean(),
    113             "result should be default initialized");
    114  if (mConstraints) {
    115    result = *mConstraints;
    116  }
    117 }
    118 
    119 void GetUserMediaRequest::GetAudioOutputOptions(AudioOutputOptions& result) {
    120  MOZ_ASSERT(result.mDeviceId.IsEmpty(),
    121             "result should be default initialized");
    122  if (mAudioOutputOptions) {
    123    result = *mAudioOutputOptions;
    124  }
    125 }
    126 
    127 }  // namespace mozilla::dom