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