Index: chrome/renderer/extensions/cast_streaming_native_handler.cc |
diff --git a/chrome/renderer/extensions/cast_streaming_native_handler.cc b/chrome/renderer/extensions/cast_streaming_native_handler.cc |
index 71fd3e9a07d3f60900b534ad8bbb2560fec97eff..14e49d3e42e5c75d4a08a27e30afd4006815262f 100644 |
--- a/chrome/renderer/extensions/cast_streaming_native_handler.cc |
+++ b/chrome/renderer/extensions/cast_streaming_native_handler.cc |
@@ -168,6 +168,15 @@ CastStreamingNativeHandler::CastStreamingNativeHandler(ChromeV8Context* context) |
RouteFunction("SetDestinationCastUdpTransport", |
base::Bind(&CastStreamingNativeHandler::SetDestinationCastUdpTransport, |
base::Unretained(this))); |
+ RouteFunction("ToggleLogging", |
+ base::Bind(&CastStreamingNativeHandler::ToggleLogging, |
+ base::Unretained(this))); |
+ RouteFunction("GetRawEvents", |
+ base::Bind(&CastStreamingNativeHandler::GetRawEvents, |
+ base::Unretained(this))); |
+ RouteFunction("GetStats", |
+ base::Bind(&CastStreamingNativeHandler::GetStats, |
+ base::Unretained(this))); |
} |
CastStreamingNativeHandler::~CastStreamingNativeHandler() { |
@@ -218,9 +227,11 @@ void CastStreamingNativeHandler::CallCreateCallback( |
v8::Context::Scope context_scope(context()->v8_context()); |
const int stream1_id = last_transport_id_++; |
+ stream1->SetStreamId(stream1_id); |
Alpha Left Google
2014/02/24 23:25:51
stream id is a extensions API thing. It shouldn't
imcheng
2014/02/25 08:10:18
Per offline discussion, I am removing stream_id fr
|
rtp_stream_map_[stream1_id] = |
linked_ptr<CastRtpStream>(stream1.release()); |
const int stream2_id = last_transport_id_++; |
+ stream2->SetStreamId(stream2_id); |
rtp_stream_map_[stream2_id] = |
linked_ptr<CastRtpStream>(stream2.release()); |
const int udp_id = last_transport_id_++; |
@@ -409,6 +420,71 @@ void CastStreamingNativeHandler::SetDestinationCastUdpTransport( |
transport->SetDestination(net::IPEndPoint(ip, destination->port)); |
} |
+void CastStreamingNativeHandler::ToggleLogging( |
+ const v8::FunctionCallbackInfo<v8::Value>& args) { |
+ CHECK_EQ(2, args.Length()); |
+ CHECK(args[0]->IsInt32()); |
+ CHECK(args[1]->IsBoolean()); |
+ |
+ const int stream_id = args[0]->ToInt32()->Value(); |
+ CastRtpStream* stream = GetRtpStreamOrThrow(stream_id); |
+ if (!stream) |
+ return; |
+ |
+ const bool enable = args[1]->ToBoolean()->Value(); |
+ stream->ToggleLogging(enable); |
+} |
+ |
+void CastStreamingNativeHandler::GetRawEvents( |
+ const v8::FunctionCallbackInfo<v8::Value>& args) { |
+ CHECK_EQ(2, args.Length()); |
+ CHECK(args[0]->IsInt32()); |
+ CHECK(args[1]->IsFunction()); |
+ const int transport_id = args[0]->ToInt32()->Value(); |
+ CastRtpStream* transport = GetRtpStreamOrThrow(transport_id); |
+ if (!transport) |
+ return; |
+ |
+ linked_ptr<extensions::ScopedPersistent<v8::Function> > callback( |
+ new extensions::ScopedPersistent<v8::Function>); |
+ callback->reset(args[1].As<v8::Function>()); |
+ get_raw_events_callbacks_.insert(std::make_pair(transport_id, callback)); |
+ |
+ transport->GetRawEvents( |
+ base::Bind(&CastStreamingNativeHandler::CallGetRawEventsCallback, |
+ weak_factory_.GetWeakPtr(), |
+ transport_id)); |
+} |
+ |
+void CastStreamingNativeHandler::GetStats( |
+ const v8::FunctionCallbackInfo<v8::Value>& args) { |
+ CHECK_EQ(2, args.Length()); |
+ CHECK(args[0]->IsInt32()); |
+ CHECK(args[1]->IsFunction()); |
+ |
+ // TODO(imcheng): Implement this. |
+} |
+ |
+void CastStreamingNativeHandler::CallGetRawEventsCallback( |
+ int transport_id, |
+ scoped_ptr<std::string> raw_events) { |
+ v8::Isolate* isolate = context()->isolate(); |
+ v8::HandleScope handle_scope(isolate); |
+ v8::Context::Scope context_scope(context()->v8_context()); |
+ |
+ RtpStreamCallbackMap::iterator it = |
+ get_raw_events_callbacks_.find(transport_id); |
+ if (it != get_raw_events_callbacks_.end()) { |
+ v8::Handle<v8::Value> callback_args[1]; |
+ callback_args[0] = v8::String::NewFromUtf8(isolate, |
+ raw_events->data(), |
+ v8::String::kNormalString, |
+ raw_events->size()); |
+ context()->CallFunction(it->second->NewHandle(isolate), 1, callback_args); |
+ get_raw_events_callbacks_.erase(it); |
+ } |
+} |
+ |
CastRtpStream* CastStreamingNativeHandler::GetRtpStreamOrThrow( |
int transport_id) const { |
RtpStreamMap::const_iterator iter = rtp_stream_map_.find( |