OLD | NEW |
---|---|
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 Loading... | |
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()) { | |
mnaganov (inactive)
2014/11/18 03:38:59
You should also initialize 'open_' here, as otherw
SeRya
2014/11/18 06:57:27
That's OK. Instance is not used until InitState ca
| |
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()); | |
mnaganov (inactive)
2014/11/18 03:38:59
nit: indentation
SeRya
2014/11/18 06:57:26
Done.
| |
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 binary) { | |
mnaganov (inactive)
2014/11/18 03:38:59
is_binary
SeRya
2014/11/18 06:57:26
Done.
| |
137 impl_->Send(webrtc::DataBuffer(rtc::Buffer(data, length), 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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |