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) | 19 #elif defined(OS_POSIX) |
20 #include "chrome/common/descriptor_set_posix.h" | 20 #include "base/ref_counted.h" |
21 #endif | 21 #endif |
22 | 22 |
| 23 namespace base { |
| 24 class FileDescriptor; |
| 25 } |
| 26 |
| 27 class DescriptorSet; |
| 28 |
23 namespace IPC { | 29 namespace IPC { |
24 | 30 |
25 //------------------------------------------------------------------------------ | 31 //------------------------------------------------------------------------------ |
26 | 32 |
27 class Channel; | 33 class Channel; |
28 class Message; | 34 class Message; |
29 struct LogData; | 35 struct LogData; |
30 | 36 |
31 class Message : public Pickle { | 37 class Message : public Pickle { |
32 public: | 38 public: |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 static void Log(const Message* msg, std::wstring* l) { | 161 static void Log(const Message* msg, std::wstring* l) { |
156 } | 162 } |
157 | 163 |
158 // Find the end of the message data that starts at range_start. Returns NULL | 164 // Find the end of the message data that starts at range_start. Returns NULL |
159 // if the entire message is not found in the given data range. | 165 // if the entire message is not found in the given data range. |
160 static const char* FindNext(const char* range_start, const char* range_end) { | 166 static const char* FindNext(const char* range_start, const char* range_end) { |
161 return Pickle::FindNext(sizeof(Header), range_start, range_end); | 167 return Pickle::FindNext(sizeof(Header), range_start, range_end); |
162 } | 168 } |
163 | 169 |
164 #if defined(OS_POSIX) | 170 #if defined(OS_POSIX) |
165 DescriptorSet* descriptor_set() const { return &descriptor_set_; } | 171 // On POSIX, a message supports reading / writing FileDescriptor objects. |
| 172 // This is used to pass a file descriptor to the peer of an IPC channel. |
| 173 |
| 174 // Add a descriptor to the end of the set. Returns false iff the set is full. |
| 175 bool WriteFileDescriptor(const base::FileDescriptor& descriptor); |
| 176 // Get a file descriptor from the message. Returns false on error. |
| 177 // iter: a Pickle iterator to the current location in the message. |
| 178 bool ReadFileDescriptor(void** iter, base::FileDescriptor* descriptor) const; |
166 #endif | 179 #endif |
167 | 180 |
168 #ifdef IPC_MESSAGE_LOG_ENABLED | 181 #ifdef IPC_MESSAGE_LOG_ENABLED |
169 // Adds the outgoing time from Time::Now() at the end of the message and sets | 182 // Adds the outgoing time from Time::Now() at the end of the message and sets |
170 // a bit to indicate that it's been added. | 183 // a bit to indicate that it's been added. |
171 void set_sent_time(int64 time); | 184 void set_sent_time(int64 time); |
172 int64 sent_time() const; | 185 int64 sent_time() const; |
173 | 186 |
174 void set_received_time(int64 time) const; | 187 void set_received_time(int64 time) const; |
175 int64 received_time() const { return received_time_; } | 188 int64 received_time() const { return received_time_; } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 return headerT<Header>(); | 233 return headerT<Header>(); |
221 } | 234 } |
222 const Header* header() const { | 235 const Header* header() const { |
223 return headerT<Header>(); | 236 return headerT<Header>(); |
224 } | 237 } |
225 | 238 |
226 void InitLoggingVariables(); | 239 void InitLoggingVariables(); |
227 | 240 |
228 #if defined(OS_POSIX) | 241 #if defined(OS_POSIX) |
229 // The set of file descriptors associated with this message. | 242 // The set of file descriptors associated with this message. |
230 mutable DescriptorSet descriptor_set_; | 243 scoped_refptr<DescriptorSet> descriptor_set_; |
| 244 |
| 245 // Ensure that a DescriptorSet is allocated |
| 246 void EnsureDescriptorSet(); |
| 247 |
| 248 DescriptorSet* descriptor_set() { |
| 249 EnsureDescriptorSet(); |
| 250 return descriptor_set_.get(); |
| 251 } |
| 252 const DescriptorSet* descriptor_set() const { |
| 253 return descriptor_set_.get(); |
| 254 } |
231 #endif | 255 #endif |
232 | 256 |
233 #ifdef IPC_MESSAGE_LOG_ENABLED | 257 #ifdef IPC_MESSAGE_LOG_ENABLED |
234 // Used for logging. | 258 // Used for logging. |
235 mutable int64 received_time_; | 259 mutable int64 received_time_; |
236 mutable std::wstring output_params_; | 260 mutable std::wstring output_params_; |
237 mutable LogData* log_data_; | 261 mutable LogData* log_data_; |
238 mutable bool dont_log_; | 262 mutable bool dont_log_; |
239 #endif | 263 #endif |
240 }; | 264 }; |
241 | 265 |
242 //------------------------------------------------------------------------------ | 266 //------------------------------------------------------------------------------ |
243 | 267 |
244 } // namespace IPC | 268 } // namespace IPC |
245 | 269 |
246 enum SpecialRoutingIDs { | 270 enum SpecialRoutingIDs { |
247 // indicates that we don't have a routing ID yet. | 271 // indicates that we don't have a routing ID yet. |
248 MSG_ROUTING_NONE = -2, | 272 MSG_ROUTING_NONE = -2, |
249 | 273 |
250 // indicates a general message not sent to a particular tab. | 274 // indicates a general message not sent to a particular tab. |
251 MSG_ROUTING_CONTROL = kint32max, | 275 MSG_ROUTING_CONTROL = kint32max, |
252 }; | 276 }; |
253 | 277 |
254 #define IPC_REPLY_ID 0xFFF0 // Special message id for replies | 278 #define IPC_REPLY_ID 0xFFF0 // Special message id for replies |
255 #define IPC_LOGGING_ID 0xFFF1 // Special message id for logging | 279 #define IPC_LOGGING_ID 0xFFF1 // Special message id for logging |
256 | 280 |
257 #endif // CHROME_COMMON_IPC_MESSAGE_H__ | 281 #endif // CHROME_COMMON_IPC_MESSAGE_H__ |
258 | 282 |
OLD | NEW |