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

Side by Side Diff: content/shell/test_runner/mock_webrtc_peer_connection_handler.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
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 "content/shell/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>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/bind_helpers.h" 14 #include "base/bind_helpers.h"
15 #include "components/test_runner/mock_webrtc_data_channel_handler.h" 15 #include "content/shell/test_runner/mock_webrtc_data_channel_handler.h"
16 #include "components/test_runner/mock_webrtc_dtmf_sender_handler.h" 16 #include "content/shell/test_runner/mock_webrtc_dtmf_sender_handler.h"
17 #include "components/test_runner/test_interfaces.h" 17 #include "content/shell/test_runner/test_interfaces.h"
18 #include "components/test_runner/web_test_delegate.h" 18 #include "content/shell/test_runner/web_test_delegate.h"
19 #include "third_party/WebKit/public/platform/WebMediaStream.h" 19 #include "third_party/WebKit/public/platform/WebMediaStream.h"
20 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" 20 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
21 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 21 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
22 #include "third_party/WebKit/public/platform/WebRTCAnswerOptions.h" 22 #include "third_party/WebKit/public/platform/WebRTCAnswerOptions.h"
23 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h" 23 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h"
24 #include "third_party/WebKit/public/platform/WebRTCOfferOptions.h" 24 #include "third_party/WebKit/public/platform/WebRTCOfferOptions.h"
25 #include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandlerClient.h " 25 #include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandlerClient.h "
26 #include "third_party/WebKit/public/platform/WebRTCStatsResponse.h" 26 #include "third_party/WebKit/public/platform/WebRTCStatsResponse.h"
27 #include "third_party/WebKit/public/platform/WebRTCVoidRequest.h" 27 #include "third_party/WebKit/public/platform/WebRTCVoidRequest.h"
28 #include "third_party/WebKit/public/platform/WebString.h" 28 #include "third_party/WebKit/public/platform/WebString.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 NOTREACHED(); 63 NOTREACHED();
64 return 0.0f; 64 return 0.0f;
65 } 65 }
66 blink::WebString valueString() const override { 66 blink::WebString valueString() const override {
67 return blink::WebString::fromUTF8((*values_)[i].second); 67 return blink::WebString::fromUTF8((*values_)[i].second);
68 } 68 }
69 bool valueBool() const override { 69 bool valueBool() const override {
70 NOTREACHED(); 70 NOTREACHED();
71 return false; 71 return false;
72 } 72 }
73 blink::WebString valueToString() const override { 73 blink::WebString valueToString() const override { return valueString(); }
74 return valueString();
75 }
76 74
77 private: 75 private:
78 size_t i = 0; 76 size_t i = 0;
79 const std::vector<std::pair<std::string, std::string>>* values_; 77 const std::vector<std::pair<std::string, std::string>>* values_;
80 }; 78 };
81 79
82 MockWebRTCLegacyStats(const char* id, const char* type_name, double timestamp) 80 MockWebRTCLegacyStats(const char* id, const char* type_name, double timestamp)
83 : id_(id), type_name_(type_name), timestamp_(timestamp) {} 81 : id_(id), type_name_(type_name), timestamp_(timestamp) {}
84 82
85 // blink::WebRTCLegacyStats 83 // blink::WebRTCLegacyStats
86 blink::WebString id() const override { 84 blink::WebString id() const override {
87 return blink::WebString::fromUTF8(id_); 85 return blink::WebString::fromUTF8(id_);
88 } 86 }
89 blink::WebString type() const override { 87 blink::WebString type() const override {
90 return blink::WebString::fromUTF8(type_name_); 88 return blink::WebString::fromUTF8(type_name_);
91 } 89 }
92 double timestamp() const override { 90 double timestamp() const override { return timestamp_; }
93 return timestamp_;
94 }
95 blink::WebRTCLegacyStatsMemberIterator* iterator() const override { 91 blink::WebRTCLegacyStatsMemberIterator* iterator() const override {
96 return new MemberIterator(&values_); 92 return new MemberIterator(&values_);
97 } 93 }
98 94
99 void addStatistic(const std::string& name, const std::string& value) { 95 void addStatistic(const std::string& name, const std::string& value) {
100 values_.push_back(std::make_pair(name, value)); 96 values_.push_back(std::make_pair(name, value));
101 } 97 }
102 98
103 private: 99 private:
104 const std::string id_; 100 const std::string id_;
105 const std::string type_name_; 101 const std::string type_name_;
106 const double timestamp_; 102 const double timestamp_;
107 // (name, value) pairs. 103 // (name, value) pairs.
108 std::vector<std::pair<std::string, std::string>> values_; 104 std::vector<std::pair<std::string, std::string>> values_;
109 }; 105 };
110 106
111 template<typename T> 107 template <typename T>
112 WebVector<T> sequenceWithValue(T value) { 108 WebVector<T> sequenceWithValue(T value) {
113 return WebVector<T>(&value, 1); 109 return WebVector<T>(&value, 1);
114 } 110 }
115 111
116 class MockWebRTCStatsMember : public blink::WebRTCStatsMember { 112 class MockWebRTCStatsMember : public blink::WebRTCStatsMember {
117 public: 113 public:
118 MockWebRTCStatsMember( 114 MockWebRTCStatsMember(const std::string& name,
119 const std::string& name, blink::WebRTCStatsMemberType type) 115 blink::WebRTCStatsMemberType type)
120 : name_(name), type_(type) {} 116 : name_(name), type_(type) {}
121 117
122 // blink::WebRTCStatsMember overrides. 118 // blink::WebRTCStatsMember overrides.
123 blink::WebString name() const override { 119 blink::WebString name() const override {
124 return blink::WebString::fromUTF8(name_); 120 return blink::WebString::fromUTF8(name_);
125 } 121 }
126 blink::WebRTCStatsMemberType type() const override { 122 blink::WebRTCStatsMemberType type() const override { return type_; }
127 return type_;
128 }
129 bool isDefined() const override { return true; } 123 bool isDefined() const override { return true; }
130 bool valueBool() const override { return true; } 124 bool valueBool() const override { return true; }
131 int32_t valueInt32() const override { return 42; } 125 int32_t valueInt32() const override { return 42; }
132 uint32_t valueUint32() const override { return 42; } 126 uint32_t valueUint32() const override { return 42; }
133 int64_t valueInt64() const override { return 42; } 127 int64_t valueInt64() const override { return 42; }
134 uint64_t valueUint64() const override { return 42; } 128 uint64_t valueUint64() const override { return 42; }
135 double valueDouble() const override { return 42.0; } 129 double valueDouble() const override { return 42.0; }
136 blink::WebString valueString() const override { 130 blink::WebString valueString() const override {
137 return blink::WebString::fromUTF8("42"); 131 return blink::WebString::fromUTF8("42");
138 } 132 }
(...skipping 20 matching lines...) Expand all
159 blink::WebString::fromUTF8("42")); 153 blink::WebString::fromUTF8("42"));
160 } 154 }
161 155
162 private: 156 private:
163 std::string name_; 157 std::string name_;
164 blink::WebRTCStatsMemberType type_; 158 blink::WebRTCStatsMemberType type_;
165 }; 159 };
166 160
167 class MockWebRTCStats : public blink::WebRTCStats { 161 class MockWebRTCStats : public blink::WebRTCStats {
168 public: 162 public:
169 MockWebRTCStats( 163 MockWebRTCStats(const std::string& id,
170 const std::string& id, const std::string& type, double timestamp) 164 const std::string& type,
171 : id_(id), type_(type), timestamp_(timestamp) { 165 double timestamp)
172 } 166 : id_(id), type_(type), timestamp_(timestamp) {}
173 167
174 void addMember(const std::string& name, blink::WebRTCStatsMemberType type) { 168 void addMember(const std::string& name, blink::WebRTCStatsMemberType type) {
175 members_.push_back(std::make_pair(name, type)); 169 members_.push_back(std::make_pair(name, type));
176 } 170 }
177 171
178 // blink::WebRTCStats overrides. 172 // blink::WebRTCStats overrides.
179 blink::WebString id() const override { 173 blink::WebString id() const override {
180 return blink::WebString::fromUTF8(id_); 174 return blink::WebString::fromUTF8(id_);
181 } 175 }
182 blink::WebString type() const override { 176 blink::WebString type() const override {
183 return blink::WebString::fromUTF8(type_); 177 return blink::WebString::fromUTF8(type_);
184 } 178 }
185 double timestamp() const override { 179 double timestamp() const override { return timestamp_; }
186 return timestamp_; 180 size_t membersCount() const override { return members_.size(); }
187 }
188 size_t membersCount() const override {
189 return members_.size();
190 }
191 std::unique_ptr<WebRTCStatsMember> getMember(size_t i) const override { 181 std::unique_ptr<WebRTCStatsMember> getMember(size_t i) const override {
192 return std::unique_ptr<WebRTCStatsMember>(new MockWebRTCStatsMember( 182 return std::unique_ptr<WebRTCStatsMember>(
193 members_[i].first, members_[i].second)); 183 new MockWebRTCStatsMember(members_[i].first, members_[i].second));
194 } 184 }
195 185
196 private: 186 private:
197 std::string id_; 187 std::string id_;
198 std::string type_; 188 std::string type_;
199 double timestamp_; 189 double timestamp_;
200 std::vector<std::pair<std::string, blink::WebRTCStatsMemberType>> members_; 190 std::vector<std::pair<std::string, blink::WebRTCStatsMemberType>> members_;
201 }; 191 };
202 192
203 class MockWebRTCStatsReport : public blink::WebRTCStatsReport { 193 class MockWebRTCStatsReport : public blink::WebRTCStatsReport {
204 public: 194 public:
205 MockWebRTCStatsReport() : i_(0) {} 195 MockWebRTCStatsReport() : i_(0) {}
206 MockWebRTCStatsReport(const MockWebRTCStatsReport& other) 196 MockWebRTCStatsReport(const MockWebRTCStatsReport& other)
207 : stats_(other.stats_), i_(0) {} 197 : stats_(other.stats_), i_(0) {}
208 198
209 void AddStats(const MockWebRTCStats& stats) { 199 void AddStats(const MockWebRTCStats& stats) { stats_.push_back(stats); }
210 stats_.push_back(stats);
211 }
212 200
213 // blink::WebRTCStatsReport overrides. 201 // blink::WebRTCStatsReport overrides.
214 std::unique_ptr<blink::WebRTCStatsReport> copyHandle() const override { 202 std::unique_ptr<blink::WebRTCStatsReport> copyHandle() const override {
215 // Because this is just a mock, we copy the underlying stats instead of 203 // Because this is just a mock, we copy the underlying stats instead of
216 // referencing the same stats as the original report. 204 // referencing the same stats as the original report.
217 return std::unique_ptr<blink::WebRTCStatsReport>( 205 return std::unique_ptr<blink::WebRTCStatsReport>(
218 new MockWebRTCStatsReport(*this)); 206 new MockWebRTCStatsReport(*this));
219 } 207 }
220 std::unique_ptr<WebRTCStats> getStats(WebString id) const override { 208 std::unique_ptr<WebRTCStats> getStats(WebString id) const override {
221 for (const MockWebRTCStats& stats : stats_) { 209 for (const MockWebRTCStats& stats : stats_) {
(...skipping 12 matching lines...) Expand all
234 private: 222 private:
235 std::vector<MockWebRTCStats> stats_; 223 std::vector<MockWebRTCStats> stats_;
236 size_t i_; 224 size_t i_;
237 }; 225 };
238 226
239 } // namespace 227 } // namespace
240 228
241 MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler() 229 MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler()
242 : weak_factory_(this) {} 230 : weak_factory_(this) {}
243 231
244 MockWebRTCPeerConnectionHandler::~MockWebRTCPeerConnectionHandler() { 232 MockWebRTCPeerConnectionHandler::~MockWebRTCPeerConnectionHandler() {}
245 }
246 233
247 MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler( 234 MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler(
248 WebRTCPeerConnectionHandlerClient* client, 235 WebRTCPeerConnectionHandlerClient* client,
249 TestInterfaces* interfaces) 236 TestInterfaces* interfaces)
250 : client_(client), 237 : client_(client),
251 stopped_(false), 238 stopped_(false),
252 stream_count_(0), 239 stream_count_(0),
253 interfaces_(interfaces), 240 interfaces_(interfaces),
254 weak_factory_(this) {} 241 weak_factory_(this) {}
255 242
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 local_description_ = local_description; 337 local_description_ = local_description;
351 PostRequestResult(request); 338 PostRequestResult(request);
352 } else { 339 } else {
353 PostRequestFailure(request); 340 PostRequestFailure(request);
354 } 341 }
355 } 342 }
356 343
357 void MockWebRTCPeerConnectionHandler::setRemoteDescription( 344 void MockWebRTCPeerConnectionHandler::setRemoteDescription(
358 const WebRTCVoidRequest& request, 345 const WebRTCVoidRequest& request,
359 const WebRTCSessionDescription& remote_description) { 346 const WebRTCSessionDescription& remote_description) {
360
361 if (!remote_description.isNull() && remote_description.sdp() == "remote") { 347 if (!remote_description.isNull() && remote_description.sdp() == "remote") {
362 UpdateRemoteStreams(); 348 UpdateRemoteStreams();
363 remote_description_ = remote_description; 349 remote_description_ = remote_description;
364 PostRequestResult(request); 350 PostRequestResult(request);
365 } else 351 } else
366 PostRequestFailure(request); 352 PostRequestFailure(request);
367 } 353 }
368 354
369 void MockWebRTCPeerConnectionHandler::UpdateRemoteStreams() { 355 void MockWebRTCPeerConnectionHandler::UpdateRemoteStreams() {
370 // Find all removed streams. 356 // Find all removed streams.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 while (added_it != local_streams_.end()) { 391 while (added_it != local_streams_.end()) {
406 if (remote_streams_.find(added_it->first) != remote_streams_.end()) { 392 if (remote_streams_.find(added_it->first) != remote_streams_.end()) {
407 added_it++; 393 added_it++;
408 continue; 394 continue;
409 } 395 }
410 396
411 const blink::WebMediaStream& stream = added_it->second; 397 const blink::WebMediaStream& stream = added_it->second;
412 398
413 blink::WebVector<blink::WebMediaStreamTrack> local_audio_tracks; 399 blink::WebVector<blink::WebMediaStreamTrack> local_audio_tracks;
414 stream.audioTracks(local_audio_tracks); 400 stream.audioTracks(local_audio_tracks);
415 blink::WebVector<blink::WebMediaStreamTrack> 401 blink::WebVector<blink::WebMediaStreamTrack> remote_audio_tracks(
416 remote_audio_tracks(local_audio_tracks.size()); 402 local_audio_tracks.size());
417 403
418 for (size_t i = 0; i < local_audio_tracks.size(); ++i) { 404 for (size_t i = 0; i < local_audio_tracks.size(); ++i) {
419 blink::WebMediaStreamSource webkit_source; 405 blink::WebMediaStreamSource webkit_source;
420 webkit_source.initialize(local_audio_tracks[i].id(), 406 webkit_source.initialize(local_audio_tracks[i].id(),
421 blink::WebMediaStreamSource::TypeAudio, 407 blink::WebMediaStreamSource::TypeAudio,
422 local_audio_tracks[i].id(), 408 local_audio_tracks[i].id(), true /* remote */);
423 true /* remote */);
424 remote_audio_tracks[i].initialize(webkit_source); 409 remote_audio_tracks[i].initialize(webkit_source);
425 } 410 }
426 411
427 blink::WebVector<blink::WebMediaStreamTrack> local_video_tracks; 412 blink::WebVector<blink::WebMediaStreamTrack> local_video_tracks;
428 stream.videoTracks(local_video_tracks); 413 stream.videoTracks(local_video_tracks);
429 blink::WebVector<blink::WebMediaStreamTrack> 414 blink::WebVector<blink::WebMediaStreamTrack> remote_video_tracks(
430 remote_video_tracks(local_video_tracks.size()); 415 local_video_tracks.size());
431 for (size_t i = 0; i < local_video_tracks.size(); ++i) { 416 for (size_t i = 0; i < local_video_tracks.size(); ++i) {
432 blink::WebMediaStreamSource webkit_source; 417 blink::WebMediaStreamSource webkit_source;
433 webkit_source.initialize(local_video_tracks[i].id(), 418 webkit_source.initialize(local_video_tracks[i].id(),
434 blink::WebMediaStreamSource::TypeVideo, 419 blink::WebMediaStreamSource::TypeVideo,
435 local_video_tracks[i].id(), 420 local_video_tracks[i].id(), true /* remote */);
436 true /* remote */);
437 remote_video_tracks[i].initialize(webkit_source); 421 remote_video_tracks[i].initialize(webkit_source);
438 } 422 }
439 423
440 blink::WebMediaStream new_remote_stream; 424 blink::WebMediaStream new_remote_stream;
441 new_remote_stream.initialize(remote_audio_tracks, 425 new_remote_stream.initialize(remote_audio_tracks, remote_video_tracks);
442 remote_video_tracks);
443 remote_streams_[added_it->first] = new_remote_stream; 426 remote_streams_[added_it->first] = new_remote_stream;
444 client_->didAddRemoteStream(new_remote_stream); 427 client_->didAddRemoteStream(new_remote_stream);
445 ++added_it; 428 ++added_it;
446 } 429 }
447 } 430 }
448 431
449 WebRTCSessionDescription MockWebRTCPeerConnectionHandler::localDescription() { 432 WebRTCSessionDescription MockWebRTCPeerConnectionHandler::localDescription() {
450 return local_description_; 433 return local_description_;
451 } 434 }
452 435
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 stats.addMember("double", blink::WebRTCStatsMemberTypeDouble); 511 stats.addMember("double", blink::WebRTCStatsMemberTypeDouble);
529 stats.addMember("string", blink::WebRTCStatsMemberTypeString); 512 stats.addMember("string", blink::WebRTCStatsMemberTypeString);
530 stats.addMember("sequenceBool", blink::WebRTCStatsMemberTypeSequenceBool); 513 stats.addMember("sequenceBool", blink::WebRTCStatsMemberTypeSequenceBool);
531 stats.addMember("sequenceInt32", blink::WebRTCStatsMemberTypeSequenceInt32); 514 stats.addMember("sequenceInt32", blink::WebRTCStatsMemberTypeSequenceInt32);
532 stats.addMember("sequenceUint32", blink::WebRTCStatsMemberTypeSequenceUint32); 515 stats.addMember("sequenceUint32", blink::WebRTCStatsMemberTypeSequenceUint32);
533 stats.addMember("sequenceInt64", blink::WebRTCStatsMemberTypeSequenceInt64); 516 stats.addMember("sequenceInt64", blink::WebRTCStatsMemberTypeSequenceInt64);
534 stats.addMember("sequenceUint64", blink::WebRTCStatsMemberTypeSequenceUint64); 517 stats.addMember("sequenceUint64", blink::WebRTCStatsMemberTypeSequenceUint64);
535 stats.addMember("sequenceDouble", blink::WebRTCStatsMemberTypeSequenceDouble); 518 stats.addMember("sequenceDouble", blink::WebRTCStatsMemberTypeSequenceDouble);
536 stats.addMember("sequenceString", blink::WebRTCStatsMemberTypeSequenceString); 519 stats.addMember("sequenceString", blink::WebRTCStatsMemberTypeSequenceString);
537 report->AddStats(stats); 520 report->AddStats(stats);
538 callback->OnStatsDelivered(std::unique_ptr<blink::WebRTCStatsReport>( 521 callback->OnStatsDelivered(
539 report.release())); 522 std::unique_ptr<blink::WebRTCStatsReport>(report.release()));
540 } 523 }
541 524
542 void MockWebRTCPeerConnectionHandler::ReportCreationOfDataChannel() { 525 void MockWebRTCPeerConnectionHandler::ReportCreationOfDataChannel() {
543 WebRTCDataChannelInit init; 526 WebRTCDataChannelInit init;
544 WebRTCDataChannelHandler* remote_data_channel = 527 WebRTCDataChannelHandler* remote_data_channel =
545 new MockWebRTCDataChannelHandler("MockRemoteDataChannel", init, 528 new MockWebRTCDataChannelHandler("MockRemoteDataChannel", init,
546 interfaces_->GetDelegate()); 529 interfaces_->GetDelegate());
547 client_->didAddRemoteDataChannel(remote_data_channel); 530 client_->didAddRemoteDataChannel(remote_data_channel);
548 } 531 }
549 532
550 WebRTCDataChannelHandler* MockWebRTCPeerConnectionHandler::createDataChannel( 533 WebRTCDataChannelHandler* MockWebRTCPeerConnectionHandler::createDataChannel(
551 const WebString& label, 534 const WebString& label,
552 const blink::WebRTCDataChannelInit& init) { 535 const blink::WebRTCDataChannelInit& init) {
553 interfaces_->GetDelegate()->PostTask( 536 interfaces_->GetDelegate()->PostTask(
554 base::Bind(&MockWebRTCPeerConnectionHandler::ReportCreationOfDataChannel, 537 base::Bind(&MockWebRTCPeerConnectionHandler::ReportCreationOfDataChannel,
555 weak_factory_.GetWeakPtr())); 538 weak_factory_.GetWeakPtr()));
556 539
557 // TODO(lukasza): Unclear if it is okay to return a different object than the 540 // TODO(lukasza): Unclear if it is okay to return a different object than the
558 // one created in ReportCreationOfDataChannel. 541 // one created in ReportCreationOfDataChannel.
559 return new MockWebRTCDataChannelHandler( 542 return new MockWebRTCDataChannelHandler(label, init,
560 label, init, interfaces_->GetDelegate()); 543 interfaces_->GetDelegate());
561 } 544 }
562 545
563 WebRTCDTMFSenderHandler* MockWebRTCPeerConnectionHandler::createDTMFSender( 546 WebRTCDTMFSenderHandler* MockWebRTCPeerConnectionHandler::createDTMFSender(
564 const WebMediaStreamTrack& track) { 547 const WebMediaStreamTrack& track) {
565 return new MockWebRTCDTMFSenderHandler(track, interfaces_->GetDelegate()); 548 return new MockWebRTCDTMFSenderHandler(track, interfaces_->GetDelegate());
566 } 549 }
567 550
568 void MockWebRTCPeerConnectionHandler::stop() { 551 void MockWebRTCPeerConnectionHandler::stop() {
569 stopped_ = true; 552 stopped_ = true;
570 weak_factory_.InvalidateWeakPtrs(); 553 weak_factory_.InvalidateWeakPtrs();
571 } 554 }
572 555
573 } // namespace test_runner 556 } // namespace test_runner
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698