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 |