Motown: Move framework/util/incident* so other services can use it
plus minor change to factory_service_base.

R=kulakowski@chromium.org

Review URL: https://codereview.chromium.org/2024953003 .
diff --git a/services/BUILD.gn b/services/BUILD.gn
index bfd560a..60858d2 100644
--- a/services/BUILD.gn
+++ b/services/BUILD.gn
@@ -86,6 +86,7 @@
     "//services/native_support:apptests",
     "//services/prediction:apptests",
     "//services/ui/view_manager:view_manager_apptests",
+    "//services/util/cpp:apptests",
   ]
 
   # TODO: fix ffmpeg build
diff --git a/services/media/factory_service/media_demux_impl.h b/services/media/factory_service/media_demux_impl.h
index 43d96bf..49e43a9 100644
--- a/services/media/factory_service/media_demux_impl.h
+++ b/services/media/factory_service/media_demux_impl.h
@@ -17,8 +17,8 @@
 #include "services/media/factory_service/factory_service.h"
 #include "services/media/framework/graph.h"
 #include "services/media/framework/parts/demux.h"
-#include "services/media/framework/util/incident.h"
 #include "services/media/framework_mojo/mojo_producer.h"
+#include "services/util/cpp/incident.h"
 
 namespace mojo {
 namespace media {
diff --git a/services/media/factory_service/media_sink_impl.h b/services/media/factory_service/media_sink_impl.h
index 320fad7..29992f5 100644
--- a/services/media/factory_service/media_sink_impl.h
+++ b/services/media/factory_service/media_sink_impl.h
@@ -15,9 +15,9 @@
 #include "services/media/factory_service/factory_service.h"
 #include "services/media/framework/graph.h"
 #include "services/media/framework/parts/decoder.h"
-#include "services/media/framework/util/incident.h"
 #include "services/media/framework_mojo/mojo_consumer.h"
 #include "services/media/framework_mojo/mojo_producer.h"
+#include "services/util/cpp/incident.h"
 
 namespace mojo {
 namespace media {
diff --git a/services/media/factory_service/media_source_impl.h b/services/media/factory_service/media_source_impl.h
index acc3b07..ee440e5 100644
--- a/services/media/factory_service/media_source_impl.h
+++ b/services/media/factory_service/media_source_impl.h
@@ -18,9 +18,9 @@
 #include "services/media/framework/parts/demux.h"
 #include "services/media/framework/parts/null_sink.h"
 #include "services/media/framework/parts/reader.h"
-#include "services/media/framework/util/incident.h"
 #include "services/media/framework_mojo/mojo_producer.h"
 #include "services/media/framework_mojo/mojo_pull_mode_producer.h"
+#include "services/util/cpp/incident.h"
 
 namespace mojo {
 namespace media {
diff --git a/services/media/factory_service/network_reader_impl.h b/services/media/factory_service/network_reader_impl.h
index d2ccbf3..f82020f 100644
--- a/services/media/factory_service/network_reader_impl.h
+++ b/services/media/factory_service/network_reader_impl.h
@@ -11,7 +11,7 @@
 #include "mojo/services/media/core/interfaces/seeking_reader.mojom.h"
 #include "mojo/services/network/interfaces/network_service.mojom.h"
 #include "services/media/factory_service/factory_service.h"
-#include "services/media/framework/util/incident.h"
+#include "services/util/cpp/incident.h"
 
 namespace mojo {
 namespace media {
diff --git a/services/media/framework/BUILD.gn b/services/media/framework/BUILD.gn
index e99a5a1..6dd573b 100644
--- a/services/media/framework/BUILD.gn
+++ b/services/media/framework/BUILD.gn
@@ -78,8 +78,6 @@
     "util/conversion_pipeline_builder.h",
     "util/formatting.cc",
     "util/formatting.h",
-    "util/incident.cc",
-    "util/incident.h",
     "util/lpcm_util.cc",
     "util/lpcm_util.h",
     "util/safe_clone.h",
@@ -89,6 +87,7 @@
     "//base",
     "//mojo/public/cpp/application",
     "//mojo/public/cpp/bindings:callback",
+    "//services/util/cpp",
   ]
 }
 
@@ -98,7 +97,6 @@
   testonly = true
 
   sources = [
-    "test/incident_test.cc",
     "test/sparse_byte_buffer_test.cc",
     "test/test_base.h",
   ]
@@ -109,5 +107,6 @@
     "//mojo/application",
     "//mojo/application:test_support",
     "//services/media/framework_create",
+    "//services/util/cpp",
   ]
 }
diff --git a/services/media/framework/parts/reader_cache.h b/services/media/framework/parts/reader_cache.h
index fe9f710..37c65ea 100644
--- a/services/media/framework/parts/reader_cache.h
+++ b/services/media/framework/parts/reader_cache.h
@@ -12,7 +12,7 @@
 #include "base/synchronization/lock.h"
 #include "services/media/framework/parts/reader.h"
 #include "services/media/framework/parts/sparse_byte_buffer.h"
-#include "services/media/framework/util/incident.h"
+#include "services/util/cpp/incident.h"
 
 namespace mojo {
 namespace media {
diff --git a/services/media/framework_ffmpeg/BUILD.gn b/services/media/framework_ffmpeg/BUILD.gn
index c6372f6..3d30e5e 100644
--- a/services/media/framework_ffmpeg/BUILD.gn
+++ b/services/media/framework_ffmpeg/BUILD.gn
@@ -48,6 +48,7 @@
     "//base",
     "//mojo/common",
     "//services/media/framework",
+    "//services/util/cpp",
     "//third_party/ffmpeg",
   ]
 
diff --git a/services/media/framework_ffmpeg/ffmpeg_demux.cc b/services/media/framework_ffmpeg/ffmpeg_demux.cc
index 7c36379..e441f4d 100644
--- a/services/media/framework_ffmpeg/ffmpeg_demux.cc
+++ b/services/media/framework_ffmpeg/ffmpeg_demux.cc
@@ -8,13 +8,13 @@
 #include <thread>
 
 #include "base/logging.h"
-#include "services/media/framework/util/incident.h"
 #include "services/media/framework/util/safe_clone.h"
 #include "services/media/framework_ffmpeg/av_codec_context.h"
 #include "services/media/framework_ffmpeg/av_format_context.h"
 #include "services/media/framework_ffmpeg/av_io_context.h"
 #include "services/media/framework_ffmpeg/av_packet.h"
 #include "services/media/framework_ffmpeg/ffmpeg_demux.h"
+#include "services/util/cpp/incident.h"
 
 namespace mojo {
 namespace media {
diff --git a/services/media/framework_mojo/BUILD.gn b/services/media/framework_mojo/BUILD.gn
index cc27c8a..d1e59e8 100644
--- a/services/media/framework_mojo/BUILD.gn
+++ b/services/media/framework_mojo/BUILD.gn
@@ -31,5 +31,6 @@
     "//mojo/services/media/core/interfaces",
     "//mojo/services/network/interfaces",
     "//services/media/framework",
+    "//services/util/cpp",
   ]
 }
diff --git a/services/media/framework_mojo/mojo_reader.h b/services/media/framework_mojo/mojo_reader.h
index b57d87b..177dec6 100644
--- a/services/media/framework_mojo/mojo_reader.h
+++ b/services/media/framework_mojo/mojo_reader.h
@@ -10,7 +10,7 @@
 #include "base/single_thread_task_runner.h"
 #include "mojo/services/media/core/interfaces/seeking_reader.mojom.h"
 #include "services/media/framework/parts/reader.h"
-#include "services/media/framework/util/incident.h"
+#include "services/util/cpp/incident.h"
 
 namespace mojo {
 namespace media {
diff --git a/services/util/cpp/BUILD.gn b/services/util/cpp/BUILD.gn
index 6a917c3..a2b48a5 100644
--- a/services/util/cpp/BUILD.gn
+++ b/services/util/cpp/BUILD.gn
@@ -10,6 +10,8 @@
   sources = [
     "factory_service_base.cc",
     "factory_service_base.h",
+    "incident.cc",
+    "incident.h",
   ]
 
   deps = [
@@ -19,3 +21,20 @@
     "//mojo/public/cpp/application",
   ]
 }
+
+mojo_native_application("apptests") {
+  output_name = "services_util_cpp_apptests"
+
+  testonly = true
+
+  sources = [
+    "test/incident_test.cc",
+  ]
+
+  deps = [
+    ":cpp",
+    "//base",
+    "//mojo/application",
+    "//mojo/application:test_support",
+  ]
+}
diff --git a/services/util/cpp/factory_service_base.h b/services/util/cpp/factory_service_base.h
index 9a5ec4a..33b46e7 100644
--- a/services/util/cpp/factory_service_base.h
+++ b/services/util/cpp/factory_service_base.h
@@ -27,8 +27,8 @@
 
     // Returns the ApplicationImpl.
     ApplicationImpl* app() {
-      DCHECK(owner_->app_);
-      return owner_->app_;
+      DCHECK(owner_->app());
+      return owner_->app();
     }
 
     // Tells the factory service to release this product.
@@ -72,6 +72,8 @@
 
   ~FactoryServiceBase() override;
 
+  ApplicationImpl* app() { return app_; }
+
   // ApplicationDelegate implementation.
   void Initialize(ApplicationImpl* app) override;
 
diff --git a/services/media/framework/util/incident.cc b/services/util/cpp/incident.cc
similarity index 91%
rename from services/media/framework/util/incident.cc
rename to services/util/cpp/incident.cc
index 3b6a1e3..9307eb6 100644
--- a/services/media/framework/util/incident.cc
+++ b/services/util/cpp/incident.cc
@@ -2,10 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "services/media/framework/util/incident.h"
+#include "services/util/cpp/incident.h"
 
 namespace mojo {
-namespace media {
 
 Incident::Incident() {}
 
@@ -50,5 +49,4 @@
   }
 }
 
-}  // namespace media
 }  // namespace mojo
diff --git a/services/media/framework/util/incident.h b/services/util/cpp/incident.h
similarity index 95%
rename from services/media/framework/util/incident.h
rename to services/util/cpp/incident.h
index 378a58f..26f87e7 100644
--- a/services/media/framework/util/incident.h
+++ b/services/util/cpp/incident.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef MOJO_SERVICES_MEDIA_FRAMEWORK_UTIL_INCIDENT_H_
-#define MOJO_SERVICES_MEDIA_FRAMEWORK_UTIL_INCIDENT_H_
+#ifndef MOJO_SERVICES_UTIL_CPP_INCIDENT_H_
+#define MOJO_SERVICES_UTIL_CPP_INCIDENT_H_
 
 #include <functional>
 #include <vector>
@@ -11,7 +11,6 @@
 #include "base/synchronization/lock.h"
 
 namespace mojo {
-namespace media {
 
 // The Incident class provides a facility for executing code as the consequence
 // of some occurrence. This can be useful for building state machines and
@@ -145,7 +144,6 @@
   std::vector<std::function<void()>> consequences_;
 };
 
-}  // namespace media
 }  // namespace mojo
 
-#endif  // MOJO_SERVICES_MEDIA_FRAMEWORK_UTIL_INCIDENT_H_
+#endif  // MOJO_SERVICES_UTIL_CPP_INCIDENT_H_
diff --git a/services/media/framework/test/incident_test.cc b/services/util/cpp/test/incident_test.cc
similarity index 97%
rename from services/media/framework/test/incident_test.cc
rename to services/util/cpp/test/incident_test.cc
index e143c8a..ee02d96 100644
--- a/services/media/framework/test/incident_test.cc
+++ b/services/util/cpp/test/incident_test.cc
@@ -2,11 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "services/media/framework/test/test_base.h"
-#include "services/media/framework/util/incident.h"
+#include "services/util/cpp/incident.h"
+#include "services/util/cpp/test/test_base.h"
 
 namespace mojo {
-namespace media {
 namespace {
 
 class IncidentTest : public TestBase {};
@@ -216,5 +215,4 @@
 }
 
 }  // namespace
-}  // namespace media
 }  // namespace mojo
diff --git a/services/util/cpp/test/test_base.h b/services/util/cpp/test/test_base.h
new file mode 100644
index 0000000..db1ba66
--- /dev/null
+++ b/services/util/cpp/test/test_base.h
@@ -0,0 +1,25 @@
+// Copyright 2016 The Chromium 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 MOJO_SERVICES_UTIL_CPP_TEST_TEST_BASE_H_
+#define MOJO_SERVICES_UTIL_CPP_TEST_TEST_BASE_H_
+
+#include "mojo/public/cpp/application/application_test_base.h"
+
+namespace mojo {
+namespace {
+
+class TestBase : public test::ApplicationTestBase {
+ public:
+  TestBase() {}
+  ~TestBase() override {}
+
+ private:
+  MOJO_DISALLOW_COPY_AND_ASSIGN(TestBase);
+};
+
+}  // namespace
+}  // namespace mojo
+
+#endif  // MOJO_SERVICES_UTIL_CPP_TEST_TEST_BASE_H_