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

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

Issue 1852603002: Replacing most of web_task.h with base::Closure + base::WeakPtrFactory. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move-mocks-to-test-runner
Patch Set: Rebasing... Created 4 years, 8 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
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_webrtc_peer_connection_handler.h" 5 #include "components/test_runner/mock_webrtc_peer_connection_handler.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/bind.h"
10 #include "base/bind_helpers.h"
9 #include "components/test_runner/mock_webrtc_data_channel_handler.h" 11 #include "components/test_runner/mock_webrtc_data_channel_handler.h"
10 #include "components/test_runner/mock_webrtc_dtmf_sender_handler.h" 12 #include "components/test_runner/mock_webrtc_dtmf_sender_handler.h"
11 #include "components/test_runner/test_interfaces.h" 13 #include "components/test_runner/test_interfaces.h"
14 #include "components/test_runner/web_task.h"
12 #include "components/test_runner/web_test_delegate.h" 15 #include "components/test_runner/web_test_delegate.h"
13 #include "third_party/WebKit/public/platform/WebMediaStream.h" 16 #include "third_party/WebKit/public/platform/WebMediaStream.h"
14 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" 17 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
15 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 18 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
16 #include "third_party/WebKit/public/platform/WebRTCAnswerOptions.h" 19 #include "third_party/WebKit/public/platform/WebRTCAnswerOptions.h"
17 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h" 20 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h"
18 #include "third_party/WebKit/public/platform/WebRTCOfferOptions.h" 21 #include "third_party/WebKit/public/platform/WebRTCOfferOptions.h"
19 #include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandlerClient.h " 22 #include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandlerClient.h "
20 #include "third_party/WebKit/public/platform/WebRTCStatsResponse.h" 23 #include "third_party/WebKit/public/platform/WebRTCStatsResponse.h"
21 #include "third_party/WebKit/public/platform/WebRTCVoidRequest.h" 24 #include "third_party/WebKit/public/platform/WebRTCVoidRequest.h"
22 #include "third_party/WebKit/public/platform/WebString.h" 25 #include "third_party/WebKit/public/platform/WebString.h"
23 #include "third_party/WebKit/public/platform/WebVector.h" 26 #include "third_party/WebKit/public/platform/WebVector.h"
24 27
25 using namespace blink; 28 using namespace blink;
26 29
27 namespace test_runner { 30 namespace test_runner {
28 31
29 class RTCSessionDescriptionRequestSuccededTask 32 MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler()
30 : public WebMethodTask<MockWebRTCPeerConnectionHandler> { 33 : weak_factory_(this) {}
31 public:
32 RTCSessionDescriptionRequestSuccededTask(
33 MockWebRTCPeerConnectionHandler* object,
34 const WebRTCSessionDescriptionRequest& request,
35 const WebRTCSessionDescription& result)
36 : WebMethodTask<MockWebRTCPeerConnectionHandler>(object),
37 request_(request),
38 result_(result) {}
39
40 void RunIfValid() override { request_.requestSucceeded(result_); }
41
42 private:
43 WebRTCSessionDescriptionRequest request_;
44 WebRTCSessionDescription result_;
45 };
46
47 class RTCSessionDescriptionRequestFailedTask
48 : public WebMethodTask<MockWebRTCPeerConnectionHandler> {
49 public:
50 RTCSessionDescriptionRequestFailedTask(
51 MockWebRTCPeerConnectionHandler* object,
52 const WebRTCSessionDescriptionRequest& request)
53 : WebMethodTask<MockWebRTCPeerConnectionHandler>(object),
54 request_(request) {}
55
56 void RunIfValid() override { request_.requestFailed("TEST_ERROR"); }
57
58 private:
59 WebRTCSessionDescriptionRequest request_;
60 };
61
62 class RTCStatsRequestSucceededTask
63 : public WebMethodTask<MockWebRTCPeerConnectionHandler> {
64 public:
65 RTCStatsRequestSucceededTask(MockWebRTCPeerConnectionHandler* object,
66 const blink::WebRTCStatsRequest& request,
67 const blink::WebRTCStatsResponse& response)
68 : WebMethodTask<MockWebRTCPeerConnectionHandler>(object),
69 request_(request),
70 response_(response) {}
71
72 void RunIfValid() override { request_.requestSucceeded(response_); }
73
74 private:
75 blink::WebRTCStatsRequest request_;
76 blink::WebRTCStatsResponse response_;
77 };
78
79 class RTCVoidRequestTask
80 : public WebMethodTask<MockWebRTCPeerConnectionHandler> {
81 public:
82 RTCVoidRequestTask(MockWebRTCPeerConnectionHandler* object,
83 const WebRTCVoidRequest& request,
84 bool succeeded)
85 : WebMethodTask<MockWebRTCPeerConnectionHandler>(object),
86 request_(request),
87 succeeded_(succeeded) {}
88
89 void RunIfValid() override {
90 if (succeeded_)
91 request_.requestSucceeded();
92 else
93 request_.requestFailed("TEST_ERROR");
94 }
95
96 private:
97 WebRTCVoidRequest request_;
98 bool succeeded_;
99 };
100
101 class RTCPeerConnectionStateTask
102 : public WebMethodTask<MockWebRTCPeerConnectionHandler> {
103 public:
104 RTCPeerConnectionStateTask(
105 MockWebRTCPeerConnectionHandler* object,
106 WebRTCPeerConnectionHandlerClient* client,
107 WebRTCPeerConnectionHandlerClient::ICEConnectionState connection_state,
108 WebRTCPeerConnectionHandlerClient::ICEGatheringState gathering_state)
109 : WebMethodTask<MockWebRTCPeerConnectionHandler>(object),
110 client_(client),
111 connection_state_(connection_state),
112 gathering_state_(gathering_state) {}
113
114 void RunIfValid() override {
115 client_->didChangeICEGatheringState(gathering_state_);
116 client_->didChangeICEConnectionState(connection_state_);
117 }
118
119 private:
120 WebRTCPeerConnectionHandlerClient* client_;
121 WebRTCPeerConnectionHandlerClient::ICEConnectionState connection_state_;
122 WebRTCPeerConnectionHandlerClient::ICEGatheringState gathering_state_;
123 };
124
125 class RemoteDataChannelTask
126 : public WebMethodTask<MockWebRTCPeerConnectionHandler> {
127 public:
128 RemoteDataChannelTask(MockWebRTCPeerConnectionHandler* object,
129 WebRTCPeerConnectionHandlerClient* client,
130 WebTestDelegate* delegate)
131 : WebMethodTask<MockWebRTCPeerConnectionHandler>(object),
132 client_(client),
133 delegate_(delegate) {}
134
135 void RunIfValid() override {
136 WebRTCDataChannelInit init;
137 WebRTCDataChannelHandler* remote_data_channel =
138 new MockWebRTCDataChannelHandler(
139 "MockRemoteDataChannel", init, delegate_);
140 client_->didAddRemoteDataChannel(remote_data_channel);
141 }
142
143 private:
144 WebRTCPeerConnectionHandlerClient* client_;
145 WebTestDelegate* delegate_;
146 };
147
148 /////////////////////
149
150 MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler() {
151 }
152 34
153 MockWebRTCPeerConnectionHandler::~MockWebRTCPeerConnectionHandler() { 35 MockWebRTCPeerConnectionHandler::~MockWebRTCPeerConnectionHandler() {
154 } 36 }
155 37
156 MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler( 38 MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler(
157 WebRTCPeerConnectionHandlerClient* client, 39 WebRTCPeerConnectionHandlerClient* client,
158 TestInterfaces* interfaces) 40 TestInterfaces* interfaces)
159 : client_(client), 41 : client_(client),
160 stopped_(false), 42 stopped_(false),
161 stream_count_(0), 43 stream_count_(0),
162 interfaces_(interfaces) { 44 interfaces_(interfaces),
45 weak_factory_(this) {}
46
47 void MockWebRTCPeerConnectionHandler::ReportInitializeCompleted() {
48 client_->didChangeICEGatheringState(
49 WebRTCPeerConnectionHandlerClient::ICEGatheringStateComplete);
50 client_->didChangeICEConnectionState(
51 WebRTCPeerConnectionHandlerClient::ICEConnectionStateCompleted);
163 } 52 }
164 53
165 bool MockWebRTCPeerConnectionHandler::initialize( 54 bool MockWebRTCPeerConnectionHandler::initialize(
166 const WebRTCConfiguration& configuration, 55 const WebRTCConfiguration& configuration,
167 const WebMediaConstraints& constraints) { 56 const WebMediaConstraints& constraints) {
168 interfaces_->GetDelegate()->PostTask(new RTCPeerConnectionStateTask( 57 interfaces_->GetDelegate()->PostTask(new WebCallbackTask(
169 this, 58 base::Bind(&MockWebRTCPeerConnectionHandler::ReportInitializeCompleted,
170 client_, 59 weak_factory_.GetWeakPtr())));
171 WebRTCPeerConnectionHandlerClient::ICEConnectionStateCompleted,
172 WebRTCPeerConnectionHandlerClient::ICEGatheringStateComplete));
173 return true; 60 return true;
174 } 61 }
175 62
176 void MockWebRTCPeerConnectionHandler::createOffer( 63 void MockWebRTCPeerConnectionHandler::createOffer(
177 const WebRTCSessionDescriptionRequest& request, 64 const WebRTCSessionDescriptionRequest& request,
178 const WebMediaConstraints& constraints) { 65 const WebMediaConstraints& constraints) {
179 interfaces_->GetDelegate()->PostTask( 66 PostRequestFailure(request);
180 new RTCSessionDescriptionRequestFailedTask(this, request)); 67 }
68
69 void MockWebRTCPeerConnectionHandler::PostRequestResult(
70 const WebRTCSessionDescriptionRequest& request,
71 const WebRTCSessionDescription& session_description) {
72 interfaces_->GetDelegate()->PostTask(new WebCallbackTask(
73 base::Bind(&WebRTCSessionDescriptionRequest::requestSucceeded,
74 base::Owned(new WebRTCSessionDescriptionRequest(request)),
75 session_description)));
76 }
77
78 void MockWebRTCPeerConnectionHandler::PostRequestFailure(
79 const WebRTCSessionDescriptionRequest& request) {
80 interfaces_->GetDelegate()->PostTask(new WebCallbackTask(
81 base::Bind(&WebRTCSessionDescriptionRequest::requestFailed,
82 base::Owned(new WebRTCSessionDescriptionRequest(request)),
83 WebString("TEST_ERROR"))));
84 }
85
86 void MockWebRTCPeerConnectionHandler::PostRequestResult(
87 const WebRTCVoidRequest& request) {
88 interfaces_->GetDelegate()->PostTask(new WebCallbackTask(
89 base::Bind(&WebRTCVoidRequest::requestSucceeded,
90 base::Owned(new WebRTCVoidRequest(request)))));
91 }
92
93 void MockWebRTCPeerConnectionHandler::PostRequestFailure(
94 const WebRTCVoidRequest& request) {
95 interfaces_->GetDelegate()->PostTask(new WebCallbackTask(base::Bind(
96 &WebRTCVoidRequest::requestFailed,
97 base::Owned(new WebRTCVoidRequest(request)), WebString("TEST_ERROR"))));
181 } 98 }
182 99
183 void MockWebRTCPeerConnectionHandler::createOffer( 100 void MockWebRTCPeerConnectionHandler::createOffer(
184 const WebRTCSessionDescriptionRequest& request, 101 const WebRTCSessionDescriptionRequest& request,
185 const blink::WebRTCOfferOptions& options) { 102 const blink::WebRTCOfferOptions& options) {
186 if (options.iceRestart() && options.voiceActivityDetection()) { 103 if (options.iceRestart() && options.voiceActivityDetection()) {
187 WebRTCSessionDescription session_description; 104 WebRTCSessionDescription session_description;
188 session_description.initialize("offer", "local"); 105 session_description.initialize("offer", "local");
189 interfaces_->GetDelegate()->PostTask( 106 PostRequestResult(request, session_description);
190 new RTCSessionDescriptionRequestSuccededTask(
191 this, request, session_description));
192 } else { 107 } else {
193 interfaces_->GetDelegate()->PostTask( 108 PostRequestFailure(request);
194 new RTCSessionDescriptionRequestFailedTask(this, request));
195 } 109 }
196 } 110 }
197 111
198 void MockWebRTCPeerConnectionHandler::createAnswer( 112 void MockWebRTCPeerConnectionHandler::createAnswer(
199 const WebRTCSessionDescriptionRequest& request, 113 const WebRTCSessionDescriptionRequest& request,
200 const WebMediaConstraints& constraints) { 114 const WebMediaConstraints& constraints) {
201 if (!remote_description_.isNull()) { 115 if (!remote_description_.isNull()) {
202 WebRTCSessionDescription session_description; 116 WebRTCSessionDescription session_description;
203 session_description.initialize("answer", "local"); 117 session_description.initialize("answer", "local");
204 interfaces_->GetDelegate()->PostTask( 118 PostRequestResult(request, session_description);
205 new RTCSessionDescriptionRequestSuccededTask( 119 } else {
206 this, request, session_description)); 120 PostRequestFailure(request);
207 } else 121 }
208 interfaces_->GetDelegate()->PostTask(
209 new RTCSessionDescriptionRequestFailedTask(this, request));
210 } 122 }
211 123
212 void MockWebRTCPeerConnectionHandler::createAnswer( 124 void MockWebRTCPeerConnectionHandler::createAnswer(
213 const WebRTCSessionDescriptionRequest& request, 125 const WebRTCSessionDescriptionRequest& request,
214 const blink::WebRTCAnswerOptions& options) { 126 const blink::WebRTCAnswerOptions& options) {
215 if (options.voiceActivityDetection()) { 127 if (options.voiceActivityDetection()) {
216 WebRTCSessionDescription session_description; 128 WebRTCSessionDescription session_description;
217 session_description.initialize("answer", "local"); 129 session_description.initialize("answer", "local");
218 interfaces_->GetDelegate()->PostTask( 130 PostRequestResult(request, session_description);
219 new RTCSessionDescriptionRequestSuccededTask(this, request,
220 session_description));
221 } else { 131 } else {
222 interfaces_->GetDelegate()->PostTask( 132 PostRequestFailure(request);
223 new RTCSessionDescriptionRequestFailedTask(this, request));
224 } 133 }
225 } 134 }
226 135
227 void MockWebRTCPeerConnectionHandler::setLocalDescription( 136 void MockWebRTCPeerConnectionHandler::setLocalDescription(
228 const WebRTCVoidRequest& request, 137 const WebRTCVoidRequest& request,
229 const WebRTCSessionDescription& local_description) { 138 const WebRTCSessionDescription& local_description) {
230 if (!local_description.isNull() && local_description.sdp() == "local") { 139 if (!local_description.isNull() && local_description.sdp() == "local") {
231 local_description_ = local_description; 140 local_description_ = local_description;
232 interfaces_->GetDelegate()->PostTask( 141 PostRequestResult(request);
233 new RTCVoidRequestTask(this, request, true)); 142 } else {
234 } else 143 PostRequestFailure(request);
235 interfaces_->GetDelegate()->PostTask( 144 }
236 new RTCVoidRequestTask(this, request, false));
237 } 145 }
238 146
239 void MockWebRTCPeerConnectionHandler::setRemoteDescription( 147 void MockWebRTCPeerConnectionHandler::setRemoteDescription(
240 const WebRTCVoidRequest& request, 148 const WebRTCVoidRequest& request,
241 const WebRTCSessionDescription& remote_description) { 149 const WebRTCSessionDescription& remote_description) {
242 150
243 if (!remote_description.isNull() && remote_description.sdp() == "remote") { 151 if (!remote_description.isNull() && remote_description.sdp() == "remote") {
244 UpdateRemoteStreams(); 152 UpdateRemoteStreams();
245 remote_description_ = remote_description; 153 remote_description_ = remote_description;
246 interfaces_->GetDelegate()->PostTask( 154 PostRequestResult(request);
247 new RTCVoidRequestTask(this, request, true));
248 } else 155 } else
249 interfaces_->GetDelegate()->PostTask( 156 PostRequestFailure(request);
250 new RTCVoidRequestTask(this, request, false));
251 } 157 }
252 158
253 void MockWebRTCPeerConnectionHandler::UpdateRemoteStreams() { 159 void MockWebRTCPeerConnectionHandler::UpdateRemoteStreams() {
254 // Find all removed streams. 160 // Find all removed streams.
255 // Set the readyState of the remote tracks to ended, remove them from the 161 // Set the readyState of the remote tracks to ended, remove them from the
256 // stream and notify the client. 162 // stream and notify the client.
257 StreamMap::iterator removed_it = remote_streams_.begin(); 163 StreamMap::iterator removed_it = remote_streams_.begin();
258 while (removed_it != remote_streams_.end()) { 164 while (removed_it != remote_streams_.end()) {
259 if (local_streams_.find(removed_it->first) != local_streams_.end()) { 165 if (local_streams_.find(removed_it->first) != local_streams_.end()) {
260 removed_it++; 166 removed_it++;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 251
346 bool MockWebRTCPeerConnectionHandler::addICECandidate( 252 bool MockWebRTCPeerConnectionHandler::addICECandidate(
347 const WebRTCICECandidate& ice_candidate) { 253 const WebRTCICECandidate& ice_candidate) {
348 client_->didGenerateICECandidate(ice_candidate); 254 client_->didGenerateICECandidate(ice_candidate);
349 return true; 255 return true;
350 } 256 }
351 257
352 bool MockWebRTCPeerConnectionHandler::addICECandidate( 258 bool MockWebRTCPeerConnectionHandler::addICECandidate(
353 const WebRTCVoidRequest& request, 259 const WebRTCVoidRequest& request,
354 const WebRTCICECandidate& ice_candidate) { 260 const WebRTCICECandidate& ice_candidate) {
355 interfaces_->GetDelegate()->PostTask( 261 PostRequestResult(request);
356 new RTCVoidRequestTask(this, request, true));
357 return true; 262 return true;
358 } 263 }
359 264
360 bool MockWebRTCPeerConnectionHandler::addStream( 265 bool MockWebRTCPeerConnectionHandler::addStream(
361 const WebMediaStream& stream, 266 const WebMediaStream& stream,
362 const WebMediaConstraints& constraints) { 267 const WebMediaConstraints& constraints) {
363 if (local_streams_.find(stream.id().utf8()) != local_streams_.end()) 268 if (local_streams_.find(stream.id().utf8()) != local_streams_.end())
364 return false; 269 return false;
365 ++stream_count_; 270 ++stream_count_;
366 client_->negotiationNeeded(); 271 client_->negotiationNeeded();
(...skipping 20 matching lines...) Expand all
387 response.addStatistic(report_index, "type", "video"); 292 response.addStatistic(report_index, "type", "video");
388 } else { 293 } else {
389 for (int i = 0; i < stream_count_; ++i) { 294 for (int i = 0; i < stream_count_; ++i) {
390 size_t report_index = 295 size_t report_index =
391 response.addReport("Mock audio", "ssrc", current_date); 296 response.addReport("Mock audio", "ssrc", current_date);
392 response.addStatistic(report_index, "type", "audio"); 297 response.addStatistic(report_index, "type", "audio");
393 report_index = response.addReport("Mock video", "ssrc", current_date); 298 report_index = response.addReport("Mock video", "ssrc", current_date);
394 response.addStatistic(report_index, "type", "video"); 299 response.addStatistic(report_index, "type", "video");
395 } 300 }
396 } 301 }
397 interfaces_->GetDelegate()->PostTask( 302 interfaces_->GetDelegate()->PostTask(new WebCallbackTask(
398 new RTCStatsRequestSucceededTask(this, request, response)); 303 base::Bind(&blink::WebRTCStatsRequest::requestSucceeded,
304 base::Owned(new WebRTCStatsRequest(request)), response)));
305 }
306
307 void MockWebRTCPeerConnectionHandler::ReportCreationOfDataChannel() {
308 WebRTCDataChannelInit init;
309 WebRTCDataChannelHandler* remote_data_channel =
310 new MockWebRTCDataChannelHandler("MockRemoteDataChannel", init,
311 interfaces_->GetDelegate());
312 client_->didAddRemoteDataChannel(remote_data_channel);
399 } 313 }
400 314
401 WebRTCDataChannelHandler* MockWebRTCPeerConnectionHandler::createDataChannel( 315 WebRTCDataChannelHandler* MockWebRTCPeerConnectionHandler::createDataChannel(
402 const WebString& label, 316 const WebString& label,
403 const blink::WebRTCDataChannelInit& init) { 317 const blink::WebRTCDataChannelInit& init) {
404 interfaces_->GetDelegate()->PostTask( 318 interfaces_->GetDelegate()->PostTask(new WebCallbackTask(
405 new RemoteDataChannelTask(this, client_, interfaces_->GetDelegate())); 319 base::Bind(&MockWebRTCPeerConnectionHandler::ReportCreationOfDataChannel,
320 weak_factory_.GetWeakPtr())));
406 321
322 // TODO(lukasza): Unclear if it is okay to return a different object than the
323 // one created in ReportCreationOfDataChannel.
407 return new MockWebRTCDataChannelHandler( 324 return new MockWebRTCDataChannelHandler(
408 label, init, interfaces_->GetDelegate()); 325 label, init, interfaces_->GetDelegate());
409 } 326 }
410 327
411 WebRTCDTMFSenderHandler* MockWebRTCPeerConnectionHandler::createDTMFSender( 328 WebRTCDTMFSenderHandler* MockWebRTCPeerConnectionHandler::createDTMFSender(
412 const WebMediaStreamTrack& track) { 329 const WebMediaStreamTrack& track) {
413 return new MockWebRTCDTMFSenderHandler(track, interfaces_->GetDelegate()); 330 return new MockWebRTCDTMFSenderHandler(track, interfaces_->GetDelegate());
414 } 331 }
415 332
416 void MockWebRTCPeerConnectionHandler::stop() { 333 void MockWebRTCPeerConnectionHandler::stop() {
417 stopped_ = true; 334 stopped_ = true;
418 task_list_.RevokeAll(); 335 weak_factory_.InvalidateWeakPtrs();
419 } 336 }
420 337
421 } // namespace test_runner 338 } // namespace test_runner
OLDNEW
« no previous file with comments | « components/test_runner/mock_webrtc_peer_connection_handler.h ('k') | components/test_runner/spell_check_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698