| Index: components/browser_watcher/exit_code_watcher_win_unittest.cc
|
| diff --git a/components/browser_watcher/exit_code_watcher_win_unittest.cc b/components/browser_watcher/exit_code_watcher_win_unittest.cc
|
| index cd85f865167d76e5a9f9b8de9589e575e657d06c..bc6a5083235cc30aac7307fc43dd3b2b3c7e4349 100644
|
| --- a/components/browser_watcher/exit_code_watcher_win_unittest.cc
|
| +++ b/components/browser_watcher/exit_code_watcher_win_unittest.cc
|
| @@ -5,7 +5,7 @@
|
| #include "components/browser_watcher/exit_code_watcher_win.h"
|
|
|
| #include "base/command_line.h"
|
| -#include "base/process/kill.h"
|
| +#include "base/process/process.h"
|
| #include "base/strings/string16.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/stringprintf.h"
|
| @@ -33,42 +33,43 @@ MULTIPROCESS_TEST_MAIN(Sleeper) {
|
|
|
| class ScopedSleeperProcess {
|
| public:
|
| - ScopedSleeperProcess() :
|
| - process_(base::kNullProcessHandle),
|
| - process_id_(base::kNullProcessId),
|
| - is_killed_(false) {
|
| + ScopedSleeperProcess() : is_killed_(false) {
|
| }
|
|
|
| ~ScopedSleeperProcess() {
|
| - if (process_ != base::kNullProcessHandle) {
|
| - base::KillProcess(process_, -1, true);
|
| - base::CloseProcessHandle(process_);
|
| + if (process_.IsValid()) {
|
| + process_.Terminate(-1);
|
| + int exit_code = 0;
|
| + EXPECT_TRUE(process_.WaitForExit(&exit_code));
|
| }
|
| }
|
|
|
| void Launch() {
|
| - ASSERT_EQ(base::kNullProcessHandle, process_);
|
| + ASSERT_FALSE(process_.IsValid());
|
|
|
| base::CommandLine cmd_line(base::GetMultiProcessTestChildBaseCommandLine());
|
| base::LaunchOptions options;
|
| options.start_hidden = true;
|
| - process_ = base::SpawnMultiProcessTestChild("Sleeper", cmd_line, options);
|
| - process_id_ = base::GetProcId(process_);
|
| - ASSERT_NE(base::kNullProcessHandle, process_);
|
| + process_ = base::Process(
|
| + base::SpawnMultiProcessTestChild("Sleeper", cmd_line, options));
|
| + ASSERT_TRUE(process_.IsValid());
|
| }
|
|
|
| void Kill(int exit_code, bool wait) {
|
| - ASSERT_NE(process_, base::kNullProcessHandle);
|
| + ASSERT_TRUE(process_.IsValid());
|
| ASSERT_FALSE(is_killed_);
|
| - ASSERT_TRUE(base::KillProcess(process_, exit_code, wait));
|
| + process_.Terminate(exit_code);
|
| + int seen_exit_code = 0;
|
| + EXPECT_TRUE(process_.WaitForExit(&seen_exit_code));
|
| + EXPECT_EQ(exit_code, seen_exit_code);
|
| is_killed_ = true;
|
| }
|
|
|
| void GetNewHandle(base::ProcessHandle* output) {
|
| - ASSERT_NE(process_, base::kNullProcessHandle);
|
| + ASSERT_TRUE(process_.IsValid());
|
|
|
| ASSERT_TRUE(DuplicateHandle(::GetCurrentProcess(),
|
| - process_,
|
| + process_.Handle(),
|
| ::GetCurrentProcess(),
|
| output,
|
| 0,
|
| @@ -76,12 +77,10 @@ class ScopedSleeperProcess {
|
| DUPLICATE_SAME_ACCESS));
|
| }
|
|
|
| - base::ProcessHandle process() const { return process_; }
|
| - base::ProcessId process_id() const { return process_id_; }
|
| + const base::Process& process() const { return process_; }
|
|
|
| private:
|
| - base::ProcessHandle process_;
|
| - base::ProcessId process_id_;
|
| + base::Process process_;
|
| bool is_killed_;
|
| };
|
|
|
| @@ -190,7 +189,7 @@ TEST_F(BrowserWatcherTest, ExitCodeWatcherSucceedsInit) {
|
| base::StringPrintf("%d", process_));
|
| EXPECT_TRUE(watcher.ParseArguments(cmd_line_));
|
|
|
| - ASSERT_EQ(process_, watcher.process());
|
| + ASSERT_EQ(process_, watcher.process().Handle());
|
|
|
| // The watcher takes ownership of the handle, make sure it's not
|
| // double-closed.
|
| @@ -204,7 +203,7 @@ TEST_F(BrowserWatcherTest, ExitCodeWatcherOnExitedProcess) {
|
| // Create a new handle to the sleeper process. This handle will leak in
|
| // the case this test fails. A ScopedHandle cannot be used here, as the
|
| // ownership would momentarily be held by two of them, which is disallowed.
|
| - base::ProcessHandle sleeper_handle;
|
| + base::ProcessHandle sleeper_handle = base::kNullProcessHandle;
|
| sleeper.GetNewHandle(&sleeper_handle);
|
|
|
| ExitCodeWatcher watcher(kRegistryPath);
|
| @@ -212,17 +211,17 @@ TEST_F(BrowserWatcherTest, ExitCodeWatcherOnExitedProcess) {
|
| cmd_line_.AppendSwitchASCII(ExitCodeWatcher::kParenthHandleSwitch,
|
| base::StringPrintf("%d", sleeper_handle));
|
| EXPECT_TRUE(watcher.ParseArguments(cmd_line_));
|
| - ASSERT_EQ(sleeper_handle, watcher.process());
|
| + ASSERT_EQ(sleeper_handle, watcher.process().Handle());
|
|
|
| // Verify that the watcher wrote a sentinel for the process.
|
| - VerifyWroteExitCode(sleeper.process_id(), STILL_ACTIVE);
|
| + VerifyWroteExitCode(sleeper.process().pid(), STILL_ACTIVE);
|
|
|
| // Kill the sleeper, and make sure it's exited before we continue.
|
| ASSERT_NO_FATAL_FAILURE(sleeper.Kill(kExitCode, true));
|
|
|
| watcher.WaitForExit();
|
|
|
| - VerifyWroteExitCode(sleeper.process_id(), kExitCode);
|
| + VerifyWroteExitCode(sleeper.process().pid(), kExitCode);
|
| }
|
|
|
| } // namespace browser_watcher
|
|
|