Make ApplicationRunner's ctor's ApplicationDelegate* argument an std::unique_ptr instead.

And ditto for its delegate_ member. The lack of std::make_unique makes
me very sad.

R=jamesr@chromium.org

Review URL: https://codereview.chromium.org/1517743003 .
diff --git a/examples/apptest/example_service_application.cc b/examples/apptest/example_service_application.cc
index e1ef72f..9efceba 100644
--- a/examples/apptest/example_service_application.cc
+++ b/examples/apptest/example_service_application.cc
@@ -4,6 +4,8 @@
 
 #include "examples/apptest/example_service_application.h"
 
+#include <memory>
+
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/application_connection.h"
 #include "mojo/public/cpp/application/application_runner.h"
@@ -30,6 +32,8 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(new mojo::ExampleServiceApplication());
+  mojo::ApplicationRunner runner(
+      std::unique_ptr<mojo::ExampleServiceApplication>(
+          new mojo::ExampleServiceApplication()));
   return runner.Run(application_request);
 }
diff --git a/examples/audio_play_test/play_tone.cc b/examples/audio_play_test/play_tone.cc
index 8b65ef6..001f32e 100644
--- a/examples/audio_play_test/play_tone.cc
+++ b/examples/audio_play_test/play_tone.cc
@@ -243,6 +243,8 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle app_request) {
-  mojo::ApplicationRunner runner(new mojo::media::audio::examples::PlayToneApp);
+  mojo::ApplicationRunner runner(
+      std::unique_ptr<mojo::media::audio::examples::PlayToneApp>(
+          new mojo::media::audio::examples::PlayToneApp()));
   return runner.Run(app_request);
 }
diff --git a/examples/audio_play_test/play_wav.cc b/examples/audio_play_test/play_wav.cc
index d4706b0..3cc1ce6 100644
--- a/examples/audio_play_test/play_wav.cc
+++ b/examples/audio_play_test/play_wav.cc
@@ -563,6 +563,8 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle app_request) {
-  mojo::ApplicationRunner runner(new mojo::media::audio::examples::PlayWAVApp);
+  mojo::ApplicationRunner runner(
+      std::unique_ptr<mojo::media::audio::examples::PlayWAVApp>(
+          new mojo::media::audio::examples::PlayWAVApp()));
   return runner.Run(app_request);
 }
diff --git a/examples/bank_app/bank.cc b/examples/bank_app/bank.cc
index 11a06b5..753967c 100644
--- a/examples/bank_app/bank.cc
+++ b/examples/bank_app/bank.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "examples/bank_app/bank.mojom.h"
 #include "mojo/common/binding_set.h"
 #include "mojo/public/c/system/main.h"
@@ -92,6 +94,7 @@
 }  // namespace examples
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(new examples::BankApp());
+  mojo::ApplicationRunner runner(
+      std::unique_ptr<examples::BankApp>(new examples::BankApp()));
   return runner.Run(application_request);
 }
diff --git a/examples/bank_app/customer.cc b/examples/bank_app/customer.cc
index b312d7d..a572de0 100644
--- a/examples/bank_app/customer.cc
+++ b/examples/bank_app/customer.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <stdio.h>
+#include <memory>
 
 #include "examples/bank_app/bank.mojom.h"
 #include "mojo/public/c/system/main.h"
@@ -54,6 +54,7 @@
 }  // namespace examples
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(new examples::BankCustomer);
+  mojo::ApplicationRunner runner(
+      std::unique_ptr<examples::BankCustomer>(new examples::BankCustomer()));
   return runner.Run(application_request);
 }
diff --git a/examples/content_handler_demo/content_handler_demo.cc b/examples/content_handler_demo/content_handler_demo.cc
index df44a5c..aa6012d 100644
--- a/examples/content_handler_demo/content_handler_demo.cc
+++ b/examples/content_handler_demo/content_handler_demo.cc
@@ -4,6 +4,8 @@
 
 #include <stdio.h>
 
+#include <memory>
+
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/application_delegate.h"
 #include "mojo/public/cpp/application/application_impl.h"
@@ -116,6 +118,8 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(new mojo::examples::ContentHandlerApp);
+  mojo::ApplicationRunner runner(
+      std::unique_ptr<mojo::examples::ContentHandlerApp>(
+          new mojo::examples::ContentHandlerApp()));
   return runner.Run(application_request);
 }
diff --git a/examples/echo/echo_client.cc b/examples/echo/echo_client.cc
index f994dd9..5ff27cf 100644
--- a/examples/echo/echo_client.cc
+++ b/examples/echo/echo_client.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <stdio.h>
+#include <memory>
 
 #include "base/logging.h"
 #include "examples/echo/echo.mojom.h"
@@ -39,6 +39,8 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(new mojo::examples::EchoClientDelegate);
+  mojo::ApplicationRunner runner(
+      std::unique_ptr<mojo::examples::EchoClientDelegate>(
+          new mojo::examples::EchoClientDelegate()));
   return runner.Run(application_request);
 }
diff --git a/examples/echo/echo_server.cc b/examples/echo/echo_server.cc
index 6ff79a6..43a975e 100644
--- a/examples/echo/echo_server.cc
+++ b/examples/echo/echo_server.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "examples/echo/echo.mojom.h"
 #include "mojo/common/binding_set.h"
 #include "mojo/public/c/system/main.h"
@@ -133,7 +135,8 @@
 
 MojoResult MojoMain(MojoHandle application_request) {
   // Uncomment one of the three servers at a time to see it work:
-  mojo::ApplicationRunner runner(new mojo::examples::MultiServer());
+  mojo::ApplicationRunner runner(std::unique_ptr<mojo::examples::MultiServer>(
+      new mojo::examples::MultiServer()));
   // mojo::ApplicationRunner runner(new mojo::examples::SingletonServer());
   // mojo::ApplicationRunner runner(new mojo::examples::OneAtATimeServer());
 
diff --git a/examples/indirect_service/indirect_integer_service.cc b/examples/indirect_service/indirect_integer_service.cc
index 67fe420..e4239a9 100644
--- a/examples/indirect_service/indirect_integer_service.cc
+++ b/examples/indirect_service/indirect_integer_service.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "examples/indirect_service/indirect_service_demo.mojom.h"
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/application_connection.h"
@@ -71,7 +73,7 @@
 
 MojoResult MojoMain(MojoHandle application_request) {
   mojo::ApplicationRunner runner(
-      new mojo::examples::IndirectIntegerServiceAppDelegate);
+      std::unique_ptr<mojo::examples::IndirectIntegerServiceAppDelegate>(
+          new mojo::examples::IndirectIntegerServiceAppDelegate()));
   return runner.Run(application_request);
 }
-
diff --git a/examples/indirect_service/integer_service.cc b/examples/indirect_service/integer_service.cc
index 8399eb0..42f718f 100644
--- a/examples/indirect_service/integer_service.cc
+++ b/examples/indirect_service/integer_service.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "examples/indirect_service/indirect_service_demo.mojom.h"
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/application_connection.h"
@@ -48,7 +50,9 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(new mojo::examples::IntegerServiceAppDelegate);
+  mojo::ApplicationRunner runner(
+      std::unique_ptr<mojo::examples::IntegerServiceAppDelegate>(
+          new mojo::examples::IntegerServiceAppDelegate));
   return runner.Run(application_request);
 }
 
diff --git a/examples/spinning_cube/spinning_cube_app.cc b/examples/spinning_cube/spinning_cube_app.cc
index 613510d..a018e3a 100644
--- a/examples/spinning_cube/spinning_cube_app.cc
+++ b/examples/spinning_cube/spinning_cube_app.cc
@@ -2,8 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <stdio.h>
-#include <string>
+#include <assert.h>
+
+#include <memory>
 
 #include "base/bind.h"
 #include "base/memory/scoped_ptr.h"
@@ -91,6 +92,7 @@
 }  // namespace examples
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(new examples::SpinningCubeApp);
+  mojo::ApplicationRunner runner(std::unique_ptr<examples::SpinningCubeApp>(
+      new examples::SpinningCubeApp()));
   return runner.Run(application_request);
 }
diff --git a/examples/wget/wget.cc b/examples/wget/wget.cc
index 575d8cb..32257b4 100644
--- a/examples/wget/wget.cc
+++ b/examples/wget/wget.cc
@@ -4,6 +4,8 @@
 
 #include <stdio.h>
 
+#include <memory>
+
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/application_delegate.h"
 #include "mojo/public/cpp/application/application_impl.h"
@@ -109,6 +111,7 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(new mojo::examples::WGetApp);
+  mojo::ApplicationRunner runner(
+      std::unique_ptr<mojo::examples::WGetApp>(new mojo::examples::WGetApp()));
   return runner.Run(application_request);
 }
diff --git a/mojo/public/cpp/application/application_runner.h b/mojo/public/cpp/application/application_runner.h
index aa351b1..5a2ea77 100644
--- a/mojo/public/cpp/application/application_runner.h
+++ b/mojo/public/cpp/application/application_runner.h
@@ -5,6 +5,8 @@
 #ifndef MOJO_PUBLIC_CPP_APPLICATION_APPLICATION_RUNNER_H_
 #define MOJO_PUBLIC_CPP_APPLICATION_APPLICATION_RUNNER_H_
 
+#include <memory>
+
 #include "mojo/public/c/environment/logger.h"
 #include "mojo/public/cpp/system/core.h"
 
@@ -25,8 +27,7 @@
 // ultimately Quit().
 class ApplicationRunner {
  public:
-  // Takes ownership of |delegate|.
-  explicit ApplicationRunner(ApplicationDelegate* delegate);
+  explicit ApplicationRunner(std::unique_ptr<ApplicationDelegate> delegate);
   ~ApplicationRunner();
 
   // This replaces the underlying logger implementation with the one provided.
@@ -43,7 +44,7 @@
   MojoResult Run(MojoHandle application_request);
 
  private:
-  ApplicationDelegate* delegate_;
+  std::unique_ptr<ApplicationDelegate> delegate_;
 
   MOJO_DISALLOW_COPY_AND_ASSIGN(ApplicationRunner);
 };
diff --git a/mojo/public/cpp/application/lib/application_runner.cc b/mojo/public/cpp/application/lib/application_runner.cc
index 214d09f..3654715 100644
--- a/mojo/public/cpp/application/lib/application_runner.cc
+++ b/mojo/public/cpp/application/lib/application_runner.cc
@@ -20,8 +20,9 @@
   RunLoop::current()->Quit();
 }
 
-ApplicationRunner::ApplicationRunner(ApplicationDelegate* delegate)
-    : delegate_(delegate) {}
+ApplicationRunner::ApplicationRunner(
+    std::unique_ptr<ApplicationDelegate> delegate)
+    : delegate_(std::move(delegate)) {}
 
 ApplicationRunner::~ApplicationRunner() {
   assert(!delegate_);
@@ -47,13 +48,13 @@
   Environment env;
   {
     RunLoop loop;
-    ApplicationImpl app(delegate_, MakeRequest<Application>(MakeScopedHandle(
-                                       MessagePipeHandle(app_request_handle))));
+    ApplicationImpl app(delegate_.get(),
+                        MakeRequest<Application>(MakeScopedHandle(
+                            MessagePipeHandle(app_request_handle))));
     loop.Run();
   }
 
-  delete delegate_;
-  delegate_ = nullptr;
+  delegate_.reset();
 
   g_running = false;
 
diff --git a/mojo/public/cpp/bindings/tests/versioning_test_service.cc b/mojo/public/cpp/bindings/tests/versioning_test_service.cc
index 0896b8c..419fa3a 100644
--- a/mojo/public/cpp/bindings/tests/versioning_test_service.cc
+++ b/mojo/public/cpp/bindings/tests/versioning_test_service.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include <map>
+#include <memory>
 
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/application_connection.h"
@@ -119,7 +120,8 @@
 
 MojoResult MojoMain(MojoHandle application_request) {
   mojo::ApplicationRunner runner(
-      new mojo::test::versioning::HumanResourceSystemServer());
+      std::unique_ptr<mojo::test::versioning::HumanResourceSystemServer>(
+          new mojo::test::versioning::HumanResourceSystemServer()));
 
   return runner.Run(application_request);
 }
diff --git a/services/authentication/dummy_authentication_app.cc b/services/authentication/dummy_authentication_app.cc
index b98c15e..a829b74 100644
--- a/services/authentication/dummy_authentication_app.cc
+++ b/services/authentication/dummy_authentication_app.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "mojo/common/binding_set.h"
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/application_connection.h"
@@ -57,6 +59,7 @@
 
 MojoResult MojoMain(MojoHandle application_request) {
   mojo::ApplicationRunner runner(
-      new authentication::DummyAuthenticationApplication);
+      std::unique_ptr<authentication::DummyAuthenticationApplication>(
+          new authentication::DummyAuthenticationApplication()));
   return runner.Run(application_request);
 }
diff --git a/services/device_info/device_info.cc b/services/device_info/device_info.cc
index 0dfdfbc..54fe54c 100644
--- a/services/device_info/device_info.cc
+++ b/services/device_info/device_info.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include <cstdlib>
+#include <memory>
 
 #include "mojo/common/binding_set.h"
 #include "mojo/public/c/system/main.h"
@@ -51,6 +52,8 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(new mojo::services::device_info::DeviceInfo());
+  mojo::ApplicationRunner runner(
+      std::unique_ptr<mojo::services::device_info::DeviceInfo>(
+          new mojo::services::device_info::DeviceInfo()));
   return runner.Run(application_request);
 }
diff --git a/services/http_server/http_server_app.cc b/services/http_server/http_server_app.cc
index 8ff7b12..fa063fa 100644
--- a/services/http_server/http_server_app.cc
+++ b/services/http_server/http_server_app.cc
@@ -2,7 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/memory/scoped_ptr.h"
+#include <memory>
+
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/application_delegate.h"
 #include "mojo/public/cpp/application/application_impl.h"
@@ -41,12 +42,13 @@
   }
 
   mojo::ApplicationImpl* app_;
-  scoped_ptr<HttpServerFactoryImpl> http_server_factory_;
+  std::unique_ptr<HttpServerFactoryImpl> http_server_factory_;
 };
 
 }  // namespace http_server
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(new http_server::HttpServerApp);
+  mojo::ApplicationRunner runner(std::unique_ptr<http_server::HttpServerApp>(
+      new http_server::HttpServerApp()));
   return runner.Run(application_request);
 }
diff --git a/services/nacl/nonsfi/pnacl_compile.cc b/services/nacl/nonsfi/pnacl_compile.cc
index 63ca9ca..acb2757 100644
--- a/services/nacl/nonsfi/pnacl_compile.cc
+++ b/services/nacl/nonsfi/pnacl_compile.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "base/logging.h"
 #include "mojo/nacl/nonsfi/file_util.h"
 #include "mojo/nacl/nonsfi/nexe_launcher_nonsfi.h"
@@ -60,6 +62,7 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(new mojo::nacl::MultiPexeCompiler());
+  mojo::ApplicationRunner runner(std::unique_ptr<mojo::nacl::MultiPexeCompiler>(
+      new mojo::nacl::MultiPexeCompiler()));
   return runner.Run(application_request);
 }
diff --git a/services/nacl/nonsfi/pnacl_link.cc b/services/nacl/nonsfi/pnacl_link.cc
index 3a3ddfe..509495c 100644
--- a/services/nacl/nonsfi/pnacl_link.cc
+++ b/services/nacl/nonsfi/pnacl_link.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "base/logging.h"
 #include "mojo/nacl/nonsfi/file_util.h"
 #include "mojo/nacl/nonsfi/nexe_launcher_nonsfi.h"
@@ -59,6 +61,7 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(new mojo::nacl::MultiPexeLinker());
+  mojo::ApplicationRunner runner(std::unique_ptr<mojo::nacl::MultiPexeLinker>(
+      new mojo::nacl::MultiPexeLinker()));
   return runner.Run(application_request);
 }
diff --git a/services/test_service/test_request_tracker_application.cc b/services/test_service/test_request_tracker_application.cc
index 6f8f049..6cfd204 100644
--- a/services/test_service/test_request_tracker_application.cc
+++ b/services/test_service/test_request_tracker_application.cc
@@ -4,7 +4,7 @@
 
 #include "services/test_service/test_request_tracker_application.h"
 
-#include <assert.h>
+#include <memory>
 
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/application_connection.h"
@@ -58,6 +58,7 @@
 
 MojoResult MojoMain(MojoHandle application_request) {
   mojo::ApplicationRunner runner(
-      new mojo::test::TestRequestTrackerApplication);
+      std::unique_ptr<mojo::test::TestRequestTrackerApplication>(
+          new mojo::test::TestRequestTrackerApplication()));
   return runner.Run(application_request);
 }
diff --git a/services/test_service/test_service_application.cc b/services/test_service/test_service_application.cc
index f168cb6..b288d98 100644
--- a/services/test_service/test_service_application.cc
+++ b/services/test_service/test_service_application.cc
@@ -6,6 +6,8 @@
 
 #include <assert.h>
 
+#include <memory>
+
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/application_connection.h"
 #include "mojo/public/cpp/application/application_runner.h"
@@ -17,11 +19,9 @@
 namespace test {
 
 TestServiceApplication::TestServiceApplication()
-    : ref_count_(0), app_impl_(nullptr) {
-}
+    : ref_count_(0), app_impl_(nullptr) {}
 
-TestServiceApplication::~TestServiceApplication() {
-}
+TestServiceApplication::~TestServiceApplication() {}
 
 void TestServiceApplication::Initialize(ApplicationImpl* app) {
   app_impl_ = app;
@@ -61,6 +61,8 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(new mojo::test::TestServiceApplication);
+  mojo::ApplicationRunner runner(
+      std::unique_ptr<mojo::test::TestServiceApplication>(
+          new mojo::test::TestServiceApplication()));
   return runner.Run(application_request);
 }
diff --git a/shell/test/pingable_app.cc b/shell/test/pingable_app.cc
index fe49993..f65b682 100644
--- a/shell/test/pingable_app.cc
+++ b/shell/test/pingable_app.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/application_delegate.h"
 #include "mojo/public/cpp/application/application_impl.h"
@@ -65,6 +67,7 @@
 };
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(new PingableApp);
+  mojo::ApplicationRunner runner(
+      std::unique_ptr<PingableApp>(new PingableApp()));
   return runner.Run(application_request);
 }