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

Side by Side Diff: ipc/ipc_message.h

Issue 1286883003: Revert of IPC: Add attachment brokering support to the message header. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
« no previous file with comments | « ipc/ipc_channel_win.cc ('k') | ipc/ipc_message.cc » ('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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 IPC_IPC_MESSAGE_H_ 5 #ifndef IPC_IPC_MESSAGE_H_
6 #define IPC_IPC_MESSAGE_H_ 6 #define IPC_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/memory/ref_counted.h" 11 #include "base/memory/ref_counted.h"
12 #include "base/pickle.h" 12 #include "base/pickle.h"
13 #include "base/trace_event/trace_event.h" 13 #include "base/trace_event/trace_event.h"
14 #include "ipc/attachment_broker.h"
15 #include "ipc/brokerable_attachment.h"
16 #include "ipc/ipc_export.h" 14 #include "ipc/ipc_export.h"
17 15
18 #if !defined(NDEBUG) 16 #if !defined(NDEBUG)
19 #define IPC_MESSAGE_LOG_ENABLED 17 #define IPC_MESSAGE_LOG_ENABLED
20 #endif 18 #endif
21 19
22 namespace IPC { 20 namespace IPC {
23 21
24 namespace internal { 22 namespace internal {
25 class ChannelReader; 23 class ChannelReader;
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 static bool Dispatch(const Message* msg, T* obj, S* sender, P* parameter, 157 static bool Dispatch(const Message* msg, T* obj, S* sender, P* parameter,
160 void (T::*func)(P*)) { 158 void (T::*func)(P*)) {
161 (obj->*func)(parameter); 159 (obj->*func)(parameter);
162 return true; 160 return true;
163 } 161 }
164 162
165 // Used for async messages with no parameters. 163 // Used for async messages with no parameters.
166 static void Log(std::string* name, const Message* msg, std::string* l) { 164 static void Log(std::string* name, const Message* msg, std::string* l) {
167 } 165 }
168 166
169 // The static method FindNext() returns several pieces of information, which 167 // Find the end of the message data that starts at range_start. Returns NULL
170 // are aggregated into an instance of this struct. 168 // if the entire message is not found in the given data range.
171 struct NextMessageInfo { 169 static const char* FindNext(const char* range_start, const char* range_end) {
172 NextMessageInfo(); 170 return base::Pickle::FindNext(sizeof(Header), range_start, range_end);
173 ~NextMessageInfo(); 171 }
174 // Whether an entire message was found in the given memory range. If this is
175 // false, the other fields are left uninitialized.
176 bool message_found;
177 // The start address is passed into FindNext() by the caller, so isn't
178 // repeated in this struct. The end address of the pickle should be used to
179 // construct a base::Pickle.
180 const char* pickle_end;
181 // The end address of the message should be used to determine the start
182 // address of the next message.
183 const char* message_end;
184 // If the message has brokerable attachments, this vector will contain the
185 // ids of the brokerable attachments. The caller of FindNext() is
186 // responsible for adding the attachments to the message.
187 std::vector<BrokerableAttachment::AttachmentId> attachment_ids;
188 };
189
190 static NextMessageInfo FindNext(const char* range_start,
191 const char* range_end);
192
193 struct SerializedAttachmentIds {
194 void* buffer;
195 size_t size;
196 };
197 // Creates a buffer that contains a serialization of the ids of the brokerable
198 // attachments of the message. This buffer is intended to be sent over the IPC
199 // channel immediately after the pickled message. The caller takes ownership
200 // of the buffer.
201 // This method should only be called if the message has brokerable
202 // attachments.
203 SerializedAttachmentIds SerializedIdsOfBrokerableAttachments();
204
205 // Adds a placeholder brokerable attachment that must be replaced before the
206 // message can be dispatched.
207 bool AddPlaceholderBrokerableAttachmentWithId(
208 BrokerableAttachment::AttachmentId id);
209 172
210 // WriteAttachment appends |attachment| to the end of the set. It returns 173 // WriteAttachment appends |attachment| to the end of the set. It returns
211 // false iff the set is full. 174 // false iff the set is full.
212 bool WriteAttachment(scoped_refptr<MessageAttachment> attachment); 175 bool WriteAttachment(scoped_refptr<MessageAttachment> attachment);
213 // ReadAttachment parses an attachment given the parsing state |iter| and 176 // ReadAttachment parses an attachment given the parsing state |iter| and
214 // writes it to |*attachment|. It returns true on success. 177 // writes it to |*attachment|. It returns true on success.
215 bool ReadAttachment(base::PickleIterator* iter, 178 bool ReadAttachment(base::PickleIterator* iter,
216 scoped_refptr<MessageAttachment>* attachment) const; 179 scoped_refptr<MessageAttachment>* attachment) const;
217 // Returns true if there are any attachment in this message. 180 // Returns true if there are any attachment in this message.
218 bool HasAttachments() const; 181 bool HasAttachments() const;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 friend class ChannelWin; 226 friend class ChannelWin;
264 friend class internal::ChannelReader; 227 friend class internal::ChannelReader;
265 friend class MessageReplyDeserializer; 228 friend class MessageReplyDeserializer;
266 friend class SyncMessage; 229 friend class SyncMessage;
267 230
268 #pragma pack(push, 4) 231 #pragma pack(push, 4)
269 struct Header : base::Pickle::Header { 232 struct Header : base::Pickle::Header {
270 int32 routing; // ID of the view that this message is destined for 233 int32 routing; // ID of the view that this message is destined for
271 uint32 type; // specifies the user-defined message type 234 uint32 type; // specifies the user-defined message type
272 uint32 flags; // specifies control flags for the message 235 uint32 flags; // specifies control flags for the message
273 #if USE_ATTACHMENT_BROKER
274 // The number of brokered attachments included with this message. The
275 // ids of the brokered attachment ids are sent immediately after the pickled
276 // message, before the next pickled message is sent.
277 uint32 num_brokered_attachments;
278 #endif
279 #if defined(OS_POSIX) 236 #if defined(OS_POSIX)
280 uint16 num_fds; // the number of descriptors included with this message 237 uint16 num_fds; // the number of descriptors included with this message
281 uint16 pad; // explicitly initialize this to appease valgrind 238 uint16 pad; // explicitly initialize this to appease valgrind
282 #endif 239 #endif
283 }; 240 };
284 #pragma pack(pop) 241 #pragma pack(pop)
285 242
286 Header* header() { 243 Header* header() {
287 return headerT<Header>(); 244 return headerT<Header>();
288 } 245 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 MSG_ROUTING_NONE = -2, 288 MSG_ROUTING_NONE = -2,
332 289
333 // indicates a general message not sent to a particular tab. 290 // indicates a general message not sent to a particular tab.
334 MSG_ROUTING_CONTROL = kint32max, 291 MSG_ROUTING_CONTROL = kint32max,
335 }; 292 };
336 293
337 #define IPC_REPLY_ID 0xFFFFFFF0 // Special message id for replies 294 #define IPC_REPLY_ID 0xFFFFFFF0 // Special message id for replies
338 #define IPC_LOGGING_ID 0xFFFFFFF1 // Special message id for logging 295 #define IPC_LOGGING_ID 0xFFFFFFF1 // Special message id for logging
339 296
340 #endif // IPC_IPC_MESSAGE_H_ 297 #endif // IPC_IPC_MESSAGE_H_
OLDNEW
« no previous file with comments | « ipc/ipc_channel_win.cc ('k') | ipc/ipc_message.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698