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

Side by Side Diff: services/native_support/process_controller_impl.cc

Issue 1375313006: For c++, Generate enum classes instead of enum from mojom. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 2 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "services/native_support/process_controller_impl.h" 5 #include "services/native_support/process_controller_impl.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <signal.h> 8 #include <signal.h>
9 #include <sys/types.h> 9 #include <sys/types.h>
10 10
(...skipping 12 matching lines...) Expand all
23 namespace native_support { 23 namespace native_support {
24 24
25 namespace { 25 namespace {
26 26
27 void WaitForProcess( 27 void WaitForProcess(
28 base::Process process, 28 base::Process process,
29 scoped_refptr<base::TaskRunner> done_runner, 29 scoped_refptr<base::TaskRunner> done_runner,
30 const base::Callback<void(mojo::files::Error, int32_t)>& done_callback) { 30 const base::Callback<void(mojo::files::Error, int32_t)>& done_callback) {
31 int exit_status = 0; 31 int exit_status = 0;
32 mojo::files::Error result = process.WaitForExit(&exit_status) 32 mojo::files::Error result = process.WaitForExit(&exit_status)
33 ? mojo::files::ERROR_OK 33 ? mojo::files::Error::OK
34 : mojo::files::ERROR_UNKNOWN; 34 : mojo::files::Error::UNKNOWN;
35 done_runner->PostTask( 35 done_runner->PostTask(
36 FROM_HERE, 36 FROM_HERE,
37 base::Bind(done_callback, result, static_cast<int32_t>(exit_status))); 37 base::Bind(done_callback, result, static_cast<int32_t>(exit_status)));
38 } 38 }
39 39
40 void TerminateProcess(base::Process process) { 40 void TerminateProcess(base::Process process) {
41 if (!process.Terminate(-1, true)) 41 if (!process.Terminate(-1, true))
42 LOG(ERROR) << "Failed to kill PID " << process.Pid(); 42 LOG(ERROR) << "Failed to kill PID " << process.Pid();
43 } 43 }
44 44
(...skipping 15 matching lines...) Expand all
60 ProcessControllerImpl::~ProcessControllerImpl() { 60 ProcessControllerImpl::~ProcessControllerImpl() {
61 if (process_.IsValid()) { 61 if (process_.IsValid()) {
62 worker_runner_->PostTask( 62 worker_runner_->PostTask(
63 FROM_HERE, base::Bind(&TerminateProcess, base::Passed(&process_))); 63 FROM_HERE, base::Bind(&TerminateProcess, base::Passed(&process_)));
64 } 64 }
65 } 65 }
66 66
67 void ProcessControllerImpl::Wait(const WaitCallback& callback) { 67 void ProcessControllerImpl::Wait(const WaitCallback& callback) {
68 if (!process_.IsValid()) { 68 if (!process_.IsValid()) {
69 // TODO(vtl): This isn't quite right. 69 // TODO(vtl): This isn't quite right.
70 callback.Run(mojo::files::ERROR_UNAVAILABLE, 0); 70 callback.Run(mojo::files::Error::UNAVAILABLE, 0);
71 return; 71 return;
72 } 72 }
73 73
74 worker_runner_->PostTask( 74 worker_runner_->PostTask(
75 FROM_HERE, base::Bind(&WaitForProcess, base::Passed(&process_), 75 FROM_HERE, base::Bind(&WaitForProcess, base::Passed(&process_),
76 base::MessageLoop::current()->task_runner(), 76 base::MessageLoop::current()->task_runner(),
77 base::Bind(&ProcessControllerImpl::OnWaitComplete, 77 base::Bind(&ProcessControllerImpl::OnWaitComplete,
78 weak_factory_.GetWeakPtr(), callback))); 78 weak_factory_.GetWeakPtr(), callback)));
79 } 79 }
80 80
81 void ProcessControllerImpl::Kill(int32_t signal, const KillCallback& callback) { 81 void ProcessControllerImpl::Kill(int32_t signal, const KillCallback& callback) {
82 callback.Run(KillHelper(signal)); 82 callback.Run(KillHelper(signal));
83 } 83 }
84 84
85 void ProcessControllerImpl::OnWaitComplete(const WaitCallback& callback, 85 void ProcessControllerImpl::OnWaitComplete(const WaitCallback& callback,
86 mojo::files::Error result, 86 mojo::files::Error result,
87 int32_t exit_status) { 87 int32_t exit_status) {
88 callback.Run(result, exit_status); 88 callback.Run(result, exit_status);
89 } 89 }
90 90
91 mojo::files::Error ProcessControllerImpl::KillHelper(int32_t signal) { 91 mojo::files::Error ProcessControllerImpl::KillHelper(int32_t signal) {
92 if (signal < 0) 92 if (signal < 0)
93 return mojo::files::ERROR_INVALID_ARGUMENT; 93 return mojo::files::Error::INVALID_ARGUMENT;
94 94
95 if (!process_.IsValid()) { 95 if (!process_.IsValid()) {
96 LOG(ERROR) << "Kill() called after Wait()"; 96 LOG(ERROR) << "Kill() called after Wait()";
97 // TODO(vtl): This error code isn't quite right, but "unavailable" (which 97 // TODO(vtl): This error code isn't quite right, but "unavailable" (which
98 // would also be wrong) is used for a more appropriate purpose below. 98 // would also be wrong) is used for a more appropriate purpose below.
99 return mojo::files::ERROR_INVALID_ARGUMENT; 99 return mojo::files::Error::INVALID_ARGUMENT;
100 } 100 }
101 101
102 // |base::HandleType| is just a typedef for |pid_t|. 102 // |base::HandleType| is just a typedef for |pid_t|.
103 pid_t pid = process_.Handle(); 103 pid_t pid = process_.Handle();
104 104
105 // Note: |kill()| is not interruptible. 105 // Note: |kill()| is not interruptible.
106 if (kill(pid, static_cast<int>(signal)) == 0) 106 if (kill(pid, static_cast<int>(signal)) == 0)
107 return mojo::files::ERROR_OK; 107 return mojo::files::Error::OK;
108 108
109 switch (errno) { 109 switch (errno) {
110 case EINVAL: 110 case EINVAL:
111 return mojo::files::ERROR_INVALID_ARGUMENT; 111 return mojo::files::Error::INVALID_ARGUMENT;
112 case EPERM: 112 case EPERM:
113 return mojo::files::ERROR_PERMISSION_DENIED; 113 return mojo::files::Error::PERMISSION_DENIED;
114 case ESRCH: 114 case ESRCH:
115 return mojo::files::ERROR_UNAVAILABLE; 115 return mojo::files::Error::UNAVAILABLE;
116 default: 116 default:
117 break; 117 break;
118 } 118 }
119 return mojo::files::ERROR_UNKNOWN; 119 return mojo::files::Error::UNKNOWN;
120 } 120 }
121 121
122 } // namespace native_support 122 } // namespace native_support
OLDNEW
« no previous file with comments | « services/keyboard_native/view_observer_delegate.cc ('k') | services/native_support/process_controller_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698