| // Copyright (c) 2012 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_HOST_RESOURCE_MESSAGE_HANDLER_H_ | |
| #define PPAPI_HOST_RESOURCE_MESSAGE_HANDLER_H_ | |
| #include "base/macros.h" | |
| #include "ppapi/c/pp_stdint.h" | |
| #include "ppapi/host/ppapi_host_export.h" | |
| namespace IPC { | |
| class Message; | |
| } | |
| namespace ppapi { | |
| namespace host { | |
| struct HostMessageContext; | |
| struct ReplyMessageContext; | |
| // This is the base class of classes that can handle resource messages. It | |
| // mainly exists at present to share code for checking replies to resource | |
| // messages are valid. | |
| class PPAPI_HOST_EXPORT ResourceMessageHandler { | |
| public: | |
| ResourceMessageHandler(); | |
| virtual ~ResourceMessageHandler(); | |
| // Called when this handler should handle a particular message. This should | |
| // call into the the message handler implemented by subclasses (i.e. | |
| // |OnResourceMessageReceived|) and perform any additional work necessary to | |
| // handle the message (e.g. checking resource replies are valid). True is | |
| // returned if the message is handled and false otherwise. | |
| virtual bool HandleMessage(const IPC::Message& msg, | |
| HostMessageContext* context) = 0; | |
| // Send a resource reply message. | |
| virtual void SendReply(const ReplyMessageContext& context, | |
| const IPC::Message& msg) = 0; | |
| protected: | |
| // Runs the message handler and checks that a reply was sent if necessary. | |
| void RunMessageHandlerAndReply(const IPC::Message& msg, | |
| HostMessageContext* context); | |
| // Handles messages associated with a given resource object. If the flags | |
| // indicate that a response is required, the return value of this function | |
| // will be sent as a resource message "response" along with the message | |
| // specified in the reply of the context. | |
| // | |
| // You can do a response asynchronously by returning PP_OK_COMPLETIONPENDING. | |
| // This will cause the reply to be skipped, and the class implementing this | |
| // function will take responsibility for issuing the callback. The callback | |
| // can be issued inside OnResourceMessageReceived before it returns, or at | |
| // a future time. | |
| // | |
| // If you don't have a particular reply message, you can just ignore | |
| // the reply in the message context. However, if you have a reply more than | |
| // just the int32_t result code, set the reply to be the message of your | |
| // choosing. | |
| // | |
| // The default implementation just returns PP_ERROR_NOTSUPPORTED. | |
| virtual int32_t OnResourceMessageReceived(const IPC::Message& msg, | |
| HostMessageContext* context); | |
| private: | |
| DISALLOW_COPY_AND_ASSIGN(ResourceMessageHandler); | |
| }; | |
| } // namespace host | |
| } // namespace ppapi | |
| #endif // PPAPI_HOST_RESOURCE_MESSAGE_HANDLER_H_ |