36950a0409d2cd10def92037a75dbc54b87a15d4
[platform/framework/web/crosswalk.git] / src / content / shell / renderer / test_runner / WebUserMediaClientMock.cpp
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.
4
5 #include "content/shell/renderer/test_runner/WebUserMediaClientMock.h"
6
7 #include "content/shell/renderer/test_runner/MockConstraints.h"
8 #include "content/shell/renderer/test_runner/WebTestDelegate.h"
9 #include "third_party/WebKit/public/platform/WebMediaConstraints.h"
10 #include "third_party/WebKit/public/platform/WebMediaStream.h"
11 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
12 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
13 #include "third_party/WebKit/public/platform/WebVector.h"
14 #include "third_party/WebKit/public/web/WebDocument.h"
15 #include "third_party/WebKit/public/web/WebMediaStreamRegistry.h"
16 #include "third_party/WebKit/public/web/WebUserMediaRequest.h"
17
18 using namespace blink;
19
20 namespace WebTestRunner {
21
22 class UserMediaRequestTask : public WebMethodTask<WebUserMediaClientMock> {
23 public:
24     UserMediaRequestTask(WebUserMediaClientMock* object, const WebUserMediaRequest& request, const WebMediaStream result)
25         : WebMethodTask<WebUserMediaClientMock>(object)
26         , m_request(request)
27         , m_result(result)
28     {
29         BLINK_ASSERT(!m_result.isNull());
30     }
31
32     virtual void runIfValid() OVERRIDE
33     {
34         m_request.requestSucceeded(m_result);
35     }
36
37 private:
38     WebUserMediaRequest m_request;
39     WebMediaStream m_result;
40 };
41
42 class UserMediaRequestConstraintFailedTask : public WebMethodTask<WebUserMediaClientMock> {
43 public:
44     UserMediaRequestConstraintFailedTask(WebUserMediaClientMock* object, const WebUserMediaRequest& request, const WebString& constraint)
45         : WebMethodTask<WebUserMediaClientMock>(object)
46         , m_request(request)
47         , m_constraint(constraint)
48     {
49     }
50
51     virtual void runIfValid() OVERRIDE
52     {
53         m_request.requestFailedConstraint(m_constraint);
54     }
55
56 private:
57     WebUserMediaRequest m_request;
58     WebString m_constraint;
59 };
60
61 class UserMediaRequestPermissionDeniedTask : public WebMethodTask<WebUserMediaClientMock> {
62 public:
63     UserMediaRequestPermissionDeniedTask(WebUserMediaClientMock* object, const WebUserMediaRequest& request)
64         : WebMethodTask<WebUserMediaClientMock>(object)
65         , m_request(request)
66     {
67     }
68
69     virtual void runIfValid() OVERRIDE
70     {
71         m_request.requestFailed();
72     }
73
74 private:
75     WebUserMediaRequest m_request;
76 };
77
78 ////////////////////////////////
79
80 class MockExtraData : public WebMediaStream::ExtraData {
81 public:
82     int foo;
83 };
84
85 WebUserMediaClientMock::WebUserMediaClientMock(WebTestDelegate* delegate)
86     : m_delegate(delegate)
87 {
88 }
89
90 void WebUserMediaClientMock::requestUserMedia(const WebUserMediaRequest& streamRequest)
91 {
92     BLINK_ASSERT(!streamRequest.isNull());
93     WebUserMediaRequest request = streamRequest;
94
95     if (request.ownerDocument().isNull() || !request.ownerDocument().frame()) {
96         m_delegate->postTask(new UserMediaRequestPermissionDeniedTask(this, request));
97         return;
98     }
99
100     WebMediaConstraints constraints = request.audioConstraints();
101     WebString failedConstraint;
102     if (!constraints.isNull() && !MockConstraints::verifyConstraints(constraints, &failedConstraint)) {
103         m_delegate->postTask(new UserMediaRequestConstraintFailedTask(this, request, failedConstraint));
104         return;
105     }
106     constraints = request.videoConstraints();
107     if (!constraints.isNull() && !MockConstraints::verifyConstraints(constraints, &failedConstraint)) {
108         m_delegate->postTask(new UserMediaRequestConstraintFailedTask(this, request, failedConstraint));
109         return;
110     }
111
112     const size_t zero = 0;
113     const size_t one = 1;
114     WebVector<WebMediaStreamTrack> audioTracks(request.audio() ? one : zero);
115     WebVector<WebMediaStreamTrack> videoTracks(request.video() ? one : zero);
116
117     if (request.audio()) {
118         WebMediaStreamSource source;
119         source.initialize("MockAudioDevice#1", WebMediaStreamSource::TypeAudio, "Mock audio device");
120         audioTracks[0].initialize(source);
121     }
122
123     if (request.video()) {
124         WebMediaStreamSource source;
125         source.initialize("MockVideoDevice#1", WebMediaStreamSource::TypeVideo, "Mock video device");
126         videoTracks[0].initialize(source);
127     }
128
129     WebMediaStream stream;
130     stream.initialize(audioTracks, videoTracks);
131
132     stream.setExtraData(new MockExtraData());
133
134     m_delegate->postTask(new UserMediaRequestTask(this, request, stream));
135 }
136
137 void WebUserMediaClientMock::cancelUserMediaRequest(const WebUserMediaRequest&)
138 {
139 }
140
141 }