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

Side by Side Diff: ppapi/proxy/nacl_message_scanner.cc

Issue 150713003: Create IPC channel to communicate with the renderer in NaClListener::OnStart(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "ppapi/proxy/nacl_message_scanner.h" 5 #include "ppapi/proxy/nacl_message_scanner.h"
6 6
7 #include <vector> 7 #include <vector>
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "ipc/ipc_message.h" 9 #include "ipc/ipc_message.h"
10 #include "ipc/ipc_message_macros.h" 10 #include "ipc/ipc_message_macros.h"
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 it != file_systems_.end(); ++it) 282 it != file_systems_.end(); ++it)
283 delete it->second; 283 delete it->second;
284 for (FileIOMap::iterator it = files_.begin(); it != files_.end(); ++it) 284 for (FileIOMap::iterator it = files_.begin(); it != files_.end(); ++it)
285 delete it->second; 285 delete it->second;
286 } 286 }
287 287
288 // Windows IPC differs from POSIX in that native handles are serialized in the 288 // Windows IPC differs from POSIX in that native handles are serialized in the
289 // message body, rather than passed in a separate FileDescriptorSet. Therefore, 289 // message body, rather than passed in a separate FileDescriptorSet. Therefore,
290 // on Windows, any message containing handles must be rewritten in the POSIX 290 // on Windows, any message containing handles must be rewritten in the POSIX
291 // format before we can send it to the NaCl plugin. 291 // format before we can send it to the NaCl plugin.
292 //
293 // On POSIX and Windows we have to rewrite PpapiMsg_CreateNaClChannel messages.
294 // These contain a handle with an invalid (place holder) descriptor. We need to
295 // locate this handle so it can be replaced with a valid one when the channel is
296 // created.
297 bool NaClMessageScanner::ScanMessage( 292 bool NaClMessageScanner::ScanMessage(
298 const IPC::Message& msg, 293 const IPC::Message& msg,
299 std::vector<SerializedHandle>* handles, 294 std::vector<SerializedHandle>* handles,
300 scoped_ptr<IPC::Message>* new_msg_ptr) { 295 scoped_ptr<IPC::Message>* new_msg_ptr) {
301 DCHECK(handles); 296 DCHECK(handles);
302 DCHECK(handles->empty()); 297 DCHECK(handles->empty());
303 DCHECK(new_msg_ptr); 298 DCHECK(new_msg_ptr);
304 DCHECK(!new_msg_ptr->get()); 299 DCHECK(!new_msg_ptr->get());
305 300
306 bool rewrite_msg = 301 bool rewrite_msg =
307 #if defined(OS_WIN) 302 #if defined(OS_WIN)
308 true; 303 true;
309 #else 304 #else
310 (msg.type() == PpapiMsg_CreateNaClChannel::ID); 305 false;
311 #endif 306 #endif
312 307
313 // We can't always tell from the message ID if rewriting is needed. Therefore, 308 // We can't always tell from the message ID if rewriting is needed. Therefore,
314 // scan any message types that might contain a handle. If we later determine 309 // scan any message types that might contain a handle. If we later determine
315 // that there are no handles, we can cancel the rewriting by clearing the 310 // that there are no handles, we can cancel the rewriting by clearing the
316 // results.new_msg pointer. 311 // results.new_msg pointer.
317 ScanningResults results; 312 ScanningResults results;
318 results.nested_msg_callback = 313 results.nested_msg_callback =
319 base::Bind(&NaClMessageScanner::AuditNestedMessage, 314 base::Bind(&NaClMessageScanner::AuditNestedMessage,
320 base::Unretained(this)); 315 base::Unretained(this));
321 switch (msg.type()) { 316 switch (msg.type()) {
322 CASE_FOR_MESSAGE(PpapiMsg_CreateNaClChannel)
323 CASE_FOR_MESSAGE(PpapiMsg_PPBAudio_NotifyAudioStreamCreated) 317 CASE_FOR_MESSAGE(PpapiMsg_PPBAudio_NotifyAudioStreamCreated)
324 CASE_FOR_MESSAGE(PpapiMsg_PPPMessaging_HandleMessage) 318 CASE_FOR_MESSAGE(PpapiMsg_PPPMessaging_HandleMessage)
325 CASE_FOR_MESSAGE(PpapiPluginMsg_ResourceReply) 319 CASE_FOR_MESSAGE(PpapiPluginMsg_ResourceReply)
326 case IPC_REPLY_ID: { 320 case IPC_REPLY_ID: {
327 int id = IPC::SyncMessage::GetMessageId(msg); 321 int id = IPC::SyncMessage::GetMessageId(msg);
328 PendingSyncMsgMap::iterator iter(pending_sync_msgs_.find(id)); 322 PendingSyncMsgMap::iterator iter(pending_sync_msgs_.find(id));
329 if (iter == pending_sync_msgs_.end()) { 323 if (iter == pending_sync_msgs_.end()) {
330 NOTREACHED(); 324 NOTREACHED();
331 return false; 325 return false;
332 } 326 }
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 fio_it->second->SetMaxWrittenOffset(offset_it->second); 532 fio_it->second->SetMaxWrittenOffset(offset_it->second);
539 } 533 }
540 } 534 }
541 break; 535 break;
542 } 536 }
543 } 537 }
544 } 538 }
545 539
546 } // namespace proxy 540 } // namespace proxy
547 } // namespace ppapi 541 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698