146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "content/shell/renderer/test_runner/mock_web_user_media_client.h" 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/logging.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/macros.h" 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "content/shell/renderer/test_runner/mock_constraints.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/shell/renderer/test_runner/web_test_delegate.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebMediaConstraints.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebMediaDeviceInfo.h" 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebMediaStream.h" 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebMediaStreamSource.h" 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "third_party/WebKit/public/platform/WebMediaStreamTrackSourcesRequest.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "third_party/WebKit/public/platform/WebSourceInfo.h" 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebVector.h" 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "third_party/WebKit/public/web/WebDocument.h" 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "third_party/WebKit/public/web/WebMediaDevicesRequest.h" 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "third_party/WebKit/public/web/WebMediaStreamRegistry.h" 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "third_party/WebKit/public/web/WebUserMediaRequest.h" 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)using blink::WebMediaConstraints; 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)using blink::WebMediaDeviceInfo; 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)using blink::WebMediaDevicesRequest; 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)using blink::WebMediaStream; 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)using blink::WebMediaStreamSource; 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)using blink::WebMediaStreamTrack; 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing blink::WebMediaStreamTrackSourcesRequest; 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing blink::WebSourceInfo; 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)using blink::WebString; 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)using blink::WebUserMediaRequest; 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)using blink::WebVector; 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace content { 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class UserMediaRequestTask : public WebMethodTask<MockWebUserMediaClient> { 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) UserMediaRequestTask(MockWebUserMediaClient* object, 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const WebUserMediaRequest& request, 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const WebMediaStream result) 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : WebMethodTask<MockWebUserMediaClient>(object), 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) request_(request), 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) result_(result) { 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK(!result_.isNull()); 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void RunIfValid() OVERRIDE { request_.requestSucceeded(result_); } 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebUserMediaRequest request_; 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebMediaStream result_; 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(UserMediaRequestTask); 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class UserMediaRequestConstraintFailedTask 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : public WebMethodTask<MockWebUserMediaClient> { 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) UserMediaRequestConstraintFailedTask(MockWebUserMediaClient* object, 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const WebUserMediaRequest& request, 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const WebString& constraint) 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : WebMethodTask<MockWebUserMediaClient>(object), 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) request_(request), 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) constraint_(constraint) {} 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void RunIfValid() OVERRIDE { 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) request_.requestFailedConstraint(constraint_); 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebUserMediaRequest request_; 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebString constraint_; 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(UserMediaRequestConstraintFailedTask); 7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class UserMediaRequestPermissionDeniedTask 8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : public WebMethodTask<MockWebUserMediaClient> { 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) UserMediaRequestPermissionDeniedTask(MockWebUserMediaClient* object, 8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const WebUserMediaRequest& request) 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : WebMethodTask<MockWebUserMediaClient>(object), 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) request_(request) {} 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void RunIfValid() OVERRIDE { request_.requestFailed(); } 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebUserMediaRequest request_; 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(UserMediaRequestPermissionDeniedTask); 9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class MediaDevicesRequestTask : public WebMethodTask<MockWebUserMediaClient> { 9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MediaDevicesRequestTask(MockWebUserMediaClient* object, 9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const WebMediaDevicesRequest& request, 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const WebVector<WebMediaDeviceInfo>& result) 10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : WebMethodTask<MockWebUserMediaClient>(object), 10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) request_(request), 10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) result_(result) {} 10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void RunIfValid() OVERRIDE { request_.requestSucceeded(result_); } 10546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 10646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 10746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebMediaDevicesRequest request_; 10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebVector<WebMediaDeviceInfo> result_; 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(MediaDevicesRequestTask); 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass SourcesRequestTask : public WebMethodTask<MockWebUserMediaClient> { 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SourcesRequestTask(MockWebUserMediaClient* object, 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const WebMediaStreamTrackSourcesRequest& request, 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const WebVector<WebSourceInfo>& result) 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : WebMethodTask<MockWebUserMediaClient>(object), 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci request_(request), 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result_(result) {} 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void RunIfValid() OVERRIDE { request_.requestSucceeded(result_); } 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebMediaStreamTrackSourcesRequest request_; 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebVector<WebSourceInfo> result_; 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(SourcesRequestTask); 12946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 13046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 13146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class MockExtraData : public WebMediaStream::ExtraData { 13246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 13346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int foo; 13446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 13546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 13646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)MockWebUserMediaClient::MockWebUserMediaClient(WebTestDelegate* delegate) 13746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : delegate_(delegate) {} 13846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 13946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void MockWebUserMediaClient::requestUserMedia( 14046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const WebUserMediaRequest& stream_request) { 14146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK(!stream_request.isNull()); 14246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebUserMediaRequest request = stream_request; 14346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 14446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (request.ownerDocument().isNull() || !request.ownerDocument().frame()) { 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_->PostTask( 14646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) new UserMediaRequestPermissionDeniedTask(this, request)); 14746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return; 14846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 14946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 15046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebMediaConstraints constraints = request.audioConstraints(); 15146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebString failed_constraint; 15246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!constraints.isNull() && 15346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) !MockConstraints::VerifyConstraints(constraints, &failed_constraint)) { 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_->PostTask(new UserMediaRequestConstraintFailedTask( 15546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this, request, failed_constraint)); 15646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return; 15746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 15846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) constraints = request.videoConstraints(); 15946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!constraints.isNull() && 16046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) !MockConstraints::VerifyConstraints(constraints, &failed_constraint)) { 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_->PostTask(new UserMediaRequestConstraintFailedTask( 16246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) this, request, failed_constraint)); 16346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return; 16446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 16546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 16646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const size_t zero = 0; 16746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const size_t one = 1; 16846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebVector<WebMediaStreamTrack> audio_tracks(request.audio() ? one : zero); 16946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebVector<WebMediaStreamTrack> video_tracks(request.video() ? one : zero); 17046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 17146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (request.audio()) { 17246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebMediaStreamSource source; 17346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) source.initialize("MockAudioDevice#1", 17446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebMediaStreamSource::TypeAudio, 17546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "Mock audio device"); 17646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) audio_tracks[0].initialize(source); 17746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 17846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 17946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (request.video()) { 18046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebMediaStreamSource source; 18146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) source.initialize("MockVideoDevice#1", 18246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebMediaStreamSource::TypeVideo, 18346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "Mock video device"); 18446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) video_tracks[0].initialize(source); 18546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 18646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 18746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WebMediaStream stream; 18846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) stream.initialize(audio_tracks, video_tracks); 18946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 19046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) stream.setExtraData(new MockExtraData()); 19146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_->PostTask(new UserMediaRequestTask(this, request, stream)); 19346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 19446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 19546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void MockWebUserMediaClient::cancelUserMediaRequest( 19646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const WebUserMediaRequest&) { 19746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 19846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 19946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void MockWebUserMediaClient::requestMediaDevices( 20046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const WebMediaDevicesRequest& request) { 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci struct { 2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const char* device_id; 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebMediaDeviceInfo::MediaDeviceKind kind; 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const char* label; 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const char* group_id; 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } test_devices[] = { 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "device1", 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebMediaDeviceInfo::MediaDeviceKindAudioInput, 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "Built-in microphone", 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "group1", 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "device2", 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebMediaDeviceInfo::MediaDeviceKindAudioOutput, 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "Built-in speakers", 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "group1", 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "device3", 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebMediaDeviceInfo::MediaDeviceKindVideoInput, 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "Build-in webcam", 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "group2", 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebVector<WebMediaDeviceInfo> devices(ARRAYSIZE_UNSAFE(test_devices)); 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_devices); ++i) { 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci devices[i].initialize(WebString::fromUTF8(test_devices[i].device_id), 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_devices[i].kind, 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebString::fromUTF8(test_devices[i].label), 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebString::fromUTF8(test_devices[i].group_id)); 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_->PostTask(new MediaDevicesRequestTask(this, request, devices)); 23646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 23746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 23846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void MockWebUserMediaClient::cancelMediaDevicesRequest( 23946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const WebMediaDevicesRequest&) { 24046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 24146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid MockWebUserMediaClient::requestSources( 2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const blink::WebMediaStreamTrackSourcesRequest& request) { 2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci struct { 2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const char* id; 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebSourceInfo::SourceKind kind; 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const char* label; 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebSourceInfo::VideoFacingMode facing; 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } test_sources[] = { 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "device1", 2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebSourceInfo::SourceKindAudio, 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "Built-in microphone", 2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebSourceInfo::VideoFacingModeNone, 2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "device2", 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebSourceInfo::SourceKindVideo, 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "Build-in webcam", 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebSourceInfo::VideoFacingModeEnvironment, 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebVector<WebSourceInfo> sources(ARRAYSIZE_UNSAFE(test_sources)); 2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_sources); ++i) { 2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sources[i].initialize(WebString::fromUTF8(test_sources[i].id), 2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_sources[i].kind, 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebString::fromUTF8(test_sources[i].label), 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_sources[i].facing); 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_->PostTask(new SourcesRequestTask(this, request, sources)); 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 27546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace content 276