[session_shell] Add SessionShell interface.

Add session shell interface to receive story views from sessionmgr.

MF-128 #comment Add SessionShell interface.

TESTED=compiled

Change-Id: I93a64972b04f3acc86f3d45d88eb94e98381088e
diff --git a/public/fidl/fuchsia.modular/session/session_shell.fidl b/public/fidl/fuchsia.modular/session/session_shell.fidl
index 35ef7e8..b1a421e 100644
--- a/public/fidl/fuchsia.modular/session/session_shell.fidl
+++ b/public/fidl/fuchsia.modular/session/session_shell.fidl
@@ -7,6 +7,46 @@
 using fuchsia.modular.auth;
 using fuchsia.speech;
 using fuchsia.ui.policy;
+using fuchsia.ui.viewsv1token;
+
+
+// This interface is implemented by a session shell and is used by the
+// sessionmgr to hand to the session shell views of stories, or to notify that
+// the view of a story is about to be closed.
+[Discoverable]
+interface SessionShell {
+    // Displays the given story view. The story this view belongs to is
+    // identified by |view_id.story_id|.
+    AttachView(ViewIdentifier view_id, fuchsia.ui.viewsv1token.ViewOwner view_owner);
+
+    // Instructs the session shell to detach the view identified by |view_id|
+    // that was previously provided by AttachView() from the UI of the session
+    // shell. The view will be closed soon after DetachView() returns, or when a
+    // timeout is reached.
+    //
+    // It is customary for the session shell to display a placeholder before a
+    // view is attached for a given view identifier, or after it was detached.
+    //
+    // If the story identified by |view_id.story_id| is about to be deleted, the
+    // Shell will observe a call to StoryProviderWatcher.OnDelete() sometime
+    // after DetachView() returns.
+    //
+    // If the session for which this session shell is responsible for is being
+    // terminated, or the session shell is stopped because it's replaced by
+    // another session shell, DetachView() will *not* be called at all, and the
+    // shell will rather observe a call to Lifecycle.Terminate().
+    DetachView(ViewIdentifier view_id) -> ();
+};
+
+// Identifies a view provided to a session shell. The values of the |story_id|
+// field match those used in the |StoryProvider| interface, allowing
+// identification of the same story across interfaces.
+//
+// This is a struct rather than a naked string to allow for future evolution of
+// the identifier without changing the |SessionShell| API itself.
+struct ViewIdentifier {
+  string story_id;
+};
 
 // This interface allows a |SessionShell| to request capabilities from its
 // creator in a way that is more explicit about the services that are