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/WebUserMediaClientMock.h"
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"
18 using namespace blink;
20 namespace WebTestRunner {
22 class UserMediaRequestTask : public WebMethodTask<WebUserMediaClientMock> {
24 UserMediaRequestTask(WebUserMediaClientMock* object, const WebUserMediaRequest& request, const WebMediaStream result)
25 : WebMethodTask<WebUserMediaClientMock>(object)
29 BLINK_ASSERT(!m_result.isNull());
32 virtual void runIfValid() OVERRIDE
34 m_request.requestSucceeded(m_result);
38 WebUserMediaRequest m_request;
39 WebMediaStream m_result;
42 class UserMediaRequestConstraintFailedTask : public WebMethodTask<WebUserMediaClientMock> {
44 UserMediaRequestConstraintFailedTask(WebUserMediaClientMock* object, const WebUserMediaRequest& request, const WebString& constraint)
45 : WebMethodTask<WebUserMediaClientMock>(object)
47 , m_constraint(constraint)
51 virtual void runIfValid() OVERRIDE
53 m_request.requestFailedConstraint(m_constraint);
57 WebUserMediaRequest m_request;
58 WebString m_constraint;
61 class UserMediaRequestPermissionDeniedTask : public WebMethodTask<WebUserMediaClientMock> {
63 UserMediaRequestPermissionDeniedTask(WebUserMediaClientMock* object, const WebUserMediaRequest& request)
64 : WebMethodTask<WebUserMediaClientMock>(object)
69 virtual void runIfValid() OVERRIDE
71 m_request.requestFailed();
75 WebUserMediaRequest m_request;
78 ////////////////////////////////
80 class MockExtraData : public WebMediaStream::ExtraData {
85 WebUserMediaClientMock::WebUserMediaClientMock(WebTestDelegate* delegate)
86 : m_delegate(delegate)
90 void WebUserMediaClientMock::requestUserMedia(const WebUserMediaRequest& streamRequest)
92 BLINK_ASSERT(!streamRequest.isNull());
93 WebUserMediaRequest request = streamRequest;
95 if (request.ownerDocument().isNull() || !request.ownerDocument().frame()) {
96 m_delegate->postTask(new UserMediaRequestPermissionDeniedTask(this, request));
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));
106 constraints = request.videoConstraints();
107 if (!constraints.isNull() && !MockConstraints::verifyConstraints(constraints, &failedConstraint)) {
108 m_delegate->postTask(new UserMediaRequestConstraintFailedTask(this, request, failedConstraint));
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);
117 if (request.audio()) {
118 WebMediaStreamSource source;
119 source.initialize("MockAudioDevice#1", WebMediaStreamSource::TypeAudio, "Mock audio device");
120 audioTracks[0].initialize(source);
123 if (request.video()) {
124 WebMediaStreamSource source;
125 source.initialize("MockVideoDevice#1", WebMediaStreamSource::TypeVideo, "Mock video device");
126 videoTracks[0].initialize(source);
129 WebMediaStream stream;
130 stream.initialize(audioTracks, videoTracks);
132 stream.setExtraData(new MockExtraData());
134 m_delegate->postTask(new UserMediaRequestTask(this, request, stream));
137 void WebUserMediaClientMock::cancelUserMediaRequest(const WebUserMediaRequest&)