| OLD | NEW |
| (Empty) |
| 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 "components/test_runner/mock_web_user_media_client.h" | |
| 6 | |
| 7 #include <stddef.h> | |
| 8 | |
| 9 #include "base/bind.h" | |
| 10 #include "base/bind_helpers.h" | |
| 11 #include "base/logging.h" | |
| 12 #include "base/macros.h" | |
| 13 #include "components/test_runner/web_test_delegate.h" | |
| 14 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" | |
| 15 #include "third_party/WebKit/public/platform/WebMediaDeviceInfo.h" | |
| 16 #include "third_party/WebKit/public/platform/WebMediaStream.h" | |
| 17 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" | |
| 18 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" | |
| 19 #include "third_party/WebKit/public/platform/WebVector.h" | |
| 20 #include "third_party/WebKit/public/web/WebDocument.h" | |
| 21 #include "third_party/WebKit/public/web/WebMediaDevicesRequest.h" | |
| 22 #include "third_party/WebKit/public/web/WebUserMediaRequest.h" | |
| 23 | |
| 24 using blink::WebMediaConstraints; | |
| 25 using blink::WebMediaDeviceInfo; | |
| 26 using blink::WebMediaDevicesRequest; | |
| 27 using blink::WebMediaStream; | |
| 28 using blink::WebMediaStreamSource; | |
| 29 using blink::WebMediaStreamTrack; | |
| 30 using blink::WebString; | |
| 31 using blink::WebUserMediaRequest; | |
| 32 using blink::WebVector; | |
| 33 | |
| 34 namespace test_runner { | |
| 35 | |
| 36 class MockExtraData : public WebMediaStream::ExtraData { | |
| 37 }; | |
| 38 | |
| 39 MockWebUserMediaClient::MockWebUserMediaClient(WebTestDelegate* delegate) | |
| 40 : delegate_(delegate), | |
| 41 should_enumerate_extra_device_(false), | |
| 42 weak_factory_(this) {} | |
| 43 | |
| 44 MockWebUserMediaClient::~MockWebUserMediaClient() {} | |
| 45 | |
| 46 void MockWebUserMediaClient::requestUserMedia( | |
| 47 const WebUserMediaRequest& stream_request) { | |
| 48 DCHECK(!stream_request.isNull()); | |
| 49 WebUserMediaRequest request = stream_request; | |
| 50 | |
| 51 if (request.ownerDocument().isNull() || !request.ownerDocument().frame()) { | |
| 52 delegate_->PostTask(base::Bind( | |
| 53 &WebUserMediaRequest::requestFailed, | |
| 54 base::Owned(new WebUserMediaRequest(request)), WebString())); | |
| 55 return; | |
| 56 } | |
| 57 | |
| 58 WebMediaStream stream; | |
| 59 stream.initialize(WebVector<WebMediaStreamTrack>(), | |
| 60 WebVector<WebMediaStreamTrack>()); | |
| 61 stream.setExtraData(new MockExtraData()); | |
| 62 | |
| 63 if (request.audio() && | |
| 64 !delegate_->AddMediaStreamAudioSourceAndTrack(&stream)) { | |
| 65 WebMediaStreamSource source; | |
| 66 source.initialize("MockAudioDevice#1", | |
| 67 WebMediaStreamSource::TypeAudio, | |
| 68 "Mock audio device", | |
| 69 false /* remote */); | |
| 70 WebMediaStreamTrack web_track; | |
| 71 web_track.initialize(source); | |
| 72 stream.addTrack(web_track); | |
| 73 } | |
| 74 | |
| 75 if (request.video() && | |
| 76 !delegate_->AddMediaStreamVideoSourceAndTrack(&stream)) { | |
| 77 WebMediaStreamSource source; | |
| 78 source.initialize("MockVideoDevice#1", | |
| 79 WebMediaStreamSource::TypeVideo, | |
| 80 "Mock video device", | |
| 81 false /* remote */); | |
| 82 WebMediaStreamTrack web_track; | |
| 83 web_track.initialize(source); | |
| 84 stream.addTrack(web_track); | |
| 85 } | |
| 86 | |
| 87 delegate_->PostTask( | |
| 88 base::Bind(&WebUserMediaRequest::requestSucceeded, | |
| 89 base::Owned(new WebUserMediaRequest(request)), stream)); | |
| 90 } | |
| 91 | |
| 92 void MockWebUserMediaClient::cancelUserMediaRequest( | |
| 93 const WebUserMediaRequest&) { | |
| 94 } | |
| 95 | |
| 96 void MockWebUserMediaClient::requestMediaDevices( | |
| 97 const WebMediaDevicesRequest& request) { | |
| 98 struct { | |
| 99 const char* device_id; | |
| 100 WebMediaDeviceInfo::MediaDeviceKind kind; | |
| 101 const char* label; | |
| 102 const char* group_id; | |
| 103 } test_devices[] = { | |
| 104 { | |
| 105 "device1", | |
| 106 WebMediaDeviceInfo::MediaDeviceKindAudioInput, | |
| 107 "Built-in microphone", | |
| 108 "group1", | |
| 109 }, | |
| 110 { | |
| 111 "device2", | |
| 112 WebMediaDeviceInfo::MediaDeviceKindAudioOutput, | |
| 113 "Built-in speakers", | |
| 114 "group1", | |
| 115 }, | |
| 116 { | |
| 117 "device3", | |
| 118 WebMediaDeviceInfo::MediaDeviceKindVideoInput, | |
| 119 "Built-in webcam", | |
| 120 "group2", | |
| 121 }, | |
| 122 { | |
| 123 "device4", | |
| 124 WebMediaDeviceInfo::MediaDeviceKindAudioInput, | |
| 125 "Extra microphone", | |
| 126 "group3", | |
| 127 }, | |
| 128 }; | |
| 129 | |
| 130 size_t num_devices = should_enumerate_extra_device_ | |
| 131 ? arraysize(test_devices) | |
| 132 : arraysize(test_devices) - 1; | |
| 133 WebVector<WebMediaDeviceInfo> devices(num_devices); | |
| 134 for (size_t i = 0; i < num_devices; ++i) { | |
| 135 devices[i].initialize(WebString::fromUTF8(test_devices[i].device_id), | |
| 136 test_devices[i].kind, | |
| 137 WebString::fromUTF8(test_devices[i].label), | |
| 138 WebString::fromUTF8(test_devices[i].group_id)); | |
| 139 } | |
| 140 | |
| 141 delegate_->PostTask( | |
| 142 base::Bind(&WebMediaDevicesRequest::requestSucceeded, | |
| 143 base::Owned(new WebMediaDevicesRequest(request)), devices)); | |
| 144 | |
| 145 should_enumerate_extra_device_ = !should_enumerate_extra_device_; | |
| 146 if (!media_device_change_observer_.isNull()) | |
| 147 media_device_change_observer_.didChangeMediaDevices(); | |
| 148 } | |
| 149 | |
| 150 void MockWebUserMediaClient::setMediaDeviceChangeObserver( | |
| 151 const blink::WebMediaDeviceChangeObserver& observer) { | |
| 152 media_device_change_observer_ = observer; | |
| 153 } | |
| 154 | |
| 155 } // namespace test_runner | |
| OLD | NEW |