1 // Copyright 2014 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.
5 #include "content/shell/renderer/test_runner/mock_web_media_stream_center.h"
7 #include "base/logging.h"
8 #include "content/shell/renderer/test_runner/test_interfaces.h"
9 #include "content/shell/renderer/test_runner/web_test_delegate.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"
23 class NewTrackTask : public WebMethodTask<MockWebMediaStreamCenter> {
25 NewTrackTask(MockWebMediaStreamCenter* object,
26 const blink::WebMediaStream& stream)
27 : WebMethodTask<MockWebMediaStreamCenter>(object), stream_(stream) {
28 DCHECK(!stream_.isNull());
31 virtual ~NewTrackTask() {}
33 virtual void RunIfValid() OVERRIDE {
34 blink::WebMediaStreamSource source;
35 blink::WebMediaStreamTrack track;
36 source.initialize("MagicVideoDevice#1",
37 blink::WebMediaStreamSource::TypeVideo,
39 track.initialize(source);
40 stream_.addTrack(track);
44 blink::WebMediaStream stream_;
46 DISALLOW_COPY_AND_ASSIGN(NewTrackTask);
49 class MockWebAudioDestinationConsumer
50 : public blink::WebAudioDestinationConsumer {
52 MockWebAudioDestinationConsumer() {}
53 virtual ~MockWebAudioDestinationConsumer() {}
54 virtual void setFormat(size_t number_of_channels, float sample_rate) {}
55 virtual void consumeAudio(const blink::WebVector<const float*>&,
56 size_t number_of_frames) {}
58 DISALLOW_COPY_AND_ASSIGN(MockWebAudioDestinationConsumer);
63 MockWebMediaStreamCenter::MockWebMediaStreamCenter(
64 blink::WebMediaStreamCenterClient* client,
65 TestInterfaces* interfaces)
66 : interfaces_(interfaces) {
69 MockWebMediaStreamCenter::~MockWebMediaStreamCenter() {
72 bool MockWebMediaStreamCenter::getMediaStreamTrackSources(
73 const blink::WebMediaStreamTrackSourcesRequest& request) {
75 blink::WebVector<blink::WebSourceInfo> results(size);
76 results[0].initialize("MockAudioDevice#1",
77 blink::WebSourceInfo::SourceKindAudio,
79 blink::WebSourceInfo::VideoFacingModeNone);
80 results[1].initialize("MockVideoDevice#1",
81 blink::WebSourceInfo::SourceKindVideo,
83 blink::WebSourceInfo::VideoFacingModeEnvironment);
84 request.requestSucceeded(results);
88 void MockWebMediaStreamCenter::didEnableMediaStreamTrack(
89 const blink::WebMediaStreamTrack& track) {
90 track.source().setReadyState(blink::WebMediaStreamSource::ReadyStateLive);
93 void MockWebMediaStreamCenter::didDisableMediaStreamTrack(
94 const blink::WebMediaStreamTrack& track) {
95 track.source().setReadyState(blink::WebMediaStreamSource::ReadyStateMuted);
98 bool MockWebMediaStreamCenter::didAddMediaStreamTrack(
99 const blink::WebMediaStream& stream,
100 const blink::WebMediaStreamTrack& track) {
104 bool MockWebMediaStreamCenter::didRemoveMediaStreamTrack(
105 const blink::WebMediaStream& stream,
106 const blink::WebMediaStreamTrack& track) {
110 void MockWebMediaStreamCenter::didStopLocalMediaStream(
111 const blink::WebMediaStream& stream) {
112 blink::WebVector<blink::WebMediaStreamTrack> tracks;
113 stream.audioTracks(tracks);
114 for (size_t i = 0; i < tracks.size(); ++i)
115 tracks[i].source().setReadyState(
116 blink::WebMediaStreamSource::ReadyStateEnded);
117 stream.videoTracks(tracks);
118 for (size_t i = 0; i < tracks.size(); ++i)
119 tracks[i].source().setReadyState(
120 blink::WebMediaStreamSource::ReadyStateEnded);
123 bool MockWebMediaStreamCenter::didStopMediaStreamTrack(
124 const blink::WebMediaStreamTrack& track) {
125 track.source().setReadyState(blink::WebMediaStreamSource::ReadyStateEnded);
129 void MockWebMediaStreamCenter::didCreateMediaStream(
130 blink::WebMediaStream& stream) {
131 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
132 stream.audioTracks(audio_tracks);
133 for (size_t i = 0; i < audio_tracks.size(); ++i) {
134 blink::WebMediaStreamSource source = audio_tracks[i].source();
135 if (source.requiresAudioConsumer()) {
136 MockWebAudioDestinationConsumer* consumer =
137 new MockWebAudioDestinationConsumer();
138 source.addAudioConsumer(consumer);
139 source.removeAudioConsumer(consumer);
143 interfaces_->GetDelegate()->PostTask(new NewTrackTask(this, stream));
146 blink::WebAudioSourceProvider*
147 MockWebMediaStreamCenter::createWebAudioSourceFromMediaStreamTrack(
148 const blink::WebMediaStreamTrack& track) {
152 } // namespace content