summaryrefslogtreecommitdiffstats
path: root/ipc/ipc_channel_reader.cc
diff options
context:
space:
mode:
authorerikchen <erikchen@chromium.org>2015-09-11 12:08:53 -0700
committerCommit bot <commit-bot@chromium.org>2015-09-11 19:09:24 +0000
commit29e0f2f9ad9a9f377995804efaf72476cc987714 (patch)
tree72b58eb99aedc497763b145ae1a8efc22347afd8 /ipc/ipc_channel_reader.cc
parentb37d327f039850e3f1faa3be67f1c7c3255b0f96 (diff)
downloadchromium_src-29e0f2f9ad9a9f377995804efaf72476cc987714.zip
chromium_src-29e0f2f9ad9a9f377995804efaf72476cc987714.tar.gz
chromium_src-29e0f2f9ad9a9f377995804efaf72476cc987714.tar.bz2
ipc: Update Message::FindNext to parse brokered attachments.
The method Message::FindNext now takes an output parameter NextMessageInfo which contains additional metadata needed for generating brokered attachments. BUG=493414 Review URL: https://codereview.chromium.org/1308613006 Cr-Commit-Position: refs/heads/master@{#348459}
Diffstat (limited to 'ipc/ipc_channel_reader.cc')
-rw-r--r--ipc/ipc_channel_reader.cc16
1 files changed, 10 insertions, 6 deletions
diff --git a/ipc/ipc_channel_reader.cc b/ipc/ipc_channel_reader.cc
index f80d75d..b3dd0b7 100644
--- a/ipc/ipc_channel_reader.cc
+++ b/ipc/ipc_channel_reader.cc
@@ -91,11 +91,15 @@ bool ChannelReader::TranslateInputData(const char* input_data,
// Dispatch all complete messages in the data buffer.
while (p < end) {
- const char* message_tail = Message::FindNext(p, end);
- if (message_tail) {
- int len = static_cast<int>(message_tail - p);
+ Message::NextMessageInfo info;
+ Message::FindNext(p, end, &info);
+ if (info.message_found) {
+ int pickle_len = static_cast<int>(info.pickle_end - p);
+ Message translated_message(p, pickle_len);
+
+ // TODO(erikchen): Make attachments for info.attachment_ids.
+ // http://crbug.com/493414.
- Message translated_message(p, len);
if (!GetNonBrokeredAttachments(&translated_message))
return false;
@@ -109,7 +113,7 @@ bool ChannelReader::TranslateInputData(const char* input_data,
if (blocked_ids.empty()) {
// Dispatch the message and continue the loop.
DispatchMessage(&translated_message);
- p = message_tail;
+ p = info.message_end;
continue;
}
@@ -120,7 +124,7 @@ bool ChannelReader::TranslateInputData(const char* input_data,
// Make a deep copy of |translated_message| to add to the queue.
scoped_ptr<Message> m(new Message(translated_message));
queued_messages_.push_back(m.release());
- p = message_tail;
+ p = info.message_end;
} else {
// Last message is partial.
break;