Index: ipc/ipc_message_templates.h |
diff --git a/ipc/ipc_message_templates.h b/ipc/ipc_message_templates.h |
index f5c28cca4a68978b3b5794d12a9d5e7108726eee..57f5cf0b95e1b8b4f3b136e701c16078a7edde2d 100644 |
--- a/ipc/ipc_message_templates.h |
+++ b/ipc/ipc_message_templates.h |
@@ -162,7 +162,7 @@ class MessageT<Meta, std::tuple<Ins...>, std::tuple<Outs...>> |
static bool Dispatch(const Message* msg, |
T* obj, |
S* sender, |
- P* parameter, |
+ P* /* parameter */, |
Method func) { |
TRACE_EVENT0("ipc", Meta::kName); |
SendParam send_params; |
@@ -184,7 +184,7 @@ class MessageT<Meta, std::tuple<Ins...>, std::tuple<Outs...>> |
template <class T, class P, class Method> |
static bool DispatchDelayReply(const Message* msg, |
T* obj, |
- P* parameter, |
+ P* /* parameter */, |
Method func) { |
TRACE_EVENT0("ipc", Meta::kName); |
SendParam send_params; |
@@ -202,6 +202,29 @@ class MessageT<Meta, std::tuple<Ins...>, std::tuple<Outs...>> |
return ok; |
} |
+ template <class T, class P, class Method> |
+ static bool DispatchWithParamDelayReply(const Message* msg, |
+ T* obj, |
+ P* parameter, |
+ Method func) { |
+ TRACE_EVENT0("ipc", Meta::kName); |
+ SendParam send_params; |
+ bool ok = ReadSendParam(msg, &send_params); |
+ Message* reply = SyncMessage::GenerateReply(msg); |
+ if (ok) { |
+ std::tuple<Message&> t = std::tie(*reply); |
+ ConnectMessageAndReply(msg, reply); |
+ std::tuple<P*> parameter_tuple(parameter); |
+ auto concat_params = std::tuple_cat(parameter_tuple, send_params); |
+ base::DispatchToMethod(obj, func, concat_params, &t); |
+ } else { |
+ NOTREACHED() << "Error deserializing message " << msg->type(); |
+ reply->set_reply_error(); |
+ obj->Send(reply); |
+ } |
+ return ok; |
+ } |
+ |
private: |
MessageT(Routing routing, const Ins&... ins, Outs*... outs); |
}; |