1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef PPAPI_PROXY_INTERFACE_PROXY_H_ 6#define PPAPI_PROXY_INTERFACE_PROXY_H_ 7 8#include "base/basictypes.h" 9#include "ipc/ipc_listener.h" 10#include "ipc/ipc_sender.h" 11#include "ppapi/c/pp_completion_callback.h" 12#include "ppapi/c/pp_resource.h" 13#include "ppapi/c/pp_var.h" 14#include "ppapi/shared_impl/api_id.h" 15 16namespace ppapi { 17namespace proxy { 18 19class Dispatcher; 20 21class InterfaceProxy : public IPC::Listener, public IPC::Sender { 22 public: 23 // Factory function type for interfaces. Ownership of the returned pointer 24 // is transferred to the caller. 25 typedef InterfaceProxy* (*Factory)(Dispatcher* dispatcher); 26 27 // DEPRECATED: New classes should be registered directly in the interface 28 // list. This is kept around until we convert all the existing code. 29 // 30 // Information about the interface. Each interface has a static function to 31 // return its info, which allows either construction on the target side, and 32 // getting the proxied interface on the source side (see dispatcher.h for 33 // terminology). 34 struct Info { 35 const void* interface_ptr; 36 37 const char* name; 38 ApiID id; 39 40 bool is_trusted; 41 42 InterfaceProxy::Factory create_proxy; 43 }; 44 45 virtual ~InterfaceProxy(); 46 47 Dispatcher* dispatcher() const { return dispatcher_; } 48 49 // IPC::Sender implementation. 50 virtual bool Send(IPC::Message* msg); 51 52 // Sub-classes must implement IPC::Listener which contains this: 53 //virtual bool OnMessageReceived(const IPC::Message& msg); 54 55 protected: 56 // Creates the given interface associated with the given dispatcher. The 57 // dispatcher manages our lifetime. 58 InterfaceProxy(Dispatcher* dispatcher); 59 60 private: 61 Dispatcher* dispatcher_; 62}; 63 64} // namespace proxy 65} // namespace ppapi 66 67#endif // PPAPI_PROXY_INTERFACE_PROXY_H_ 68 69