15aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org/*
25aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org * libjingle
35aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org * Copyright 2013, Google Inc.
45aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org *
55aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org * Redistribution and use in source and binary forms, with or without
65aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org * modification, are permitted provided that the following conditions are met:
75aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org *
85aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org *  1. Redistributions of source code must retain the above copyright notice,
95aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org *     this list of conditions and the following disclaimer.
105aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org *  2. Redistributions in binary form must reproduce the above copyright notice,
115aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org *     this list of conditions and the following disclaimer in the documentation
125aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org *     and/or other materials provided with the distribution.
135aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org *  3. The name of the author may not be used to endorse or promote products
145aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org *     derived from this software without specific prior written permission.
155aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org *
165aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
175aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
185aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
195aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
205aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
215aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
225aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
235aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
245aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
255aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
265aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org *
275aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org */
285aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
295aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org#ifndef TALK_APP_WEBRTC_TEST_FAKEMEDIASTREAMSIGNALING_H_
305aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org#define TALK_APP_WEBRTC_TEST_FAKEMEDIASTREAMSIGNALING_H_
315aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
325aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org#include "talk/app/webrtc/audiotrack.h"
335aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org#include "talk/app/webrtc/mediastreamsignaling.h"
345aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org#include "talk/app/webrtc/videotrack.h"
355aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
365aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.orgstatic const char kStream1[] = "stream1";
375aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.orgstatic const char kVideoTrack1[] = "video1";
385aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.orgstatic const char kAudioTrack1[] = "audio1";
395aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
405aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.orgstatic const char kStream2[] = "stream2";
415aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.orgstatic const char kVideoTrack2[] = "video2";
425aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.orgstatic const char kAudioTrack2[] = "audio2";
435aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
445aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.orgclass FakeMediaStreamSignaling : public webrtc::MediaStreamSignaling,
455aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org                                 public webrtc::MediaStreamSignalingObserver {
465aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org public:
474ba8b9ea10385f43b19d6ed7408f4a09bdc1cbdawu@webrtc.org  explicit FakeMediaStreamSignaling(cricket::ChannelManager* channel_manager) :
482a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org    webrtc::MediaStreamSignaling(rtc::Thread::Current(), this,
494ba8b9ea10385f43b19d6ed7408f4a09bdc1cbdawu@webrtc.org                                 channel_manager) {
505aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
515aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
525aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  void SendAudioVideoStream1() {
535aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    ClearLocalStreams();
545aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    AddLocalStream(CreateStream(kStream1, kAudioTrack1, kVideoTrack1));
555aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
565aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
575aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  void SendAudioVideoStream2() {
585aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    ClearLocalStreams();
595aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    AddLocalStream(CreateStream(kStream2, kAudioTrack2, kVideoTrack2));
605aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
615aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
625aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  void SendAudioVideoStream1And2() {
635aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    ClearLocalStreams();
645aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    AddLocalStream(CreateStream(kStream1, kAudioTrack1, kVideoTrack1));
655aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    AddLocalStream(CreateStream(kStream2, kAudioTrack2, kVideoTrack2));
665aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
675aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
685aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  void SendNothing() {
695aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    ClearLocalStreams();
705aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
715aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
725aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  void UseOptionsAudioOnly() {
735aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    ClearLocalStreams();
745aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    AddLocalStream(CreateStream(kStream2, kAudioTrack2, ""));
755aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
765aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
775aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  void UseOptionsVideoOnly() {
785aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    ClearLocalStreams();
795aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    AddLocalStream(CreateStream(kStream2, "", kVideoTrack2));
805aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
815aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
825aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  void ClearLocalStreams() {
835aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    while (local_streams()->count() != 0) {
845aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org      RemoveLocalStream(local_streams()->at(0));
855aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    }
865aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
875aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
885aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  // Implements MediaStreamSignalingObserver.
895aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  virtual void OnAddRemoteStream(webrtc::MediaStreamInterface* stream) {
905aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
915aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  virtual void OnRemoveRemoteStream(webrtc::MediaStreamInterface* stream) {
925aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
935aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  virtual void OnAddDataChannel(webrtc::DataChannelInterface* data_channel) {
945aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
955aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  virtual void OnAddLocalAudioTrack(webrtc::MediaStreamInterface* stream,
965aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org                                    webrtc::AudioTrackInterface* audio_track,
975aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org                                    uint32 ssrc) {
985aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
995aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  virtual void OnAddLocalVideoTrack(webrtc::MediaStreamInterface* stream,
1005aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org                                    webrtc::VideoTrackInterface* video_track,
1015aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org                                    uint32 ssrc) {
1025aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
1035aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  virtual void OnAddRemoteAudioTrack(webrtc::MediaStreamInterface* stream,
1045aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org                                     webrtc::AudioTrackInterface* audio_track,
1055aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org                                     uint32 ssrc) {
1065aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
1075aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
1085aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  virtual void OnAddRemoteVideoTrack(webrtc::MediaStreamInterface* stream,
1095aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org                                     webrtc::VideoTrackInterface* video_track,
1105aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org                                     uint32 ssrc) {
1115aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
1125aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
1135aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  virtual void OnRemoveRemoteAudioTrack(
1145aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org      webrtc::MediaStreamInterface* stream,
1155aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org      webrtc::AudioTrackInterface* audio_track) {
1165aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
1175aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
1185aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  virtual void OnRemoveRemoteVideoTrack(
1195aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org      webrtc::MediaStreamInterface* stream,
1205aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org      webrtc::VideoTrackInterface* video_track) {
1215aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
1225aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
1235aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  virtual void OnRemoveLocalAudioTrack(
1245aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org      webrtc::MediaStreamInterface* stream,
125c583107e6b398a140dc56f9539b0e01b58af8c61henrike@webrtc.org      webrtc::AudioTrackInterface* audio_track,
126c583107e6b398a140dc56f9539b0e01b58af8c61henrike@webrtc.org      uint32 ssrc) {
1275aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
1285aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  virtual void OnRemoveLocalVideoTrack(
1295aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org      webrtc::MediaStreamInterface* stream,
1305aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org      webrtc::VideoTrackInterface* video_track) {
1315aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
1325aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  virtual void OnRemoveLocalStream(webrtc::MediaStreamInterface* stream) {
1335aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
1345aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
1355aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org private:
1362a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org  rtc::scoped_refptr<webrtc::MediaStreamInterface> CreateStream(
1375aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org      const std::string& stream_label,
1385aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org      const std::string& audio_track_id,
1395aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org      const std::string& video_track_id) {
1402a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org    rtc::scoped_refptr<webrtc::MediaStreamInterface> stream(
1415aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org        webrtc::MediaStream::Create(stream_label));
1425aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
1435aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    if (!audio_track_id.empty()) {
1442a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org      rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track(
1455aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org          webrtc::AudioTrack::Create(audio_track_id, NULL));
1465aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org      stream->AddTrack(audio_track);
1475aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    }
1485aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
1495aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    if (!video_track_id.empty()) {
1502a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org      rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track(
1515aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org          webrtc::VideoTrack::Create(video_track_id, NULL));
1525aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org      stream->AddTrack(video_track);
1535aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    }
1545aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org    return stream;
1555aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org  }
1565aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org};
1575aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org
1585aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org#endif  // TALK_APP_WEBRTC_TEST_FAKEMEDIASTREAMSIGNALING_H_
159