[modular][inspect] add the initial plumbing for the Inspect API

Root is added to sessionmgr and plumbed through to session storage.

running `fx shell iquery --find . --recursive` now shows:
./hub/c/sessionmgr.cmx/180847/out/objects/root.inspect
./hub/c/sessionmgr.cmx/180847/system_objects

Change-Id: I62a584ec2ba24ec0119326adb42e065dd5fba1e3
diff --git a/peridot/bin/sessionmgr/BUILD.gn b/peridot/bin/sessionmgr/BUILD.gn
index 0097f9e..b3657da 100644
--- a/peridot/bin/sessionmgr/BUILD.gn
+++ b/peridot/bin/sessionmgr/BUILD.gn
@@ -25,6 +25,7 @@
     "//peridot/public/lib/app_driver/cpp:app_driver",
     "//sdk/fidl/fuchsia.modular.internal",
     "//sdk/lib/fidl/cpp",
+    "//sdk/lib/sys/inspect/cpp",
     "//zircon/public/lib/async-loop-cpp",
     "//zircon/public/lib/trace-provider-with-fdio",
   ]
@@ -94,6 +95,7 @@
     "//peridot/public/lib/async/cpp:operation",
     "//sdk/lib/fidl/cpp",
     "//sdk/lib/sys/cpp",
+    "//sdk/lib/sys/inspect/cpp",
     "//sdk/lib/ui/scenic/cpp",
     "//src/ledger/bin/fidl",
     "//src/lib/fxl",
@@ -276,6 +278,7 @@
     "//peridot/lib/ledger_client:constants",
     "//sdk/lib/sys/cpp",
     "//sdk/lib/sys/cpp/testing:unit",
+    "//sdk/lib/sys/inspect/cpp",
     "//sdk/lib/ui/scenic/cpp",
     "//src/lib/fxl/test:gtest_main",
     "//third_party/googletest:gmock",
diff --git a/peridot/bin/sessionmgr/puppet_master/dispatch_story_command_executor_unittest.cc b/peridot/bin/sessionmgr/puppet_master/dispatch_story_command_executor_unittest.cc
index ff95079..86adaec 100644
--- a/peridot/bin/sessionmgr/puppet_master/dispatch_story_command_executor_unittest.cc
+++ b/peridot/bin/sessionmgr/puppet_master/dispatch_story_command_executor_unittest.cc
@@ -54,7 +54,8 @@
  protected:
   void SetUp() override {
     TestWithLedger::SetUp();
-    session_storage_ = std::make_unique<SessionStorage>(ledger_client(), LedgerPageId());
+    session_storage_ =
+        std::make_unique<SessionStorage>(ledger_client(), LedgerPageId());
   }
 
   void Reset() {
diff --git a/peridot/bin/sessionmgr/sessionmgr.cc b/peridot/bin/sessionmgr/sessionmgr.cc
index c13f49c..556e49a 100644
--- a/peridot/bin/sessionmgr/sessionmgr.cc
+++ b/peridot/bin/sessionmgr/sessionmgr.cc
@@ -8,13 +8,15 @@
 #include <lib/fit/defer.h>
 #include <lib/fit/function.h>
 #include <lib/sys/cpp/component_context.h>
+#include <lib/sys/inspect/cpp/component.h>
+
+#include <memory>
+
 #include <src/lib/fxl/command_line.h>
 #include <src/lib/fxl/macros.h>
 #include <src/lib/fxl/strings/split_string.h>
 #include <trace-provider/provider.h>
 
-#include <memory>
-
 #include "peridot/bin/basemgr/cobalt/cobalt.h"
 #include "peridot/bin/sessionmgr/sessionmgr_impl.h"
 #include "peridot/lib/modular_config/modular_config.h"
@@ -90,15 +92,19 @@
 
   async::Loop loop(&kAsyncLoopConfigAttachToThread);
 
+  auto component_context = sys::ComponentContext::Create();
+  auto inspector = sys::ComponentInspector::Initialize(component_context.get());
+  inspect::Node& inspect_root = inspector->root();
+
   trace::TraceProviderWithFdio trace_provider(loop.dispatcher());
-  std::unique_ptr<sys::ComponentContext> component_context(sys::ComponentContext::Create());
 
   auto cobalt_cleanup =
       SetupCobalt((config.enable_cobalt()), std::move(loop.dispatcher()), component_context.get());
 
   modular::AppDriver<modular::SessionmgrImpl> driver(
       component_context->outgoing(),
-      std::make_unique<modular::SessionmgrImpl>(component_context.get(), std::move(config)),
+      std::make_unique<modular::SessionmgrImpl>(component_context.get(), std::move(config),
+                                                std::move(inspect_root)),
       [&loop, &cobalt_cleanup] {
         cobalt_cleanup.call();
         loop.Quit();
diff --git a/peridot/bin/sessionmgr/sessionmgr_impl.cc b/peridot/bin/sessionmgr/sessionmgr_impl.cc
index 3827c1f..6673f21 100644
--- a/peridot/bin/sessionmgr/sessionmgr_impl.cc
+++ b/peridot/bin/sessionmgr/sessionmgr_impl.cc
@@ -175,9 +175,11 @@
 };
 
 SessionmgrImpl::SessionmgrImpl(sys::ComponentContext* const component_context,
-                               fuchsia::modular::session::SessionmgrConfig config)
+                               fuchsia::modular::session::SessionmgrConfig config,
+                               inspect::Node node_object)
     : component_context_(component_context),
       config_(std::move(config)),
+      node_(std::move(node_object)),
       story_provider_impl_("StoryProviderImpl"),
       agent_runner_("AgentRunner"),
       weak_ptr_factory_(this) {
@@ -606,8 +608,9 @@
   // all modules to be terminated before agents are terminated. Agents must
   // outlive the stories which contain modules that are connected to those
   // agents.
-  session_storage_ =
-      std::make_unique<SessionStorage>(ledger_client_.get(), fuchsia::ledger::PageId());
+
+  session_storage_ = std::make_unique<SessionStorage>(
+      ledger_client_.get(), fuchsia::ledger::PageId());
 
   module_facet_reader_.reset(
       new ModuleFacetReaderImpl(component_context_->svc()->Connect<fuchsia::sys::Loader>()));
diff --git a/peridot/bin/sessionmgr/sessionmgr_impl.h b/peridot/bin/sessionmgr/sessionmgr_impl.h
index 7c4037e..0c09161 100644
--- a/peridot/bin/sessionmgr/sessionmgr_impl.h
+++ b/peridot/bin/sessionmgr/sessionmgr_impl.h
@@ -20,6 +20,7 @@
 #include <lib/fidl/cpp/binding.h>
 #include <lib/fidl/cpp/interface_ptr.h>
 #include <lib/fit/function.h>
+#include <lib/sys/inspect/cpp/component.h>
 
 #include <memory>
 #include <string>
@@ -63,7 +64,7 @@
                        EntityProviderLauncher {
  public:
   SessionmgrImpl(sys::ComponentContext* component_context,
-                 fuchsia::modular::session::SessionmgrConfig config);
+                 fuchsia::modular::session::SessionmgrConfig config, inspect::Node object);
   ~SessionmgrImpl() override;
 
   // |AppDriver| calls this.
@@ -184,6 +185,9 @@
   sys::ComponentContext* const component_context_;
 
   fuchsia::modular::session::SessionmgrConfig config_;
+
+  inspect::Node node_;
+
   std::unique_ptr<scoped_tmpfs::ScopedTmpFS> memfs_for_ledger_;
 
   fidl::BindingSet<fuchsia::modular::internal::Sessionmgr> bindings_;
diff --git a/peridot/bin/sessionmgr/sessionmgr_impl_unittest.cc b/peridot/bin/sessionmgr/sessionmgr_impl_unittest.cc
index 23c33b1..8b15402 100644
--- a/peridot/bin/sessionmgr/sessionmgr_impl_unittest.cc
+++ b/peridot/bin/sessionmgr/sessionmgr_impl_unittest.cc
@@ -277,8 +277,10 @@
 
   component_context_provider.service_directory_provider()->AddService(fake_launcher.GetHandler());
 
+  inspect::Node root_node;
   fuchsia::modular::internal::SessionmgrPtr sessionmgr;
-  SessionmgrImpl sessionmgr_impl(component_context_provider.context(), std::move(config));
+  SessionmgrImpl sessionmgr_impl(component_context_provider.context(), std::move(config),
+                                 std::move(root_node));
   component_context_provider.ConnectToPublicService(sessionmgr.NewRequest());
 
   sessionmgr.set_error_handler([](zx_status_t status) {
diff --git a/peridot/bin/sessionmgr/story_runner/BUILD.gn b/peridot/bin/sessionmgr/story_runner/BUILD.gn
index 717e5d8..80526bb 100644
--- a/peridot/bin/sessionmgr/story_runner/BUILD.gn
+++ b/peridot/bin/sessionmgr/story_runner/BUILD.gn
@@ -77,6 +77,7 @@
     "//sdk/fidl/fuchsia.ui.views",
     "//sdk/lib/fidl/cpp",
     "//sdk/lib/sys/cpp",
+    "//sdk/lib/sys/inspect/cpp",
     "//src/ledger/bin/fidl",
     "//src/lib/fxl",
   ]