Index: ipc/ipc_security_test_util.h |
diff --git a/ipc/ipc_security_test_util.h b/ipc/ipc_security_test_util.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c854d7d52df5245a255a423aa72bc0b01e83ba12 |
--- /dev/null |
+++ b/ipc/ipc_security_test_util.h |
@@ -0,0 +1,40 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef IPC_IPC_SECURITY_TEST_UTIL_H_ |
+#define IPC_IPC_SECURITY_TEST_UTIL_H_ |
+ |
+#include "base/basictypes.h" |
+ |
+namespace IPC { |
+ |
+class ChannelProxy; |
+class Message; |
+ |
+class IpcSecurityTestUtil { |
+ public: |
+ // Enables testing of security exploit scenarios where a compromised child |
+ // process can send a malicious message of an arbitrary type. |
+ // |
+ // This function will post the message to the IPC channel's thread, where it |
+ // is offered to the channel's listeners. Afterwards, a reply task is posted |
+ // back to the current thread. This function blocks until the reply task is |
+ // received. For messages forwarded back to the current thread, we won't |
+ // return until after the message has been handled here. |
+ // |
+ // Use this only for testing security bugs in a browsertest; other uses are |
+ // likely perilous. Unit tests should be using IPC::TestSink which has an |
+ // OnMessageReceived method you can call directly. Non-security browsertests |
+ // should just exercise the child process's normal codepaths to send messages. |
+ static void PwnMessageReceived(ChannelProxy* channel, const Message& message); |
+ |
+ private: |
+ IpcSecurityTestUtil(); // Not instantiable. |
+ |
+ DISALLOW_COPY_AND_ASSIGN(IpcSecurityTestUtil); |
+}; |
+ |
+} // namespace IPC |
+ |
+#endif // IPC_IPC_SECURITY_TEST_UTIL_H_ |