Update To 11.40.268.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   ~NewTrackTask() override {}
32
33   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 void MockWebMediaStreamCenter::didEnableMediaStreamTrack(
73     const blink::WebMediaStreamTrack& track) {
74   track.source().setReadyState(blink::WebMediaStreamSource::ReadyStateLive);
75 }
76
77 void MockWebMediaStreamCenter::didDisableMediaStreamTrack(
78     const blink::WebMediaStreamTrack& track) {
79   track.source().setReadyState(blink::WebMediaStreamSource::ReadyStateMuted);
80 }
81
82 bool MockWebMediaStreamCenter::didAddMediaStreamTrack(
83     const blink::WebMediaStream& stream,
84     const blink::WebMediaStreamTrack& track) {
85   return true;
86 }
87
88 bool MockWebMediaStreamCenter::didRemoveMediaStreamTrack(
89     const blink::WebMediaStream& stream,
90     const blink::WebMediaStreamTrack& track) {
91   return true;
92 }
93
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);
105 }
106
107 bool MockWebMediaStreamCenter::didStopMediaStreamTrack(
108     const blink::WebMediaStreamTrack& track) {
109   track.source().setReadyState(blink::WebMediaStreamSource::ReadyStateEnded);
110   return true;
111 }
112
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);
124       delete consumer;
125     }
126   }
127   interfaces_->GetDelegate()->PostTask(new NewTrackTask(this, stream));
128 }
129
130 blink::WebAudioSourceProvider*
131 MockWebMediaStreamCenter::createWebAudioSourceFromMediaStreamTrack(
132     const blink::WebMediaStreamTrack& track) {
133   return NULL;
134 }
135
136 }  // namespace content