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

Side by Side Diff: components/devtools_bridge/session_dependency_factory.cc

Issue 719043002: Data channel implementation for SessionDependencyFactory. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@native-factory-2
Patch Set: Created 6 years, 1 month 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
« no previous file with comments | « components/devtools_bridge/android/session_dependency_factory_android.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/devtools_bridge/session_dependency_factory.h" 5 #include "components/devtools_bridge/session_dependency_factory.h"
6 6
7 #include "components/devtools_bridge/abstract_data_channel.h" 7 #include "components/devtools_bridge/abstract_data_channel.h"
8 #include "components/devtools_bridge/abstract_peer_connection.h" 8 #include "components/devtools_bridge/abstract_peer_connection.h"
9 #include "components/devtools_bridge/rtc_configuration.h" 9 #include "components/devtools_bridge/rtc_configuration.h"
10 #include "third_party/libjingle/source/talk/app/webrtc/mediaconstraintsinterface .h" 10 #include "third_party/libjingle/source/talk/app/webrtc/mediaconstraintsinterface .h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 61
62 void AddMandatory(const std::string& key, const std::string& value) { 62 void AddMandatory(const std::string& key, const std::string& value) {
63 mandatory_.push_back(Constraint(key, value)); 63 mandatory_.push_back(Constraint(key, value));
64 } 64 }
65 65
66 private: 66 private:
67 Constraints mandatory_; 67 Constraints mandatory_;
68 Constraints optional_; 68 Constraints optional_;
69 }; 69 };
70 70
71 class DataChannelObserverImpl : public webrtc::DataChannelObserver {
72 public:
73 DataChannelObserverImpl(
74 webrtc::DataChannelInterface* data_channel,
75 scoped_ptr<AbstractDataChannel::Observer> observer)
76 : data_channel_(data_channel),
77 observer_(observer.Pass()) {
78 }
79
80 void InitState() {
81 open_ = data_channel_->state() == webrtc::DataChannelInterface::kOpen;
82 }
83
84 virtual void OnStateChange() override {
85 bool open = data_channel_->state() == webrtc::DataChannelInterface::kOpen;
86
87 if (open == open_) return;
88
89 open_ = open;
90 if (open) {
91 observer_->OnOpen();
92 } else {
93 observer_->OnClose();
94 }
95 }
96
97 virtual void OnMessage(const webrtc::DataBuffer& buffer) override {
98 observer_->OnMessage(buffer.data.data(), buffer.size());
99 }
100
101 private:
102 webrtc::DataChannelInterface* const data_channel_;
103 scoped_ptr<AbstractDataChannel::Observer> const observer_;
104 bool open_;
105 };
106
71 class DataChannelImpl : public AbstractDataChannel { 107 class DataChannelImpl : public AbstractDataChannel {
72 public: 108 public:
73 explicit DataChannelImpl( 109 explicit DataChannelImpl(
74 rtc::scoped_refptr<webrtc::DataChannelInterface> impl) : impl_(impl) { 110 rtc::Thread* const signaling_thread,
111 rtc::scoped_refptr<webrtc::DataChannelInterface> impl)
112 : signaling_thread_(signaling_thread),
113 impl_(impl) {
75 } 114 }
76 115
77 // TODO(serya): Implement. 116 virtual void RegisterObserver(scoped_ptr<Observer> observer) override {
117 observer_.reset(new DataChannelObserverImpl(impl_.get(), observer.Pass()));
118 signaling_thread_->Invoke<void>(rtc::Bind(
119 &DataChannelImpl::RegisterObserverOnSignalingThread, this));
120 }
121
122 virtual void UnregisterObserver() override {
123 DCHECK(observer_.get() != NULL);
124 impl_->UnregisterObserver();
125 observer_.reset();
126 }
127
128 virtual void SendBinaryMessage(void* data, size_t length) override {
129 SendMessage(data, length, true);
130 }
131
132 virtual void SendTextMessage(void* data, size_t length) override {
133 SendMessage(data, length, false);
134 }
135
136 void SendMessage(void* data, size_t length, bool is_binary) {
137 impl_->Send(webrtc::DataBuffer(rtc::Buffer(data, length), is_binary));
138 }
139
140 void Close() override {
141 impl_->Close();
142 }
78 143
79 private: 144 private:
145 void RegisterObserverOnSignalingThread() {
146 // State initialization and observer registration happen atomically
147 // if done on the signaling thread (see rtc::Thread::Send).
148 observer_->InitState();
149 impl_->RegisterObserver(observer_.get());
150 }
151
152 rtc::Thread* const signaling_thread_;
153 scoped_ptr<DataChannelObserverImpl> observer_;
80 const rtc::scoped_refptr<webrtc::DataChannelInterface> impl_; 154 const rtc::scoped_refptr<webrtc::DataChannelInterface> impl_;
81 }; 155 };
82 156
83 class PeerConnectionObserverImpl 157 class PeerConnectionObserverImpl
84 : public webrtc::PeerConnectionObserver { 158 : public webrtc::PeerConnectionObserver {
85 public: 159 public:
86 PeerConnectionObserverImpl(AbstractPeerConnection::Delegate* delegate) 160 PeerConnectionObserverImpl(AbstractPeerConnection::Delegate* delegate)
87 : delegate_(delegate), 161 : delegate_(delegate),
88 connected_(false) { 162 connected_(false) {
89 } 163 }
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 return; 382 return;
309 } 383 }
310 // Doesn't takes ownership. 384 // Doesn't takes ownership.
311 connection_->AddIceCandidate(candidate); 385 connection_->AddIceCandidate(candidate);
312 delete candidate; 386 delete candidate;
313 } 387 }
314 388
315 virtual scoped_ptr<AbstractDataChannel> CreateDataChannel( 389 virtual scoped_ptr<AbstractDataChannel> CreateDataChannel(
316 int channelId) override { 390 int channelId) override {
317 webrtc::DataChannelInit init; 391 webrtc::DataChannelInit init;
318 init.reliable = true;
319 init.ordered = true; 392 init.ordered = true;
320 init.negotiated = true; 393 init.negotiated = true;
321 init.id = channelId; 394 init.id = channelId;
322 395
323 return make_scoped_ptr(new DataChannelImpl( 396 return make_scoped_ptr(new DataChannelImpl(
397 signaling_thread_,
324 connection_->CreateDataChannel("", &init))); 398 connection_->CreateDataChannel("", &init)));
325 } 399 }
326 400
327 private: 401 private:
328 webrtc::CreateSessionDescriptionObserver* MakeCreateAndSetHandler() { 402 webrtc::CreateSessionDescriptionObserver* MakeCreateAndSetHandler() {
329 return new rtc::RefCountedObject<CreateAndSetHandler>(holder_); 403 return new rtc::RefCountedObject<CreateAndSetHandler>(holder_);
330 } 404 }
331 405
332 void DisposeOnSignalingThread() { 406 void DisposeOnSignalingThread() {
333 DCHECK(signaling_thread_->IsCurrent()); 407 DCHECK(signaling_thread_->IsCurrent());
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 } 494 }
421 495
422 // static 496 // static
423 scoped_ptr<SessionDependencyFactory> SessionDependencyFactory::CreateInstance( 497 scoped_ptr<SessionDependencyFactory> SessionDependencyFactory::CreateInstance(
424 const base::Closure& cleanup_on_signaling_thread) { 498 const base::Closure& cleanup_on_signaling_thread) {
425 return make_scoped_ptr(new SessionDependencyFactoryImpl( 499 return make_scoped_ptr(new SessionDependencyFactoryImpl(
426 cleanup_on_signaling_thread)); 500 cleanup_on_signaling_thread));
427 } 501 }
428 502
429 } // namespace devtools_bridge 503 } // namespace devtools_bridge
OLDNEW
« no previous file with comments | « components/devtools_bridge/android/session_dependency_factory_android.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698