OLD | NEW |
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 "chrome/browser/nacl_host/nacl_process_host.h" | 5 #include "chrome/browser/nacl_host/nacl_process_host.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/base_switches.h" | 10 #include "base/base_switches.h" |
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 } | 397 } |
398 cmd_line->AppendArg("--args"); | 398 cmd_line->AppendArg("--args"); |
399 const CommandLine::StringVector& argv = line->argv(); | 399 const CommandLine::StringVector& argv = line->argv(); |
400 for (size_t i = 0; i < argv.size(); i++) { | 400 for (size_t i = 0; i < argv.size(); i++) { |
401 cmd_line->AppendArgNative(argv[i]); | 401 cmd_line->AppendArgNative(argv[i]); |
402 } | 402 } |
403 return scoped_ptr<CommandLine>(cmd_line); | 403 return scoped_ptr<CommandLine>(cmd_line); |
404 } | 404 } |
405 #elif defined(OS_LINUX) | 405 #elif defined(OS_LINUX) |
406 class NaClProcessHost::NaClGdbWatchDelegate | 406 class NaClProcessHost::NaClGdbWatchDelegate |
407 : public MessageLoopForIO::Watcher { | 407 : public base::MessageLoopForIO::Watcher { |
408 public: | 408 public: |
409 // fd_write_ is used by nacl-gdb via /proc/browser_PID/fd/fd_write_ | 409 // fd_write_ is used by nacl-gdb via /proc/browser_PID/fd/fd_write_ |
410 NaClGdbWatchDelegate(int fd_read, int fd_write, | 410 NaClGdbWatchDelegate(int fd_read, int fd_write, |
411 const base::Closure& reply) | 411 const base::Closure& reply) |
412 : fd_read_(fd_read), | 412 : fd_read_(fd_read), |
413 fd_write_(fd_write), | 413 fd_write_(fd_write), |
414 reply_(reply) {} | 414 reply_(reply) {} |
415 | 415 |
416 virtual ~NaClGdbWatchDelegate() { | 416 virtual ~NaClGdbWatchDelegate() { |
417 if (HANDLE_EINTR(close(fd_read_)) != 0) | 417 if (HANDLE_EINTR(close(fd_read_)) != 0) |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 cmd_line.AppendArgNative(script.value()); | 475 cmd_line.AppendArgNative(script.value()); |
476 } | 476 } |
477 // wait on fds[0] | 477 // wait on fds[0] |
478 // If the debugger crashes before attaching to the NaCl process, the user can | 478 // If the debugger crashes before attaching to the NaCl process, the user can |
479 // release resources by terminating the NaCl loader in Chrome Task Manager. | 479 // release resources by terminating the NaCl loader in Chrome Task Manager. |
480 nacl_gdb_watcher_delegate_.reset( | 480 nacl_gdb_watcher_delegate_.reset( |
481 new NaClGdbWatchDelegate( | 481 new NaClGdbWatchDelegate( |
482 fds[0], fds[1], | 482 fds[0], fds[1], |
483 base::Bind(&NaClProcessHost::OnNaClGdbAttached, | 483 base::Bind(&NaClProcessHost::OnNaClGdbAttached, |
484 weak_factory_.GetWeakPtr()))); | 484 weak_factory_.GetWeakPtr()))); |
485 MessageLoopForIO::current()->WatchFileDescriptor( | 485 base::MessageLoopForIO::current()->WatchFileDescriptor( |
486 fds[0], | 486 fds[0], |
487 true, | 487 true, |
488 MessageLoopForIO::WATCH_READ, | 488 base::MessageLoopForIO::WATCH_READ, |
489 &nacl_gdb_watcher_, | 489 &nacl_gdb_watcher_, |
490 nacl_gdb_watcher_delegate_.get()); | 490 nacl_gdb_watcher_delegate_.get()); |
491 return base::LaunchProcess(cmd_line, base::LaunchOptions(), NULL); | 491 return base::LaunchProcess(cmd_line, base::LaunchOptions(), NULL); |
492 } | 492 } |
493 | 493 |
494 void NaClProcessHost::OnNaClGdbAttached() { | 494 void NaClProcessHost::OnNaClGdbAttached() { |
495 wait_for_nacl_gdb_ = false; | 495 wait_for_nacl_gdb_ = false; |
496 nacl_gdb_watcher_.StopWatchingFileDescriptor(); | 496 nacl_gdb_watcher_.StopWatchingFileDescriptor(); |
497 nacl_gdb_watcher_delegate_.reset(); | 497 nacl_gdb_watcher_delegate_.reset(); |
498 OnProcessLaunched(); | 498 OnProcessLaunched(); |
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
987 } else { | 987 } else { |
988 NaClStartDebugExceptionHandlerThread( | 988 NaClStartDebugExceptionHandlerThread( |
989 process_handle.Take(), info, | 989 process_handle.Take(), info, |
990 base::MessageLoopProxy::current(), | 990 base::MessageLoopProxy::current(), |
991 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, | 991 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, |
992 weak_factory_.GetWeakPtr())); | 992 weak_factory_.GetWeakPtr())); |
993 return true; | 993 return true; |
994 } | 994 } |
995 } | 995 } |
996 #endif | 996 #endif |
OLD | NEW |