Home | History | Annotate | Download | only in proxy
      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