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

Unified Diff: ipc/ipc_message.h

Issue 1286253002: IPC: Add attachment brokering support to the message header. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Compile error. 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ipc/ipc_channel_win.cc ('k') | ipc/ipc_message.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ipc/ipc_message.h
diff --git a/ipc/ipc_message.h b/ipc/ipc_message.h
index 73a5165aed219c70cadb7428f19fb1315db7e883..663a1b43b5bca3bf679cfb542148f54deb90677f 100644
--- a/ipc/ipc_message.h
+++ b/ipc/ipc_message.h
@@ -11,6 +11,8 @@
#include "base/memory/ref_counted.h"
#include "base/pickle.h"
#include "base/trace_event/trace_event.h"
+#include "ipc/attachment_broker.h"
+#include "ipc/brokerable_attachment.h"
#include "ipc/ipc_export.h"
#if !defined(NDEBUG)
@@ -164,11 +166,46 @@ class IPC_EXPORT Message : public base::Pickle {
static void Log(std::string* name, const Message* msg, std::string* l) {
}
- // Find the end of the message data that starts at range_start. Returns NULL
- // if the entire message is not found in the given data range.
- static const char* FindNext(const char* range_start, const char* range_end) {
- return base::Pickle::FindNext(sizeof(Header), range_start, range_end);
- }
+ // The static method FindNext() returns several pieces of information, which
+ // are aggregated into an instance of this struct.
+ struct NextMessageInfo {
+ NextMessageInfo();
+ ~NextMessageInfo();
+ // Whether an entire message was found in the given memory range. If this is
+ // false, the other fields are left uninitialized.
+ bool message_found;
+ // The start address is passed into FindNext() by the caller, so isn't
+ // repeated in this struct. The end address of the pickle should be used to
+ // construct a base::Pickle.
+ const char* pickle_end;
+ // The end address of the message should be used to determine the start
+ // address of the next message.
+ const char* message_end;
+ // If the message has brokerable attachments, this vector will contain the
+ // ids of the brokerable attachments. The caller of FindNext() is
+ // responsible for adding the attachments to the message.
+ std::vector<BrokerableAttachment::AttachmentId> attachment_ids;
+ };
+
+ static NextMessageInfo FindNext(const char* range_start,
+ const char* range_end);
+
+ struct SerializedAttachmentIds {
+ void* buffer;
+ size_t size;
+ };
+ // Creates a buffer that contains a serialization of the ids of the brokerable
+ // attachments of the message. This buffer is intended to be sent over the IPC
+ // channel immediately after the pickled message. The caller takes ownership
+ // of the buffer.
+ // This method should only be called if the message has brokerable
+ // attachments.
+ SerializedAttachmentIds SerializedIdsOfBrokerableAttachments();
+
+ // Adds a placeholder brokerable attachment that must be replaced before the
+ // message can be dispatched.
+ bool AddPlaceholderBrokerableAttachmentWithId(
+ BrokerableAttachment::AttachmentId id);
// WriteAttachment appends |attachment| to the end of the set. It returns
// false iff the set is full.
@@ -233,6 +270,12 @@ class IPC_EXPORT Message : public base::Pickle {
int32 routing; // ID of the view that this message is destined for
uint32 type; // specifies the user-defined message type
uint32 flags; // specifies control flags for the message
+#if USE_ATTACHMENT_BROKER
+ // The number of brokered attachments included with this message. The
+ // ids of the brokered attachment ids are sent immediately after the pickled
+ // message, before the next pickled message is sent.
+ uint32 num_brokered_attachments;
+#endif
#if defined(OS_POSIX)
uint16 num_fds; // the number of descriptors included with this message
uint16 pad; // explicitly initialize this to appease valgrind
« 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