Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / content / shell / renderer / test_runner / mock_web_media_stream_center.cc
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.
4
5 #include "content/shell/renderer/test_runner/mock_web_media_stream_center.h"
6
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"
19
20 namespace content {
21
22 namespace {
23 class NewTrackTask : public WebMethodTask<MockWebMediaStreamCenter> {
24  public:
25   NewTrackTask(MockWebMediaStreamCenter* object,
26                const blink::WebMediaStream& stream)
27       : WebMethodTask<MockWebMediaStreamCenter>(object), stream_(stream) {
28     DCHECK(!stream_.isNull());
29   }
30
31   virtual ~NewTrackTask() {}
32
33   virtual void RunIfValid() OVERRIDE {
34     blink::WebMediaStreamSource source;
35     blink::WebMediaStreamTrack track;
36     source.initialize("MagicVideoDevice#1",
37                       blink::WebMediaStreamSource::TypeVideo,
38                       "Magic video track");
39     track.initialize(source);
40     stream_.addTrack(track);
41   }
42
43  private:
44   blink::WebMediaStream stream_;
45
46   DISALLOW_COPY_AND_ASSIGN(NewTrackTask);
47 };
48
49 class MockWebAudioDestinationConsumer
50     : public blink::WebAudioDestinationConsumer {
51  public:
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) {}
57
58   DISALLOW_COPY_AND_ASSIGN(MockWebAudioDestinationConsumer);
59 };
60
61 }  // namespace
62
63 MockWebMediaStreamCenter::MockWebMediaStreamCenter(
64     blink::WebMediaStreamCenterClient* client,
65     TestInterfaces* interfaces)
66     : interfaces_(interfaces) {
67 }
68
69 MockWebMediaStreamCenter::~MockWebMediaStreamCenter() {
70 }
71
72 bool MockWebMediaStreamCenter::getMediaStreamTrackSources(
73     const blink::WebMediaStreamTrackSourcesRequest& request) {
74   size_t size = 2;
75   blink::WebVector<blink::WebSourceInfo> results(size);
76   results[0].initialize("MockAudioDevice#1",
77                         blink::WebSourceInfo::SourceKindAudio,
78                         "Mock audio device",
79                         blink::WebSourceInfo::VideoFacingModeNone);
80   results[1].initialize("MockVideoDevice#1",
81                         blink::WebSourceInfo::SourceKindVideo,
82                         "Mock video device",
83                         blink::WebSourceInfo::VideoFacingModeEnvironment);
84   request.requestSucceeded(results);
85   return true;
86 }
87
88 void MockWebMediaStreamCenter::didEnableMediaStreamTrack(
89     const blink::WebMediaStreamTrack& track) {
90   track.source().setReadyState(blink::WebMediaStreamSource::ReadyStateLive);
91 }
92
93 void MockWebMediaStreamCenter::didDisableMediaStreamTrack(
94     const blink::WebMediaStreamTrack& track) {
95   track.source().setReadyState(blink::WebMediaStreamSource::ReadyStateMuted);
96 }
97
98 bool MockWebMediaStreamCenter::didAddMediaStreamTrack(
99     const blink::WebMediaStream& stream,
100     const blink::WebMediaStreamTrack& track) {
101   return true;
102 }
103
104 bool MockWebMediaStreamCenter::didRemoveMediaStreamTrack(
105     const blink::WebMediaStream& stream,
106     const blink::WebMediaStreamTrack& track) {
107   return true;
108 }
109
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);
121 }
122
123 bool MockWebMediaStreamCenter::didStopMediaStreamTrack(
124     const blink::WebMediaStreamTrack& track) {
125   track.source().setReadyState(blink::WebMediaStreamSource::ReadyStateEnded);
126   return true;
127 }
128
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);
140       delete consumer;
141     }
142   }
143   interfaces_->GetDelegate()->PostTask(new NewTrackTask(this, stream));
144 }
145
146 blink::WebAudioSourceProvider*
147 MockWebMediaStreamCenter::createWebAudioSourceFromMediaStreamTrack(
148     const blink::WebMediaStreamTrack& track) {
149   return NULL;
150 }
151
152 }  // namespace content