blob: 603d5e2538267b6e6a8b3e6599ace97cdc596626 [file] [log] [blame]
[email protected]6dac7312012-11-20 04:31:371// Copyright (c) 2012 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#include "ppapi/host/resource_message_handler.h"
6
7#include "base/logging.h"
8#include "ipc/ipc_message.h"
9#include "ppapi/c/pp_errors.h"
10#include "ppapi/host/host_message_context.h"
11
12namespace ppapi {
13namespace host {
14
15ResourceMessageHandler::ResourceMessageHandler() {
16}
17
18ResourceMessageHandler::~ResourceMessageHandler() {
19}
20
21void ResourceMessageHandler::RunMessageHandlerAndReply(
22 const IPC::Message& msg,
23 HostMessageContext* context) {
24 ReplyMessageContext reply_context = context->MakeReplyMessageContext();
[email protected]24f40c12012-12-19 20:17:4225 // CAUTION: Handling the message may cause the destruction of this object.
26 // The message handler should ensure that if there is a chance that the
27 // object will be destroyed, PP_OK_COMPLETIONPENDING is returned as the
28 // result of the message handler. Otherwise the code below will attempt to
29 // send a reply message on a destroyed object.
[email protected]6dac7312012-11-20 04:31:3730 reply_context.params.set_result(OnResourceMessageReceived(msg, context));
31
32 // Sanity check the resource handler. Note if the result was
33 // "completion pending" the resource host may have already sent the reply.
34 if (reply_context.params.result() == PP_OK_COMPLETIONPENDING) {
35 // Message handler should have only returned a pending result if a
36 // response will be sent to the plugin.
37 DCHECK(context->params.has_callback());
38
39 // Message handler should not have written a message to be returned if
40 // completion is pending.
41 DCHECK(context->reply_msg.type() == 0);
42 } else if (!context->params.has_callback()) {
43 // When no response is required, the message handler should not have
44 // written a message to be returned.
45 DCHECK(context->reply_msg.type() == 0);
46
47 // If there is no callback and the result of running the message handler
48 // was not PP_OK the client won't find out.
49 DLOG_IF(WARNING, reply_context.params.result() != PP_OK)
50 << "'Post' message handler failed to complete successfully.";
51 }
52
53 if (context->params.has_callback() &&
54 reply_context.params.result() != PP_OK_COMPLETIONPENDING)
55 SendReply(reply_context, context->reply_msg);
56}
57
58int32_t ResourceMessageHandler::OnResourceMessageReceived(
59 const IPC::Message& msg,
60 HostMessageContext* context) {
61 return PP_ERROR_NOTSUPPORTED;
62}
63
64} // namespace host
65} // namespace ppapi