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