• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
15 namespace IPC {
16 class Message;
17 }
18 
19 namespace ppapi {
20 namespace proxy {
21 
22 class SerializedHandle;
23 
24 class 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