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

Side by Side Diff: ipc/ipc_channel_reader.cc

Issue 1317093007: ipc: Make a new class PlaceholderBrokerableAttachment. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More rebase errors. Created 5 years, 3 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.gypi ('k') | ipc/ipc_channel_reader_unittest.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 #include "ipc/ipc_channel_reader.h" 5 #include "ipc/ipc_channel_reader.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ipc/ipc_listener.h" 9 #include "ipc/ipc_listener.h"
10 #include "ipc/ipc_logging.h" 10 #include "ipc/ipc_logging.h"
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 } 90 }
91 91
92 // Dispatch all complete messages in the data buffer. 92 // Dispatch all complete messages in the data buffer.
93 while (p < end) { 93 while (p < end) {
94 Message::NextMessageInfo info; 94 Message::NextMessageInfo info;
95 Message::FindNext(p, end, &info); 95 Message::FindNext(p, end, &info);
96 if (info.message_found) { 96 if (info.message_found) {
97 int pickle_len = static_cast<int>(info.pickle_end - p); 97 int pickle_len = static_cast<int>(info.pickle_end - p);
98 Message translated_message(p, pickle_len); 98 Message translated_message(p, pickle_len);
99 99
100 // TODO(erikchen): Make attachments for info.attachment_ids. 100 for (const auto& id : info.attachment_ids)
101 // http://crbug.com/493414. 101 translated_message.AddPlaceholderBrokerableAttachmentWithId(id);
102 102
103 if (!GetNonBrokeredAttachments(&translated_message)) 103 if (!GetNonBrokeredAttachments(&translated_message))
104 return false; 104 return false;
105 105
106 // If there are no queued messages, attempt to immediately dispatch the 106 // If there are no queued messages, attempt to immediately dispatch the
107 // newly translated message. 107 // newly translated message.
108 if (queued_messages_.empty()) { 108 if (queued_messages_.empty()) {
109 DCHECK(blocked_ids_.empty()); 109 DCHECK(blocked_ids_.empty());
110 AttachmentIdSet blocked_ids = 110 AttachmentIdSet blocked_ids =
111 GetBrokeredAttachments(&translated_message); 111 GetBrokeredAttachments(&translated_message);
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 if (m->dispatch_error()) 194 if (m->dispatch_error())
195 listener_->OnBadMessageReceived(*m); 195 listener_->OnBadMessageReceived(*m);
196 } 196 }
197 197
198 ChannelReader::AttachmentIdSet ChannelReader::GetBrokeredAttachments( 198 ChannelReader::AttachmentIdSet ChannelReader::GetBrokeredAttachments(
199 Message* msg) { 199 Message* msg) {
200 std::set<BrokerableAttachment::AttachmentId> blocked_ids; 200 std::set<BrokerableAttachment::AttachmentId> blocked_ids;
201 201
202 #if USE_ATTACHMENT_BROKER 202 #if USE_ATTACHMENT_BROKER
203 MessageAttachmentSet* set = msg->attachment_set(); 203 MessageAttachmentSet* set = msg->attachment_set();
204 for (const scoped_refptr<BrokerableAttachment>& attachment : 204 std::vector<const BrokerableAttachment*> brokerable_attachments_copy =
205 set->GetBrokerableAttachmentsForUpdating()) { 205 set->PeekBrokerableAttachments();
206 for (const BrokerableAttachment* attachment : brokerable_attachments_copy) {
206 if (attachment->NeedsBrokering()) { 207 if (attachment->NeedsBrokering()) {
207 AttachmentBroker* broker = GetAttachmentBroker(); 208 AttachmentBroker* broker = GetAttachmentBroker();
208 scoped_refptr<BrokerableAttachment> brokered_attachment; 209 scoped_refptr<BrokerableAttachment> brokered_attachment;
209 bool result = broker->GetAttachmentWithId(attachment->GetIdentifier(), 210 bool result = broker->GetAttachmentWithId(attachment->GetIdentifier(),
210 &brokered_attachment); 211 &brokered_attachment);
211 if (!result) { 212 if (!result) {
212 blocked_ids.insert(attachment->GetIdentifier()); 213 blocked_ids.insert(attachment->GetIdentifier());
213 continue; 214 continue;
214 } 215 }
215 216
216 attachment->PopulateWithAttachment(brokered_attachment.get()); 217 set->ReplacePlaceholderWithAttachment(brokered_attachment);
217 } 218 }
218 } 219 }
219 #endif // USE_ATTACHMENT_BROKER 220 #endif // USE_ATTACHMENT_BROKER
220 221
221 return blocked_ids; 222 return blocked_ids;
222 } 223 }
223 224
224 void ChannelReader::ReceivedBrokerableAttachmentWithId( 225 void ChannelReader::ReceivedBrokerableAttachmentWithId(
225 const BrokerableAttachment::AttachmentId& id) { 226 const BrokerableAttachment::AttachmentId& id) {
226 if (blocked_ids_.empty()) 227 if (blocked_ids_.empty())
(...skipping 16 matching lines...) Expand all
243 } 244 }
244 245
245 void ChannelReader::StopObservingAttachmentBroker() { 246 void ChannelReader::StopObservingAttachmentBroker() {
246 #if USE_ATTACHMENT_BROKER 247 #if USE_ATTACHMENT_BROKER
247 GetAttachmentBroker()->RemoveObserver(this); 248 GetAttachmentBroker()->RemoveObserver(this);
248 #endif // USE_ATTACHMENT_BROKER 249 #endif // USE_ATTACHMENT_BROKER
249 } 250 }
250 251
251 } // namespace internal 252 } // namespace internal
252 } // namespace IPC 253 } // namespace IPC
OLDNEW
« no previous file with comments | « ipc/ipc.gypi ('k') | ipc/ipc_channel_reader_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698