1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "content/shell/renderer/test_runner/MockWebMediaStreamCenter.h" 6 7#include "base/logging.h" 8#include "content/shell/renderer/test_runner/TestInterfaces.h" 9#include "content/shell/renderer/test_runner/WebTestDelegate.h" 10#include "third_party/WebKit/public/platform/WebAudioDestinationConsumer.h" 11#include "third_party/WebKit/public/platform/WebAudioSourceProvider.h" 12#include "third_party/WebKit/public/platform/WebMediaStream.h" 13#include "third_party/WebKit/public/platform/WebMediaStreamCenterClient.h" 14#include "third_party/WebKit/public/platform/WebMediaStreamSource.h" 15#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 16#include "third_party/WebKit/public/platform/WebMediaStreamTrackSourcesRequest.h" 17#include "third_party/WebKit/public/platform/WebSourceInfo.h" 18#include "third_party/WebKit/public/platform/WebVector.h" 19 20using namespace blink; 21 22namespace content { 23 24class NewTrackTask : public WebMethodTask<MockWebMediaStreamCenter> { 25public: 26 NewTrackTask(MockWebMediaStreamCenter* object, const WebMediaStream& stream) 27 : WebMethodTask<MockWebMediaStreamCenter>(object) 28 , m_stream(stream) 29 { 30 DCHECK(!m_stream.isNull()); 31 } 32 33 virtual void runIfValid() OVERRIDE 34 { 35 WebMediaStreamSource source; 36 WebMediaStreamTrack track; 37 source.initialize("MagicVideoDevice#1", WebMediaStreamSource::TypeVideo, "Magic video track"); 38 track.initialize(source); 39 m_stream.addTrack(track); 40 } 41 42private: 43 WebMediaStream m_stream; 44}; 45 46MockWebMediaStreamCenter::MockWebMediaStreamCenter(WebMediaStreamCenterClient* client, TestInterfaces* interfaces) 47 : m_interfaces(interfaces) 48{ 49} 50 51bool MockWebMediaStreamCenter::getMediaStreamTrackSources(const WebMediaStreamTrackSourcesRequest& request) 52{ 53 size_t size = 2; 54 WebVector<WebSourceInfo> results(size); 55 results[0].initialize("MockAudioDevice#1", WebSourceInfo::SourceKindAudio, "Mock audio device", WebSourceInfo::VideoFacingModeNone); 56 results[1].initialize("MockVideoDevice#1", WebSourceInfo::SourceKindVideo, "Mock video device", WebSourceInfo::VideoFacingModeEnvironment); 57 request.requestSucceeded(results); 58 return true; 59} 60 61void MockWebMediaStreamCenter::didEnableMediaStreamTrack(const WebMediaStreamTrack& track) 62{ 63 track.source().setReadyState(WebMediaStreamSource::ReadyStateLive); 64} 65 66void MockWebMediaStreamCenter::didDisableMediaStreamTrack(const WebMediaStreamTrack& track) 67{ 68 track.source().setReadyState(WebMediaStreamSource::ReadyStateMuted); 69} 70 71bool MockWebMediaStreamCenter::didAddMediaStreamTrack(const WebMediaStream&, const WebMediaStreamTrack&) 72{ 73 return true; 74} 75 76bool MockWebMediaStreamCenter::didRemoveMediaStreamTrack(const WebMediaStream&, const WebMediaStreamTrack&) 77{ 78 return true; 79} 80 81void MockWebMediaStreamCenter::didStopLocalMediaStream(const WebMediaStream& stream) 82{ 83 WebVector<WebMediaStreamTrack> tracks; 84 stream.audioTracks(tracks); 85 for (size_t i = 0; i < tracks.size(); ++i) 86 tracks[i].source().setReadyState(WebMediaStreamSource::ReadyStateEnded); 87 stream.videoTracks(tracks); 88 for (size_t i = 0; i < tracks.size(); ++i) 89 tracks[i].source().setReadyState(WebMediaStreamSource::ReadyStateEnded); 90} 91 92bool MockWebMediaStreamCenter::didStopMediaStreamTrack(const blink::WebMediaStreamTrack& track) 93{ 94 track.source().setReadyState(WebMediaStreamSource::ReadyStateEnded); 95 return true; 96} 97 98class MockWebAudioDestinationConsumer : public WebAudioDestinationConsumer { 99public: 100 virtual ~MockWebAudioDestinationConsumer() { } 101 virtual void setFormat(size_t numberOfChannels, float sampleRate) OVERRIDE { } 102 virtual void consumeAudio(const WebVector<const float*>&, size_t number_of_frames) OVERRIDE { } 103}; 104 105void MockWebMediaStreamCenter::didCreateMediaStream(WebMediaStream& stream) 106{ 107 WebVector<WebMediaStreamTrack> audioTracks; 108 stream.audioTracks(audioTracks); 109 for (size_t i = 0; i < audioTracks.size(); ++i) { 110 WebMediaStreamSource source = audioTracks[i].source(); 111 if (source.requiresAudioConsumer()) { 112 MockWebAudioDestinationConsumer* consumer = new MockWebAudioDestinationConsumer(); 113 source.addAudioConsumer(consumer); 114 source.removeAudioConsumer(consumer); 115 delete consumer; 116 } 117 } 118 m_interfaces->delegate()->postTask(new NewTrackTask(this, stream)); 119} 120 121blink::WebAudioSourceProvider* MockWebMediaStreamCenter::createWebAudioSourceFromMediaStreamTrack(const blink::WebMediaStreamTrack& track) 122{ 123 return NULL; 124} 125 126} // namespace content 127