// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_RENDERER_EXTENSIONS_CAST_STREAMING_NATIVE_HANDLER_H_ #define CHROME_RENDERER_EXTENSIONS_CAST_STREAMING_NATIVE_HANDLER_H_ #include #include "base/memory/linked_ptr.h" #include "base/memory/weak_ptr.h" #include "extensions/renderer/object_backed_native_handler.h" #include "extensions/renderer/scoped_persistent.h" #include "v8/include/v8.h" class CastRtpStream; class CastUdpTransport; namespace base { class BinaryValue; class DictionaryValue; } namespace extensions { // Native code that handle chrome.webrtc custom bindings. class CastStreamingNativeHandler : public ObjectBackedNativeHandler { public: explicit CastStreamingNativeHandler(ScriptContext* context); ~CastStreamingNativeHandler() override; private: void CreateCastSession( const v8::FunctionCallbackInfo& args); void DestroyCastRtpStream( const v8::FunctionCallbackInfo& args); void CreateParamsCastRtpStream( const v8::FunctionCallbackInfo& args); void GetSupportedParamsCastRtpStream( const v8::FunctionCallbackInfo& args); void StartCastRtpStream( const v8::FunctionCallbackInfo& args); void StopCastRtpStream( const v8::FunctionCallbackInfo& args); void DestroyCastUdpTransport( const v8::FunctionCallbackInfo& args); void SetDestinationCastUdpTransport( const v8::FunctionCallbackInfo& args); void SetOptionsCastUdpTransport( const v8::FunctionCallbackInfo& args); void StopCastUdpTransport( const v8::FunctionCallbackInfo& args); void ToggleLogging(const v8::FunctionCallbackInfo& args); void GetRawEvents(const v8::FunctionCallbackInfo& args); void GetStats(const v8::FunctionCallbackInfo& args); // Helper method to call the v8 callback function after a session is // created. void CallCreateCallback(scoped_ptr stream1, scoped_ptr stream2, scoped_ptr udp_transport); void CallStartCallback(int stream_id); void CallStopCallback(int stream_id); void CallErrorCallback(int stream_id, const std::string& message); void CallGetRawEventsCallback(int transport_id, scoped_ptr raw_events); void CallGetStatsCallback(int transport_id, scoped_ptr stats); // Gets the RTP stream or UDP transport indexed by an ID. // If not found, returns NULL and throws a V8 exception. CastRtpStream* GetRtpStreamOrThrow(int stream_id) const; CastUdpTransport* GetUdpTransportOrThrow(int transport_id) const; int last_transport_id_; typedef std::map > RtpStreamMap; RtpStreamMap rtp_stream_map_; typedef std::map > UdpTransportMap; UdpTransportMap udp_transport_map_; extensions::ScopedPersistent create_callback_; typedef std::map > > RtpStreamCallbackMap; RtpStreamCallbackMap get_raw_events_callbacks_; RtpStreamCallbackMap get_stats_callbacks_; base::WeakPtrFactory weak_factory_; DISALLOW_COPY_AND_ASSIGN(CastStreamingNativeHandler); }; } // namespace extensions #endif // CHROME_RENDERER_EXTENSIONS_CAST_STREAMING_NATIVE_HANDLER_H_