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 3 // found in the LICENSE file. 4 5 #ifndef COMPONENTS_NACL_ZYGOTE_NACL_FORK_DELEGATE_LINUX_H_ 6 #define COMPONENTS_NACL_ZYGOTE_NACL_FORK_DELEGATE_LINUX_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/basictypes.h" 12 #include "base/compiler_specific.h" 13 #include "content/public/common/zygote_fork_delegate_linux.h" 14 15 // The NaClForkDelegate is created during Chrome linux zygote 16 // initialization, and provides "fork()" functionality with 17 // NaCl specific process characteristics (specifically address 18 // space layout) as an alternative to forking the zygote. 19 // A new delegate is passed in as an argument to ZygoteMain(). 20 class NaClForkDelegate : public content::ZygoteForkDelegate { 21 public: 22 NaClForkDelegate(); 23 virtual ~NaClForkDelegate(); 24 25 virtual void Init(int sandboxdesc) OVERRIDE; 26 virtual void InitialUMA(std::string* uma_name, 27 int* uma_sample, 28 int* uma_boundary_value) OVERRIDE; 29 virtual bool CanHelp(const std::string& process_type, std::string* uma_name, 30 int* uma_sample, int* uma_boundary_value) OVERRIDE; 31 virtual pid_t Fork(const std::vector<int>& fds) OVERRIDE; 32 virtual bool AckChild(int fd, 33 const std::string& channel_switch) OVERRIDE; 34 virtual bool GetTerminationStatus(pid_t pid, bool known_dead, 35 base::TerminationStatus* status, 36 int* exit_code) OVERRIDE; 37 38 private: 39 // These values are reported via UMA and hence they become permanent 40 // constants. Old values cannot be reused, only new ones added. 41 enum NaClHelperStatus { 42 kNaClHelperUnused = 0, 43 kNaClHelperMissing = 1, 44 kNaClHelperBootstrapMissing = 2, 45 kNaClHelperValgrind = 3, 46 kNaClHelperLaunchFailed = 4, 47 kNaClHelperAckFailed = 5, 48 kNaClHelperSuccess = 6, 49 kNaClHelperStatusBoundary // Must be one greater than highest value used. 50 }; 51 52 NaClHelperStatus status_; 53 int fd_; 54 }; 55 56 #endif // COMPONENTS_NACL_ZYGOTE_NACL_FORK_DELEGATE_LINUX_H_ 57