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 ~NewTrackTask() override {}
33 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 void MockWebMediaStreamCenter::didEnableMediaStreamTrack(
73 const blink::WebMediaStreamTrack& track) {
74 track.source().setReadyState(blink::WebMediaStreamSource::ReadyStateLive);
77 void MockWebMediaStreamCenter::didDisableMediaStreamTrack(
78 const blink::WebMediaStreamTrack& track) {
79 track.source().setReadyState(blink::WebMediaStreamSource::ReadyStateMuted);
82 bool MockWebMediaStreamCenter::didAddMediaStreamTrack(
83 const blink::WebMediaStream& stream,
84 const blink::WebMediaStreamTrack& track) {
88 bool MockWebMediaStreamCenter::didRemoveMediaStreamTrack(
89 const blink::WebMediaStream& stream,
90 const blink::WebMediaStreamTrack& track) {
94 void MockWebMediaStreamCenter::didStopLocalMediaStream(
95 const blink::WebMediaStream& stream) {
96 blink::WebVector<blink::WebMediaStreamTrack> tracks;
97 stream.audioTracks(tracks);
98 for (size_t i = 0; i < tracks.size(); ++i)
99 tracks[i].source().setReadyState(
100 blink::WebMediaStreamSource::ReadyStateEnded);
101 stream.videoTracks(tracks);
102 for (size_t i = 0; i < tracks.size(); ++i)
103 tracks[i].source().setReadyState(
104 blink::WebMediaStreamSource::ReadyStateEnded);
107 bool MockWebMediaStreamCenter::didStopMediaStreamTrack(
108 const blink::WebMediaStreamTrack& track) {
109 track.source().setReadyState(blink::WebMediaStreamSource::ReadyStateEnded);
113 void MockWebMediaStreamCenter::didCreateMediaStream(
114 blink::WebMediaStream& stream) {
115 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
116 stream.audioTracks(audio_tracks);
117 for (size_t i = 0; i < audio_tracks.size(); ++i) {
118 blink::WebMediaStreamSource source = audio_tracks[i].source();
119 if (source.requiresAudioConsumer()) {
120 MockWebAudioDestinationConsumer* consumer =
121 new MockWebAudioDestinationConsumer();
122 source.addAudioConsumer(consumer);
123 source.removeAudioConsumer(consumer);
127 interfaces_->GetDelegate()->PostTask(new NewTrackTask(this, stream));
130 blink::WebAudioSourceProvider*
131 MockWebMediaStreamCenter::createWebAudioSourceFromMediaStreamTrack(
132 const blink::WebMediaStreamTrack& track) {
136 } // namespace content