nacl_message_scanner.h revision 0f1bc08d4cfcc34181b0b5cbf065c40f687bf740
1// Copyright 2013 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#ifndef PPAPI_PROXY_NACL_MESSAGE_SCANNER_H_
6#define PPAPI_PROXY_NACL_MESSAGE_SCANNER_H_
7
8#include <map>
9#include <vector>
10
11#include "base/basictypes.h"
12#include "base/memory/scoped_ptr.h"
13#include "ppapi/proxy/ppapi_proxy_export.h"
14
15namespace IPC {
16class Message;
17}
18
19namespace ppapi {
20namespace proxy {
21
22class SerializedHandle;
23
24class PPAPI_PROXY_EXPORT NaClMessageScanner {
25 public:
26  NaClMessageScanner();
27
28  // Scans the message for items that require special handling. Copies any
29  // SerializedHandles in the message into |handles| and if the message must be
30  // rewritten for NaCl, sets |new_msg_ptr| to the new message. If no handles
31  // are found, |handles| is left unchanged. If no rewriting is needed,
32  // |new_msg_ptr| is left unchanged.
33  //
34  // See more explanation in the method definition.
35  //
36  // See chrome/nacl/nacl_ipc_adapter.cc for where this is used to help convert
37  // native handles to NaClDescs.
38  bool ScanMessage(const IPC::Message& msg,
39                   std::vector<SerializedHandle>* handles,
40                   scoped_ptr<IPC::Message>* new_msg_ptr);
41
42  // This method informs NaClMessageScanner that a sync message is being sent
43  // so that it can associate reply messages with their type.
44  //
45  // Users of NaClMessageScanner must call this when they send a synchronous
46  // message, otherwise NaClMessageScanner won't scan replies.
47  void RegisterSyncMessageForReply(const IPC::Message& msg);
48
49 private:
50  // When we send a synchronous message (from untrusted to trusted), we store
51  // its type here, so that later we can associate the reply with its type
52  // for scanning.
53  typedef std::map<int, uint32> PendingSyncMsgMap;
54  PendingSyncMsgMap pending_sync_msgs_;
55
56  DISALLOW_COPY_AND_ASSIGN(NaClMessageScanner);
57};
58
59}  // namespace proxy
60}  // namespace ppapi
61
62#endif  // PPAPI_PROXY_NACL_MESSAGE_SCANNER_H_
63