| 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()) { |
| 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 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 |