| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/renderer/extensions/webrtc_native_handler.h" | 5 #include "chrome/renderer/extensions/webrtc_native_handler.h" |
| 6 | 6 |
| 7 #include <functional> | 7 #include <functional> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "chrome/common/extensions/api/webrtc_cast_send_transport.h" | 10 #include "chrome/common/extensions/api/webrtc_cast_send_transport.h" |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 ext_payload_params.get()); | 140 ext_payload_params.get()); |
| 141 ext_params->payloads.push_back(ext_payload_params); | 141 ext_params->payloads.push_back(ext_payload_params); |
| 142 } | 142 } |
| 143 } | 143 } |
| 144 | 144 |
| 145 } // namespace | 145 } // namespace |
| 146 | 146 |
| 147 WebRtcNativeHandler::WebRtcNativeHandler(ChromeV8Context* context) | 147 WebRtcNativeHandler::WebRtcNativeHandler(ChromeV8Context* context) |
| 148 : ObjectBackedNativeHandler(context), | 148 : ObjectBackedNativeHandler(context), |
| 149 last_transport_id_(0) { | 149 last_transport_id_(0) { |
| 150 RouteFunction("CreateCastSendTransport", | 150 RouteFunction("CreateSession", |
| 151 base::Bind(&WebRtcNativeHandler::CreateCastSendTransport, | 151 base::Bind(&WebRtcNativeHandler::CreateCastSession, |
| 152 base::Unretained(this))); | 152 base::Unretained(this))); |
| 153 RouteFunction("DestroyCastSendTransport", | 153 RouteFunction("DestroyCastSendTransport", |
| 154 base::Bind(&WebRtcNativeHandler::DestroyCastSendTransport, | 154 base::Bind(&WebRtcNativeHandler::DestroyCastSendTransport, |
| 155 base::Unretained(this))); | 155 base::Unretained(this))); |
| 156 RouteFunction("GetCapsCastSendTransport", | 156 RouteFunction("GetCapsCastSendTransport", |
| 157 base::Bind(&WebRtcNativeHandler::GetCapsCastSendTransport, | 157 base::Bind(&WebRtcNativeHandler::GetCapsCastSendTransport, |
| 158 base::Unretained(this))); | 158 base::Unretained(this))); |
| 159 RouteFunction("StartCastSendTransport", | 159 RouteFunction("StartCastSendTransport", |
| 160 base::Bind(&WebRtcNativeHandler::StartCastSendTransport, | 160 base::Bind(&WebRtcNativeHandler::StartCastSendTransport, |
| 161 base::Unretained(this))); | 161 base::Unretained(this))); |
| 162 RouteFunction("StopCastSendTransport", | 162 RouteFunction("StopCastSendTransport", |
| 163 base::Bind(&WebRtcNativeHandler::StopCastSendTransport, | 163 base::Bind(&WebRtcNativeHandler::StopCastSendTransport, |
| 164 base::Unretained(this))); | 164 base::Unretained(this))); |
| 165 RouteFunction("CreateCastUdpTransport", | |
| 166 base::Bind(&WebRtcNativeHandler::CreateCastUdpTransport, | |
| 167 base::Unretained(this))); | |
| 168 RouteFunction("DestroyCastUdpTransport", | 165 RouteFunction("DestroyCastUdpTransport", |
| 169 base::Bind(&WebRtcNativeHandler::DestroyCastUdpTransport, | 166 base::Bind(&WebRtcNativeHandler::DestroyCastUdpTransport, |
| 170 base::Unretained(this))); | 167 base::Unretained(this))); |
| 171 RouteFunction("StartCastUdpTransport", | 168 RouteFunction("StartCastUdpTransport", |
| 172 base::Bind(&WebRtcNativeHandler::StartCastUdpTransport, | 169 base::Bind(&WebRtcNativeHandler::StartCastUdpTransport, |
| 173 base::Unretained(this))); | 170 base::Unretained(this))); |
| 174 } | 171 } |
| 175 | 172 |
| 176 WebRtcNativeHandler::~WebRtcNativeHandler() { | 173 WebRtcNativeHandler::~WebRtcNativeHandler() { |
| 177 } | 174 } |
| 178 | 175 |
| 179 void WebRtcNativeHandler::CreateCastSendTransport( | 176 void WebRtcNativeHandler::CreateCastSession( |
| 180 const v8::FunctionCallbackInfo<v8::Value>& args) { | 177 const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 181 CHECK_EQ(3, args.Length()); | 178 CHECK_EQ(3, args.Length()); |
| 182 CHECK(args[0]->IsInt32()); | 179 CHECK(args[0]->IsObject()); |
| 183 CHECK(args[1]->IsObject()); | 180 CHECK(args[1]->IsObject()); |
| 184 CHECK(args[2]->IsFunction()); | 181 CHECK(args[2]->IsFunction()); |
| 185 | 182 |
| 186 const int inner_transport_id = args[0]->ToInt32()->Value(); | 183 blink::WebDOMMediaStreamTrack track1 = |
| 187 CastUdpTransport* inner_transport = GetUdpTransportOrThrow( | 184 blink::WebDOMMediaStreamTrack::fromV8Value(args[0]); |
| 188 inner_transport_id); | 185 if (track1.isNull()) |
| 189 if (!inner_transport) | 186 return; |
| 187 blink::WebDOMMediaStreamTrack track2 = |
| 188 blink::WebDOMMediaStreamTrack::fromV8Value(args[1]); |
| 189 if (track2.isNull()) |
| 190 return; | 190 return; |
| 191 | 191 |
| 192 blink::WebDOMMediaStreamTrack track = | 192 scoped_refptr<CastSession> session(new CastSession()); |
| 193 blink::WebDOMMediaStreamTrack::fromV8Value(args[1]); | 193 |
| 194 if (track.isNull()) | 194 const int stream1_id = last_transport_id_++; |
| 195 return; | 195 send_transport_map_[stream1_id] = |
| 196 const int transport_id = last_transport_id_++; | |
| 197 send_transport_map_[transport_id] = | |
| 198 linked_ptr<CastSendTransport>( | 196 linked_ptr<CastSendTransport>( |
| 199 new CastSendTransport(inner_transport, track.component())); | 197 new CastSendTransport(track1.component(), session)); |
| 198 const int stream2_id = last_transport_id_++; |
| 199 send_transport_map_[stream2_id] = |
| 200 linked_ptr<CastSendTransport>( |
| 201 new CastSendTransport(track2.component(), session)); |
| 202 const int udp_id = last_transport_id_++; |
| 203 udp_transport_map_[udp_id] = |
| 204 linked_ptr<CastUdpTransport>(new CastUdpTransport(session)); |
| 200 | 205 |
| 201 v8::Handle<v8::Value> transport_id_v8 = v8::Integer::New(transport_id); | 206 v8::Handle<v8::Value> callback_args[3]; |
| 202 context()->CallFunction(v8::Handle<v8::Function>::Cast(args[2]), 1, | 207 callback_args[0] = v8::Integer::New(stream1_id); |
| 203 &transport_id_v8); | 208 callback_args[1] = v8::Integer::New(stream2_id); |
| 209 callback_args[2] = v8::Integer::New(udp_id); |
| 210 context()->CallFunction(v8::Handle<v8::Function>::Cast(args[2]), |
| 211 3, callback_args); |
| 204 } | 212 } |
| 205 | 213 |
| 206 void WebRtcNativeHandler::DestroyCastSendTransport( | 214 void WebRtcNativeHandler::DestroyCastSendTransport( |
| 207 const v8::FunctionCallbackInfo<v8::Value>& args) { | 215 const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 208 CHECK_EQ(1, args.Length()); | 216 CHECK_EQ(1, args.Length()); |
| 209 CHECK(args[0]->IsInt32()); | 217 CHECK(args[0]->IsInt32()); |
| 210 | 218 |
| 211 const int transport_id = args[0]->ToInt32()->Value(); | 219 const int transport_id = args[0]->ToInt32()->Value(); |
| 212 if (!GetSendTransportOrThrow(transport_id)) | 220 if (!GetSendTransportOrThrow(transport_id)) |
| 213 return; | 221 return; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 CHECK_EQ(1, args.Length()); | 278 CHECK_EQ(1, args.Length()); |
| 271 CHECK(args[0]->IsInt32()); | 279 CHECK(args[0]->IsInt32()); |
| 272 | 280 |
| 273 const int transport_id = args[0]->ToInt32()->Value(); | 281 const int transport_id = args[0]->ToInt32()->Value(); |
| 274 CastSendTransport* transport = GetSendTransportOrThrow(transport_id); | 282 CastSendTransport* transport = GetSendTransportOrThrow(transport_id); |
| 275 if (!transport) | 283 if (!transport) |
| 276 return; | 284 return; |
| 277 transport->Stop(); | 285 transport->Stop(); |
| 278 } | 286 } |
| 279 | 287 |
| 280 void WebRtcNativeHandler::CreateCastUdpTransport( | |
| 281 const v8::FunctionCallbackInfo<v8::Value>& args) { | |
| 282 CHECK_EQ(1, args.Length()); | |
| 283 CHECK(args[0]->IsFunction()); | |
| 284 | |
| 285 const int transport_id = last_transport_id_++; | |
| 286 udp_transport_map_[transport_id] = | |
| 287 linked_ptr<CastUdpTransport>(new CastUdpTransport()); | |
| 288 | |
| 289 v8::Handle<v8::Value> transport_id_v8 = v8::Integer::New(transport_id); | |
| 290 context()->CallFunction(v8::Handle<v8::Function>::Cast(args[0]), 1, | |
| 291 &transport_id_v8); | |
| 292 } | |
| 293 | |
| 294 void WebRtcNativeHandler::DestroyCastUdpTransport( | 288 void WebRtcNativeHandler::DestroyCastUdpTransport( |
| 295 const v8::FunctionCallbackInfo<v8::Value>& args) { | 289 const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 296 CHECK_EQ(1, args.Length()); | 290 CHECK_EQ(1, args.Length()); |
| 297 CHECK(args[0]->IsInt32()); | 291 CHECK(args[0]->IsInt32()); |
| 298 | 292 |
| 299 const int transport_id = args[0]->ToInt32()->Value(); | 293 const int transport_id = args[0]->ToInt32()->Value(); |
| 300 if (!GetUdpTransportOrThrow(transport_id)) | 294 if (!GetUdpTransportOrThrow(transport_id)) |
| 301 return; | 295 return; |
| 302 udp_transport_map_.erase(transport_id); | 296 udp_transport_map_.erase(transport_id); |
| 303 } | 297 } |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 UdpTransportMap::const_iterator iter = udp_transport_map_.find( | 340 UdpTransportMap::const_iterator iter = udp_transport_map_.find( |
| 347 transport_id); | 341 transport_id); |
| 348 if (iter != udp_transport_map_.end()) | 342 if (iter != udp_transport_map_.end()) |
| 349 return iter->second.get(); | 343 return iter->second.get(); |
| 350 v8::ThrowException(v8::Exception::RangeError(v8::String::New( | 344 v8::ThrowException(v8::Exception::RangeError(v8::String::New( |
| 351 kUdpTransportNotFound))); | 345 kUdpTransportNotFound))); |
| 352 return NULL; | 346 return NULL; |
| 353 } | 347 } |
| 354 | 348 |
| 355 } // namespace extensions | 349 } // namespace extensions |
| OLD | NEW |