OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 #ifndef CHROME_COMMON_IPC_MESSAGE_H__ | 5 #ifndef CHROME_COMMON_IPC_MESSAGE_H__ |
6 #define CHROME_COMMON_IPC_MESSAGE_H__ | 6 #define CHROME_COMMON_IPC_MESSAGE_H__ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
11 #include "base/pickle.h" | 11 #include "base/pickle.h" |
12 #include "testing/gtest/include/gtest/gtest_prod.h" | 12 #include "testing/gtest/include/gtest/gtest_prod.h" |
13 | 13 |
14 #if defined(OS_WIN) | 14 #if defined(OS_WIN) |
15 // TODO(port): IPC message logging hasn't been ported to other platforms yet. | 15 // TODO(port): IPC message logging hasn't been ported to other platforms yet. |
16 #ifndef NDEBUG | 16 #ifndef NDEBUG |
17 #define IPC_MESSAGE_LOG_ENABLED | 17 #define IPC_MESSAGE_LOG_ENABLED |
18 #endif | 18 #endif |
| 19 #elif defined(OS_POSIX) |
| 20 #include "chrome/common/file_descriptor_posix.h" |
19 #endif | 21 #endif |
20 | 22 |
21 namespace IPC { | 23 namespace IPC { |
22 | 24 |
23 //------------------------------------------------------------------------------ | 25 //------------------------------------------------------------------------------ |
24 | 26 |
25 class Channel; | 27 class Channel; |
26 class Message; | 28 class Message; |
27 struct LogData; | 29 struct LogData; |
28 | 30 |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 // Used for async messages with no parameters. | 154 // Used for async messages with no parameters. |
153 static void Log(const Message* msg, std::wstring* l) { | 155 static void Log(const Message* msg, std::wstring* l) { |
154 } | 156 } |
155 | 157 |
156 // Find the end of the message data that starts at range_start. Returns NULL | 158 // Find the end of the message data that starts at range_start. Returns NULL |
157 // if the entire message is not found in the given data range. | 159 // if the entire message is not found in the given data range. |
158 static const char* FindNext(const char* range_start, const char* range_end) { | 160 static const char* FindNext(const char* range_start, const char* range_end) { |
159 return Pickle::FindNext(sizeof(Header), range_start, range_end); | 161 return Pickle::FindNext(sizeof(Header), range_start, range_end); |
160 } | 162 } |
161 | 163 |
| 164 #if defined(OS_POSIX) |
| 165 DescriptorSet* descriptor_set() const { return &descriptor_set_; } |
| 166 #endif |
| 167 |
162 #ifdef IPC_MESSAGE_LOG_ENABLED | 168 #ifdef IPC_MESSAGE_LOG_ENABLED |
163 // Adds the outgoing time from Time::Now() at the end of the message and sets | 169 // Adds the outgoing time from Time::Now() at the end of the message and sets |
164 // a bit to indicate that it's been added. | 170 // a bit to indicate that it's been added. |
165 void set_sent_time(int64 time); | 171 void set_sent_time(int64 time); |
166 int64 sent_time() const; | 172 int64 sent_time() const; |
167 | 173 |
168 void set_received_time(int64 time) const; | 174 void set_received_time(int64 time) const; |
169 int64 received_time() const { return received_time_; } | 175 int64 received_time() const { return received_time_; } |
170 void set_output_params(const std::wstring& op) const { output_params_ = op; } | 176 void set_output_params(const std::wstring& op) const { output_params_ = op; } |
171 const std::wstring& output_params() const { return output_params_; } | 177 const std::wstring& output_params() const { return output_params_; } |
(...skipping 22 matching lines...) Expand all Loading... |
194 SYNC_BIT = 0x0004, | 200 SYNC_BIT = 0x0004, |
195 REPLY_BIT = 0x0008, | 201 REPLY_BIT = 0x0008, |
196 REPLY_ERROR_BIT = 0x0010, | 202 REPLY_ERROR_BIT = 0x0010, |
197 UNBLOCK_BIT = 0x0020, | 203 UNBLOCK_BIT = 0x0020, |
198 PUMPING_MSGS_BIT= 0x0040, | 204 PUMPING_MSGS_BIT= 0x0040, |
199 HAS_SENT_TIME_BIT = 0x0080, | 205 HAS_SENT_TIME_BIT = 0x0080, |
200 }; | 206 }; |
201 | 207 |
202 #pragma pack(push, 2) | 208 #pragma pack(push, 2) |
203 struct Header : Pickle::Header { | 209 struct Header : Pickle::Header { |
204 int32 routing; // ID of the view that this message is destined for | 210 int32 routing; // ID of the view that this message is destined for |
205 uint16 type; // specifies the user-defined message type | 211 uint16 type; // specifies the user-defined message type |
206 uint16 flags; // specifies control flags for the message | 212 uint16 flags; // specifies control flags for the message |
| 213 #if defined(OS_POSIX) |
| 214 uint32 num_fds; // the number of descriptors included with this message |
| 215 #endif |
207 }; | 216 }; |
208 #pragma pack(pop) | 217 #pragma pack(pop) |
209 | 218 |
210 Header* header() { | 219 Header* header() { |
211 return headerT<Header>(); | 220 return headerT<Header>(); |
212 } | 221 } |
213 const Header* header() const { | 222 const Header* header() const { |
214 return headerT<Header>(); | 223 return headerT<Header>(); |
215 } | 224 } |
216 | 225 |
217 void InitLoggingVariables(); | 226 void InitLoggingVariables(); |
218 | 227 |
| 228 #if defined(OS_POSIX) |
| 229 // The set of file descriptors associated with this message. |
| 230 mutable DescriptorSet descriptor_set_; |
| 231 #endif |
| 232 |
219 #ifdef IPC_MESSAGE_LOG_ENABLED | 233 #ifdef IPC_MESSAGE_LOG_ENABLED |
220 // Used for logging. | 234 // Used for logging. |
221 mutable int64 received_time_; | 235 mutable int64 received_time_; |
222 mutable std::wstring output_params_; | 236 mutable std::wstring output_params_; |
223 mutable LogData* log_data_; | 237 mutable LogData* log_data_; |
224 mutable bool dont_log_; | 238 mutable bool dont_log_; |
225 #endif | 239 #endif |
226 }; | 240 }; |
227 | 241 |
228 //------------------------------------------------------------------------------ | 242 //------------------------------------------------------------------------------ |
229 | 243 |
230 } // namespace IPC | 244 } // namespace IPC |
231 | 245 |
232 enum SpecialRoutingIDs { | 246 enum SpecialRoutingIDs { |
233 // indicates that we don't have a routing ID yet. | 247 // indicates that we don't have a routing ID yet. |
234 MSG_ROUTING_NONE = -2, | 248 MSG_ROUTING_NONE = -2, |
235 | 249 |
236 // indicates a general message not sent to a particular tab. | 250 // indicates a general message not sent to a particular tab. |
237 MSG_ROUTING_CONTROL = kint32max, | 251 MSG_ROUTING_CONTROL = kint32max, |
238 }; | 252 }; |
239 | 253 |
240 #define IPC_REPLY_ID 0xFFF0 // Special message id for replies | 254 #define IPC_REPLY_ID 0xFFF0 // Special message id for replies |
241 #define IPC_LOGGING_ID 0xFFF1 // Special message id for logging | 255 #define IPC_LOGGING_ID 0xFFF1 // Special message id for logging |
242 | 256 |
243 #endif // CHROME_COMMON_IPC_MESSAGE_H__ | 257 #endif // CHROME_COMMON_IPC_MESSAGE_H__ |
244 | 258 |
OLD | NEW |