| Index: services/ui/public/interfaces/cursor/cursor_struct_traits.cc | 
| diff --git a/services/ui/public/interfaces/cursor/cursor_struct_traits.cc b/services/ui/public/interfaces/cursor/cursor_struct_traits.cc | 
| index 609ab837dec0b4d343539dfc38435b02b03e244e..cde0e42f714454cff2b23e1e5b20c83f0df34733 100644 | 
| --- a/services/ui/public/interfaces/cursor/cursor_struct_traits.cc | 
| +++ b/services/ui/public/interfaces/cursor/cursor_struct_traits.cc | 
| @@ -6,6 +6,7 @@ | 
|  | 
| #include "base/time/time.h" | 
| #include "mojo/common/common_custom_types_struct_traits.h" | 
| +#include "services/ui/public/interfaces/cursor/cursor.mojom.h" | 
| #include "skia/public/interfaces/bitmap_array_struct_traits.h" | 
| #include "skia/public/interfaces/bitmap_skbitmap_struct_traits.h" | 
| #include "third_party/skia/include/core/SkBitmap.h" | 
| @@ -15,6 +16,260 @@ | 
| namespace mojo { | 
|  | 
| // static | 
| +ui::mojom::CursorType | 
| +EnumTraits<ui::mojom::CursorType, ui::CursorType>::ToMojom( | 
| +    ui::CursorType input) { | 
| +  switch (input) { | 
| +    case ui::CursorType::kNull: | 
| +      return ui::mojom::CursorType::kNull; | 
| +    case ui::CursorType::kPointer: | 
| +      return ui::mojom::CursorType::kPointer; | 
| +    case ui::CursorType::kCross: | 
| +      return ui::mojom::CursorType::kCross; | 
| +    case ui::CursorType::kHand: | 
| +      return ui::mojom::CursorType::kHand; | 
| +    case ui::CursorType::kIBeam: | 
| +      return ui::mojom::CursorType::kIBeam; | 
| +    case ui::CursorType::kWait: | 
| +      return ui::mojom::CursorType::kWait; | 
| +    case ui::CursorType::kHelp: | 
| +      return ui::mojom::CursorType::kHelp; | 
| +    case ui::CursorType::kEastResize: | 
| +      return ui::mojom::CursorType::kEastResize; | 
| +    case ui::CursorType::kNorthResize: | 
| +      return ui::mojom::CursorType::kNorthResize; | 
| +    case ui::CursorType::kNorthEastResize: | 
| +      return ui::mojom::CursorType::kNorthEastResize; | 
| +    case ui::CursorType::kNorthWestResize: | 
| +      return ui::mojom::CursorType::kNorthWestResize; | 
| +    case ui::CursorType::kSouthResize: | 
| +      return ui::mojom::CursorType::kSouthResize; | 
| +    case ui::CursorType::kSouthEastResize: | 
| +      return ui::mojom::CursorType::kSouthEastResize; | 
| +    case ui::CursorType::kSouthWestResize: | 
| +      return ui::mojom::CursorType::kSouthWestResize; | 
| +    case ui::CursorType::kWestResize: | 
| +      return ui::mojom::CursorType::kWestResize; | 
| +    case ui::CursorType::kNorthSouthResize: | 
| +      return ui::mojom::CursorType::kNorthSouthResize; | 
| +    case ui::CursorType::kEastWestResize: | 
| +      return ui::mojom::CursorType::kEastWestResize; | 
| +    case ui::CursorType::kNorthEastSouthWestResize: | 
| +      return ui::mojom::CursorType::kNorthEastSouthWestResize; | 
| +    case ui::CursorType::kNorthWestSouthEastResize: | 
| +      return ui::mojom::CursorType::kNorthWestSouthEastResize; | 
| +    case ui::CursorType::kColumnResize: | 
| +      return ui::mojom::CursorType::kColumnResize; | 
| +    case ui::CursorType::kRowResize: | 
| +      return ui::mojom::CursorType::kRowResize; | 
| +    case ui::CursorType::kMiddlePanning: | 
| +      return ui::mojom::CursorType::kMiddlePanning; | 
| +    case ui::CursorType::kEastPanning: | 
| +      return ui::mojom::CursorType::kEastPanning; | 
| +    case ui::CursorType::kNorthPanning: | 
| +      return ui::mojom::CursorType::kNorthPanning; | 
| +    case ui::CursorType::kNorthEastPanning: | 
| +      return ui::mojom::CursorType::kNorthEastPanning; | 
| +    case ui::CursorType::kNorthWestPanning: | 
| +      return ui::mojom::CursorType::kNorthWestPanning; | 
| +    case ui::CursorType::kSouthPanning: | 
| +      return ui::mojom::CursorType::kSouthPanning; | 
| +    case ui::CursorType::kSouthEastPanning: | 
| +      return ui::mojom::CursorType::kSouthEastPanning; | 
| +    case ui::CursorType::kSouthWestPanning: | 
| +      return ui::mojom::CursorType::kSouthWestPanning; | 
| +    case ui::CursorType::kWestPanning: | 
| +      return ui::mojom::CursorType::kWestPanning; | 
| +    case ui::CursorType::kMove: | 
| +      return ui::mojom::CursorType::kMove; | 
| +    case ui::CursorType::kVerticalText: | 
| +      return ui::mojom::CursorType::kVerticalText; | 
| +    case ui::CursorType::kCell: | 
| +      return ui::mojom::CursorType::kCell; | 
| +    case ui::CursorType::kContextMenu: | 
| +      return ui::mojom::CursorType::kContextMenu; | 
| +    case ui::CursorType::kAlias: | 
| +      return ui::mojom::CursorType::kAlias; | 
| +    case ui::CursorType::kProgress: | 
| +      return ui::mojom::CursorType::kProgress; | 
| +    case ui::CursorType::kNoDrop: | 
| +      return ui::mojom::CursorType::kNoDrop; | 
| +    case ui::CursorType::kCopy: | 
| +      return ui::mojom::CursorType::kCopy; | 
| +    case ui::CursorType::kNone: | 
| +      return ui::mojom::CursorType::kNone; | 
| +    case ui::CursorType::kNotAllowed: | 
| +      return ui::mojom::CursorType::kNotAllowed; | 
| +    case ui::CursorType::kZoomIn: | 
| +      return ui::mojom::CursorType::kZoomIn; | 
| +    case ui::CursorType::kZoomOut: | 
| +      return ui::mojom::CursorType::kZoomOut; | 
| +    case ui::CursorType::kGrab: | 
| +      return ui::mojom::CursorType::kGrab; | 
| +    case ui::CursorType::kGrabbing: | 
| +      return ui::mojom::CursorType::kGrabbing; | 
| +    case ui::CursorType::kCustom: | 
| +      return ui::mojom::CursorType::kCustom; | 
| +    case ui::CursorType::kDndNone: | 
| +    case ui::CursorType::kDndMove: | 
| +    case ui::CursorType::kDndCopy: | 
| +    case ui::CursorType::kDndLink: | 
| +      // The mojom version is the same as the restricted Webcursor constants; | 
| +      // don't allow system cursors to be transmitted. | 
| +      NOTREACHED(); | 
| +      return ui::mojom::CursorType::kNull; | 
| +  } | 
| +  NOTREACHED(); | 
| +  return ui::mojom::CursorType::kNull; | 
| +} | 
| + | 
| +// static | 
| +bool EnumTraits<ui::mojom::CursorType, ui::CursorType>::FromMojom( | 
| +    ui::mojom::CursorType input, | 
| +    ui::CursorType* out) { | 
| +  switch (input) { | 
| +    case ui::mojom::CursorType::kNull: | 
| +      *out = ui::CursorType::kNull; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kPointer: | 
| +      *out = ui::CursorType::kPointer; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kCross: | 
| +      *out = ui::CursorType::kCross; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kHand: | 
| +      *out = ui::CursorType::kHand; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kIBeam: | 
| +      *out = ui::CursorType::kIBeam; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kWait: | 
| +      *out = ui::CursorType::kWait; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kHelp: | 
| +      *out = ui::CursorType::kHelp; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kEastResize: | 
| +      *out = ui::CursorType::kEastResize; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kNorthResize: | 
| +      *out = ui::CursorType::kNorthResize; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kNorthEastResize: | 
| +      *out = ui::CursorType::kNorthEastResize; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kNorthWestResize: | 
| +      *out = ui::CursorType::kNorthWestResize; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kSouthResize: | 
| +      *out = ui::CursorType::kSouthResize; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kSouthEastResize: | 
| +      *out = ui::CursorType::kSouthEastResize; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kSouthWestResize: | 
| +      *out = ui::CursorType::kSouthWestResize; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kWestResize: | 
| +      *out = ui::CursorType::kWestResize; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kNorthSouthResize: | 
| +      *out = ui::CursorType::kNorthSouthResize; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kEastWestResize: | 
| +      *out = ui::CursorType::kEastWestResize; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kNorthEastSouthWestResize: | 
| +      *out = ui::CursorType::kNorthEastSouthWestResize; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kNorthWestSouthEastResize: | 
| +      *out = ui::CursorType::kNorthWestSouthEastResize; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kColumnResize: | 
| +      *out = ui::CursorType::kColumnResize; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kRowResize: | 
| +      *out = ui::CursorType::kRowResize; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kMiddlePanning: | 
| +      *out = ui::CursorType::kMiddlePanning; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kEastPanning: | 
| +      *out = ui::CursorType::kEastPanning; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kNorthPanning: | 
| +      *out = ui::CursorType::kNorthPanning; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kNorthEastPanning: | 
| +      *out = ui::CursorType::kNorthEastPanning; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kNorthWestPanning: | 
| +      *out = ui::CursorType::kNorthWestPanning; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kSouthPanning: | 
| +      *out = ui::CursorType::kSouthPanning; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kSouthEastPanning: | 
| +      *out = ui::CursorType::kSouthEastPanning; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kSouthWestPanning: | 
| +      *out = ui::CursorType::kSouthWestPanning; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kWestPanning: | 
| +      *out = ui::CursorType::kWestPanning; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kMove: | 
| +      *out = ui::CursorType::kMove; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kVerticalText: | 
| +      *out = ui::CursorType::kVerticalText; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kCell: | 
| +      *out = ui::CursorType::kCell; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kContextMenu: | 
| +      *out = ui::CursorType::kContextMenu; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kAlias: | 
| +      *out = ui::CursorType::kAlias; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kProgress: | 
| +      *out = ui::CursorType::kProgress; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kNoDrop: | 
| +      *out = ui::CursorType::kNoDrop; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kCopy: | 
| +      *out = ui::CursorType::kCopy; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kNone: | 
| +      *out = ui::CursorType::kNone; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kNotAllowed: | 
| +      *out = ui::CursorType::kNotAllowed; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kZoomIn: | 
| +      *out = ui::CursorType::kZoomIn; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kZoomOut: | 
| +      *out = ui::CursorType::kZoomOut; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kGrab: | 
| +      *out = ui::CursorType::kGrab; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kGrabbing: | 
| +      *out = ui::CursorType::kGrabbing; | 
| +      return true; | 
| +    case ui::mojom::CursorType::kCustom: | 
| +      *out = ui::CursorType::kCustom; | 
| +      return true; | 
| +  } | 
| + | 
| +  NOTREACHED(); | 
| +  return false; | 
| +} | 
| + | 
| +// static | 
| const base::TimeDelta& | 
| StructTraits<ui::mojom::CursorDataDataView, ui::CursorData>::frame_delay( | 
| const ui::CursorData& c) { | 
| @@ -39,9 +294,12 @@ StructTraits<ui::mojom::CursorDataDataView, ui::CursorData>::cursor_frames( | 
| bool StructTraits<ui::mojom::CursorDataDataView, ui::CursorData>::Read( | 
| ui::mojom::CursorDataDataView data, | 
| ui::CursorData* out) { | 
| -  ui::mojom::CursorType type = data.cursor_type(); | 
| -  if (type != ui::mojom::CursorType::CUSTOM) { | 
| -    *out = ui::CursorData(static_cast<int>(type)); | 
| +  ui::CursorType type; | 
| +  if (!data.ReadCursorType(&type)) | 
| +    return false; | 
| + | 
| +  if (type != ui::CursorType::kCustom) { | 
| +    *out = ui::CursorData(type); | 
| return true; | 
| } | 
|  | 
|  |