Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(641)

Side by Side Diff: components/test_runner/mock_web_user_media_client.cc

Issue 2707183003: Move //components/test_runner back into //content/shell (Closed)
Patch Set: Trim DEPS Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698