| 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/cast_streaming_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 "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| 11 #include "chrome/common/extensions/api/webrtc_cast_send_transport.h" | 11 #include "chrome/common/extensions/api/cast_streaming_rtp_stream.h" |
| 12 #include "chrome/common/extensions/api/webrtc_cast_udp_transport.h" | 12 #include "chrome/common/extensions/api/cast_streaming_udp_transport.h" |
| 13 #include "chrome/renderer/extensions/chrome_v8_context.h" | 13 #include "chrome/renderer/extensions/chrome_v8_context.h" |
| 14 #include "chrome/renderer/media/cast_send_transport.h" | 14 #include "chrome/renderer/media/cast_rtp_stream.h" |
| 15 #include "chrome/renderer/media/cast_session.h" | 15 #include "chrome/renderer/media/cast_session.h" |
| 16 #include "chrome/renderer/media/cast_udp_transport.h" | 16 #include "chrome/renderer/media/cast_udp_transport.h" |
| 17 #include "content/public/renderer/v8_value_converter.h" | 17 #include "content/public/renderer/v8_value_converter.h" |
| 18 #include "net/base/host_port_pair.h" | 18 #include "net/base/host_port_pair.h" |
| 19 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" | 19 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" |
| 20 #include "third_party/WebKit/public/web/WebDOMMediaStreamTrack.h" | 20 #include "third_party/WebKit/public/web/WebDOMMediaStreamTrack.h" |
| 21 | 21 |
| 22 using content::V8ValueConverter; | 22 using content::V8ValueConverter; |
| 23 | 23 |
| 24 // Extension types. | 24 // Extension types. |
| 25 using extensions::api::webrtc_cast_send_transport::CodecSpecificParams; | 25 using extensions::api::cast_streaming_rtp_stream::CodecSpecificParams; |
| 26 using extensions::api::webrtc_cast_send_transport::RtpCaps; | 26 using extensions::api::cast_streaming_rtp_stream::RtpCaps; |
| 27 using extensions::api::webrtc_cast_send_transport::RtpParams; | 27 using extensions::api::cast_streaming_rtp_stream::RtpParams; |
| 28 using extensions::api::webrtc_cast_send_transport::RtpPayloadParams; | 28 using extensions::api::cast_streaming_rtp_stream::RtpPayloadParams; |
| 29 using extensions::api::webrtc_cast_udp_transport::UdpParams; | 29 using extensions::api::cast_streaming_udp_transport::UdpParams; |
| 30 | 30 |
| 31 namespace extensions { | 31 namespace extensions { |
| 32 | 32 |
| 33 namespace { | 33 namespace { |
| 34 const char kSendTransportNotFound[] = "The send transport cannot be found"; | 34 const char kRtpStreamNotFound[] = "The RTP stream cannot be found"; |
| 35 const char kUdpTransportNotFound[] = "The UDP transport cannot be found"; | 35 const char kUdpTransportNotFound[] = "The UDP transport cannot be found"; |
| 36 const char kInvalidUdpParams[] = "Invalid UDP params"; | 36 const char kInvalidUdpParams[] = "Invalid UDP params"; |
| 37 const char kInvalidRtpParams[] = "Invalid value for RTP params"; | 37 const char kInvalidRtpParams[] = "Invalid value for RTP params"; |
| 38 const char kUnableToConvertArgs[] = "Unable to convert arguments"; | 38 const char kUnableToConvertArgs[] = "Unable to convert arguments"; |
| 39 const char kUnableToConvertParams[] = "Unable to convert params"; | 39 const char kUnableToConvertParams[] = "Unable to convert params"; |
| 40 | 40 |
| 41 // These helper methods are used to convert between Extension API | 41 // These helper methods are used to convert between Extension API |
| 42 // types and Cast types. | 42 // types and Cast types. |
| 43 void ToCastCodecSpecificParams(const CodecSpecificParams& ext_params, | 43 void ToCastCodecSpecificParams(const CodecSpecificParams& ext_params, |
| 44 CastCodecSpecificParams* cast_params) { | 44 CastCodecSpecificParams* cast_params) { |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 cast_params->rtcp_features.begin()); | 115 cast_params->rtcp_features.begin()); |
| 116 for (size_t i = 0; i < ext_params.payloads.size(); ++i) { | 116 for (size_t i = 0; i < ext_params.payloads.size(); ++i) { |
| 117 CastRtpPayloadParams cast_payload_params; | 117 CastRtpPayloadParams cast_payload_params; |
| 118 ToCastRtpPayloadParams(*ext_params.payloads[i], &cast_payload_params); | 118 ToCastRtpPayloadParams(*ext_params.payloads[i], &cast_payload_params); |
| 119 cast_params->payloads.push_back(cast_payload_params); | 119 cast_params->payloads.push_back(cast_payload_params); |
| 120 } | 120 } |
| 121 } | 121 } |
| 122 | 122 |
| 123 } // namespace | 123 } // namespace |
| 124 | 124 |
| 125 WebRtcNativeHandler::WebRtcNativeHandler(ChromeV8Context* context) | 125 CastStreamingNativeHandler::CastStreamingNativeHandler(ChromeV8Context* context) |
| 126 : ObjectBackedNativeHandler(context), | 126 : ObjectBackedNativeHandler(context), |
| 127 last_transport_id_(0), | 127 last_transport_id_(0), |
| 128 weak_factory_(this) { | 128 weak_factory_(this) { |
| 129 RouteFunction("CreateSession", | 129 RouteFunction("CreateSession", |
| 130 base::Bind(&WebRtcNativeHandler::CreateCastSession, | 130 base::Bind(&CastStreamingNativeHandler::CreateCastSession, |
| 131 base::Unretained(this))); | 131 base::Unretained(this))); |
| 132 RouteFunction("DestroyCastSendTransport", | 132 RouteFunction("DestroyCastRtpStream", |
| 133 base::Bind(&WebRtcNativeHandler::DestroyCastSendTransport, | 133 base::Bind(&CastStreamingNativeHandler::DestroyCastRtpStream, |
| 134 base::Unretained(this))); | 134 base::Unretained(this))); |
| 135 RouteFunction("GetCapsCastSendTransport", | 135 RouteFunction("GetCapsCastRtpStream", |
| 136 base::Bind(&WebRtcNativeHandler::GetCapsCastSendTransport, | 136 base::Bind(&CastStreamingNativeHandler::GetCapsCastRtpStream, |
| 137 base::Unretained(this))); | 137 base::Unretained(this))); |
| 138 RouteFunction("StartCastSendTransport", | 138 RouteFunction("StartCastRtpStream", |
| 139 base::Bind(&WebRtcNativeHandler::StartCastSendTransport, | 139 base::Bind(&CastStreamingNativeHandler::StartCastRtpStream, |
| 140 base::Unretained(this))); | 140 base::Unretained(this))); |
| 141 RouteFunction("StopCastSendTransport", | 141 RouteFunction("StopCastRtpStream", |
| 142 base::Bind(&WebRtcNativeHandler::StopCastSendTransport, | 142 base::Bind(&CastStreamingNativeHandler::StopCastRtpStream, |
| 143 base::Unretained(this))); | 143 base::Unretained(this))); |
| 144 RouteFunction("DestroyCastUdpTransport", | 144 RouteFunction("DestroyCastUdpTransport", |
| 145 base::Bind(&WebRtcNativeHandler::DestroyCastUdpTransport, | 145 base::Bind(&CastStreamingNativeHandler::DestroyCastUdpTransport, |
| 146 base::Unretained(this))); | 146 base::Unretained(this))); |
| 147 RouteFunction("StartCastUdpTransport", | 147 RouteFunction("StartCastUdpTransport", |
| 148 base::Bind(&WebRtcNativeHandler::StartCastUdpTransport, | 148 base::Bind(&CastStreamingNativeHandler::StartCastUdpTransport, |
| 149 base::Unretained(this))); | 149 base::Unretained(this))); |
| 150 } | 150 } |
| 151 | 151 |
| 152 WebRtcNativeHandler::~WebRtcNativeHandler() { | 152 CastStreamingNativeHandler::~CastStreamingNativeHandler() { |
| 153 } | 153 } |
| 154 | 154 |
| 155 void WebRtcNativeHandler::CreateCastSession( | 155 void CastStreamingNativeHandler::CreateCastSession( |
| 156 const v8::FunctionCallbackInfo<v8::Value>& args) { | 156 const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 157 CHECK_EQ(3, args.Length()); | 157 CHECK_EQ(3, args.Length()); |
| 158 CHECK(args[0]->IsObject()); | 158 CHECK(args[0]->IsObject()); |
| 159 CHECK(args[1]->IsObject()); | 159 CHECK(args[1]->IsObject()); |
| 160 CHECK(args[2]->IsFunction()); | 160 CHECK(args[2]->IsFunction()); |
| 161 | 161 |
| 162 blink::WebDOMMediaStreamTrack track1 = | 162 blink::WebDOMMediaStreamTrack track1 = |
| 163 blink::WebDOMMediaStreamTrack::fromV8Value(args[0]); | 163 blink::WebDOMMediaStreamTrack::fromV8Value(args[0]); |
| 164 if (track1.isNull()) | 164 if (track1.isNull()) |
| 165 return; | 165 return; |
| 166 blink::WebDOMMediaStreamTrack track2 = | 166 blink::WebDOMMediaStreamTrack track2 = |
| 167 blink::WebDOMMediaStreamTrack::fromV8Value(args[1]); | 167 blink::WebDOMMediaStreamTrack::fromV8Value(args[1]); |
| 168 if (track2.isNull()) | 168 if (track2.isNull()) |
| 169 return; | 169 return; |
| 170 | 170 |
| 171 scoped_refptr<CastSession> session(new CastSession()); | 171 scoped_refptr<CastSession> session(new CastSession()); |
| 172 scoped_ptr<CastSendTransport> stream1( | 172 scoped_ptr<CastRtpStream> stream1( |
| 173 new CastSendTransport(track1.component(), session)); | 173 new CastRtpStream(track1.component(), session)); |
| 174 scoped_ptr<CastSendTransport> stream2( | 174 scoped_ptr<CastRtpStream> stream2( |
| 175 new CastSendTransport(track2.component(), session)); | 175 new CastRtpStream(track2.component(), session)); |
| 176 scoped_ptr<CastUdpTransport> udp_transport( | 176 scoped_ptr<CastUdpTransport> udp_transport( |
| 177 new CastUdpTransport(session)); | 177 new CastUdpTransport(session)); |
| 178 | 178 |
| 179 create_callback_.reset(args[2].As<v8::Function>()); | 179 create_callback_.reset(args[2].As<v8::Function>()); |
| 180 | 180 |
| 181 base::MessageLoop::current()->PostTask( | 181 base::MessageLoop::current()->PostTask( |
| 182 FROM_HERE, | 182 FROM_HERE, |
| 183 base::Bind( | 183 base::Bind( |
| 184 &WebRtcNativeHandler::CallCreateCallback, | 184 &CastStreamingNativeHandler::CallCreateCallback, |
| 185 weak_factory_.GetWeakPtr(), | 185 weak_factory_.GetWeakPtr(), |
| 186 base::Passed(&stream1), | 186 base::Passed(&stream1), |
| 187 base::Passed(&stream2), | 187 base::Passed(&stream2), |
| 188 base::Passed(&udp_transport))); | 188 base::Passed(&udp_transport))); |
| 189 } | 189 } |
| 190 | 190 |
| 191 void WebRtcNativeHandler::CallCreateCallback( | 191 void CastStreamingNativeHandler::CallCreateCallback( |
| 192 scoped_ptr<CastSendTransport> stream1, | 192 scoped_ptr<CastRtpStream> stream1, |
| 193 scoped_ptr<CastSendTransport> stream2, | 193 scoped_ptr<CastRtpStream> stream2, |
| 194 scoped_ptr<CastUdpTransport> udp_transport) { | 194 scoped_ptr<CastUdpTransport> udp_transport) { |
| 195 v8::HandleScope handle_scope(context()->isolate()); | 195 v8::HandleScope handle_scope(context()->isolate()); |
| 196 v8::Context::Scope context_scope(context()->v8_context()); | 196 v8::Context::Scope context_scope(context()->v8_context()); |
| 197 | 197 |
| 198 const int stream1_id = last_transport_id_++; | 198 const int stream1_id = last_transport_id_++; |
| 199 send_transport_map_[stream1_id] = | 199 rtp_stream_map_[stream1_id] = |
| 200 linked_ptr<CastSendTransport>(stream1.release()); | 200 linked_ptr<CastRtpStream>(stream1.release()); |
| 201 const int stream2_id = last_transport_id_++; | 201 const int stream2_id = last_transport_id_++; |
| 202 send_transport_map_[stream2_id] = | 202 rtp_stream_map_[stream2_id] = |
| 203 linked_ptr<CastSendTransport>(stream2.release()); | 203 linked_ptr<CastRtpStream>(stream2.release()); |
| 204 const int udp_id = last_transport_id_++; | 204 const int udp_id = last_transport_id_++; |
| 205 udp_transport_map_[udp_id] = | 205 udp_transport_map_[udp_id] = |
| 206 linked_ptr<CastUdpTransport>(udp_transport.release()); | 206 linked_ptr<CastUdpTransport>(udp_transport.release()); |
| 207 | 207 |
| 208 v8::Handle<v8::Value> callback_args[3]; | 208 v8::Handle<v8::Value> callback_args[3]; |
| 209 callback_args[0] = v8::Integer::New(stream1_id); | 209 callback_args[0] = v8::Integer::New(stream1_id); |
| 210 callback_args[1] = v8::Integer::New(stream2_id); | 210 callback_args[1] = v8::Integer::New(stream2_id); |
| 211 callback_args[2] = v8::Integer::New(udp_id); | 211 callback_args[2] = v8::Integer::New(udp_id); |
| 212 context()->CallFunction(create_callback_.NewHandle(context()->isolate()), | 212 context()->CallFunction(create_callback_.NewHandle(context()->isolate()), |
| 213 3, callback_args); | 213 3, callback_args); |
| 214 create_callback_.reset(); | 214 create_callback_.reset(); |
| 215 } | 215 } |
| 216 | 216 |
| 217 void WebRtcNativeHandler::DestroyCastSendTransport( | 217 void CastStreamingNativeHandler::DestroyCastRtpStream( |
| 218 const v8::FunctionCallbackInfo<v8::Value>& args) { | 218 const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 219 CHECK_EQ(1, args.Length()); | 219 CHECK_EQ(1, args.Length()); |
| 220 CHECK(args[0]->IsInt32()); | 220 CHECK(args[0]->IsInt32()); |
| 221 | 221 |
| 222 const int transport_id = args[0]->ToInt32()->Value(); | 222 const int transport_id = args[0]->ToInt32()->Value(); |
| 223 if (!GetSendTransportOrThrow(transport_id)) | 223 if (!GetRtpStreamOrThrow(transport_id)) |
| 224 return; | 224 return; |
| 225 send_transport_map_.erase(transport_id); | 225 rtp_stream_map_.erase(transport_id); |
| 226 } | 226 } |
| 227 | 227 |
| 228 void WebRtcNativeHandler::GetCapsCastSendTransport( | 228 void CastStreamingNativeHandler::GetCapsCastRtpStream( |
| 229 const v8::FunctionCallbackInfo<v8::Value>& args) { | 229 const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 230 CHECK_EQ(1, args.Length()); | 230 CHECK_EQ(1, args.Length()); |
| 231 CHECK(args[0]->IsInt32()); | 231 CHECK(args[0]->IsInt32()); |
| 232 | 232 |
| 233 const int transport_id = args[0]->ToInt32()->Value(); | 233 const int transport_id = args[0]->ToInt32()->Value(); |
| 234 CastSendTransport* transport = GetSendTransportOrThrow(transport_id); | 234 CastRtpStream* transport = GetRtpStreamOrThrow(transport_id); |
| 235 if (!transport) | 235 if (!transport) |
| 236 return; | 236 return; |
| 237 | 237 |
| 238 CastRtpCaps cast_caps = transport->GetCaps(); | 238 CastRtpCaps cast_caps = transport->GetCaps(); |
| 239 RtpCaps caps; | 239 RtpCaps caps; |
| 240 FromCastRtpCaps(cast_caps, &caps); | 240 FromCastRtpCaps(cast_caps, &caps); |
| 241 | 241 |
| 242 scoped_ptr<base::DictionaryValue> caps_value = caps.ToValue(); | 242 scoped_ptr<base::DictionaryValue> caps_value = caps.ToValue(); |
| 243 scoped_ptr<V8ValueConverter> converter(V8ValueConverter::create()); | 243 scoped_ptr<V8ValueConverter> converter(V8ValueConverter::create()); |
| 244 args.GetReturnValue().Set(converter->ToV8Value( | 244 args.GetReturnValue().Set(converter->ToV8Value( |
| 245 caps_value.get(), context()->v8_context())); | 245 caps_value.get(), context()->v8_context())); |
| 246 } | 246 } |
| 247 | 247 |
| 248 void WebRtcNativeHandler::StartCastSendTransport( | 248 void CastStreamingNativeHandler::StartCastRtpStream( |
| 249 const v8::FunctionCallbackInfo<v8::Value>& args) { | 249 const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 250 CHECK_EQ(2, args.Length()); | 250 CHECK_EQ(2, args.Length()); |
| 251 CHECK(args[0]->IsInt32()); | 251 CHECK(args[0]->IsInt32()); |
| 252 CHECK(args[1]->IsObject()); | 252 CHECK(args[1]->IsObject()); |
| 253 | 253 |
| 254 const int transport_id = args[0]->ToInt32()->Value(); | 254 const int transport_id = args[0]->ToInt32()->Value(); |
| 255 CastSendTransport* transport = GetSendTransportOrThrow(transport_id); | 255 CastRtpStream* transport = GetRtpStreamOrThrow(transport_id); |
| 256 if (!transport) | 256 if (!transport) |
| 257 return; | 257 return; |
| 258 | 258 |
| 259 scoped_ptr<V8ValueConverter> converter(V8ValueConverter::create()); | 259 scoped_ptr<V8ValueConverter> converter(V8ValueConverter::create()); |
| 260 scoped_ptr<Value> params_value( | 260 scoped_ptr<Value> params_value( |
| 261 converter->FromV8Value(args[1], context()->v8_context())); | 261 converter->FromV8Value(args[1], context()->v8_context())); |
| 262 if (!params_value) { | 262 if (!params_value) { |
| 263 args.GetIsolate()->ThrowException(v8::Exception::TypeError( | 263 args.GetIsolate()->ThrowException(v8::Exception::TypeError( |
| 264 v8::String::NewFromUtf8(args.GetIsolate(), kUnableToConvertParams))); | 264 v8::String::NewFromUtf8(args.GetIsolate(), kUnableToConvertParams))); |
| 265 return; | 265 return; |
| 266 } | 266 } |
| 267 scoped_ptr<RtpParams> params = RtpParams::FromValue(*params_value); | 267 scoped_ptr<RtpParams> params = RtpParams::FromValue(*params_value); |
| 268 if (!params) { | 268 if (!params) { |
| 269 args.GetIsolate()->ThrowException(v8::Exception::TypeError( | 269 args.GetIsolate()->ThrowException(v8::Exception::TypeError( |
| 270 v8::String::NewFromUtf8(args.GetIsolate(), kInvalidRtpParams))); | 270 v8::String::NewFromUtf8(args.GetIsolate(), kInvalidRtpParams))); |
| 271 return; | 271 return; |
| 272 } | 272 } |
| 273 | 273 |
| 274 CastRtpCaps cast_params; | 274 CastRtpCaps cast_params; |
| 275 ToCastRtpParams(*params, &cast_params); | 275 ToCastRtpParams(*params, &cast_params); |
| 276 transport->Start(cast_params); | 276 transport->Start(cast_params); |
| 277 } | 277 } |
| 278 | 278 |
| 279 void WebRtcNativeHandler::StopCastSendTransport( | 279 void CastStreamingNativeHandler::StopCastRtpStream( |
| 280 const v8::FunctionCallbackInfo<v8::Value>& args) { | 280 const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 281 CHECK_EQ(1, args.Length()); | 281 CHECK_EQ(1, args.Length()); |
| 282 CHECK(args[0]->IsInt32()); | 282 CHECK(args[0]->IsInt32()); |
| 283 | 283 |
| 284 const int transport_id = args[0]->ToInt32()->Value(); | 284 const int transport_id = args[0]->ToInt32()->Value(); |
| 285 CastSendTransport* transport = GetSendTransportOrThrow(transport_id); | 285 CastRtpStream* transport = GetRtpStreamOrThrow(transport_id); |
| 286 if (!transport) | 286 if (!transport) |
| 287 return; | 287 return; |
| 288 transport->Stop(); | 288 transport->Stop(); |
| 289 } | 289 } |
| 290 | 290 |
| 291 void WebRtcNativeHandler::DestroyCastUdpTransport( | 291 void CastStreamingNativeHandler::DestroyCastUdpTransport( |
| 292 const v8::FunctionCallbackInfo<v8::Value>& args) { | 292 const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 293 CHECK_EQ(1, args.Length()); | 293 CHECK_EQ(1, args.Length()); |
| 294 CHECK(args[0]->IsInt32()); | 294 CHECK(args[0]->IsInt32()); |
| 295 | 295 |
| 296 const int transport_id = args[0]->ToInt32()->Value(); | 296 const int transport_id = args[0]->ToInt32()->Value(); |
| 297 if (!GetUdpTransportOrThrow(transport_id)) | 297 if (!GetUdpTransportOrThrow(transport_id)) |
| 298 return; | 298 return; |
| 299 udp_transport_map_.erase(transport_id); | 299 udp_transport_map_.erase(transport_id); |
| 300 } | 300 } |
| 301 | 301 |
| 302 void WebRtcNativeHandler::StartCastUdpTransport( | 302 void CastStreamingNativeHandler::StartCastUdpTransport( |
| 303 const v8::FunctionCallbackInfo<v8::Value>& args) { | 303 const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 304 CHECK_EQ(2, args.Length()); | 304 CHECK_EQ(2, args.Length()); |
| 305 CHECK(args[0]->IsInt32()); | 305 CHECK(args[0]->IsInt32()); |
| 306 CHECK(args[1]->IsObject()); | 306 CHECK(args[1]->IsObject()); |
| 307 | 307 |
| 308 const int transport_id = args[0]->ToInt32()->Value(); | 308 const int transport_id = args[0]->ToInt32()->Value(); |
| 309 CastUdpTransport* transport = GetUdpTransportOrThrow(transport_id); | 309 CastUdpTransport* transport = GetUdpTransportOrThrow(transport_id); |
| 310 if (!transport) | 310 if (!transport) |
| 311 return; | 311 return; |
| 312 | 312 |
| 313 scoped_ptr<V8ValueConverter> converter(V8ValueConverter::create()); | 313 scoped_ptr<V8ValueConverter> converter(V8ValueConverter::create()); |
| 314 scoped_ptr<Value> udp_params_value( | 314 scoped_ptr<Value> udp_params_value( |
| 315 converter->FromV8Value(args[1], context()->v8_context())); | 315 converter->FromV8Value(args[1], context()->v8_context())); |
| 316 if (!udp_params_value) { | 316 if (!udp_params_value) { |
| 317 args.GetIsolate()->ThrowException(v8::Exception::TypeError( | 317 args.GetIsolate()->ThrowException(v8::Exception::TypeError( |
| 318 v8::String::NewFromUtf8(args.GetIsolate(), kUnableToConvertArgs))); | 318 v8::String::NewFromUtf8(args.GetIsolate(), kUnableToConvertArgs))); |
| 319 return; | 319 return; |
| 320 } | 320 } |
| 321 scoped_ptr<UdpParams> udp_params = UdpParams::FromValue(*udp_params_value); | 321 scoped_ptr<UdpParams> udp_params = UdpParams::FromValue(*udp_params_value); |
| 322 if (!udp_params) { | 322 if (!udp_params) { |
| 323 args.GetIsolate()->ThrowException(v8::Exception::TypeError( | 323 args.GetIsolate()->ThrowException(v8::Exception::TypeError( |
| 324 v8::String::NewFromUtf8(args.GetIsolate(), kInvalidUdpParams))); | 324 v8::String::NewFromUtf8(args.GetIsolate(), kInvalidUdpParams))); |
| 325 return; | 325 return; |
| 326 } | 326 } |
| 327 transport->Start(net::HostPortPair(udp_params->address, udp_params->port)); | 327 transport->Start(net::HostPortPair(udp_params->address, udp_params->port)); |
| 328 } | 328 } |
| 329 | 329 |
| 330 CastSendTransport* WebRtcNativeHandler::GetSendTransportOrThrow( | 330 CastRtpStream* CastStreamingNativeHandler::GetRtpStreamOrThrow( |
| 331 int transport_id) const { | 331 int transport_id) const { |
| 332 SendTransportMap::const_iterator iter = send_transport_map_.find( | 332 RtpStreamMap::const_iterator iter = rtp_stream_map_.find( |
| 333 transport_id); | 333 transport_id); |
| 334 if (iter != send_transport_map_.end()) | 334 if (iter != rtp_stream_map_.end()) |
| 335 return iter->second.get(); | 335 return iter->second.get(); |
| 336 v8::Isolate* isolate = context()->v8_context()->GetIsolate(); | 336 v8::Isolate* isolate = context()->v8_context()->GetIsolate(); |
| 337 isolate->ThrowException(v8::Exception::RangeError( | 337 isolate->ThrowException(v8::Exception::RangeError(v8::String::NewFromUtf8( |
| 338 v8::String::NewFromUtf8(isolate, kSendTransportNotFound))); | 338 isolate, kRtpStreamNotFound))); |
| 339 return NULL; | 339 return NULL; |
| 340 } | 340 } |
| 341 | 341 |
| 342 CastUdpTransport* WebRtcNativeHandler::GetUdpTransportOrThrow( | 342 CastUdpTransport* CastStreamingNativeHandler::GetUdpTransportOrThrow( |
| 343 int transport_id) const { | 343 int transport_id) const { |
| 344 UdpTransportMap::const_iterator iter = udp_transport_map_.find( | 344 UdpTransportMap::const_iterator iter = udp_transport_map_.find( |
| 345 transport_id); | 345 transport_id); |
| 346 if (iter != udp_transport_map_.end()) | 346 if (iter != udp_transport_map_.end()) |
| 347 return iter->second.get(); | 347 return iter->second.get(); |
| 348 v8::Isolate* isolate = context()->v8_context()->GetIsolate(); | 348 v8::Isolate* isolate = context()->v8_context()->GetIsolate(); |
| 349 isolate->ThrowException(v8::Exception::RangeError( | 349 isolate->ThrowException(v8::Exception::RangeError( |
| 350 v8::String::NewFromUtf8(isolate, kUdpTransportNotFound))); | 350 v8::String::NewFromUtf8(isolate, kUdpTransportNotFound))); |
| 351 return NULL; | 351 return NULL; |
| 352 } | 352 } |
| 353 | 353 |
| 354 } // namespace extensions | 354 } // namespace extensions |
| OLD | NEW |