Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(344)

Side by Side Diff: ipc/sync_socket_unittest.cc

Issue 7768001: Add support for exporting IPC messages from component DLLs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ipc/ipc_message_utils_impl.h ('k') | webkit/glue/webkit_glue.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/sync_socket.h" 5 #include "base/sync_socket.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 #include <string> 8 #include <string>
9 #include <sstream> 9 #include <sstream>
10 10
11 #include "base/message_loop.h" 11 #include "base/message_loop.h"
12 #include "base/process_util.h" 12 #include "base/process_util.h"
13 #include "build/build_config.h"
14 #include "ipc/ipc_channel.h"
15 #include "ipc/ipc_channel_proxy.h" 13 #include "ipc/ipc_channel_proxy.h"
16 #include "ipc/ipc_message_macros.h"
17 #include "ipc/ipc_message_utils.h"
18 #include "ipc/ipc_message_utils_impl.h"
19 #include "ipc/ipc_tests.h" 14 #include "ipc/ipc_tests.h"
20 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
21 #include "testing/multiprocess_func_list.h" 16 #include "testing/multiprocess_func_list.h"
22 17
23 #if defined(OS_POSIX) 18 #if defined(OS_POSIX)
24 #include "base/file_descriptor_posix.h" 19 #include "base/file_descriptor_posix.h"
25 #endif 20 #endif
26 21
27 enum IPCMessageIds { 22 // IPC messages for testing ---------------------------------------------------
28 UNUSED_IPC_TYPE, 23
29 SERVER_FIRST_IPC_TYPE, // SetHandle message sent to server. 24 #define IPC_MESSAGE_IMPL
30 SERVER_SECOND_IPC_TYPE, // Shutdown message sent to server. 25 #include "ipc/ipc_message_macros.h"
31 CLIENT_FIRST_IPC_TYPE // Response message sent to client. 26
32 }; 27 #define IPC_MESSAGE_START TestMsgStart
28
29 // Message class to pass a base::SyncSocket::Handle to another process. This
30 // is not as easy as it sounds, because of the differences in transferring
31 // Windows HANDLEs versus posix file descriptors.
32 #if defined(OS_WIN)
33 IPC_MESSAGE_CONTROL1(MsgClassSetHandle, base::SyncSocket::Handle)
34 #elif defined(OS_POSIX)
35 IPC_MESSAGE_CONTROL1(MsgClassSetHandle, base::FileDescriptor)
36 #endif
37
38 // Message class to pass a response to the server.
39 IPC_MESSAGE_CONTROL1(MsgClassResponse, std::string)
40
41 // Message class to tell the server to shut down.
42 IPC_MESSAGE_CONTROL0(MsgClassShutdown)
43
44 // ----------------------------------------------------------------------------
33 45
34 namespace { 46 namespace {
35 const char kHelloString[] = "Hello, SyncSocket Client"; 47 const char kHelloString[] = "Hello, SyncSocket Client";
36 const size_t kHelloStringLength = arraysize(kHelloString); 48 const size_t kHelloStringLength = arraysize(kHelloString);
37 } // namespace 49 } // namespace
38 50
39 // Message class to pass a base::SyncSocket::Handle to another process.
40 // This is not as easy as it sounds, because of the differences in transferring
41 // Windows HANDLEs versus posix file descriptors.
42 #if defined(OS_WIN)
43 class MsgClassSetHandle
44 : public IPC::MessageWithTuple< Tuple1<base::SyncSocket::Handle> > {
45 public:
46 enum { ID = SERVER_FIRST_IPC_TYPE };
47 explicit MsgClassSetHandle(const base::SyncSocket::Handle arg1)
48 : IPC::MessageWithTuple< Tuple1<base::SyncSocket::Handle> >(
49 MSG_ROUTING_CONTROL, ID, MakeRefTuple(arg1)) {}
50
51 private:
52 DISALLOW_COPY_AND_ASSIGN(MsgClassSetHandle);
53 };
54 #elif defined(OS_POSIX)
55 class MsgClassSetHandle
56 : public IPC::MessageWithTuple< Tuple1<base::FileDescriptor> > {
57 public:
58 enum { ID = SERVER_FIRST_IPC_TYPE };
59 explicit MsgClassSetHandle(const base::FileDescriptor& arg1)
60 : IPC::MessageWithTuple< Tuple1<base::FileDescriptor> >(
61 MSG_ROUTING_CONTROL, ID, MakeRefTuple(arg1)) {}
62
63 private:
64 DISALLOW_COPY_AND_ASSIGN(MsgClassSetHandle);
65 };
66 #else
67 # error "What platform?"
68 #endif // defined(OS_WIN)
69
70 // Message class to pass a response to the server.
71 class MsgClassResponse
72 : public IPC::MessageWithTuple< Tuple1<std::string> > {
73 public:
74 enum { ID = CLIENT_FIRST_IPC_TYPE };
75 explicit MsgClassResponse(const std::string& arg1)
76 : IPC::MessageWithTuple< Tuple1<std::string> >(
77 MSG_ROUTING_CONTROL, ID, MakeRefTuple(arg1)) {}
78
79 private:
80 DISALLOW_COPY_AND_ASSIGN(MsgClassResponse);
81 };
82
83 // Message class to tell the server to shut down.
84 class MsgClassShutdown
85 : public IPC::MessageWithTuple< Tuple0 > {
86 public:
87 enum { ID = SERVER_SECOND_IPC_TYPE };
88 MsgClassShutdown()
89 : IPC::MessageWithTuple< Tuple0 >(
90 MSG_ROUTING_CONTROL, ID, MakeTuple()) {}
91
92 private:
93 DISALLOW_COPY_AND_ASSIGN(MsgClassShutdown);
94 };
95
96 // The SyncSocket server listener class processes two sorts of 51 // The SyncSocket server listener class processes two sorts of
97 // messages from the client. 52 // messages from the client.
98 class SyncSocketServerListener : public IPC::Channel::Listener { 53 class SyncSocketServerListener : public IPC::Channel::Listener {
99 public: 54 public:
100 SyncSocketServerListener() : chan_(NULL) { 55 SyncSocketServerListener() : chan_(NULL) {
101 } 56 }
102 57
103 void Init(IPC::Channel* chan) { 58 void Init(IPC::Channel* chan) {
104 chan_ = chan; 59 chan_ = chan;
105 } 60 }
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 #endif // defined(OS_WIN) 196 #endif // defined(OS_WIN)
242 EXPECT_TRUE(chan.Send(msg)); 197 EXPECT_TRUE(chan.Send(msg));
243 // Use the current thread as the I/O thread. 198 // Use the current thread as the I/O thread.
244 MessageLoop::current()->Run(); 199 MessageLoop::current()->Run();
245 // Shut down. 200 // Shut down.
246 delete pair[0]; 201 delete pair[0];
247 delete pair[1]; 202 delete pair[1];
248 EXPECT_TRUE(base::WaitForSingleProcess(server_process, 5000)); 203 EXPECT_TRUE(base::WaitForSingleProcess(server_process, 5000));
249 base::CloseProcessHandle(server_process); 204 base::CloseProcessHandle(server_process);
250 } 205 }
OLDNEW
« no previous file with comments | « ipc/ipc_message_utils_impl.h ('k') | webkit/glue/webkit_glue.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698