diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /media/webrtc/signaling/src/peerconnection/MediaStreamList.cpp | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'media/webrtc/signaling/src/peerconnection/MediaStreamList.cpp')
-rw-r--r-- | media/webrtc/signaling/src/peerconnection/MediaStreamList.cpp | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/media/webrtc/signaling/src/peerconnection/MediaStreamList.cpp b/media/webrtc/signaling/src/peerconnection/MediaStreamList.cpp new file mode 100644 index 000000000..f10b4447f --- /dev/null +++ b/media/webrtc/signaling/src/peerconnection/MediaStreamList.cpp @@ -0,0 +1,104 @@ +/* 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/. */ + +#include "CSFLog.h" +#include "base/basictypes.h" +#include "MediaStreamList.h" +#ifdef MOZILLA_INTERNAL_API +#include "mozilla/dom/MediaStreamListBinding.h" +#endif +#include "nsIScriptGlobalObject.h" +#include "PeerConnectionImpl.h" +#include "PeerConnectionMedia.h" + +namespace mozilla { +namespace dom { + +MediaStreamList::MediaStreamList(PeerConnectionImpl* peerConnection, + StreamType type) + : mPeerConnection(peerConnection), + mType(type) +{ +} + +MediaStreamList::~MediaStreamList() +{ +} + +#ifdef MOZILLA_INTERNAL_API +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_0(MediaStreamList) +#else +NS_IMPL_CYCLE_COLLECTION_CLASS(MediaStreamList) +NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(MediaStreamList) +NS_IMPL_CYCLE_COLLECTION_UNLINK_END +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(MediaStreamList) +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END +NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(MediaStreamList) +NS_IMPL_CYCLE_COLLECTION_TRACE_END +#endif + +NS_IMPL_CYCLE_COLLECTING_ADDREF(MediaStreamList) +NS_IMPL_CYCLE_COLLECTING_RELEASE(MediaStreamList) +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(MediaStreamList) + NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY + NS_INTERFACE_MAP_ENTRY(nsISupports) +NS_INTERFACE_MAP_END + +JSObject* +MediaStreamList::WrapObject(JSContext* cx, JS::Handle<JSObject*> aGivenProto) +{ +#ifdef MOZILLA_INTERNAL_API + return MediaStreamListBinding::Wrap(cx, this, aGivenProto); +#else + return nullptr; +#endif +} + +nsISupports* +MediaStreamList::GetParentObject() +{ + return mPeerConnection->GetWindow(); +} + +template<class T> +static DOMMediaStream* +GetStreamFromInfo(T* info, bool& found) +{ + if (!info) { + found = false; + return nullptr; + } + + found = true; + return info->GetMediaStream(); +} + +DOMMediaStream* +MediaStreamList::IndexedGetter(uint32_t index, bool& found) +{ + if (!mPeerConnection->media()) { // PeerConnection closed + found = false; + return nullptr; + } + if (mType == Local) { + return GetStreamFromInfo(mPeerConnection->media()-> + GetLocalStreamByIndex(index), found); + } + + return GetStreamFromInfo(mPeerConnection->media()-> + GetRemoteStreamByIndex(index), found); +} + +uint32_t +MediaStreamList::Length() +{ + if (!mPeerConnection->media()) { // PeerConnection closed + return 0; + } + return mType == Local ? mPeerConnection->media()->LocalStreamsLength() : + mPeerConnection->media()->RemoteStreamsLength(); +} + +} // namespace dom +} // namespace mozilla |