1 // Copyright 2014 The Chromium Authors 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 IPC_IPC_SECURITY_TEST_UTIL_H_ 6 #define IPC_IPC_SECURITY_TEST_UTIL_H_ 7 8 namespace IPC { 9 10 class ChannelProxy; 11 class Message; 12 13 class IpcSecurityTestUtil { 14 public: 15 IpcSecurityTestUtil(const IpcSecurityTestUtil&) = delete; 16 IpcSecurityTestUtil& operator=(const IpcSecurityTestUtil&) = delete; 17 18 // Enables testing of security exploit scenarios where a compromised child 19 // process can send a malicious message of an arbitrary type. 20 // 21 // This function will post the message to the IPC channel's thread, where it 22 // is offered to the channel's listeners. Afterwards, a reply task is posted 23 // back to the current thread. This function blocks until the reply task is 24 // received. For messages forwarded back to the current thread, we won't 25 // return until after the message has been handled here. 26 // 27 // Use this only for testing security bugs in a browsertest; other uses are 28 // likely perilous. Unit tests should be using IPC::TestSink which has an 29 // OnMessageReceived method you can call directly. Non-security browsertests 30 // should just exercise the child process's normal codepaths to send messages. 31 static void PwnMessageReceived(ChannelProxy* channel, const Message& message); 32 33 private: 34 IpcSecurityTestUtil(); // Not instantiable. 35 }; 36 37 } // namespace IPC 38 39 #endif // IPC_IPC_SECURITY_TEST_UTIL_H_ 40