Snap for 7771957 from 2851a546acca2827af8956b460ee46e73324b7cd to sc-v2-release

Change-Id: Id1d1e844fb735a8b43cf21304fe27e27bb627acc
diff --git a/chromium.org/unstable/aura-shell/aura-shell.xml b/chromium.org/unstable/aura-shell/aura-shell.xml
index bbc81a3..51d652b 100644
--- a/chromium.org/unstable/aura-shell/aura-shell.xml
+++ b/chromium.org/unstable/aura-shell/aura-shell.xml
@@ -24,7 +24,7 @@
     DEALINGS IN THE SOFTWARE.
   </copyright>
 
-  <interface name="zaura_shell" version="18">
+  <interface name="zaura_shell" version="24">
     <description summary="aura_shell">
       The global interface exposing aura shell capabilities is used to
       instantiate an interface extension for a wl_surface object.
@@ -93,9 +93,32 @@
       </description>
       <arg name="id" type="uint" summary="ID of a single bug fix"/>
     </event>
+
+    <event name="desks_changed" since="22">
+      <description summary="sends names of desks">
+        Notifies when there is a change in global desks state. This is emitted on
+        desk name changes, desk addition/removal or desks are reordered.
+        "desk_names" argument contains the set of null terminated strings as names of desks.
+      </description>
+      <arg name="desk_names" type="array" summary="an array of existing desks' names"/>
+    </event>
+    <event name="desk_activation_changed" since="22">
+      <description summary="sends the index of the active desk">
+        Notifies when there is a change of the active desk.
+      </description>
+      <arg name="active_desk_index" type="int" summary="index of the active desk"/>
+    </event>
+    <!-- Version 24 additions -->
+    <event name="activated" since="24">
+      <description summary="activated surface changed">
+	Notifies client that the activated surface changed.
+      </description>
+      <arg name="gained_active" type="object" interface="wl_surface" allow-null="true"/>
+      <arg name="lost_active" type="object" interface="wl_surface" allow-null="true"/>
+    </event>
   </interface>
 
-  <interface name="zaura_surface" version="18">
+  <interface name="zaura_surface" version="23">
     <description summary="aura shell interface to a wl_surface">
       An additional interface to a wl_surface object, which allows the
       client to access aura shell specific functionality for surface.
@@ -334,6 +357,93 @@
       </description>
       <arg name="id" type="int" summary="window session id"/>
     </request>
+
+    <!-- Version 19 additions -->
+    <request name="set_can_go_back" since="19">
+      <description summary="Set the minimize-on-back-gesture behavior.">
+        Sets that the surface can go back as per its navigation list.
+        This allows the server to react to by minimizing the window upon a
+        system wide back gesture.
+      </description>
+    </request>
+
+    <request name="unset_can_go_back" since="19">
+      <description summary="Unset the minimize-on-back-gesture behavior.">
+        Unsets that the surface can go back as per its navigation list.
+        See above.
+      </description>
+    </request>
+
+    <!-- Version 20 additions -->
+    <request name="set_pip" since="20">
+      <description summary="Set pip for the surface.">
+        Requests that the surface is set to Picture-in-Picture (PIP).
+      </description>
+    </request>
+
+    <request name="unset_pip" since="20">
+      <description summary="Unset pip for the surface.">
+        Requests that the surface is unset from Picture-in-Picture (PIP).
+      </description>
+    </request>
+
+    <request name="set_aspect_ratio" since="20">
+      <description summary="Set aspect ratio for the surface.">
+        Sets the aspect ratio of the surface.
+      </description>
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+    </request>
+
+    <!-- Version 21 additions -->
+    <enum name="occlusion_state">
+      <description summary="surface occlusion state">
+	Describes the occlusion state of a surface.
+      </description>
+      <entry name="unknown" value="0" summary="The surface's occlusion state isn't tracked"/>
+      <entry name="visible" value="1" summary="The surface is visible"/>
+      <entry name="occluded" value="2" summary="The surface is occluded"/>
+      <entry name="hidden" value="3" summary="The surface is not visible"/>
+    </enum>
+
+    <event name="occlusion_state_changed" since="21">
+      <description summary="Notify the client that the occlusion state changed">
+	Notifies the client that the occlusion state of a window has changed. Clients
+	will only receive these messages if they previously request occlusion tracking
+  via set_occlusion_tracking for a particular surface.
+      </description>
+      <arg name="mode" type="uint" enum="occlusion_state"/>
+    </event>
+
+    <!-- Version 22 additions -->
+    <request name="move_to_desk" since="22">
+        <description summary="move to desk">
+        If |index| equals -1, requests that the server toggles whether client
+        is visible on all workspaces.
+        If |index| is not -1, requests that the server moves the client to the desk at
+        |index|.
+      </description>
+      <arg name="index" type="int"/>
+    </request>
+
+    <event name="desk_changed" since="22">
+      <description summary="window desk state changed">
+        Notifies when there is a change in the desk state of a window.
+        This is emitted when a window is moved to another desk or
+        when its assigned-to-all-desks state changes.
+      </description>
+      <arg name="state" type="int" summary="index of desk or -1 for a window assigned to all desks"/>
+    </event>
+
+    <!-- Version 23 additions -->
+    <request name="set_initial_workspace" since="23">
+      <description summary="initial workspace for restore">
+        If |initial_workspace| equals '-1', a window is restored and visible on all workspaces,
+        Otherwise, set the initial workspace to restore the window to the corresponding workspace.
+        This is not double buffered and must be set before attaching a buffer.
+      </description>
+      <arg name="initial_workspace" type="string" summary="intial workspace for restoring or '-1' for visible on all workspaces"/>
+    </request>
   </interface>
 
   <interface name="zaura_output" version="6">
diff --git a/chromium.org/unstable/color-space/README b/chromium.org/unstable/color-space/README
new file mode 100644
index 0000000..eca7471
--- /dev/null
+++ b/chromium.org/unstable/color-space/README
@@ -0,0 +1,4 @@
+Color space protocol
+
+Maintainers:
+Jeffrey Kardatzke <jkardatzke@chromium.org>
diff --git a/chromium.org/unstable/color-space/color-space-unstable-v1.xml b/chromium.org/unstable/color-space/color-space-unstable-v1.xml
new file mode 100644
index 0000000..4663556
--- /dev/null
+++ b/chromium.org/unstable/color-space/color-space-unstable-v1.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="color_space_unstable_v1">
+
+  <copyright>
+    Copyright 2019 The Chromium Authors.
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice (including the next
+    paragraph) shall be included in all copies or substantial portions of the
+    Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+  </copyright>
+
+  <interface name="zcr_color_space_v1" version="1">
+    <description summary="Protocol for setting the color space of a wl_surface">
+      This protocol specifies a an interface used to set the color space
+      information (primaries, transfer function, range, matrix) for a wl_surface
+      to enable correct color output for non-sRGB content.
+
+      Warning! The protocol described in this file is experimental and backward
+      incompatible changes may be made. Backward compatible changes may be added
+      together with the corresponding interface version bump. Backward
+      incompatible changes are done by bumping the version number in the
+      protocol and interface names and resetting the interface version. Once the
+      protocol is to be declared stable, the 'z' prefix and the version number
+      in the protocol and interface names are removed and the interface version
+      number is reset.
+    </description>
+
+    <request name="destroy" type="destructor">
+      <description summary="unbinds the color space interface">
+        Informs the server this interface will no longer be used. This does not
+        have any effect on wl_surface objects that have been modified through
+        this interface.
+      </description>
+    </request>
+
+    <enum name="error">
+      <entry name="invalid_primaries" value="0"
+             summary="the specified primaries are invalid"/>
+      <entry name="invalid_transfer_function" value="1"
+             summary="the specified transfer function is invalid"/>
+      <entry name="invalid_range" value="2"
+             summary="the specified range is invalid"/>
+      <entry name="invalid_matrix" value="3"
+             summary="the specified matrix is invalid"/>
+    </enum>
+
+    <enum name="primaries">
+      <entry name="bt709" value="0"
+             summary="BT.709, sRGB (HDTV)"/>
+      <entry name="bt470m" value="1"
+             summary="NTSC (Original, replaced by smpte170m)"/>
+      <entry name="bt470bg" value="2"
+             summary="PAL/SECAM (Original, replaced by smpte170m)"/>
+      <entry name="smpte170m" value="3"
+             summary="NTSC/PAL (SDTV)"/>
+      <entry name="smpte240m" value="4"
+             summary="HDTV (Original, replaced by bt709)"/>
+      <entry name="film" value="5"
+             summary="Generic film (color filters using Illuminant C)"/>
+      <entry name="bt2020" value="6"
+             summary="UHDTV"/>
+      <entry name="smptest428_1" value="7"
+             summary="D-Cinema"/>
+      <entry name="smptest431_2" value="8"
+             summary="DCI-P3"/>
+      <entry name="smptest432_1" value="9"
+             summary="Display P3"/>
+      <entry name="xyz_d50" value="10"
+             summary="XYZ color space with D50 white point"/>
+      <entry name="adobe_rgb" value="11"
+             summary="Adobe RGB"/>
+    </enum>
+
+    <enum name="transfer_function">
+      <entry name="bt709" value="0"
+             summary="BT.709, sRGB (HDTV)"/>
+      <entry name="gamma18" value="1"
+             summary="Gamma curve 1.8"/>
+      <entry name="gamma22" value="2"
+             summary="Gamma curve 2.2"/>
+      <entry name="gamma24" value="3"
+             summary="Gamma curve 2.4"/>
+      <entry name="gamma28" value="4"
+             summary="Gamma curve 2.8"/>
+      <entry name="smpte170m" value="5"
+             summary="NTSC/PAL (SDTV)"/>
+      <entry name="smpte240m" value="6"
+             summary="HDTV (Original, replaced by bt709)"/>
+      <entry name="linear" value="7"
+             summary="Linear transfer function"/>
+      <entry name="log" value="8"
+             summary="Logarithmic transfer function"/>
+      <entry name="log_sqrt" value="9"
+             summary="Logarithmic square root transfer function"/>
+      <entry name="iec61966_2_4" value="10"
+             summary="IEC 61966-2-4 transfer function"/>
+      <entry name="bt1361_ecg" value="11"
+             summary="ITU-BT.1361 ECG"/>
+      <entry name="iec61966_2_1" value="12"
+             summary="sRGB, IEC 61966-2-1 transfer function"/>
+      <entry name="bt2020_10" value="13"
+             summary="BT.2020 10 bit transfer function"/>
+      <entry name="bt2020_12" value="14"
+             summary="BT.2020 12 bit transfer function"/>
+      <entry name="smptest2084" value="15"
+             summary="SMPTE ST 2084 (PQ)"/>
+      <entry name="smptest428_1" value="16"
+             summary="D-Cinema transfer function"/>
+      <entry name="arib_std_b67" value="17"
+             summary="HLG transfer function"/>
+      <entry name="smptest2084_non_hdr" value="18"
+             summary="This is an ad-hoc transfer function that decodes SMPTE
+                      2084 content into a [0, 1] range more or less suitable for
+                      viewing on a non-hdr display"/>
+      <entry name="iec61966_2_1_hdr" value="19"
+             summary="The same as IEC61966_2_1 on the interval [0, 1], with the
+                      nonlinear segment continuing beyond 1 and point symmetry
+                      defining values below 0"/>
+      <entry name="linear_hdr" value="20"
+             summary="The same as linear but is defined for all real values"/>
+    </enum>
+
+    <enum name="matrix">
+      <entry name="rgb" value="0"
+             summary="Standard RGB components"/>
+      <entry name="bt709" value="1"
+             summary="BT.709 (HDTV) YUV"/>
+      <entry name="fcc" value="2"
+             summary="NTSC (Original, replaced by smpte170m) YUV"/>
+      <entry name="bt470bg" value="3"
+             summary="PAL/SECAM (Original, replaced by smpte170m) YUV"/>
+      <entry name="smpte170m" value="4"
+             summary="NTSC/PAL (SDTV) YUV"/>
+      <entry name="smpte240m" value="5"
+             summary="HDTV (Original, replaced by bt709) YUV"/>
+      <entry name="ycocg" value="6"
+             summary="YCoCg components"/>
+      <entry name="bt2020_ncl" value="7"
+             summary="BT.2020 YUV"/>
+      <entry name="bt2020_cl" value="8"
+             summary="BT.2020 RYB"/>
+      <entry name="ydzdx" value="9"
+             summary="YDZDX components"/>
+      <entry name="gbr" value="10"
+             summary="GBR component layout"/>
+    </enum>
+
+    <enum name="range">
+      <entry name="limited" value="0"
+             summary="Limited (16-235 for 8-bit)"/>
+      <entry name="full" value="1"
+             summary="Full (0-255 for 8-bit)"/>
+    </enum>
+
+    <request name="set_color_space">
+      <description summary="sets the color space for a surface">
+        This sets the full set of color space properties for a surface to enable
+        proper color conversion for compositing.  If any of these are invalid
+        then an error is raised.  This is double-buffered and takes effect on
+        the next commit of the surface.  It's the responsibility of the
+        compositor to do the necessary color conversions.
+      </description>
+      <arg name="surface" type="object" interface="wl_surface"
+           summary="surface"/>
+      <arg name="primaries" type="uint"
+           summary="primaries and white point"/>
+      <arg name="transfer_function" type="uint"
+           summary="electro-optical transfer function"/>
+      <arg name="matrix" type="uint"
+           summary="matrix for conversion to rgb" />
+      <arg name="range" type="uint"
+           summary="value range used by the pixels"/>
+    </request>
+
+  </interface>
+
+</protocol>
diff --git a/chromium.org/unstable/extended-drag/README b/chromium.org/unstable/extended-drag/README
new file mode 100644
index 0000000..a194b3a
--- /dev/null
+++ b/chromium.org/unstable/extended-drag/README
@@ -0,0 +1,4 @@
+Extended Drag protocol
+
+Maintainers:
+Nick Yamane <nickdiego@igalia.com>
diff --git a/chromium.org/unstable/extended-drag/extended-drag-unstable-v1.xml b/chromium.org/unstable/extended-drag/extended-drag-unstable-v1.xml
new file mode 100644
index 0000000..cb4c1dc
--- /dev/null
+++ b/chromium.org/unstable/extended-drag/extended-drag-unstable-v1.xml
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="extended_drag_unstable_v1">
+
+  <copyright>
+    Copyright 2020 The Chromium Authors.
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice (including the next
+    paragraph) shall be included in all copies or substantial portions of the
+    Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+  </copyright>
+
+  <interface name="zcr_extended_drag_v1" version="1">
+    <description summary="extends DnD protocol with some advanced features">
+      The zcr_extended_drag_v1 interface extends the Wayland drag-and-drop with
+      features unsurpported by the core protocol. Such as, making toplevel shell
+      surfaces "draggable", as well as making them "snappable" into and out of
+      other surfaces as they are dragged around.
+
+      A common use case for this is a Chromium-like tab/window dragging UX,
+      where the user is able to drag a tab (or any other kind of UI piece) out
+      of its original window, into a new surface anchored to the pointer cursor,
+      similar to a regular drag icon but with enhanced and more configurable
+      capabilities.
+
+      Warning! The protocol described in this file is experimental and
+      backward incompatible changes may be made. Backward compatible changes
+      may be added together with the corresponding uinterface version bump.
+      Backward incompatible changes are done by bumping the version number in
+      the protocol and uinterface names and resetting the interface version.
+      Once the protocol is to be declared stable, the 'z' prefix and the
+      version number in the protocol and interface names are removed and the
+      interface version number is reset.
+    </description>
+
+    <enum name="options" bitfield="true">
+      <description summary="extended drag configuration flags.">
+        Bitmask flags that can be used to configure how the drag session will
+        operate. By default no additional option is set.
+
+        Source client might set allow_swallow option to tell the compositor that
+        the dragged UI item can be snapped out and into other surfaces
+        (swallowed/unswallowed), eg: Chromium's tab dragging UX.
+
+        allow_drop_no_target controls how source and destination clients are
+        notified when the drop happens, if it is set the DnD operation is
+        considered successfully finished regardless the drop location (eg:
+        outside any shell surface or there is no target that can accept it).
+
+        lock_cursor might be used to keep the cursor shape locked during the
+        extended drag session, regardless current the mime types, dnd action
+        negotiation status.
+      </description>
+      <entry name="default" value="0"/>
+      <entry name="allow_swallow" value="1"/>
+      <entry name="allow_drop_no_target" value="2"/>
+      <entry name="lock_cursor" value="4"/>
+    </enum>
+
+    <request name="get_extended_drag_source">
+      <description summary="get an extended_drag_source for a wl_data_source">
+        Create an extended drag source object. See zcr_extended_drag_source_v1
+        interface for details.
+      </description>
+      <arg name="id" type="new_id" interface="zcr_extended_drag_source_v1"/>
+      <arg name="data_source" type="object" interface="wl_data_source"/>
+      <arg name="options" type="uint" enum="zcr_extended_drag_v1.options"/>
+    </request>
+
+    <request name="get_extended_drag_offer">
+      <description summary="get an extended_drag_offer for a wl_data_offer">
+        Create an extended drag offer object. See zcr_extended_drag_offer_v1
+        interface for details.
+      </description>
+      <arg name="id" type="new_id" interface="zcr_extended_drag_offer_v1"/>
+      <arg name="data_offer" type="object" interface="wl_data_offer"/>
+    </request>
+  </interface>
+
+  <interface name="zcr_extended_drag_source_v1" version="1">
+    <description summary="extensions for the standard drag data source">
+      The zcr_extended_drag_source_v1 interface extends the wl_data_source with
+      features unsurpported by the standard drag-and-drop protocol.
+    </description>
+
+    <request name="destroy" type="destructor">
+      <description summary="destroy the extended drag source object"/>
+    </request>
+
+    <request name="drag">
+      <description summary="Update the dragged surface">
+        Update the dragged surface. If null is passed, the dragged surface gets
+        unset, making it to not being moved anymore under the pointer cursor.
+        Otherwise, it will be set as the dragged surface, making it to be visually
+        anchored to the pointer cursor. surface is expected to have a toplevel
+        shell surface role assigned, which allows it to be dropped smoothly into
+        an arbitrary location of the shell, so turning it instantly into a
+        regular toplevel window, which not possible with the standard DND
+        protocol.
+
+        x and y offsets are described in surface-local coordinates, with no
+        scale applied, that determine how the surface must be positioned
+        relative to the cursor location, similar to drag icon offsets in
+        standard DND operations.
+      </description>
+      <arg name="surface" type="object" interface="wl_surface" allow-null="true" summary="drag icon surface"/>
+      <arg name="x_offset" type="int" summary="dragged surface x offset"/>
+      <arg name="y_offset" type="int" summary="dragged surface y offset"/>
+    </request>
+
+    <event name="swallow">
+      <description summary="the receiving client requested to swallow the drag.">
+        The receiving client has requested to swallow the dragged surface.
+        Which, in a drag operation involving 2 or more clients, can be used to
+        negotiate when the dragged surface is incorporated (aka: merged) into
+        its UI. See zcr_extended_drag_offer_v1::swallow request for more
+        details.
+      </description>
+      <arg name="mime_type" type="string" summary="mime type to be swallowed by the client"/>
+    </event>
+
+    <event name="unswallow">
+      <description summary="the receiving client requested to unswallow the drag.">
+        The receiving client has requested to unswallow the dragged surface.
+        Which, in a drag operation involving more than a single client, can be
+        used to negotiate when the dragged surface is snapped out of the
+        receiving client's UI.
+
+        X and Y offsets are expressed in surface-local coordinates, with no
+        scale applied, and describe how the surface must be positioned relative
+        to the cursor location, similar to drag icon offsets in standard DND
+        operations. Note that these coordinates are local to the unswallowed
+        surface, created and owned by the source client, so it can be used
+        rightaway to call drag(surface, x_offset, y_offset) in response to
+        receiving client's request.
+      </description>
+      <arg name="mime_type" type="string" allow-null="true" summary="mime type accepted by the client"/>
+      <arg name="x_offset" type="int" summary="dragged surface x offset"/>
+      <arg name="y_offset" type="int" summary="dragged surface y offset"/>
+    </event>
+  </interface>
+
+  <interface name="zcr_extended_drag_offer_v1" version="1">
+    <description summary="extensions for the standard drag data offer.">
+      The zcr_extended_drag_offer_v1 interface extends the wl_data_offer with
+      features unsurpported by the standard drag-and-drop protocol.
+    </description>
+
+    <request name="destroy" type="destructor">
+      <description summary="destroy the extended drag offer object"/>
+    </request>
+
+    <request name="swallow">
+      <description summary="Requests the drag source to swallow the drag.">
+        Requests the drag source to swallow the dragged surface. This means the
+        receiving client accepts and will incorporate the dragged surface into
+        its UI. For example, a browser tab is dragged and snapped to an icon\
+        grid.
+      </description>
+      <arg name="serial" type="uint" summary="serial number of the swallow request"/>
+      <arg name="mime_type" type="string" allow-null="true" summary="mime type being swallowed"/>
+    </request>
+
+    <request name="unswallow">
+      <description summary="Requests the drag source to unswallow the drag.">
+        Requests the drag source to unswallow the dragged surface. Which means
+        that the receiving client wants to undo a previously swallowed dragged
+        surface, i.e: detach it from its UI.
+
+        X and Y offsets are expressed in surface-local coordinates, with no
+        scale applied and describe how the surface must be positioned relative
+        to the cursor location, similar to drag icon offsets in standard DND
+        operations. Note that these coordinates are local to the currently
+        focused surface, owned by the receiving client, which may differ from
+        corresponding offsets at source side (which owns the unswallowed
+        surface), for instance, when the receiving surface is on a wl_output
+        with different scale value. Compositor handles such conversion before
+        delivering the zcr_extended_drag_source_v1::swallow event counterpart
+        to the source client.
+      </description>
+      <arg name="serial" type="uint" summary="serial number of the unswallow request"/>
+      <arg name="mime_type" type="string" summary="mime type being unswallowed"/>
+      <arg name="x_offset" type="int" summary="dragged surface x offset"/>
+      <arg name="y_offset" type="int" summary="dragged surface y offset"/>
+    </request>
+  </interface>
+</protocol>
diff --git a/chromium.org/unstable/keyboard/keyboard-extension-unstable-v1.xml b/chromium.org/unstable/keyboard/keyboard-extension-unstable-v1.xml
index 9527678..a42ee7d 100644
--- a/chromium.org/unstable/keyboard/keyboard-extension-unstable-v1.xml
+++ b/chromium.org/unstable/keyboard/keyboard-extension-unstable-v1.xml
@@ -24,7 +24,7 @@
     DEALINGS IN THE SOFTWARE.
   </copyright>
 
-  <interface name="zcr_keyboard_extension_v1" version="1">
+  <interface name="zcr_keyboard_extension_v1" version="2">
     <description summary="extends wl_keyboard with ack_key events">
       Allows a wl_keyboard to send ack_key requests for each key event of
       the keyboard to the server.
@@ -56,7 +56,7 @@
     </request>
   </interface>
 
-  <interface name="zcr_extended_keyboard_v1" version="1">
+  <interface name="zcr_extended_keyboard_v1" version="2">
     <description summary="extension of wl_keyboard protocol">
       The zcr_extended_keyboard_v1 interface extends the wl_keyboard interface
       with requests to notify whether sent key events are handled or not by
@@ -79,5 +79,22 @@
       <arg name="serial" type="uint"/>
       <arg name="handled" type="uint" enum="handled_state"/>
     </request>
+
+    <event name="peek_key" since="2">
+      <description summary="peek a key event">
+        A key event which will be soon delivered to the application via
+        wl_keyboard::key. If text_input consumes the key event,
+        wl_keyboard::key is not delivered, but this event is still delivered
+        to the application.
+        All arguments are the exactly same one of the following wl_keyboard::key,
+        including serial.
+      </description>
+      <arg name="serial" type="uint" summary="serial number of the key event"/>
+      <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
+      <arg name="key" type="uint" summary="key that produced the event"/>
+      <!-- Dropped enum="key_state" from state for the workaround of crbug.com/1194855. -->
+      <arg name="state" type="uint" summary="physical state of the key"/>
+    </event>
+
   </interface>
 </protocol>
diff --git a/chromium.org/unstable/remote-shell/remote-shell-unstable-v1.xml b/chromium.org/unstable/remote-shell/remote-shell-unstable-v1.xml
index 58478d4..cfc9c85 100644
--- a/chromium.org/unstable/remote-shell/remote-shell-unstable-v1.xml
+++ b/chromium.org/unstable/remote-shell/remote-shell-unstable-v1.xml
@@ -946,7 +946,7 @@
       <entry name="zoom" value="32"
 	     summary="a mask to turn the maximize_restore button to zoom button"/>
       <entry name="center" value="64"
-         summary="a customizable, center-aligned button"/>
+	     summary="a customizable, center-aligned button"/>
     </enum>
 
     <request name="set_frame_buttons" since="13">
diff --git a/chromium.org/unstable/remote-shell/remote-shell-unstable-v2.xml b/chromium.org/unstable/remote-shell/remote-shell-unstable-v2.xml
new file mode 100644
index 0000000..622ebea
--- /dev/null
+++ b/chromium.org/unstable/remote-shell/remote-shell-unstable-v2.xml
@@ -0,0 +1,978 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="remote_shell_unstable_v2">
+
+  <copyright>
+    Copyright 2021 The Chromium Authors.
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice (including the next
+    paragraph) shall be included in all copies or substantial portions of the
+    Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+  </copyright>
+
+  <description summary="Create remote desktop-style surfaces">
+    remote_shell allows clients to turn a wl_surface into a "real window"
+    which can be stacked and activated by the user.
+
+    Warning! The protocol described in this file is experimental and backward
+    incompatible changes may be made. Backward compatible changes may be added
+    together with the corresponding interface version bump. Backward
+    incompatible changes are done by bumping the version number in the protocol
+    and interface names and resetting the interface version. Once the protocol
+    is to be declared stable, the 'z' prefix and the version number in the
+    protocol and interface names are removed and the interface version number is
+    reset.
+  </description>
+
+  <interface name="zcr_remote_shell_v2" version="1">
+    <description summary="remote_shell">
+      The global interface that allows clients to turn a wl_surface into a
+      "real window" which is remotely managed but can be stacked, activated
+      and made fullscreen by the user.
+    </description>
+
+    <enum name="error">
+      <entry name="role" value="0" summary="given wl_surface has another role"/>
+      <entry name="invalid_notification_key" value="1" summary="invalid notification key"/>
+    </enum>
+
+    <request name="destroy" type="destructor">
+      <description summary="destroy remote_shell">
+	Destroy this remote_shell object.
+
+	Destroying a bound remote_shell object while there are surfaces
+	still alive created by this remote_shell object instance is illegal
+	and will result in a protocol error.
+      </description>
+    </request>
+
+    <enum name="container">
+      <description summary="containers for remote surfaces">
+	Determine how a remote surface should be stacked relative to other
+	shell surfaces.
+      </description>
+      <entry name="default" value="1" summary="default container"/>
+      <entry name="overlay" value="2" summary="system modal container"/>
+    </enum>
+
+    <request name="get_remote_surface">
+      <description summary="create a remote shell surface from a surface">
+	This creates an remote_surface for the given surface and gives it the
+	remote_surface role. A wl_surface can only be given a remote_surface
+	role once. If get_remote_surface is called with a wl_surface that
+	already has an active remote_surface associated with it, or if it had
+	any other role, an error is raised.
+
+	See the documentation of remote_surface for more details about what an
+	remote_surface is and how it is used.
+      </description>
+      <arg name="id" type="new_id" interface="zcr_remote_surface_v2"/>
+      <arg name="surface" type="object" interface="wl_surface"/>
+      <arg name="container" type="uint" enum="container"/>
+    </request>
+
+    <request name="get_notification_surface">
+      <description summary="create a notification surface from a surface">
+	Creates a notification_surface for the given surface, gives it the
+	notification_surface role and associated it with a notification id.
+      </description>
+      <arg name="id" type="new_id" interface="zcr_notification_surface_v2"/>
+      <arg name="surface" type="object" interface="wl_surface"/>
+      <arg name="notification_key" type="string"/>
+    </request>
+
+    <event name="default_device_scale_factor" since="1">
+      <description summary="initialize scale configuration">
+	Sends the default device scale factor.
+      </description>
+      <arg name="scale" type="int" summary="DP to pixels ratio, in 8.24 fixed point format"/>
+    </event>
+
+    <request name="get_input_method_surface" since="1">
+      <description summary="Create a input method surface from a surface">
+	Creates an input_method_surface for the given surface, gives it
+	the input_method_surface role.
+      </description>
+      <arg name="id" type="new_id" interface="zcr_input_method_surface_v2"/>
+      <arg name="surface" type="object" interface="wl_surface"/>
+    </request>
+
+    <request name="get_toast_surface" since="1">
+      <description summary="Create a toast surface from a surface">
+	Creates an toast_surface for the given surface, gives it
+	the toast_surface role.
+      </description>
+      <arg name="id" type="new_id" interface="zcr_toast_surface_v2"/>
+      <arg name="surface" type="object" interface="wl_surface"/>
+    </request>
+
+    <enum name="layout_mode">
+      <description summary="the layout mode">
+	Determine how a client should layout surfaces.
+      </description>
+      <entry name="windowed" value="1" summary="multiple windows"/>
+      <entry name="tablet" value="2" summary="restricted mode for tablet"/>
+    </enum>
+
+    <event name="layout_mode" since="1">
+      <description summary="sends the layout_mode">
+	Sends the layout_mode used by the server.
+      </description>
+      <arg name="layout_mode" type="uint" enum="layout_mode"/>
+    </event>
+
+    <request name="get_remote_output" since="1">
+      <description summary="extend output interface for remote shell">
+	Instantiate an interface extension for the given wl_output to
+	provide remote shell functionality.
+      </description>
+      <arg name="id" type="new_id" interface="zcr_remote_output_v2" summary="the new remote output interface id"/>
+      <arg name="output" type="object" interface="wl_output"/>
+    </request>
+
+    <enum name="desktop_focus_state">
+      <description summary="desktop foucs state">
+	Desktop client window focus state.
+      </description>
+      <entry name="no_focus" value="1" summary="no window get focused"/>
+      <entry name="client_focused" value="2" summary="client window get focused"/>
+      <entry name="other_client_focused" value="3" summary="other client window get focused"/>
+    </enum>
+
+    <event name="desktop_focus_state_changed" since="1">
+      <description summary="desktop window focus state change">
+	Notifies client that the window focus state change.
+      </description>
+      <arg name="focus_state" type="uint" enum="desktop_focus_state"/>
+    </event>
+
+  </interface>
+
+  <interface name="zcr_remote_surface_v2" version="1">
+    <description summary="A desktop window">
+      An interface that may be implemented by a wl_surface, for
+      implementations that provide a desktop-style user interface
+      and allows for remotely managed windows.
+
+      It provides requests to treat surfaces like windows, allowing to set
+      properties like app id and geometry.
+
+      The client must call wl_surface.commit on the corresponding wl_surface
+      for the remote_surface state to take effect.
+
+      For a surface to be mapped by the compositor the client must have
+      committed both an remote_surface state and a buffer.
+    </description>
+
+    <enum name="systemui_visibility_state">
+      <description summary="systemui visibility behavior">
+	Determine the visibility behavior of the system UI.
+      </description>
+      <entry name="visible" value="1" summary="system ui is visible"/>
+      <entry name="autohide_non_sticky" value="2" summary="system ui autohides and is not sticky"/>
+      <entry name="autohide_sticky" value="3" summary="system ui autohides and is sticky"/>
+    </enum>
+
+    <request name="destroy" type="destructor">
+      <description summary="Destroy the remote_surface">
+	Unmap and destroy the window. The window will be effectively
+	hidden from the user's point of view, and all state will be lost.
+      </description>
+    </request>
+
+    <request name="set_app_id">
+      <description summary="set application ID">
+	Set an application identifier for the surface.
+      </description>
+      <arg name="app_id" type="string"/>
+    </request>
+
+    <request name="set_title">
+      <description summary="set surface title">
+	Set a short title for the surface.
+
+	This string may be used to identify the surface in a task bar,
+	window list, or other user interface elements provided by the
+	compositor.
+
+	The string must be encoded in UTF-8.
+      </description>
+      <arg name="title" type="string"/>
+    </request>
+
+    <request name="set_top_inset">
+      <description summary="set top inset for surface">
+	Set distance from the top of the surface to the contents.
+
+	This distance typically represents the size of the window caption.
+      </description>
+      <arg name="height" type="int"/>
+    </request>
+
+    <request name="maximize">
+      <description summary="maximize">
+	Request that surface is maximized. The window geometry will be updated
+	to whatever the compositor finds appropriate for a maximized window.
+
+	This is only a request that the window should be maximized. The
+	compositor may choose to ignore this request. The client should
+	listen to state_type_changed events to determine if the window was
+	maximized or not.
+      </description>
+    </request>
+
+    <request name="minimize">
+      <description summary="minimize">
+	Request that surface is minimized.
+
+	This is only a request that the window should be minimized. The
+	compositor may choose to ignore this request. The client should
+	listen to state_type_changed events to determine if the window was
+	minimized or not.
+      </description>
+    </request>
+
+    <request name="restore">
+      <description summary="restore">
+	Request that surface is restored. This restores the window geometry
+	to what it was before the window was minimized, maximized or made
+	fullscreen.
+
+	This is only a request that the window should be restored. The
+	compositor may choose to ignore this request. The client should
+	listen to state_type_changed events to determine if the window was restored
+  or not.
+      </description>
+    </request>
+
+    <request name="fullscreen">
+      <description summary="fullscreen">
+	Request that surface is made fullscreen.
+
+	This is only a request that the window should be made fullscreen.
+	The compositor may choose to ignore this request. The client should
+	listen to set_fullscreen events to determine if the window was
+	made fullscreen or not.
+      </description>
+    </request>
+
+    <request name="pin">
+      <description summary="pin">
+	Request that surface is pinned.
+
+	This is only a request that the window should be pinned.
+	The compositor may choose to ignore this request. The client should
+	listen to state_type_changed events to determine if the window was
+	pinned or not. If trusted flag is non-zero, the app can prevent users
+	from exiting the pinned mode.
+      </description>
+      <arg name="trusted" type="int"/>
+    </request>
+
+    <request name="unpin">
+      <description summary="unpin">
+	Request that surface is unpinned.
+
+	This is only a request that the window should be unpinned.
+	The compositor may choose to ignore this request. The client should
+	listen to state_type_changed events to determine if the window was
+	unpinned or not.
+      </description>
+    </request>
+
+    <request name="set_system_modal">
+      <description summary="suggests a re-layout of remote shell input area">
+	Suggests a surface should become system modal.
+      </description>
+    </request>
+
+    <request name="unset_system_modal">
+      <description summary="suggests a re-layout of remote shell input area">
+	Suggests a surface should become non system modal.
+      </description>
+    </request>
+
+    <event name="close">
+      <description summary="surface wants to be closed">
+	The close event is sent by the compositor when the user
+	wants the surface to be closed. This should be equivalent to
+	the user clicking the close button in client-side decorations,
+	if your application has any...
+
+	This is only a request that the user intends to close your
+	window. The client may choose to ignore this request, or show
+	a dialog to ask the user to save their data...
+      </description>
+    </event>
+
+    <enum name="state_type">
+      <description summary="state types for remote surfaces">
+	Defines common show states for shell surfaces.
+      </description>
+      <entry name="normal" value="1" summary="normal window state"/>
+      <entry name="minimized" value="2" summary="minimized window state"/>
+      <entry name="maximized" value="3" summary="maximized window state"/>
+      <entry name="fullscreen" value="4" summary="fullscreen window state"/>
+      <entry name="pinned" value="5" summary="pinned window state"/>
+      <entry name="trusted_pinned" value="6" summary="trusted pinned window state"/>
+      <entry name="moving" value="7" summary="moving window state"/>
+      <entry name="resizing" value="8" summary="resizing window state"/>
+      <entry name="left_snapped" value="9" summary="left snapped window state"/>
+      <entry name="right_snapped" value="10" summary="right snapped window state"/>
+      <entry name="pip" value="11" summary="pip window state"/>
+    </enum>
+
+    <event name="state_type_changed">
+      <description summary="surface state type changed">
+	The state_type_changed event is sent by the compositor when
+	the surface state changed.
+
+	This is an event to notify that the window state changed in compositor.
+	The state change may be triggered by a client's request, or some user
+	action directly handled by the compositor. The client may choose to
+	ignore this event.
+      </description>
+      <arg name="state_type" type="uint" enum="state_type"/>
+    </event>
+
+    <request name="set_rectangular_surface_shadow" since="1">
+      <description summary="set a rectangular shadow">
+	Request that surface needs a rectangular shadow.
+
+	This is only a request that the surface should have a rectangular
+	shadow. The compositor may choose to ignore this request.
+
+	The arguments are given in the remote surface coordinate space and
+	specifies inner bounds of the shadow. Specifying zero width and height
+	will disable the shadow.
+      </description>
+      <arg name="x" type="int"/>
+      <arg name="y" type="int"/>
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+    </request>
+
+    <request name="set_systemui_visibility" since="1">
+      <description summary="requests the system ui visibility behavior for the surface">
+	Requests how the surface will change the visibility of the system UI when it is made active.
+      </description>
+      <arg name="visibility" type="uint" enum="systemui_visibility_state"/>
+    </request>
+
+    <request name="set_always_on_top" since="1">
+      <description summary="set always on top">
+	Request that surface is made to be always on top.
+
+	This is only a request that the window should be always on top.
+	The compositor may choose to ignore this request.
+
+      </description>
+    </request>
+
+    <request name="unset_always_on_top" since="1">
+      <description summary="unset always on top">
+	Request that surface is made to be not always on top.
+
+	This is only a request that the window should be not always on top.
+	The compositor may choose to ignore this request.
+      </description>
+    </request>
+
+    <enum name="orientation">
+      <description summary="window orientation">
+	The orientation of the window.
+      </description>
+      <entry name="portrait" value="1" summary="portrait"/>
+      <entry name="landscape" value="2" summary="landscape"/>
+    </enum>
+
+    <request name="set_orientation" since="1">
+      <description summary="set orientation">
+	Set an orientation for the surface.
+      </description>
+      <arg name="orientation" type="int" enum="orientation"/>
+    </request>
+
+    <event name="window_geometry_changed" since="1">
+      <description summary="announce window geometry commit">
+	Notify the client of committed window geometry.
+
+	The compositor sends this event when it commits window geometry. The
+	client may use this information to convert coordinates of input events
+	using the latest committed geometry.
+      </description>
+      <arg name="x" type="int"/>
+      <arg name="y" type="int"/>
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+    </event>
+
+    <enum name="bounds_change_reason">
+      <description summary="bounds_change_reason">
+	Specifies the cause of the window bounds change event.
+      </description>
+      <entry name="drag_move" value="1" summary="the window is being moved by drag operation"/>
+      <entry name="drag_resize" value="2" summary="the window is being resized by drag operation."/>
+      <entry name="snap_to_left" value="3" summary="the window is resized to left snapped state"/>
+      <entry name="snap_to_right" value="4" summary="the window is resized to right snapped state"/>
+      <entry name="move" value="5" summary="the window bounds is moved due to other WM operations"/>
+      <entry name="resize" value="6" summary="the window bounds is reiszed due to other WM operations"/>
+      <entry name="pip" value="7" summary="the window bounds is resized or moved for PIP"/>
+    </enum>
+
+    <event name="bounds_changed" since="1">
+      <description summary="The compositor requested to change the bounds">
+	The compositor requested to change its
+	bounds. "bounds_change_reason" specifies the cause of the
+	bounds change. The client may apply the different move/resize
+	strategy depending on the reason.
+
+	"display_id_hi", "display_id_lo" specifies in which workspace
+	the surface should live in.
+
+	The client responds with set_bounds_in_output request, with the
+	bounds it is resized to (this may be different from the bounds
+	requested).
+
+	The client may ignore move request depending on the state,
+	e.g, if it becomes resizable or other constrants.
+      </description>
+      <arg name="display_id_hi" type="uint"/>
+      <arg name="display_id_lo" type="uint"/>
+      <arg name="x" type="int"/>
+      <arg name="y" type="int"/>
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+      <arg name="bounds_change_reason" type="uint" enum="bounds_change_reason"/>
+    </event>
+
+    <request name="start_move" since="1">
+      <description summary="start an interactive move">
+	Request an interactive, user-driven move of the surface. "x"
+	and "y" specifies the starting point of the pointer device
+	that initiated the move.
+
+	The compositor responds to this request with a drag_started
+	event with "none" direction.  Please see drag_started event
+	for more details.
+
+	The compositor may ignore move requests depending on the state of the
+	surface, e.g. fullscreen or maximized.
+      </description>
+      <arg name="x" type="int"/>
+      <arg name="y" type="int"/>
+    </request>
+
+    <enum name="resize_direction">
+      <description summary="resize direction">
+	The resize direction for drag operation
+      </description>
+      <entry name="none" value="0" summary="move only, no resize"/>
+      <entry name="left" value="1" summary="resize to the left"/>
+      <entry name="topleft" value="2" summary="resize to the top left"/>
+      <entry name="top" value="3" summary="resize to the top"/>
+      <entry name="topright" value="4" summary="resize to the top right"/>
+      <entry name="right" value="5" summary="resize to the right"/>
+      <entry name="bottomright" value="6" summary="resize to the buttom right"/>
+      <entry name="bottom" value="7" summary="resize to the bottom"/>
+      <entry name="bottomleft" value="8" summary="resize to the bottom left"/>
+    </enum>
+
+    <event name="drag_started" since="1">
+      <description summary="Notifies that a drag to move/resize started.">
+	Notifies a client that the compositor started drag
+	operation. "direction" specifies which direction it is being
+	resized. "none" direction means just move but not resize.
+
+	This will be followed by series of the "bounds_changed" event
+	with "drag_resize" or "drag_move" reasons to update the window
+	bounds druing the drag operation.
+      </description>
+      <arg name="direction" type="uint" enum="resize_direction"/>
+    </event>
+
+    <event name="drag_finished" since="1">
+      <description summary="Notifies that a drag operation has finished.">
+	Called when the drag operation is finished.  "x" and "y"
+	specifies the position of the pointer device used to drag.
+	"canceled" is true if the drag operation is aborted during
+	drag (e.g. by capture change or user action.)
+      </description>
+      <arg name="x" type="int"/>
+      <arg name="y" type="int"/>
+      <arg name="canceled" type="int" summary="true if the operation was canceled"/>
+    </event>
+
+    <request name="set_can_maximize" since="1">
+      <description summary="set can_maximize">
+	Request that surface can be in maximzied state.
+      </description>
+    </request>
+
+    <request name="unset_can_maximize" since="1">
+      <description summary="unset can_maximize">
+	Request that surface can not be in maximzied state.
+      </description>
+    </request>
+
+    <request name="set_min_size" since="1">
+      <description summary="set the minimum size">
+	Set a minimum size of the surface.
+
+	Values set in this way are double-buffered. They will get
+	applied on the next commit.
+      </description>
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+    </request>
+
+    <request name="set_max_size" since="1">
+      <description summary="set the maximum size">
+	Set a maximum size of the surface.
+
+	Values set in this way are double-buffered. They will get
+	applied on the next commit.
+
+	Setting the same size as minimum size makes the surface
+	unresizable.
+      </description>
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+    </request>
+
+    <request name="set_snapped_to_left" since="1">
+      <description summary="set the surface to left snapped">
+	Request that surface is snapped to left.
+      </description>
+    </request>
+
+    <request name="set_snapped_to_right" since="1">
+      <description summary="set the surface to right snapped">
+	Request that surface is snapped to right.
+      </description>
+    </request>
+
+    <request name="start_resize" since="1">
+      <description summary="start an interactive resize">
+	Request to start an interactive, user-driven resize of the surface.
+	"x" and "y" specifies the starting point of the pointer device
+	that initiated the reize.
+
+	The compositor responds to this request with a "drag_started"
+	event, followed by "bounds_changed" events, and ends the
+	resize operation with a "drag_finhsed" event. The compositor
+	determines the new bounds using the resize_direction and the
+	pointer event location.
+
+	The compositor may ignore resize requests depending on the state of the
+	surface, e.g. fullscreen or maximized, or no drag event is in pregress.
+      </description>
+      <arg name="resize_direction" type="uint" enum="resize_direction"/>
+      <arg name="x" type="int"/>
+      <arg name="y" type="int"/>
+    </request>
+
+    <enum name="frame_type">
+      <description summary="frame types">
+	Frame type that can be used to decorate a surface.
+      </description>
+      <entry name="none" value="0" summary="no frame"/>
+      <entry name="normal" value="1" summary="caption with shadow"/>
+      <entry name="shadow" value="2" summary="shadow only"/>
+      <entry name="autohide" value="3" summary="autohide frame with shadow"/>
+      <entry name="overlay" value="4" summary="overlay frame with shadow"/>
+    </enum>
+
+    <request name="set_frame" since="1">
+      <description summary="request a frame for surface">
+	Enables compositor side frame decoration. |type|
+	specifies the type of frame to use for the surface.
+      </description>
+      <arg name="type" type="uint" enum="frame_type"/>
+    </request>
+
+    <enum name="frame_button_type" bitfield="true">
+      <description summary="frame button types">
+	The mask that represents buttons on frame.
+      </description>
+      <entry name="back" value="1" summary="a button to naviate backwards"/>
+      <entry name="minimize" value="2" summary="a button to minimize the window"/>
+      <entry name="maximize_restore" value="4"
+	     summary="a button to maximize or restore"/>
+      <entry name="menu" value="8"
+	     summary="a button to activate application's menu"/>
+      <entry name="close" value="16" summary="a button to close the window"/>
+      <entry name="zoom" value="32"
+	     summary="a mask to turn the maximize_restore button to zoom button"/>
+      <entry name="center" value="64"
+	     summary="a customizable, center-aligned button"/>
+    </enum>
+
+    <request name="set_frame_buttons" since="1">
+      <description summary="updates buttons' state on frame">
+	Updates the frame's button state. |visible_buttons| and |enabled_buttons|
+	are the union of button mask defined in |frame_button_type| enum.
+
+	The mask present in |enabled_buttons| but not in |visible_buttons| will
+	be ignored.
+      </description>
+      <arg name="visible_buttons" type="uint"/>
+      <arg name="enabled_buttons" type="uint"/>
+    </request>
+
+    <request name="set_extra_title" since="1">
+      <description summary="set extra title string">
+	The extra informational string about the surface. This can be
+	used to show the debug information in the title bar, or log
+	messages.
+
+	This is different from "set_title" which is used to identify
+	the surface.
+
+	The string must be encoded in UTF-8.
+      </description>
+      <arg name="extra_title" type="string"/>
+    </request>
+
+    <enum name="orientation_lock">
+      <description summary="orientation lock request for remote surfaces">
+	Defines orientation request when a remote surface is in foreground.
+      </description>
+      <entry name="none" value="1" summary="no orientation lock"/>
+      <entry name="portrait" value="2" summary="primary or secondary portrait"/>
+      <entry name="landscape" value="3" summary="primary or secondary landscape"/>
+      <entry name="current" value="4" summary="keep current orientation"/>
+      <entry name="portrait_primary" value="5" summary="primary portrait"/>
+      <entry name="landscape_primary" value="6" summary="primary landscape"/>
+      <entry name="portrait_secondary" value="7" summary="secondary portrait"/>
+      <entry name="landscape_secondary" value="8" summary="secondary landscape"/>
+    </enum>
+
+    <request name="set_orientation_lock" since="1">
+      <description summary="set orientation lock for a remote surface">
+	Request a specific orientation behavior when this surface is in foreground.
+      </description>
+      <arg name="orientation_lock" type="uint" enum="orientation_lock"/>
+    </request>
+
+    <request name="pip" since="1">
+      <description summary="set pip for a remote surface">
+	Request that surface is set to Picture-in-Picture (PIP).
+      </description>
+    </request>
+
+    <request name="set_aspect_ratio" since="1">
+      <description summary="set the maximum size">
+	Set an aspect ratio of the surface.
+
+	Values set in this way are double-buffered. They will get
+	applied on the next commit.
+
+	The ratio of the values is used for the ratio of width to height of the
+  surface. The size of surface is restricted to the ratio. If any value is
+  zero, the restriction on aspect ratio is unset.
+      </description>
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+    </request>
+
+    <enum name="zoom_change">
+      <description summary="zoom level change">
+	Zoom level change.
+      </description>
+      <entry name="in" value="0" summary="zoom in"/>
+      <entry name="out" value="1" summary="zoom out"/>
+      <entry name="reset" value="2" summary="reset zoom level"/>
+    </enum>
+
+    <event name="change_zoom_level" since="1">
+      <description summary="change zoom level">
+	Request application zoom level change.
+      </description>
+      <arg name="change" type="int" enum="zoom_change"/>
+    </event>
+
+    <request name="set_accessibility_id" since="1">
+      <description summary="set accessibility ID to the surface">
+        Set accessibility window ID to the surface. A negative number removes
+        the existing accessibility ID from the surface.
+      </description>
+      <arg name="id" type="int" summary="Accessibility ID. Negative number removes existing accessibility ID from the surface."/>
+    </request>
+
+    <request name="set_pip_original_window" since="1">
+      <description summary="set the pip original window">
+        Set this surface the original window for the current PIP window.
+      </description>
+    </request>
+
+    <request name="unset_pip_original_window" since="1">
+      <description summary="unset the pip original window">
+        Unset this surface the original window for the current PIP window.
+      </description>
+    </request>
+
+    <request name="set_system_gesture_exclusion" since="1">
+      <description summary="set system gesture exclusion">
+        Set system gesture exclusion region in which system gestures e.g. back
+        gesture should not be triggered.
+      </description>
+      <arg name="region" type="object" interface="wl_region" allow-null="true"/>
+    </request>
+
+    <request name="set_resize_lock" since="1">
+      <description summary="set resize lock state">
+          Enable the resize lock and put restrictions related to resizing on
+          the shell surface.
+
+          The resize lock state is double buffered, and will be applied at the
+          time wl_surface.commit of the corresponding wl_surface is called.
+      </description>
+    </request>
+
+    <request name="unset_resize_lock" since="1">
+      <description summary="unset resize lock state">
+          Disable the resize lock and allow the shell surface to be resized
+          freely.
+
+          The resize lock state is double buffered, and will be applied at the
+          time wl_surface.commit of the corresponding wl_surface is called.
+      </description>
+    </request>
+
+    <event name="bounds_changed_in_output" since="1">
+      <description summary="The compositor requested to change the bounds">
+	The compositor requested to change its
+	bounds. "bounds_change_reason" specifies the cause of the
+	bounds change. The client may apply the different move/resize
+	strategy depending on the reason.
+
+	The "output" specifies the wayland output in which the suface should live.
+
+	The client responds with set_bounds_in_output request, with the
+	bounds it is resized to (this may be different from the bounds
+	requested).
+
+	The client may ignore move request depending on the state,
+	e.g, if it becomes resizable or other constrants.
+      </description>
+      <arg name="output" type="object" interface="wl_output"/>
+      <arg name="x" type="int"/>
+      <arg name="y" type="int"/>
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+      <arg name="bounds_change_reason" type="uint" enum="bounds_change_reason"/>
+    </event>
+
+    <request name="set_bounds_in_output" since="1">
+      <description summary="set window bounds">
+	Set the "visible bounds" of a window from the user's perspective.
+	Client-side decorations often have invisible portions like drop shadows
+	which should be ignored for the purposes of aligning, placing and
+	constraining windows.
+
+	The bounds are double buffered, and will be applied at the
+	time wl_surface.commit of the corresponding wl_surface is called.
+
+	Once the bounds are set, it is not possible to unset them, and they will
+	remain the same until set_bounds_in_output is called again, even if a new sub-
+	surface or buffer is attached.
+
+	If never set, the value is the surface content bounds. This updates
+	dynamically on every commit.
+
+	The bounds are relative to the given display. If the display is invalid,
+	they are assumed to be relative to the primary display.
+
+	The width and height must be greater than zero.
+      </description>
+      <arg name="output" type="object" interface="wl_output"/>
+      <arg name="x" type="int"/>
+      <arg name="y" type="int"/>
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+    </request>
+  </interface>
+
+  <interface name="zcr_notification_surface_v2" version="1">
+    <description summary="A notification window">
+      An interface that may be implemented by a wl_surface to host
+      notification contents.
+    </description>
+
+    <request name="destroy" type="destructor">
+      <description summary="Destroy the notification_surface">
+	Unmap and destroy the notification surface.
+      </description>
+    </request>
+
+    <request name="set_app_id" since="1">
+      <description summary="set application ID">
+	Set an application identifier for the notification surface.
+      </description>
+      <arg name="app_id" type="string"/>
+    </request>
+  </interface>
+
+  <interface name="zcr_input_method_surface_v2" version="1">
+    <description summary="An input method window">
+      An interface that may be implemented by a wl_surface to host IME contents.
+    </description>
+
+    <request name="destroy" type="destructor">
+      <description summary="Destroy the ime_surface">
+	Unmap and destroy the input mtehod surface.
+      </description>
+    </request>
+
+    <request name="set_bounds_in_output" since="1">
+      <description summary="set window bounds">
+	Set the "visible bounds" of a window from the user's perspective.
+
+	The bounds are double buffered, and will be applied at the
+	time wl_surface.commit of the corresponding wl_surface is called.
+
+	Once the bounds are set, it is not possible to unset them, and they will
+	remain the same until set_bounds_in_output is called again, even if a new sub-
+	surface or buffer is attached.
+
+	If never set, the value is the surface content bounds. This updates
+	dynamically on every commit.
+
+	The bounds are relative to the given display. If the display is invalid,
+	they are assumed to be relative to the primary display.
+
+	The width and height must be greater than zero.
+      </description>
+      <arg name="output" type="object" interface="wl_output"/>
+      <arg name="x" type="int"/>
+      <arg name="y" type="int"/>
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+    </request>
+  </interface>
+
+  <interface name="zcr_toast_surface_v2" version="1">
+    <description summary="A toast window">
+      An interface that may be implemented by a wl_surface to host
+      toast contents.
+    </description>
+
+    <request name="destroy" type="destructor">
+      <description summary="Destroy the toast_surface">
+	Unmap and destroy the toast surface.
+      </description>
+    </request>
+
+    <request name="set_bounds_in_output" since="1">
+      <description summary="set toast bounds position">
+	Set the bounds of a toast window from the user's perspective.
+
+	The bounds are double buffered, and will be applied at the
+	time wl_surface.commit of the corresponding wl_surface is called.
+
+	Once the bounds are set, it is not possible to unset them, and they will
+	remain the same until set_bounds is called again, even if a new sub-
+	surface or buffer is attached.
+
+	If never set, the compositor will determine the toast position.
+
+	The bounds are relative to the given display. If the display is invalid,
+	they are assumed to be relative to the primary display.
+      </description>
+      <arg name="output" type="object" interface="wl_output"/>
+      <arg name="x" type="int"/>
+      <arg name="y" type="int"/>
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+    </request>
+  </interface>
+
+  <interface name="zcr_remote_output_v2" version="1">
+    <description summary="remote shell interface to a wl_output">
+	An additional interface to a wl_output object, which allows the
+	client to access additional functionality for output.
+    </description>
+
+    <request name="destroy" type="destructor" since="1">
+      <description summary="destroy remote_output">
+	Destroy this remote_output object.
+      </description>
+    </request>
+
+    <event name="display_id" since="1">
+      <description summary="the identifier for the display">
+	[Deprecated] Sends the display identifier used by the server for the display.
+      </description>
+      <arg name="display_id_hi" type="uint"/>
+      <arg name="display_id_lo" type="uint"/>
+    </event>
+
+    <event name="port" since="1">
+      <description summary="the port of the display">
+	Sends the port to which the display is connected for the server.
+      </description>
+      <arg name="port" type="uint"/>
+    </event>
+
+    <event name="identification_data" since="1">
+      <description summary="the identification data for the display">
+	Sends the identification data for the display, typically in the EDID format.
+      </description>
+      <arg name="identification_data" type="array"/>
+    </event>
+
+    <event name="insets" since="1">
+      <description summary="insets for the display in pixels">
+	Sends inset information about a particular display in the display's native coordinates.
+      </description>
+      <arg name="inset_left" type="int"/>
+      <arg name="inset_top" type="int"/>
+      <arg name="inset_right" type="int"/>
+      <arg name="inset_bottom" type="int"/>
+    </event>
+
+    <event name="stable_insets" since="1">
+      <description summary="stable insets for a display in pixels">
+	Sends stable inset information about a particular display in the display's native
+	coordinates.
+      </description>
+      <arg name="stable_inset_left" type="int"/>
+      <arg name="stable_inset_top" type="int"/>
+      <arg name="stable_inset_right" type="int"/>
+      <arg name="stable_inset_bottom" type="int"/>
+    </event>
+
+    <enum name="systemui_behavior">
+      <description summary="systemui behavior">
+	Determine the behavior of the system UI.
+      </description>
+      <entry name="visible" value="1" summary="system ui is visible"/>
+      <entry name="hidden" value="2" summary="system ui is autohide or hidden"/>
+    </enum>
+
+    <event name="systemui_behavior" since="1">
+      <description summary="systemui_behavior_state for a display">
+	Sends information about whether the systemui behavior is auto hide.
+	The "systemui_behavior" value is of enum type "systemui_behavior".
+      </description>
+      <arg name="systemui_behavior" type="int" enum="systemui_behavior"/>
+    </event>
+
+ </interface>
+
+</protocol>
diff --git a/chromium.org/unstable/stylus/stylus-unstable-v2.xml b/chromium.org/unstable/stylus/stylus-unstable-v2.xml
index 9bb5022..cb3ca24 100644
--- a/chromium.org/unstable/stylus/stylus-unstable-v2.xml
+++ b/chromium.org/unstable/stylus/stylus-unstable-v2.xml
@@ -198,4 +198,3 @@
   </interface>
 
 </protocol>
-
diff --git a/chromium.org/unstable/text-input/README b/chromium.org/unstable/text-input/README
new file mode 100644
index 0000000..8f290f6
--- /dev/null
+++ b/chromium.org/unstable/text-input/README
@@ -0,0 +1,4 @@
+Extensions of text_input protocol.
+
+Maintainers:
+Hidehiko Abe <hidehiko@chromium.org>
diff --git a/chromium.org/unstable/text-input/text-input-extension-unstable-v1.xml b/chromium.org/unstable/text-input/text-input-extension-unstable-v1.xml
new file mode 100644
index 0000000..5b777b4
--- /dev/null
+++ b/chromium.org/unstable/text-input/text-input-extension-unstable-v1.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="text_input_extension_unstable_v1">
+
+  <copyright>
+    Copyright 2021 The Chromium Authors.
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice (including the next
+    paragraph) shall be included in all copies or substantial portions of the
+    Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+  </copyright>
+
+  <interface name="zcr_text_input_extension_v1" version="1">
+    <description summary="extends text_input to support richer operations">
+      Allows a text_input to sends more variation of operations to support
+      richer features, such as set_preedit_region.
+
+      Warning! The protocol described in this file is experimental and
+      backward incompatible changes may be made. Backward compatible changes
+      may be added together with the corresponding uinterface version bump.
+      Backward incompatible changes are done by bumping the version number in
+      the protocol and interface names and resetting the interface version.
+      Once the protocol is to be declared stable, the 'z' prefix and the
+      version number in the protocol and interface names are removed and the
+      interface version number is reset.
+    </description>
+
+    <enum name="error">
+      <entry name="extended_text_input_exists" value="0"
+             summary="the text_input already has an extended_text_input object associated"/>
+    </enum>
+
+    <request name="get_extended_text_input">
+      <description summary="get extended_text_input for a text_input">
+        Create extended_text_input object.
+        See zcr_extended_text_input interface for details.
+        If the given text_input object already has a extended_text_input object
+        associated, the extended_text_input_exists protocol error is raised.
+      </description>
+      <arg name="id" type="new_id" interface="zcr_extended_text_input_v1"/>
+      <arg name="text_input" type="object" interface="zwp_text_input_v1"/>
+    </request>
+  </interface>
+
+  <interface name="zcr_extended_text_input_v1" version="1">
+    <description summary="extension of text_input protocol">
+      The zcr_extended_text_input_v1 interface extends the text_input interface
+      to support more rich operations on text_input.
+    </description>
+
+    <request name="destroy" type="destructor">
+      <description summary="destroy extended_text_input object"/>
+    </request>
+
+    <event name="set_preedit_region">
+      <description summary="set preedit from the surrounding text">
+        IME requests to update text_input client to set the preedit
+        from the surrounding text.
+
+        index is the starting point of the preedit, relative to the current
+        cursor position in utf-8 byte-offset.
+        length is the length of the preedit region in utf-8 byte length.
+
+        Following the convention we have in text_input::preedit_string,
+        text_input::preedit_styling sent just before this will be applied.
+      </description>
+      <arg name="index" type="int" />
+      <arg name="length" type="uint" />
+    </event>
+
+  </interface>
+</protocol>