| // 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 "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); | |
| ~InterfaceProxy() override; | |
| Dispatcher* dispatcher() const { return dispatcher_; } | |
| // IPC::Sender implementation. | |
| bool Send(IPC::Message* msg) override; | |
| // Sub-classes must implement IPC::Listener which contains this: | |
| // virtual bool OnMessageReceived(const Message& message) = 0; | |
| protected: | |
| // Creates the given interface associated with the given dispatcher. The | |
| // dispatcher manages our lifetime. | |
| explicit InterfaceProxy(Dispatcher* dispatcher); | |
| private: | |
| Dispatcher* dispatcher_; | |
| }; | |
| } // namespace proxy | |
| } // namespace ppapi | |
| #endif // PPAPI_PROXY_INTERFACE_PROXY_H_ | |