| // 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. | 
 |  | 
 | #include "ppapi/host/resource_message_handler.h" | 
 |  | 
 | #include "base/logging.h" | 
 | #include "ipc/ipc_message.h" | 
 | #include "ppapi/c/pp_errors.h" | 
 | #include "ppapi/host/host_message_context.h" | 
 |  | 
 | namespace ppapi { | 
 | namespace host { | 
 |  | 
 | ResourceMessageHandler::ResourceMessageHandler() { | 
 | } | 
 |  | 
 | ResourceMessageHandler::~ResourceMessageHandler() { | 
 | } | 
 |  | 
 | void ResourceMessageHandler::RunMessageHandlerAndReply( | 
 |     const IPC::Message& msg, | 
 |     HostMessageContext* context) { | 
 |   ReplyMessageContext reply_context = context->MakeReplyMessageContext(); | 
 |   // CAUTION: Handling the message may cause the destruction of this object. | 
 |   // The message handler should ensure that if there is a chance that the | 
 |   // object will be destroyed, PP_OK_COMPLETIONPENDING is returned as the | 
 |   // result of the message handler. Otherwise the code below will attempt to | 
 |   // send a reply message on a destroyed object. | 
 |   reply_context.params.set_result(OnResourceMessageReceived(msg, context)); | 
 |  | 
 |   // Sanity check the resource handler. Note if the result was | 
 |   // "completion pending" the resource host may have already sent the reply. | 
 |   if (reply_context.params.result() == PP_OK_COMPLETIONPENDING) { | 
 |     // Message handler should have only returned a pending result if a | 
 |     // response will be sent to the plugin. | 
 |     DCHECK(context->params.has_callback()); | 
 |  | 
 |     // Message handler should not have written a message to be returned if | 
 |     // completion is pending. | 
 |     DCHECK(context->reply_msg.type() == 0); | 
 |   } else if (!context->params.has_callback()) { | 
 |     // When no response is required, the message handler should not have | 
 |     // written a message to be returned. | 
 |     DCHECK(context->reply_msg.type() == 0); | 
 |  | 
 |     // If there is no callback and the result of running the message handler | 
 |     // was not PP_OK the client won't find out. | 
 |     DLOG_IF(WARNING, reply_context.params.result() != PP_OK) | 
 |         << "'Post' message handler failed to complete successfully."; | 
 |   } | 
 |  | 
 |   if (context->params.has_callback() && | 
 |       reply_context.params.result() != PP_OK_COMPLETIONPENDING) | 
 |     SendReply(reply_context, context->reply_msg); | 
 | } | 
 |  | 
 | int32_t ResourceMessageHandler::OnResourceMessageReceived( | 
 |     const IPC::Message& msg, | 
 |     HostMessageContext* context) { | 
 |   return PP_ERROR_NOTSUPPORTED; | 
 | } | 
 |  | 
 | }  // namespace host | 
 | }  // namespace ppapi |