// Copyright (c) 2011 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 PPAPI_PROXY_INTERFACE_PROXY_H_ #define PPAPI_PROXY_INTERFACE_PROXY_H_ #include "base/basictypes.h" #include "ipc/ipc_listener.h" #include "ipc/ipc_sender.h" #include "ppapi/c/pp_completion_callback.h" #include "ppapi/c/pp_resource.h" #include "ppapi/c/pp_var.h" #include "ppapi/shared_impl/api_id.h" namespace ppapi { namespace proxy { class Dispatcher; class InterfaceProxy : public IPC::Listener, public IPC::Sender { public: // Factory function type for interfaces. Ownership of the returned pointer // is transferred to the caller. typedef InterfaceProxy* (*Factory)(Dispatcher* dispatcher); // DEPRECATED: New classes should be registered directly in the interface // list. This is kept around until we convert all the existing code. // // Information about the interface. Each interface has a static function to // return its info, which allows either construction on the target side, and // getting the proxied interface on the source side (see dispatcher.h for // terminology). struct Info { const void* interface_ptr; const char* name; ApiID id; bool is_trusted; InterfaceProxy::Factory create_proxy; }; virtual ~InterfaceProxy(); Dispatcher* dispatcher() const { return dispatcher_; } // IPC::Sender implementation. virtual bool Send(IPC::Message* msg); // Sub-classes must implement IPC::Listener which contains this: //virtual bool OnMessageReceived(const IPC::Message& msg); protected: // Creates the given interface associated with the given dispatcher. The // dispatcher manages our lifetime. InterfaceProxy(Dispatcher* dispatcher); private: Dispatcher* dispatcher_; }; } // namespace proxy } // namespace ppapi #endif // PPAPI_PROXY_INTERFACE_PROXY_H_