shill, libchromeos: Move the minijail c++ bindings

This CL moves the c++ binding for minijail from shill
into libchromeos

BUG=None
TEST=emerge-lumpy libchromeos && FEATURES=test emerge-lumpy platform2
CQ-DEPEND=CL:210408

Change-Id: Ia087ffbf4f54e08fff450f0e2b7984e9eb3448e3
Reviewed-on: https://chromium-review.googlesource.com/210379
Tested-by: Utkarsh Sanghi <usanghi@chromium.org>
Reviewed-by: Jorge Lucangeli Obes <jorgelo@chromium.org>
Reviewed-by: Bertrand Simonnet <bsimonnet@chromium.org>
Commit-Queue: Utkarsh Sanghi <usanghi@chromium.org>
Reviewed-by: Alex Deymo <deymo@chromium.org>
diff --git a/crypto_util_proxy.cc b/crypto_util_proxy.cc
index 46d594b..2143028 100644
--- a/crypto_util_proxy.cc
+++ b/crypto_util_proxy.cc
@@ -40,7 +40,7 @@
 CryptoUtilProxy::CryptoUtilProxy(EventDispatcher *dispatcher, GLib *glib)
     : dispatcher_(dispatcher),
       glib_(glib),
-      minijail_(Minijail::GetInstance()),
+      minijail_(chromeos::Minijail::GetInstance()),
       process_killer_(ProcessKiller::GetInstance()),
       file_io_(FileIO::GetInstance()),
       input_buffer_(),
diff --git a/crypto_util_proxy.h b/crypto_util_proxy.h
index df9813c..2ae7d14 100644
--- a/crypto_util_proxy.h
+++ b/crypto_util_proxy.h
@@ -12,12 +12,12 @@
 #include <base/cancelable_callback.h>
 #include <base/memory/weak_ptr.h>
 #include <base/strings/stringprintf.h>
+#include <chromeos/minijail/minijail.h>
 #include <gtest/gtest_prod.h>  // for FRIEND_TEST
 
 #include "shill/callbacks.h"
 #include "shill/error.h"
 #include "shill/io_handler.h"
-#include "shill/minijail.h"
 #include "shill/proto_bindings/shims/protos/crypto_util.pb.h"
 
 namespace shill {
@@ -121,7 +121,7 @@
 
   EventDispatcher *dispatcher_;
   GLib *glib_;
-  Minijail *minijail_;
+  chromeos::Minijail *minijail_;
   ProcessKiller *process_killer_;
   FileIO *file_io_;
   std::string input_buffer_;
diff --git a/crypto_util_proxy_unittest.cc b/crypto_util_proxy_unittest.cc
index 7840c80..de903b6 100644
--- a/crypto_util_proxy_unittest.cc
+++ b/crypto_util_proxy_unittest.cc
@@ -7,19 +7,20 @@
 #include <vector>
 
 #include <base/callback.h>
+#include <chromeos/minijail/minijail.h>
+#include <chromeos/minijail/mock_minijail.h>
 #include <gtest/gtest.h>
 
 #include "shill/callbacks.h"
 #include "shill/crypto_util_proxy.h"
-#include "shill/minijail.h"
 #include "shill/mock_crypto_util_proxy.h"
 #include "shill/mock_event_dispatcher.h"
 #include "shill/mock_file_io.h"
 #include "shill/mock_glib.h"
-#include "shill/mock_minijail.h"
 #include "shill/mock_process_killer.h"
 
 using base::Bind;
+using chromeos::MockMinijail;
 using std::min;
 using std::string;
 using std::vector;
diff --git a/dhcp_config.cc b/dhcp_config.cc
index ea9fb59..780441e 100644
--- a/dhcp_config.cc
+++ b/dhcp_config.cc
@@ -14,6 +14,7 @@
 #include <base/strings/string_split.h>
 #include <base/strings/stringprintf.h>
 #include <chromeos/dbus/service_constants.h>
+#include <chromeos/minijail/minijail.h>
 
 #include "shill/dhcp_provider.h"
 #include "shill/dhcpcd_proxy.h"
@@ -22,7 +23,6 @@
 #include "shill/ip_address.h"
 #include "shill/logging.h"
 #include "shill/metrics.h"
-#include "shill/minijail.h"
 #include "shill/proxy_factory.h"
 
 using std::string;
@@ -105,7 +105,7 @@
       dispatcher_(dispatcher),
       glib_(glib),
       metrics_(metrics),
-      minijail_(Minijail::GetInstance()) {
+      minijail_(chromeos::Minijail::GetInstance()) {
   SLOG(DHCP, 2) << __func__ << ": " << device_name;
   if (lease_file_suffix_.empty()) {
     lease_file_suffix_ = device_name;
diff --git a/dhcp_config.h b/dhcp_config.h
index ffef897..6eefb62 100644
--- a/dhcp_config.h
+++ b/dhcp_config.h
@@ -12,12 +12,12 @@
 #include <base/files/file_path.h>
 #include <base/memory/scoped_ptr.h>
 #include <base/memory/weak_ptr.h>
+#include <chromeos/minijail/minijail.h>
 #include <dbus-c++/types.h>
 #include <glib.h>
 #include <gtest/gtest_prod.h>  // for FRIEND_TEST
 
 #include "shill/ipconfig.h"
-#include "shill/minijail.h"
 
 namespace shill {
 
@@ -266,7 +266,7 @@
   GLib *glib_;
   Metrics *metrics_;
 
-  Minijail *minijail_;
+  chromeos::Minijail *minijail_;
 
   DISALLOW_COPY_AND_ASSIGN(DHCPConfig);
 };
diff --git a/dhcp_config_unittest.cc b/dhcp_config_unittest.cc
index 255a7a1..63e4471 100644
--- a/dhcp_config_unittest.cc
+++ b/dhcp_config_unittest.cc
@@ -12,6 +12,7 @@
 #include <base/files/scoped_temp_dir.h>
 #include <base/strings/stringprintf.h>
 #include <chromeos/dbus/service_constants.h>
+#include <chromeos/minijail/mock_minijail.h>
 
 #include "shill/dbus_adaptor.h"
 #include "shill/dhcp_provider.h"
@@ -21,7 +22,6 @@
 #include "shill/mock_glib.h"
 #include "shill/mock_log.h"
 #include "shill/mock_metrics.h"
-#include "shill/mock_minijail.h"
 #include "shill/mock_proxy_factory.h"
 #include "shill/property_store_unittest.h"
 #include "shill/testing.h"
@@ -30,6 +30,7 @@
 using base::FilePath;
 using base::ScopedTempDir;
 using base::Unretained;
+using chromeos::MockMinijail;
 using std::string;
 using std::vector;
 using testing::_;
diff --git a/diagnostics_reporter.cc b/diagnostics_reporter.cc
index c49cd61..58ff6bd 100644
--- a/diagnostics_reporter.cc
+++ b/diagnostics_reporter.cc
@@ -7,8 +7,8 @@
 #include <vector>
 
 #include <base/file_util.h>
+#include <chromeos/minijail/minijail.h>
 
-#include "shill/minijail.h"
 #include "shill/process_killer.h"
 #include "shill/shill_time.h"
 #include "shill/shims/net_diags_upload.h"
@@ -30,7 +30,7 @@
 const int DiagnosticsReporter::kLogStashThrottleSeconds = 30 * 60;
 
 DiagnosticsReporter::DiagnosticsReporter()
-    : minijail_(Minijail::GetInstance()),
+    : minijail_(chromeos::Minijail::GetInstance()),
       process_killer_(ProcessKiller::GetInstance()),
       time_(Time::GetInstance()),
       last_log_stash_(0),
diff --git a/diagnostics_reporter.h b/diagnostics_reporter.h
index 11c294e..1d358bc 100644
--- a/diagnostics_reporter.h
+++ b/diagnostics_reporter.h
@@ -8,9 +8,14 @@
 #include <base/files/file_path.h>
 #include <base/lazy_instance.h>
 
-namespace shill {
+namespace chromeos {
 
 class Minijail;
+
+}  // namespace chromeos
+
+namespace shill {
+
 class ProcessKiller;
 class Time;
 
@@ -36,7 +41,7 @@
 
   static const int kLogStashThrottleSeconds;
 
-  Minijail *minijail_;
+  chromeos::Minijail *minijail_;
   ProcessKiller *process_killer_;
   Time *time_;
   uint64 last_log_stash_;  // Monotonic time seconds.
diff --git a/diagnostics_reporter_unittest.cc b/diagnostics_reporter_unittest.cc
index 77650bf..790030b 100644
--- a/diagnostics_reporter_unittest.cc
+++ b/diagnostics_reporter_unittest.cc
@@ -6,14 +6,15 @@
 
 #include <base/file_util.h>
 #include <base/files/scoped_temp_dir.h>
+#include <chromeos/minijail/mock_minijail.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
-#include "shill/mock_minijail.h"
 #include "shill/mock_process_killer.h"
 #include "shill/mock_time.h"
 
 using base::FilePath;
+using chromeos::MockMinijail;
 using testing::_;
 using testing::ElementsAre;
 using testing::InSequence;
diff --git a/minijail.cc b/minijail.cc
deleted file mode 100644
index ffb529c..0000000
--- a/minijail.cc
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "shill/minijail.h"
-
-#include <sys/types.h>
-#include <sys/wait.h>
-
-using std::vector;
-
-namespace shill {
-
-static base::LazyInstance<Minijail> g_minijail = LAZY_INSTANCE_INITIALIZER;
-
-Minijail::Minijail() {}
-
-Minijail::~Minijail() {}
-
-// static
-Minijail *Minijail::GetInstance() {
-  return g_minijail.Pointer();
-}
-
-struct minijail *Minijail::New() {
-  return minijail_new();
-}
-
-void Minijail::Destroy(struct minijail *jail) {
-  minijail_destroy(jail);
-}
-
-bool Minijail::DropRoot(struct minijail *jail, const char *user) {
-  // |user| is copied so the only reason either of these calls can fail
-  // is ENOMEM.
-  return !minijail_change_user(jail, user) &&
-         !minijail_change_group(jail, user);
-}
-
-void Minijail::UseCapabilities(struct minijail *jail, uint64_t capmask) {
-  minijail_use_caps(jail, capmask);
-}
-
-bool Minijail::Run(struct minijail *jail,
-                   vector<char *> args, pid_t *pid) {
-  return minijail_run_pid(jail, args[0], args.data(), pid) == 0;
-}
-
-bool Minijail::RunSync(struct minijail *jail,
-                       vector<char *> args, int *status) {
-  pid_t pid;
-  if (Run(jail, args, &pid) && waitpid(pid, status, 0) == pid) {
-    return true;
-  }
-
-  return false;
-}
-
-bool Minijail::RunPipe(struct minijail *jail,
-                       vector<char *> args, pid_t *pid, int *stdin) {
-  return minijail_run_pid_pipe(jail, args[0], args.data(), pid, stdin) == 0;
-}
-
-bool Minijail::RunPipes(struct minijail *jail, vector<char *> args, pid_t *pid,
-                        int *stdin, int *stdout, int *stderr) {
-  return minijail_run_pid_pipes(jail, args[0], args.data(),
-                                pid, stdin, stdout, stderr) == 0;
-}
-
-bool Minijail::RunAndDestroy(struct minijail *jail,
-                             vector<char *> args, pid_t *pid) {
-  bool res = Run(jail, args, pid);
-  Destroy(jail);
-  return res;
-}
-
-bool Minijail::RunSyncAndDestroy(struct minijail *jail,
-                                 vector<char *> args, int *status) {
-  bool res = RunSync(jail, args, status);
-  Destroy(jail);
-  return res;
-}
-
-bool Minijail::RunPipeAndDestroy(struct minijail *jail,
-                                 vector<char *> args, pid_t *pid, int *stdin) {
-  bool res = RunPipe(jail, args, pid, stdin);
-  Destroy(jail);
-  return res;
-}
-
-bool Minijail::RunPipesAndDestroy(struct minijail *jail,
-                                  vector<char *> args, pid_t *pid, int *stdin,
-                                  int *stdout, int *stderr) {
-  bool res = RunPipes(jail, args, pid, stdin, stdout, stderr);
-  Destroy(jail);
-  return res;
-}
-
-}  // namespace shill
diff --git a/minijail.h b/minijail.h
deleted file mode 100644
index 863f169..0000000
--- a/minijail.h
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef SHILL_MINIJAIL_H_
-#define SHILL_MINIJAIL_H_
-
-#include <vector>
-
-extern "C" {
-#include <linux/capability.h>
-}
-
-#include <base/lazy_instance.h>
-#include <chromeos/libminijail.h>
-
-namespace shill {
-
-// A Minijail abstraction allowing Minijail mocking in tests.
-class Minijail {
- public:
-  virtual ~Minijail();
-
-  // This is a singleton -- use Minijail::GetInstance()->Foo().
-  static Minijail *GetInstance();
-
-  // minijail_new
-  virtual struct minijail *New();
-  // minijail_destroy
-  virtual void Destroy(struct minijail *jail);
-
-  // minijail_change_user/minijail_change_group
-  virtual bool DropRoot(struct minijail *jail, const char *user);
-  // minijail_use_caps
-  virtual void UseCapabilities(struct minijail *jail, uint64_t capmask);
-
-  // minijail_run_pid
-  virtual bool Run(struct minijail *jail, std::vector<char *> args, pid_t *pid);
-
-  // minijail_run_pid and waitpid
-  virtual bool RunSync(struct minijail *jail, std::vector<char *> args,
-                       int *status);
-
-  // minijail_run_pid_pipe
-  virtual bool RunPipe(struct minijail *jail, std::vector<char *> args,
-                       pid_t *pid, int *stdin);
-
-  // minijail_run_pid_pipes
-  virtual bool RunPipes(struct minijail *jail, std::vector<char *> args,
-                        pid_t *pid, int *stdin, int *stdout, int *stderr);
-
-  // Run() and Destroy()
-  virtual bool RunAndDestroy(struct minijail *jail,
-                             std::vector<char *> args,
-                             pid_t *pid);
-
-  // RunSync() and Destroy()
-  virtual bool RunSyncAndDestroy(struct minijail *jail,
-                                 std::vector<char *> args,
-                                 int *status);
-
-  // RunPipe() and Destroy()
-  virtual bool RunPipeAndDestroy(struct minijail *jail,
-                                 std::vector<char *> args,
-                                 pid_t *pid, int *stdin);
-
-  // RunPipes() and Destroy()
-  virtual bool RunPipesAndDestroy(struct minijail *jail,
-                                  std::vector<char *> args,
-                                  pid_t *pid, int *stdin,
-                                  int *stdout, int *stderr);
-
- protected:
-  Minijail();
-
- private:
-  friend struct base::DefaultLazyInstanceTraits<Minijail>;
-
-  DISALLOW_COPY_AND_ASSIGN(Minijail);
-};
-
-}  // namespace shill
-
-#endif  // SHILL_MINIJAIL_H_
diff --git a/mock_minijail.cc b/mock_minijail.cc
deleted file mode 100644
index 890a9c4..0000000
--- a/mock_minijail.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "shill/mock_minijail.h"
-
-namespace shill {
-
-MockMinijail::MockMinijail() {}
-
-MockMinijail::~MockMinijail() {}
-
-}  // namespace shill
diff --git a/mock_minijail.h b/mock_minijail.h
deleted file mode 100644
index d6ddcfd..0000000
--- a/mock_minijail.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef SHILL_MOCK_MINIJAIL_H_
-#define SHILL_MOCK_MINIJAIL_H_
-
-#include <vector>
-
-#include <base/basictypes.h>
-#include <gmock/gmock.h>
-
-#include "shill/minijail.h"
-
-namespace shill {
-
-class MockMinijail : public Minijail {
- public:
-  MockMinijail();
-  virtual ~MockMinijail();
-
-  MOCK_METHOD0(New, struct minijail *());
-  MOCK_METHOD1(Destroy, void(struct minijail *));
-
-  MOCK_METHOD2(DropRoot, bool(struct minijail *jail, const char *user));
-  MOCK_METHOD2(UseCapabilities, void(struct minijail *jail, uint64_t capmask));
-  MOCK_METHOD3(Run, bool(struct minijail *jail,
-                         std::vector<char *> args, pid_t *pid));
-  MOCK_METHOD3(RunSync, bool(struct minijail *jail,
-                             std::vector<char *> args, int *status));
-  MOCK_METHOD3(RunAndDestroy, bool(struct minijail *jail,
-                                   std::vector<char *> args, pid_t *pid));
-  MOCK_METHOD3(RunSyncAndDestroy, bool(struct minijail *jail,
-                                       std::vector<char *> args, int *status));
-  MOCK_METHOD4(RunPipeAndDestroy, bool(struct minijail *jail,
-                                       std::vector<char *> args,
-                                       pid_t *pid, int *stdin));
-  MOCK_METHOD6(RunPipesAndDestroy, bool(struct minijail *jail,
-                                        std::vector<char *> args,
-                                        pid_t *pid, int *stdin,
-                                        int *stdout, int *stderr));
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockMinijail);
-};
-
-}  // namespace shill
-
-#endif  // SHILL_MOCK_MINIJAIL_H_
diff --git a/shill.gyp b/shill.gyp
index 566cadc..0773324 100644
--- a/shill.gyp
+++ b/shill.gyp
@@ -205,7 +205,6 @@
           ],
         },
         'libraries': [
-          '-lminijail',
           '-lrootdev',
           '-lrt'
         ],
@@ -351,7 +350,6 @@
         'manager.cc',
         'manager_dbus_adaptor.cc',
         'metrics.cc',
-        'minijail.cc',
         'netlink_attribute.cc',
         'netlink_manager.cc',
         'netlink_message.cc',
@@ -609,7 +607,6 @@
             'mock_log_unittest.cc',
             'mock_manager.cc',
             'mock_metrics.cc',
-            'mock_minijail.cc',
             'mock_netlink_manager.cc',
             'mock_pending_activation_store.cc',
             'mock_portal_detector.cc',
diff --git a/shill_main.cc b/shill_main.cc
index 71d54d4..fa3be0f 100644
--- a/shill_main.cc
+++ b/shill_main.cc
@@ -16,11 +16,11 @@
 #include <base/files/file_path.h>
 #include <base/strings/string_number_conversions.h>
 #include <base/strings/string_split.h>
+#include <chromeos/minijail/minijail.h>
 #include <chromeos/syslog_logging.h>
 
 #include "shill/dbus_control.h"
 #include "shill/logging.h"
-#include "shill/minijail.h"
 #include "shill/shill_config.h"
 #include "shill/shill_daemon.h"
 
@@ -90,7 +90,7 @@
     logger_command_line.push_back(daemon_name);
     logger_command_line.push_back(NULL);
 
-    shill::Minijail *minijail = shill::Minijail::GetInstance();
+    chromeos::Minijail *minijail = chromeos::Minijail::GetInstance();
     struct minijail *jail = minijail->New();
     minijail->DropRoot(jail, kLoggerUser);