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.
5 #include "content/shell/renderer/test_runner/MockWebMediaStreamCenter.h"
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"
20 using namespace blink
;
22 namespace WebTestRunner
{
24 class NewTrackTask
: public WebMethodTask
<MockWebMediaStreamCenter
> {
26 NewTrackTask(MockWebMediaStreamCenter
* object
, const WebMediaStream
& stream
)
27 : WebMethodTask
<MockWebMediaStreamCenter
>(object
)
30 DCHECK(!m_stream
.isNull());
33 virtual void runIfValid() OVERRIDE
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
);
43 WebMediaStream m_stream
;
46 MockWebMediaStreamCenter::MockWebMediaStreamCenter(WebMediaStreamCenterClient
* client
, TestInterfaces
* interfaces
)
47 : m_interfaces(interfaces
)
51 bool MockWebMediaStreamCenter::getMediaStreamTrackSources(const WebMediaStreamTrackSourcesRequest
& request
)
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
);
61 void MockWebMediaStreamCenter::didEnableMediaStreamTrack(const WebMediaStreamTrack
& track
)
63 track
.source().setReadyState(WebMediaStreamSource::ReadyStateLive
);
66 void MockWebMediaStreamCenter::didDisableMediaStreamTrack(const WebMediaStreamTrack
& track
)
68 track
.source().setReadyState(WebMediaStreamSource::ReadyStateMuted
);
71 bool MockWebMediaStreamCenter::didAddMediaStreamTrack(const WebMediaStream
&, const WebMediaStreamTrack
&)
76 bool MockWebMediaStreamCenter::didRemoveMediaStreamTrack(const WebMediaStream
&, const WebMediaStreamTrack
&)
81 void MockWebMediaStreamCenter::didStopLocalMediaStream(const WebMediaStream
& stream
)
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
);
92 bool MockWebMediaStreamCenter::didStopMediaStreamTrack(const blink::WebMediaStreamTrack
& track
)
94 track
.source().setReadyState(WebMediaStreamSource::ReadyStateEnded
);
98 class MockWebAudioDestinationConsumer
: public WebAudioDestinationConsumer
{
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
{ }
105 void MockWebMediaStreamCenter::didCreateMediaStream(WebMediaStream
& stream
)
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
);
118 m_interfaces
->delegate()->postTask(new NewTrackTask(this, stream
));
121 blink::WebAudioSourceProvider
* MockWebMediaStreamCenter::createWebAudioSourceFromMediaStreamTrack(const blink::WebMediaStreamTrack
& track
)