Skip to content

Commit

Permalink
Port InspectorOverlayHighlight types to the new IPC serialization format
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=260263
rdar://113971275

Reviewed by Alex Christensen.

This change ports InspectorOverlayHighlight and various related types to the new
IPC serialization format. That includes:
    - WebCore::InspectorOverlayLabel::Arrow::Direction
    - WebCore::InspectorOverlayLabel::Arrow::Alignment
    - WebCore::InspectorOverlayLabel::Content::Decoration::Type
    - WebCore::InspectorOverlayLabel::Content::Decoration
    - WebCore::InspectorOverlayLabel::Content
    - WebCore::InspectorOverlayLabel::Arrow
    - WebCore::InspectorOverlayLabel
    - WebCore::InspectorOverlayHighlight::FlexHighlightOverlay
    - WebCore::InspectorOverlayHighlight::GridHighlightOverlay::Area
    - WebCore::InspectorOverlayHighlight::GridHighlightOverlay
    - WebCore::InspectorOverlayHighlight::Type
    - WebCore::InspectorOverlayHighlight

* Source/WebCore/inspector/InspectorOverlay.h:
(WebCore::InspectorOverlayHighlight::FlexHighlightOverlay::encode const): Deleted.
(WebCore::InspectorOverlayHighlight::FlexHighlightOverlay::decode): Deleted.
(WebCore::InspectorOverlayHighlight::GridHighlightOverlay::encode const): Deleted.
(WebCore::InspectorOverlayHighlight::GridHighlightOverlay::decode): Deleted.
(WebCore::InspectorOverlayHighlight::GridHighlightOverlay::Area::encode const): Deleted.
(WebCore::InspectorOverlayHighlight::GridHighlightOverlay::Area::decode): Deleted.
* Source/WebCore/inspector/InspectorOverlayLabel.h:
(WebCore::InspectorOverlayLabel::Arrow::Arrow):
(WebCore::InspectorOverlayLabel::encode const): Deleted.
(WebCore::InspectorOverlayLabel::decode): Deleted.
(WebCore::InspectorOverlayLabel::Arrow::encode const): Deleted.
(WebCore::InspectorOverlayLabel::Arrow::decode): Deleted.
(WebCore::InspectorOverlayLabel::Content::encode const): Deleted.
(WebCore::InspectorOverlayLabel::Content::decode): Deleted.
(WebCore::InspectorOverlayLabel::Content::Decoration::encode const): Deleted.
(WebCore::InspectorOverlayLabel::Content::Decoration::decode): Deleted.
* Source/WebKit/Shared/WebCoreArgumentCoders.cpp:
(IPC::ArgumentCoder<InspectorOverlay::Highlight>::encode): Deleted.
(IPC::ArgumentCoder<InspectorOverlay::Highlight>::decode): Deleted.
* Source/WebKit/Shared/WebCoreArgumentCoders.h:
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:

Canonical link: https://commits.webkit.org/266996@main
  • Loading branch information
gavin-apple committed Aug 17, 2023
1 parent 6c660bb commit a96175a
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 313 deletions.
96 changes: 1 addition & 95 deletions Source/WebCore/inspector/InspectorOverlay.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ class Page;
struct InspectorOverlayHighlight {
WTF_MAKE_STRUCT_FAST_ALLOCATED;

enum class Type {
enum class Type : uint8_t {
None, // Provides only non-quad information, including grid overlays.
Node, // Provides 4 quads: margin, border, padding, content.
NodeList, // Provides a list of nodes.
Expand All @@ -90,23 +90,13 @@ struct InspectorOverlayHighlight {
WTF_MAKE_STRUCT_FAST_ALLOCATED;
String name;
FloatQuad quad;

#if PLATFORM(IOS_FAMILY)
template<class Encoder> void encode(Encoder&) const;
template<class Decoder> static std::optional<Area> decode(Decoder&);
#endif
};

Color color;
Vector<FloatLine> gridLines;
Vector<FloatQuad> gaps;
Vector<Area> areas;
Vector<InspectorOverlayLabel> labels;

#if PLATFORM(IOS_FAMILY)
template<class Encoder> void encode(Encoder&) const;
template<class Decoder> static std::optional<GridHighlightOverlay> decode(Decoder&);
#endif
};

struct FlexHighlightOverlay {
Expand All @@ -120,11 +110,6 @@ struct InspectorOverlayHighlight {
Vector<FloatQuad> spaceBetweenItemsAndCrossAxisSpace;
Vector<FloatQuad> crossAxisGaps;
Vector<InspectorOverlayLabel> labels;

#if PLATFORM(IOS_FAMILY)
template<class Encoder> void encode(Encoder&) const;
template<class Decoder> static std::optional<FlexHighlightOverlay> decode(Decoder&);
#endif
};

void setDataFromConfig(const Config& config)
Expand Down Expand Up @@ -283,83 +268,4 @@ class InspectorOverlay {
bool m_showRulersForNodeHighlight { false };
};

#if PLATFORM(IOS_FAMILY)

template<class Encoder> void InspectorOverlayHighlight::FlexHighlightOverlay::encode(Encoder& encoder) const
{
encoder << color;
encoder << containerBounds;
encoder << itemBounds;
encoder << mainAxisGaps;
encoder << mainAxisSpaceBetweenItemsAndGaps;
encoder << spaceBetweenItemsAndCrossAxisSpace;
encoder << crossAxisGaps;
encoder << labels;
}

template<class Decoder> std::optional<InspectorOverlayHighlight::FlexHighlightOverlay> InspectorOverlayHighlight::FlexHighlightOverlay::decode(Decoder& decoder)
{
FlexHighlightOverlay flexHighlightOverlay;
if (!decoder.decode(flexHighlightOverlay.color))
return { };
if (!decoder.decode(flexHighlightOverlay.containerBounds))
return { };
if (!decoder.decode(flexHighlightOverlay.itemBounds))
return { };
if (!decoder.decode(flexHighlightOverlay.mainAxisGaps))
return { };
if (!decoder.decode(flexHighlightOverlay.mainAxisSpaceBetweenItemsAndGaps))
return { };
if (!decoder.decode(flexHighlightOverlay.spaceBetweenItemsAndCrossAxisSpace))
return { };
if (!decoder.decode(flexHighlightOverlay.crossAxisGaps))
return { };
if (!decoder.decode(flexHighlightOverlay.labels))
return { };
return { flexHighlightOverlay };
}

template<class Encoder> void InspectorOverlayHighlight::GridHighlightOverlay::encode(Encoder& encoder) const
{
encoder << color;
encoder << gridLines;
encoder << gaps;
encoder << areas;
encoder << labels;
}

template<class Decoder> std::optional<InspectorOverlayHighlight::GridHighlightOverlay> InspectorOverlayHighlight::GridHighlightOverlay::decode(Decoder& decoder)
{
GridHighlightOverlay gridHighlightOverlay;
if (!decoder.decode(gridHighlightOverlay.color))
return { };
if (!decoder.decode(gridHighlightOverlay.gridLines))
return { };
if (!decoder.decode(gridHighlightOverlay.gaps))
return { };
if (!decoder.decode(gridHighlightOverlay.areas))
return { };
if (!decoder.decode(gridHighlightOverlay.labels))
return { };
return { gridHighlightOverlay };
}

template<class Encoder> void InspectorOverlayHighlight::GridHighlightOverlay::Area::encode(Encoder& encoder) const
{
encoder << name;
encoder << quad;
}

template<class Decoder> std::optional<InspectorOverlayHighlight::GridHighlightOverlay::Area> InspectorOverlayHighlight::GridHighlightOverlay::Area::decode(Decoder& decoder)
{
Area area;
if (!decoder.decode(area.name))
return { };
if (!decoder.decode(area.quad))
return { };
return { area };
}

#endif

} // namespace WebCore
166 changes: 2 additions & 164 deletions Source/WebCore/inspector/InspectorOverlayLabel.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

#include "Color.h"
#include "FloatPoint.h"
#include <wtf/ArgumentCoder.h>
#include <wtf/Vector.h>
#include <wtf/text/WTFString.h>

Expand Down Expand Up @@ -69,11 +70,6 @@ class InspectorOverlayLabel {
{
ASSERT(alignment != Alignment::None || direction == Direction::None);
}

#if PLATFORM(IOS_FAMILY)
template<class Encoder> void encode(Encoder&) const;
template<class Decoder> static std::optional<InspectorOverlayLabel::Arrow> decode(Decoder&);
#endif
};

struct Content {
Expand All @@ -87,21 +83,11 @@ class InspectorOverlayLabel {

Type type;
Color color;

#if PLATFORM(IOS_FAMILY)
template<class Encoder> void encode(Encoder&) const;
template<class Decoder> static std::optional<InspectorOverlayLabel::Content::Decoration> decode(Decoder&);
#endif
};

String text;
Color textColor;
Decoration decoration { Decoration::Type::None, Color::transparentBlack };

#if PLATFORM(IOS_FAMILY)
template<class Encoder> void encode(Encoder&) const;
template<class Decoder> static std::optional<InspectorOverlayLabel::Content> decode(Decoder&);
#endif
};

WEBCORE_EXPORT InspectorOverlayLabel(Vector<Content>&&, FloatPoint, Color backgroundColor, Arrow);
Expand All @@ -112,160 +98,12 @@ class InspectorOverlayLabel {
static FloatSize expectedSize(const Vector<Content>&, Arrow::Direction);
static FloatSize expectedSize(const String&, Arrow::Direction);

#if PLATFORM(IOS_FAMILY)
template<class Encoder> void encode(Encoder&) const;
template<class Decoder> static std::optional<InspectorOverlayLabel> decode(Decoder&);
#endif

private:
friend struct IPC::ArgumentCoder<InspectorOverlayLabel, void>;
Vector<Content> m_contents;
FloatPoint m_location;
Color m_backgroundColor;
Arrow m_arrow;
};

#if PLATFORM(IOS_FAMILY)

template<class Encoder> void InspectorOverlayLabel::encode(Encoder& encoder) const
{
encoder << m_contents;
encoder << m_location;
encoder << m_backgroundColor;
encoder << m_arrow;
}

template<class Decoder> std::optional<InspectorOverlayLabel> InspectorOverlayLabel::decode(Decoder& decoder)
{
std::optional<Vector<Content>> contents;
decoder >> contents;
if (!contents)
return std::nullopt;

std::optional<FloatPoint> location;
decoder >> location;
if (!location)
return std::nullopt;

std::optional<Color> backgroundColor;
decoder >> backgroundColor;
if (!backgroundColor)
return std::nullopt;

std::optional<Arrow> arrow;
decoder >> arrow;
if (!arrow)
return std::nullopt;

return { {
WTFMove(*contents),
*location,
*backgroundColor,
*arrow
} };
}

template<class Encoder> void InspectorOverlayLabel::Arrow::encode(Encoder& encoder) const
{
encoder << direction;
encoder << alignment;
}

template<class Decoder> std::optional<InspectorOverlayLabel::Arrow> InspectorOverlayLabel::Arrow::decode(Decoder& decoder)
{
std::optional<Direction> direction;
decoder >> direction;
if (!direction)
return std::nullopt;

std::optional<Alignment> alignment;
decoder >> alignment;
if (!alignment)
return std::nullopt;

return { { *direction, *alignment } };
}

template<class Encoder> void InspectorOverlayLabel::Content::encode(Encoder& encoder) const
{
encoder << text;
encoder << textColor;
encoder << decoration;
}

template<class Decoder> std::optional<InspectorOverlayLabel::Content> InspectorOverlayLabel::Content::decode(Decoder& decoder)
{
std::optional<String> text;
decoder >> text;
if (!text)
return std::nullopt;

std::optional<Color> textColor;
decoder >> textColor;
if (!textColor)
return std::nullopt;

std::optional<Decoration> decoration;
decoder >> decoration;
if (!decoration)
return std::nullopt;

return { { *text, *textColor, *decoration } };
}

template<class Encoder> void InspectorOverlayLabel::Content::Decoration::encode(Encoder& encoder) const
{
encoder << type;
encoder << color;
}

template<class Decoder> std::optional<InspectorOverlayLabel::Content::Decoration> InspectorOverlayLabel::Content::Decoration::decode(Decoder& decoder)
{
std::optional<Type> type;
decoder >> type;
if (!type)
return std::nullopt;

std::optional<Color> color;
decoder >> color;
if (!color)
return std::nullopt;

return { { *type, *color } };
}

#endif

} // namespace WebCore

namespace WTF {

template<> struct EnumTraits<WebCore::InspectorOverlayLabel::Arrow::Direction> {
using values = EnumValues<
WebCore::InspectorOverlayLabel::Arrow::Direction,
WebCore::InspectorOverlayLabel::Arrow::Direction::None,
WebCore::InspectorOverlayLabel::Arrow::Direction::Down,
WebCore::InspectorOverlayLabel::Arrow::Direction::Up,
WebCore::InspectorOverlayLabel::Arrow::Direction::Left,
WebCore::InspectorOverlayLabel::Arrow::Direction::Right
>;
};

template<> struct EnumTraits<WebCore::InspectorOverlayLabel::Arrow::Alignment> {
using values = EnumValues<
WebCore::InspectorOverlayLabel::Arrow::Alignment,
WebCore::InspectorOverlayLabel::Arrow::Alignment::None,
WebCore::InspectorOverlayLabel::Arrow::Alignment::Leading,
WebCore::InspectorOverlayLabel::Arrow::Alignment::Middle,
WebCore::InspectorOverlayLabel::Arrow::Alignment::Trailing
>;
};

template<> struct EnumTraits<WebCore::InspectorOverlayLabel::Content::Decoration::Type> {
using values = EnumValues<
WebCore::InspectorOverlayLabel::Content::Decoration::Type,
WebCore::InspectorOverlayLabel::Content::Decoration::Type::None,
WebCore::InspectorOverlayLabel::Content::Decoration::Type::Bordered
>;
};

}
46 changes: 0 additions & 46 deletions Source/WebKit/Shared/WebCoreArgumentCoders.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -760,52 +760,6 @@ bool ArgumentCoder<ResourceError>::decode(Decoder& decoder, ResourceError& resou
return true;
}

#if PLATFORM(IOS_FAMILY)

void ArgumentCoder<InspectorOverlay::Highlight>::encode(Encoder& encoder, const InspectorOverlay::Highlight& highlight)
{
encoder << static_cast<uint32_t>(highlight.type);
encoder << highlight.usePageCoordinates;
encoder << highlight.contentColor;
encoder << highlight.contentOutlineColor;
encoder << highlight.paddingColor;
encoder << highlight.borderColor;
encoder << highlight.marginColor;
encoder << highlight.quads;
encoder << highlight.gridHighlightOverlays;
encoder << highlight.flexHighlightOverlays;
}

bool ArgumentCoder<InspectorOverlay::Highlight>::decode(Decoder& decoder, InspectorOverlay::Highlight& highlight)
{
uint32_t type;
if (!decoder.decode(type))
return false;
highlight.type = (InspectorOverlay::Highlight::Type)type;

if (!decoder.decode(highlight.usePageCoordinates))
return false;
if (!decoder.decode(highlight.contentColor))
return false;
if (!decoder.decode(highlight.contentOutlineColor))
return false;
if (!decoder.decode(highlight.paddingColor))
return false;
if (!decoder.decode(highlight.borderColor))
return false;
if (!decoder.decode(highlight.marginColor))
return false;
if (!decoder.decode(highlight.quads))
return false;
if (!decoder.decode(highlight.gridHighlightOverlays))
return false;
if (!decoder.decode(highlight.flexHighlightOverlays))
return false;
return true;
}

#endif

void ArgumentCoder<FixedPositionViewportConstraints>::encode(Encoder& encoder, const FixedPositionViewportConstraints& viewportConstraints)
{
encoder << viewportConstraints.alignmentOffset();
Expand Down
Loading

0 comments on commit a96175a

Please sign in to comment.