[scenic] Add typed tokens for import/export

TEST: CQ
SCN-1200 #comment

Change-Id: I87c134627a96e4005b87187652f2503b26dfe86a
diff --git a/public/fidl/fuchsia.ui.gfx/BUILD.gn b/public/fidl/fuchsia.ui.gfx/BUILD.gn
index 927bcfe..a1a1eb4 100644
--- a/public/fidl/fuchsia.ui.gfx/BUILD.gn
+++ b/public/fidl/fuchsia.ui.gfx/BUILD.gn
@@ -17,6 +17,7 @@
     "renderer.fidl",
     "resources.fidl",
     "shapes.fidl",
+    "tokens.fidl",
     "types.fidl",
   ]
 
diff --git a/public/fidl/fuchsia.ui.gfx/tokens.fidl b/public/fidl/fuchsia.ui.gfx/tokens.fidl
new file mode 100644
index 0000000..b7546bf
--- /dev/null
+++ b/public/fidl/fuchsia.ui.gfx/tokens.fidl
@@ -0,0 +1,36 @@
+// Copyright 2019 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+library fuchsia.ui.gfx;
+
+/// Token that uniquely identifies an attachment point for a subgraph in the
+/// global scene graph.  Each |ImportToken| has exactly one corresponding
+/// |ExportToken|.
+///
+/// A Scenic client can reference contents from another client by creating a
+/// typed resource using this token.  The other client must also create a
+/// correspondingly typed resource using the corresponding |ExportToken|.
+///
+/// The exact nature of the inter-client reference depends on the specific
+/// resources created from the tokens.  For example, creating a |ViewHolder|
+/// resource from this token allows a client to embed another client's |View|.
+struct ImportToken {
+    handle<eventpair> value;
+};
+
+/// Token that uniquely identifies a root point for a subgraph in the global
+/// scene graph. Each |ExportToken| has exactly one corresponding |ImportToken|.
+///
+/// A Scenic client can have its contents referenced from another client by
+/// creating a typed resource using this token.  The other client must also
+/// create a correspondingly typed resource using the corresponding
+/// |ImportToken|.
+///
+/// The exact nature of the inter-client reference depends on the specific
+/// resources created from the tokens.  For example, creating a |View|
+/// resource from this token allows everything attached to the |View| to be
+/// embedded in another clients |ViewHolder|.
+struct ExportToken {
+    handle<eventpair> value;
+};