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

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

Issue 2363673002: Promise-based RTCPeerConnection::getStats implementation. (Closed)
Patch Set: RTCStatsReport.idl behind getStats-flag instead of updating virtual/stable/webexposed/global-interf… Created 4 years, 2 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 <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 } 101 }
102 102
103 private: 103 private:
104 const std::string id_; 104 const std::string id_;
105 const std::string type_name_; 105 const std::string type_name_;
106 const double timestamp_; 106 const double timestamp_;
107 // (name, value) pairs. 107 // (name, value) pairs.
108 std::vector<std::pair<std::string, std::string>> values_; 108 std::vector<std::pair<std::string, std::string>> values_;
109 }; 109 };
110 110
111 template<typename T>
112 WebVector<T> sequenceWithValue(T value) {
113 return WebVector<T>(&value, 1);
114 }
115
116 class MockWebRTCStatsMember : public blink::WebRTCStatsMember {
117 public:
118 MockWebRTCStatsMember(
119 const std::string& name, blink::WebRTCStatsMemberType type)
120 : name_(name), type_(type) {}
121
122 // blink::WebRTCStatsMember overrides.
123 blink::WebString name() const override {
124 return blink::WebString::fromUTF8(name_);
125 }
126 blink::WebRTCStatsMemberType type() const override {
127 return type_;
128 }
129 bool isDefined() const override { return true; }
130 int32_t valueInt32() const override { return 42; }
131 uint32_t valueUint32() const override { return 42; }
132 int64_t valueInt64() const override { return 42; }
133 uint64_t valueUint64() const override { return 42; }
134 double valueDouble() const override { return 42.0; }
135 blink::WebString valueString() const override {
136 return blink::WebString::fromUTF8("42");
137 }
138 WebVector<int32_t> valueSequenceInt32() const override {
139 return sequenceWithValue<int32_t>(42);
140 }
141 WebVector<uint32_t> valueSequenceUint32() const override {
142 return sequenceWithValue<uint32_t>(42);
143 }
144 WebVector<int64_t> valueSequenceInt64() const override {
145 return sequenceWithValue<int64_t>(42);
146 }
147 WebVector<uint64_t> valueSequenceUint64() const override {
148 return sequenceWithValue<uint64_t>(42);
149 }
150 WebVector<double> valueSequenceDouble() const override {
151 return sequenceWithValue<double>(42.0);
152 }
153 blink::WebVector<blink::WebString> valueSequenceString() const override {
154 return sequenceWithValue<blink::WebString>(
155 blink::WebString::fromUTF8("42"));
156 }
157
158 private:
159 std::string name_;
160 blink::WebRTCStatsMemberType type_;
161 };
162
163 class MockWebRTCStats : public blink::WebRTCStats {
164 public:
165 MockWebRTCStats(
166 const std::string& id, const std::string& type, double timestamp)
167 : id_(id), type_(type), timestamp_(timestamp) {
168 }
169
170 void addMember(const std::string& name, blink::WebRTCStatsMemberType type) {
171 members_.push_back(std::make_pair(name, type));
172 }
173
174 // blink::WebRTCStats overrides.
175 blink::WebString id() const override {
176 return blink::WebString::fromUTF8(id_);
177 }
178 blink::WebString type() const override {
179 return blink::WebString::fromUTF8(type_);
180 }
181 double timestamp() const override {
182 return timestamp_;
183 }
184 size_t membersCount() const override {
185 return members_.size();
186 }
187 std::unique_ptr<WebRTCStatsMember> getMember(size_t i) const override {
188 return std::unique_ptr<WebRTCStatsMember>(new MockWebRTCStatsMember(
189 members_[i].first, members_[i].second));
190 }
191
192 private:
193 std::string id_;
194 std::string type_;
195 double timestamp_;
196 std::vector<std::pair<std::string, blink::WebRTCStatsMemberType>> members_;
197 };
198
199 class MockWebRTCStatsReport : public blink::WebRTCStatsReport {
200 public:
201 MockWebRTCStatsReport() : i_(0) {}
202 MockWebRTCStatsReport(const MockWebRTCStatsReport& other)
203 : stats_(other.stats_), i_(0) {}
204
205 void AddStats(const MockWebRTCStats& stats) {
206 stats_.push_back(stats);
207 }
208
209 // blink::WebRTCStatsReport overrides.
210 std::unique_ptr<blink::WebRTCStatsReport> copyHandle() const override {
211 // Because this is just a mock, we copy the underlying stats instead of
212 // referencing the same stats as the original report.
213 return std::unique_ptr<blink::WebRTCStatsReport>(
214 new MockWebRTCStatsReport(*this));
215 }
216 std::unique_ptr<WebRTCStats> getStats(WebString id) const override {
217 for (const MockWebRTCStats& stats : stats_) {
218 if (stats.id() == id)
219 return std::unique_ptr<blink::WebRTCStats>(new MockWebRTCStats(stats));
220 }
221 return nullptr;
222 }
223 std::unique_ptr<blink::WebRTCStats> next() override {
224 if (i_ >= stats_.size())
225 return nullptr;
226 return std::unique_ptr<blink::WebRTCStats>(
227 new MockWebRTCStats(stats_[i_++]));
228 }
229
230 private:
231 std::vector<MockWebRTCStats> stats_;
232 size_t i_;
233 };
234
111 } // namespace 235 } // namespace
112 236
113 MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler() 237 MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler()
114 : weak_factory_(this) {} 238 : weak_factory_(this) {}
115 239
116 MockWebRTCPeerConnectionHandler::~MockWebRTCPeerConnectionHandler() { 240 MockWebRTCPeerConnectionHandler::~MockWebRTCPeerConnectionHandler() {
117 } 241 }
118 242
119 MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler( 243 MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler(
120 WebRTCPeerConnectionHandlerClient* client, 244 WebRTCPeerConnectionHandlerClient* client,
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 response.addStats(video_stats); 510 response.addStats(video_stats);
387 } 511 }
388 } 512 }
389 interfaces_->GetDelegate()->PostTask( 513 interfaces_->GetDelegate()->PostTask(
390 base::Bind(&blink::WebRTCStatsRequest::requestSucceeded, 514 base::Bind(&blink::WebRTCStatsRequest::requestSucceeded,
391 base::Owned(new WebRTCStatsRequest(request)), response)); 515 base::Owned(new WebRTCStatsRequest(request)), response));
392 } 516 }
393 517
394 void MockWebRTCPeerConnectionHandler::getStats( 518 void MockWebRTCPeerConnectionHandler::getStats(
395 std::unique_ptr<blink::WebRTCStatsReportCallback> callback) { 519 std::unique_ptr<blink::WebRTCStatsReportCallback> callback) {
396 // TODO(hbos): When blink::RTCPeerConnection starts using the new |getStats| 520 std::unique_ptr<MockWebRTCStatsReport> report(new MockWebRTCStatsReport());
397 // this needs to be implemented. crbug.com/627816. 521 MockWebRTCStats stats("mock-stats-01", "mock-stats", 1234.0);
398 NOTREACHED(); 522 stats.addMember("int32", blink::WebRTCStatsMemberTypeInt32);
523 stats.addMember("uint32", blink::WebRTCStatsMemberTypeUint32);
524 stats.addMember("int64", blink::WebRTCStatsMemberTypeInt64);
525 stats.addMember("uint64", blink::WebRTCStatsMemberTypeUint64);
526 stats.addMember("double", blink::WebRTCStatsMemberTypeDouble);
527 stats.addMember("string", blink::WebRTCStatsMemberTypeString);
528 stats.addMember("sequenceInt32", blink::WebRTCStatsMemberTypeSequenceInt32);
529 stats.addMember("sequenceUint32", blink::WebRTCStatsMemberTypeSequenceUint32);
530 stats.addMember("sequenceInt64", blink::WebRTCStatsMemberTypeSequenceInt64);
531 stats.addMember("sequenceUint64", blink::WebRTCStatsMemberTypeSequenceUint64);
532 stats.addMember("sequenceDouble", blink::WebRTCStatsMemberTypeSequenceDouble);
533 stats.addMember("sequenceString", blink::WebRTCStatsMemberTypeSequenceString);
534 report->AddStats(stats);
535 callback->OnStatsDelivered(std::unique_ptr<blink::WebRTCStatsReport>(
536 report.release()));
399 } 537 }
400 538
401 void MockWebRTCPeerConnectionHandler::ReportCreationOfDataChannel() { 539 void MockWebRTCPeerConnectionHandler::ReportCreationOfDataChannel() {
402 WebRTCDataChannelInit init; 540 WebRTCDataChannelInit init;
403 WebRTCDataChannelHandler* remote_data_channel = 541 WebRTCDataChannelHandler* remote_data_channel =
404 new MockWebRTCDataChannelHandler("MockRemoteDataChannel", init, 542 new MockWebRTCDataChannelHandler("MockRemoteDataChannel", init,
405 interfaces_->GetDelegate()); 543 interfaces_->GetDelegate());
406 client_->didAddRemoteDataChannel(remote_data_channel); 544 client_->didAddRemoteDataChannel(remote_data_channel);
407 } 545 }
408 546
(...skipping 14 matching lines...) Expand all
423 const WebMediaStreamTrack& track) { 561 const WebMediaStreamTrack& track) {
424 return new MockWebRTCDTMFSenderHandler(track, interfaces_->GetDelegate()); 562 return new MockWebRTCDTMFSenderHandler(track, interfaces_->GetDelegate());
425 } 563 }
426 564
427 void MockWebRTCPeerConnectionHandler::stop() { 565 void MockWebRTCPeerConnectionHandler::stop() {
428 stopped_ = true; 566 stopped_ = true;
429 weak_factory_.InvalidateWeakPtrs(); 567 weak_factory_.InvalidateWeakPtrs();
430 } 568 }
431 569
432 } // namespace test_runner 570 } // namespace test_runner
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698