blob: eab8486350a9059719ff02d18633685f6286df62 [file] [log] [blame] [view] [edit]
<link rel="stylesheet" href="../style.css" />
[TOC]
# fuchsia.ui.pointer.augment
<p>These augmentation protocols represent powerful introspection capabilities
into the view hierarchy, and must be individually routed to specific target
components. Most clients should not have access to these protocols. Some
commonalities:</p>
<ul>
<li>Theory of operation. These augmentation protocols accept a standard
protocol endpoint and return an augmented protocol endpoint. In case of
error, the original endpoint is returned.</li>
<li>View hierarchy scope. The reach of the augmented protocols are inherently
bound to the original protocols they augment. That is, if the original
protocol has power over only one view, the augmented protocol gives access
to only that view.</li>
<li>Security warning. These protocols enable a form of clickjacking! While the
view hierarchy prevents clickjacking of arbitrary views, care must be
taken to route these augmentation protocols to the intended view's
component.</li>
<li>Security guarantees. These protocols offer Confidentiality, Integrity, and
Availability of the augmented data to authorized components. That is,
non-authorized components cannot snoop on this data, modify its contents,
or prevent its dispatch to authorized components.</li>
<li>Append semantics. Each augmentation provides augmentation-specific data to
the protocol's regular event, but otherwise is not intended to modify the
original protocol's basic functionality.</li>
<li>Synchronicity. The augmentation-specific data is synchronous with the
original protocol's data.</li>
<li>API evolution. Server-side can introduce new methods to these protocols,
and new fields to these tables, without breaking existing clients of the
original or augmented protocol. For example, <a class='link' href='#MouseEventWithGlobalMouse'>MouseEventWithGlobalMouse</a>
can be extended without consequences for
<a class='link' href='#fuchsia.ui.pointer.MouseEvent'>fuchsia.ui.pointer.MouseEvent</a>.</li>
<li>API evolution. When clients require substantially different augmentation,
new augmentation protocols representing those capabilities can (and
should) be introduced. For example, if one client of <a class='link' href='#GlobalMouse'>GlobalMouse</a>
requires additional fields that are really about view-local hit data, it
would be reasonable to mint a new augmentation.</li>
</ul>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 7</span></div>
## **PROTOCOLS**
## GlobalMouse {#GlobalMouse}
*Defined in [fuchsia.ui.pointer.augment/augment.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer.augment/augment.fidl;l=63)*
<p>A method for a client to receive view-global visibility for mouse behavior.</p>
<ul>
<li>The augmented data are scoped to the view of the client.</li>
</ul>
### Upgrade {#GlobalMouse.Upgrade}
<p>An exchange from an <code>original</code> mouse protocol endpoint to an <code>augmented</code>
mouse protocol endpoint. If successful, <code>error</code> is empty, <code>original</code> is
consumed, and <code>augmented</code> is returned for the client's use. Otherwise,
the <code>error</code> carries back <code>original</code> for the client's use, and
<code>augmented</code> is null.</p>
#### Request {#GlobalMouse.Upgrade_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>original</code></td>
<td>
<code><a class='link' href='../fuchsia.ui.pointer/'>fuchsia.ui.pointer</a>/<a class='link' href='../fuchsia.ui.pointer/#MouseSource'>MouseSource</a></code>
</td>
</tr>
</table>
#### Response {#GlobalMouse.Upgrade_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>augmented</code></td>
<td>
<code><a class='link' href='#MouseSourceWithGlobalMouse'>MouseSourceWithGlobalMouse</a>?</code>
</td>
</tr>
<tr>
<td><code>error</code></td>
<td>
<code><a class='link' href='#ErrorForGlobalMouse'>ErrorForGlobalMouse</a>?</code>
</td>
</tr>
</table>
## LocalHit {#LocalHit}
*Defined in [fuchsia.ui.pointer.augment/augment.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer.augment/augment.fidl;l=128)*
<p>A method for a client to upgrade its touch event protocol to additionally
receive local-hit data for touch events.</p>
### Upgrade {#LocalHit.Upgrade}
<p>An exchange from an <code>original</code> touch protocol endpoint to an <code>augmented</code>
touch protocol endpoint. If successful, <code>error</code> is empty, <code>original</code> is
consumed, and <code>augmented</code> is returned for the client's use. Otherwise,
the <code>error</code> carries back <code>original</code> for the client's use, and
<code>augmented</code> is null.</p>
#### Request {#LocalHit.Upgrade_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>original</code></td>
<td>
<code><a class='link' href='../fuchsia.ui.pointer/'>fuchsia.ui.pointer</a>/<a class='link' href='../fuchsia.ui.pointer/#TouchSource'>TouchSource</a></code>
</td>
</tr>
</table>
#### Response {#LocalHit.Upgrade_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>augmented</code></td>
<td>
<code><a class='link' href='#TouchSourceWithLocalHit'>TouchSourceWithLocalHit</a>?</code>
</td>
</tr>
<tr>
<td><code>error</code></td>
<td>
<code><a class='link' href='#ErrorForLocalHit'>ErrorForLocalHit</a>?</code>
</td>
</tr>
</table>
## MouseSourceWithGlobalMouse {#MouseSourceWithGlobalMouse}
*Defined in [fuchsia.ui.pointer.augment/augment.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer.augment/augment.fidl;l=81)*
<p>Like <a class='link' href='#fuchsia.ui.pointer.MouseSource'>fuchsia.ui.pointer.MouseSource</a>, but with additional information
about the global position of mouse events, and otherwise identical in
operation. See <a class='link' href='#fuchsia.ui.pointer.MouseSource'>fuchsia.ui.pointer.MouseSource</a> for regular usage
information.</p>
### Watch {#MouseSourceWithGlobalMouse.Watch}
<p>Identical usage to <a class='link' href='#fuchsia.ui.pointer.MouseSource.Watch'>fuchsia.ui.pointer.MouseSource.Watch</a>, but with
augmented data.</p>
#### Request {#MouseSourceWithGlobalMouse.Watch_Request}
&lt;EMPTY&gt;
#### Response {#MouseSourceWithGlobalMouse.Watch_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>events</code></td>
<td>
<code>vector&lt;<a class='link' href='#MouseEventWithGlobalMouse'>MouseEventWithGlobalMouse</a>&gt;[128]</code>
</td>
</tr>
</table>
## TouchSourceWithLocalHit {#TouchSourceWithLocalHit}
*Defined in [fuchsia.ui.pointer.augment/augment.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer.augment/augment.fidl;l=146)*
<p>Like <a class='link' href='#fuchsia.ui.pointer.TouchSource'>fuchsia.ui.pointer.TouchSource</a>, but with additional information
about the local-hit position of touch events, and otherwise identical in
operation. See <a class='link' href='#fuchsia.ui.pointer.TouchSource'>fuchsia.ui.pointer.TouchSource</a> for regular usage
information.</p>
### UpdateResponse {#TouchSourceWithLocalHit.UpdateResponse}
<p>Identical usage to <a class='link' href='#fuchsia.ui.pointer.TouchSource.UpdateResponse'>fuchsia.ui.pointer.TouchSource.UpdateResponse</a>.</p>
#### Request {#TouchSourceWithLocalHit.UpdateResponse_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>interaction</code></td>
<td>
<code><a class='link' href='../fuchsia.ui.pointer/'>fuchsia.ui.pointer</a>/<a class='link' href='../fuchsia.ui.pointer/#TouchInteractionId'>TouchInteractionId</a></code>
</td>
</tr>
<tr>
<td><code>response</code></td>
<td>
<code><a class='link' href='../fuchsia.ui.pointer/'>fuchsia.ui.pointer</a>/<a class='link' href='../fuchsia.ui.pointer/#TouchResponse'>TouchResponse</a></code>
</td>
</tr>
</table>
#### Response {#TouchSourceWithLocalHit.UpdateResponse_Response}
&lt;EMPTY&gt;
### Watch {#TouchSourceWithLocalHit.Watch}
<p>Identical usage to <a class='link' href='#fuchsia.ui.pointer.TouchSource.Watch'>fuchsia.ui.pointer.TouchSource.Watch</a>, but with
augmented data.</p>
#### Request {#TouchSourceWithLocalHit.Watch_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>responses</code></td>
<td>
<code>vector&lt;<a class='link' href='../fuchsia.ui.pointer/'>fuchsia.ui.pointer</a>/<a class='link' href='../fuchsia.ui.pointer/#TouchResponse'>TouchResponse</a>&gt;[128]</code>
</td>
</tr>
</table>
#### Response {#TouchSourceWithLocalHit.Watch_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>events</code></td>
<td>
<code>vector&lt;<a class='link' href='#TouchEventWithLocalHit'>TouchEventWithLocalHit</a>&gt;[128]</code>
</td>
</tr>
</table>
## **STRUCTS**
### ErrorForGlobalMouse [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#ErrorForGlobalMouse data-text="ErrorForGlobalMouse"}
*Defined in [fuchsia.ui.pointer.augment/augment.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer.augment/augment.fidl;l=53)*
<p>Abnormal return for global mouse.</p>
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="ErrorForGlobalMouse.error_reason">
<td><code>error_reason</code></td>
<td>
<code><a class='link' href='#ErrorReason'>ErrorReason</a></code>
</td>
<td><p>Abnormal reason for return.</p>
</td>
<td>No default</td>
</tr>
<tr id="ErrorForGlobalMouse.original">
<td><code>original</code></td>
<td>
<code><a class='link' href='../fuchsia.ui.pointer/'>fuchsia.ui.pointer</a>/<a class='link' href='../fuchsia.ui.pointer/#MouseSource'>MouseSource</a></code>
</td>
<td><p>Original protocol endpoint for client use.</p>
</td>
<td>No default</td>
</tr>
</table>
### ErrorForLocalHit [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#ErrorForLocalHit data-text="ErrorForLocalHit"}
*Defined in [fuchsia.ui.pointer.augment/augment.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer.augment/augment.fidl;l=117)*
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="ErrorForLocalHit.error_reason">
<td><code>error_reason</code></td>
<td>
<code><a class='link' href='#ErrorReason'>ErrorReason</a></code>
</td>
<td><p>Abnormal reason for return.</p>
</td>
<td>No default</td>
</tr>
<tr id="ErrorForLocalHit.original">
<td><code>original</code></td>
<td>
<code><a class='link' href='../fuchsia.ui.pointer/'>fuchsia.ui.pointer</a>/<a class='link' href='../fuchsia.ui.pointer/#TouchSource'>TouchSource</a></code>
</td>
<td><p>Original protocol endpoint for client use.</p>
</td>
<td>No default</td>
</tr>
</table>
### TouchEventWithLocalHit {#TouchEventWithLocalHit data-text="TouchEventWithLocalHit"}
*Defined in [fuchsia.ui.pointer.augment/augment.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer.augment/augment.fidl;l=172)*
<p>An augmentation of <a class='link' href='#fuchsia.ui.pointer.TouchEvent'>fuchsia.ui.pointer.TouchEvent</a> to provide local-hit
data for a touch event.</p>
<p>For a given touch event <code>e</code>, consider the ordered list of intersections with
graphical content: its &quot;hits&quot; from top to bottom. The &quot;local hit&quot; of <code>e</code> is
the location of <code>e</code> in the coordinate system of the view in which <code>e</code> has
the top-most intersection.</p>
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="TouchEventWithLocalHit.touch_event">
<td><code>touch_event</code></td>
<td>
<code><a class='link' href='../fuchsia.ui.pointer/'>fuchsia.ui.pointer</a>/<a class='link' href='../fuchsia.ui.pointer/#TouchEvent'>TouchEvent</a></code>
</td>
<td><p>Identical usage to <a class='link' href='#fuchsia.ui.pointer.TouchEvent'>fuchsia.ui.pointer.TouchEvent</a>.</p>
</td>
<td>No default</td>
</tr>
<tr id="TouchEventWithLocalHit.local_viewref_koid">
<td><code>local_viewref_koid</code></td>
<td>
<code><a class='link' href='../zx/'>zx</a>/<a class='link' href='../zx/#koid'>koid</a></code>
</td>
<td><p>Augmented data for <code>touch_event</code> that describes the top-most client
KOID that it hits.</p>
</td>
<td>No default</td>
</tr>
<tr id="TouchEventWithLocalHit.local_point">
<td><code>local_point</code></td>
<td>
<code><a class='link' href='#Point2'>Point2</a></code>
</td>
<td><p>Augmented data for <code>touch_event</code> that describes its local coordinates in
the coordinate space for <code>local_viewref_koid</code>.</p>
</td>
<td>No default</td>
</tr>
</table>
## **ENUMS**
### ErrorReason [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#ErrorReason data-text="ErrorReason"}
Type: <code>uint32</code>
*Defined in [fuchsia.ui.pointer.augment/augment.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer.augment/augment.fidl;l=45)*
<p>Abnormal conditions for augmentation protocols.</p>
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="ErrorReason.DENIED">
<td><h3 id="ErrorReason.DENIED" class="add-link hide-from-toc">DENIED</h3></td>
<td><code>1</code></td>
<td><p>The augmentation attempt was denied.</p>
</td>
</tr>
</table>
## **TABLES**
### MouseEventWithGlobalMouse {#MouseEventWithGlobalMouse data-text="MouseEventWithGlobalMouse"}
*Defined in [fuchsia.ui.pointer.augment/augment.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer.augment/augment.fidl;l=100)*
<p>An augmentation of <a class='link' href='#fuchsia.ui.pointer.MouseEvent'>fuchsia.ui.pointer.MouseEvent</a> to provide global
visibility for mouse behavior in the injection subtree.</p>
<ul>
<li>The augmented data is scoped to the view of the client, meaning no events
will be delivered when the mouse pointer is outside the view (even when
the stream is latched to this view).</li>
<li>Augmented data is only produced for events injected either into or above
the view in the scene graph.
<ul>
<li>This means that local events ~= global events when the view is the
root of the injection subtree.</li>
<li>Otherwise the client will see all events up to root of the injection
subtree.</li>
</ul>
</li>
</ul>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="MouseEventWithGlobalMouse.mouse_event">
<td><h3 id="MouseEventWithGlobalMouse.mouse_event" class="add-link hide-from-toc">1</h3></td>
<td><code>mouse_event</code></td>
<td>
<code><a class='link' href='../fuchsia.ui.pointer/'>fuchsia.ui.pointer</a>/<a class='link' href='../fuchsia.ui.pointer/#MouseEvent'>MouseEvent</a></code>
</td>
<td><p>Identical usage to <a class='link' href='#fuchsia.ui.pointer.MouseEvent'>fuchsia.ui.pointer.MouseEvent</a>. In particular, if
the client's view is obscured, <code>mouse_event</code> will be empty.</p>
</td>
</tr>
<tr id="MouseEventWithGlobalMouse.global_position">
<td><h3 id="MouseEventWithGlobalMouse.global_position" class="add-link hide-from-toc">2</h3></td>
<td><code>global_position</code></td>
<td>
<code><a class='link' href='../fuchsia.ui.pointer/'>fuchsia.ui.pointer</a>/<a class='link' href='../fuchsia.ui.pointer/#MousePointerSample'>MousePointerSample</a></code>
</td>
<td><p>Augmented data that describes the position of a <code>mouse_event</code> within the
client's view, regardless of obscuring or latching.</p>
</td>
</tr>
<tr id="MouseEventWithGlobalMouse.global_stream_info">
<td><h3 id="MouseEventWithGlobalMouse.global_stream_info" class="add-link hide-from-toc">3</h3></td>
<td><code>global_stream_info</code></td>
<td>
<code><a class='link' href='../fuchsia.ui.pointer/'>fuchsia.ui.pointer</a>/<a class='link' href='../fuchsia.ui.pointer/#MouseEventStreamInfo'>MouseEventStreamInfo</a></code>
</td>
<td><p>Augmented data that describes when the mouse stream enters or exits
the client's view.</p>
</td>
</tr>
</table>
## **TYPE ALIASES**
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="Point2">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer.augment/augment.fidl;l=163">Point2</a></td>
<td>
<code>array</code>[<code>2</code>]</td>
<td><p>A floating point two-dimensional point.</p>
<ul>
<li>The values are placed in (x, y) order.</li>
</ul>
</td>
</tr>
</table>