⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 259845 in webkit


Ignore:
Timestamp:
Apr 9, 2020, 9:53:55 PM (6 years ago)
Author:
commit-queue@webkit.org
Message:

IPC serialization of enums should serialize std::underlying_type instead of uint64_t
https://bugs.webkit.org/show_bug.cgi?id=210228

Patch by Alex Christensen <achristensen@webkit.org> on 2020-04-09
Reviewed by Chris Dumez and Darin Adler.

Source/WebCore:

No change in behavior, other than less memory and time spent in IPC code.

  • html/canvas/CanvasRenderingContext2D.cpp:

(WebCore::CanvasRenderingContext2D::drawTextInternal):

  • platform/graphics/GraphicsContext.cpp:

(WebCore::GraphicsContextStateChange::dump const):

  • platform/graphics/GraphicsContext.h:
  • platform/graphics/ca/PlatformCALayer.cpp:

(WebCore::PlatformCALayer::drawRepaintIndicator):

  • platform/graphics/cg/GraphicsContextCG.cpp:

(WebCore::GraphicsContext::setPlatformTextDrawingMode):

  • platform/graphics/cocoa/FontCascadeCocoa.mm:

(WebCore::shouldUseLetterpressEffect):
(WebCore::FontCascade::drawGlyphs):

  • platform/mock/MockRealtimeVideoSource.cpp:

(WebCore::MockRealtimeVideoSource::drawText):

  • rendering/TextPaintStyle.cpp:

(WebCore::updateGraphicsContext):

  • rendering/TextPainter.cpp:

(WebCore::TextPainter::paintTextAndEmphasisMarksIfNeeded):

  • rendering/svg/RenderSVGResourceGradient.cpp:

(WebCore::RenderSVGResourceGradient::applyResource):

  • rendering/svg/RenderSVGResourcePattern.cpp:

(WebCore::RenderSVGResourcePattern::applyResource):

  • rendering/svg/RenderSVGResourceSolidColor.cpp:

(WebCore::RenderSVGResourceSolidColor::applyResource):

Source/WebKit:

  • Platform/IPC/Decoder.h:

(IPC::Decoder::decode):
(IPC::Decoder::operator>>):
(IPC::Decoder::decodeEnum):

  • Platform/IPC/Encoder.h:
  • Shared/cf/ArgumentCodersCF.cpp:

(IPC::encode):
(IPC::decode):

Location:
trunk/Source
Files:
23 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r259843 r259845  
     12020-04-09  Alex Christensen  <achristensen@webkit.org>
     2
     3        IPC serialization of enums should serialize std::underlying_type instead of uint64_t
     4        https://bugs.webkit.org/show_bug.cgi?id=210228
     5
     6        Reviewed by Chris Dumez and Darin Adler.
     7
     8        No change in behavior, other than less memory and time spent in IPC code.
     9
     10        * html/canvas/CanvasRenderingContext2D.cpp:
     11        (WebCore::CanvasRenderingContext2D::drawTextInternal):
     12        * platform/graphics/GraphicsContext.cpp:
     13        (WebCore::GraphicsContextStateChange::dump const):
     14        * platform/graphics/GraphicsContext.h:
     15        * platform/graphics/ca/PlatformCALayer.cpp:
     16        (WebCore::PlatformCALayer::drawRepaintIndicator):
     17        * platform/graphics/cg/GraphicsContextCG.cpp:
     18        (WebCore::GraphicsContext::setPlatformTextDrawingMode):
     19        * platform/graphics/cocoa/FontCascadeCocoa.mm:
     20        (WebCore::shouldUseLetterpressEffect):
     21        (WebCore::FontCascade::drawGlyphs):
     22        * platform/mock/MockRealtimeVideoSource.cpp:
     23        (WebCore::MockRealtimeVideoSource::drawText):
     24        * rendering/TextPaintStyle.cpp:
     25        (WebCore::updateGraphicsContext):
     26        * rendering/TextPainter.cpp:
     27        (WebCore::TextPainter::paintTextAndEmphasisMarksIfNeeded):
     28        * rendering/svg/RenderSVGResourceGradient.cpp:
     29        (WebCore::RenderSVGResourceGradient::applyResource):
     30        * rendering/svg/RenderSVGResourcePattern.cpp:
     31        (WebCore::RenderSVGResourcePattern::applyResource):
     32        * rendering/svg/RenderSVGResourceSolidColor.cpp:
     33        (WebCore::RenderSVGResourceSolidColor::applyResource):
     34
    1352020-04-08  Darin Adler  <darin@apple.com>
    236
  • trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp

    r259817 r259845  
    559559        }
    560560
    561         maskImageContext.setTextDrawingMode(fill ? TextModeFill : TextModeStroke);
     561        maskImageContext.setTextDrawingMode(fill ? TextDrawingMode::Fill : TextDrawingMode::Stroke);
    562562
    563563        if (useMaxWidth) {
     
    579579#endif
    580580
    581     c->setTextDrawingMode(fill ? TextModeFill : TextModeStroke);
     581    c->setTextDrawingMode(fill ? TextDrawingMode::Fill : TextDrawingMode::Stroke);
    582582
    583583    GraphicsContextStateSaver stateSaver(*c);
  • trunk/Source/WebCore/platform/graphics/GraphicsContext.cpp

    r259817 r259845  
    286286
    287287    if (m_changeFlags.contains(GraphicsContextState::TextDrawingModeChange))
    288         ts.dumpProperty("text-drawing-mode", m_state.textDrawingMode);
     288        ts.dumpProperty("text-drawing-mode", m_state.textDrawingMode.toRaw());
    289289
    290290    if (m_changeFlags.contains(GraphicsContextState::StrokeColorChange))
  • trunk/Source/WebCore/platform/graphics/GraphicsContext.h

    r259817 r259845  
    9999class TransformationMatrix;
    100100
    101 enum TextDrawingMode {
    102     TextModeFill = 1 << 0,
    103     TextModeStroke = 1 << 1,
     101enum class TextDrawingMode : uint8_t {
     102    Fill = 1 << 0,
     103    Stroke = 1 << 1,
    104104#if ENABLE(LETTERPRESS)
    105     TextModeLetterpress = 1 << 2,
    106 #endif
    107 };
    108 typedef unsigned TextDrawingModeFlags;
     105    Letterpress = 1 << 2,
     106#endif
     107};
     108using TextDrawingModeFlags = OptionSet<TextDrawingMode>;
    109109
    110110enum StrokeStyle {
     
    211211    float shadowBlur { 0 };
    212212
    213     TextDrawingModeFlags textDrawingMode { TextModeFill };
     213    TextDrawingModeFlags textDrawingMode { TextDrawingMode::Fill };
    214214
    215215    Color strokeColor { Color::black };
  • trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp

    r259817 r259845  
    133133        graphicsContext.setStrokeColor(linearGlyphMaskOutlineColor);
    134134        graphicsContext.setStrokeThickness(4.5);
    135         graphicsContext.setTextDrawingMode(TextModeFill | TextModeStroke);
     135        graphicsContext.setTextDrawingMode(TextDrawingModeFlags { TextDrawingMode::Fill, TextDrawingMode::Stroke });
    136136    }
    137137
  • trunk/Source/WebCore/platform/graphics/cairo/CairoOperations.cpp

    r259817 r259845  
    316316{
    317317    ShadowBlur shadow({ shadowState.blur, shadowState.blur }, shadowState.offset, shadowState.color, shadowState.ignoreTransforms);
    318     if (!(textDrawingMode & TextModeFill) || shadow.type() == ShadowBlur::NoShadow)
     318    if (!textDrawingMode.contains(TextDrawingMode::Fill) || shadow.type() == ShadowBlur::NoShadow)
    319319        return;
    320320
     
    833833    cairo_save(cr);
    834834
    835     if (textDrawingMode & TextModeFill) {
     835    if (textDrawingMode.contains(TextDrawingMode::Fill)) {
    836836        prepareForFilling(cr, fillSource, AdjustPatternForGlobalAlpha);
    837837        drawGlyphsToContext(cr, scaledFont, syntheticBoldOffset, glyphs, fontSmoothingMode);
     
    842842    // the text as even one single stroke would cover the full wdth of the text.
    843843    //  See https://bugs.webkit.org/show_bug.cgi?id=33759.
    844     if (textDrawingMode & TextModeStroke && strokeThickness < 2 * xOffset) {
     844    if (textDrawingMode.contains(TextDrawingMode::Stroke) && strokeThickness < 2 * xOffset) {
    845845        prepareForStroking(cr, strokeSource, PreserveAlpha);
    846846        cairo_set_line_width(cr, strokeThickness);
  • trunk/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp

    r259817 r259845  
    17611761
    17621762    CGContextRef context = platformContext();
    1763     switch (mode) {
    1764     case TextModeFill:
     1763   
     1764    bool fill = mode.contains(TextDrawingMode::Fill);
     1765    bool stroke = mode.contains(TextDrawingMode::Stroke);
     1766    if (fill && stroke)
     1767        CGContextSetTextDrawingMode(context, kCGTextFillStroke);
     1768    else if (fill)
    17651769        CGContextSetTextDrawingMode(context, kCGTextFill);
    1766         break;
    1767     case TextModeStroke:
     1770    else if (stroke)
    17681771        CGContextSetTextDrawingMode(context, kCGTextStroke);
    1769         break;
    1770     case TextModeFill | TextModeStroke:
    1771         CGContextSetTextDrawingMode(context, kCGTextFillStroke);
    1772         break;
    1773     default:
    1774         break;
    1775     }
    17761772}
    17771773
  • trunk/Source/WebCore/platform/graphics/cocoa/FontCascadeCocoa.mm

    r259817 r259845  
    9292{
    9393#if ENABLE(LETTERPRESS)
    94     return context.textDrawingMode() & TextModeLetterpress;
     94    return context.textDrawingMode().contains(TextDrawingMode::Letterpress);
    9595#else
    9696    UNUSED_PARAM(context);
     
    279279    };
    280280
    281     bool hasSimpleShadow = context.textDrawingMode() == TextModeFill && shadowColor.isValid() && !shadowBlur && !platformData.isColorBitmapFont() && (!context.shadowsIgnoreTransforms() || contextCTM.isIdentityOrTranslationOrFlipped()) && !context.isInTransparencyLayer();
     281    bool hasSimpleShadow = context.textDrawingMode() == TextDrawingMode::Fill && shadowColor.isValid() && !shadowBlur && !platformData.isColorBitmapFont() && (!context.shadowsIgnoreTransforms() || contextCTM.isIdentityOrTranslationOrFlipped()) && !context.isInTransparencyLayer();
    282282    if (hasSimpleShadow) {
    283283        // Paint simple shadows ourselves instead of relying on CG shadows, to avoid losing subpixel antialiasing.
  • trunk/Source/WebCore/platform/graphics/displaylists/DisplayListItems.h

    r259817 r259845  
    417417
    418418    if (changeFlags.contains(GraphicsContextState::TextDrawingModeChange))
    419         encoder.encodeEnum(state.textDrawingMode);
     419        encoder << state.textDrawingMode;
    420420
    421421    if (changeFlags.contains(GraphicsContextState::StrokeColorChange))
     
    569569
    570570    if (stateChange.m_changeFlags.contains(GraphicsContextState::TextDrawingModeChange)) {
    571         TextDrawingModeFlags textDrawingMode;
    572         if (!decoder.decodeEnum(textDrawingMode))
     571        Optional<TextDrawingModeFlags> textDrawingMode;
     572        decoder >> textDrawingMode;
     573        if (!textDrawingMode)
    573574            return WTF::nullopt;
    574575
    575         stateChange.m_state.textDrawingMode = textDrawingMode;
     576        stateChange.m_state.textDrawingMode = WTFMove(*textDrawingMode);
    576577    }
    577578
  • trunk/Source/WebCore/platform/graphics/texmap/BitmapTexture.cpp

    r259817 r259845  
    4646    GraphicsContext& context = imageBuffer->context();
    4747    context.setImageInterpolationQuality(InterpolationQuality::Default);
    48     context.setTextDrawingMode(TextModeFill);
     48    context.setTextDrawingMode(TextDrawingMode::Fill);
    4949
    5050    IntRect sourceRect(targetRect);
  • trunk/Source/WebCore/platform/graphics/win/Direct2DOperations.cpp

    r259817 r259845  
    776776    graphicsContext.getShadow(shadowOffset, shadowBlur, shadowColor);
    777777
    778     bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextModeFill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());
     778    bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextDrawingMode::Fill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());
    779779    if (hasSimpleShadow) {
    780780        // Paint simple shadows ourselves instead of relying on CG shadows, to avoid losing subpixel antialiasing.
  • trunk/Source/WebCore/platform/graphics/win/FontCGWin.cpp

    r259817 r259845  
    182182    graphicsContext.getShadow(shadowOffset, shadowBlur, shadowColor);
    183183
    184     bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextModeFill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());
     184    bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextDrawingMode::Fill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());
    185185    if (hasSimpleShadow) {
    186186        // Paint simple shadows ourselves instead of relying on CG shadows, to avoid losing subpixel antialiasing.
  • trunk/Source/WebCore/platform/graphics/win/FontCascadeDirect2D.cpp

    r259817 r259845  
    117117    graphicsContext.getShadow(shadowOffset, shadowBlur, shadowColor);
    118118
    119     bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextModeFill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());
     119    bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextDrawingMode::Fill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());
    120120    if (hasSimpleShadow) {
    121121        // Paint simple shadows ourselves instead of relying on CG shadows, to avoid losing subpixel antialiasing.
  • trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp

    r259817 r259845  
    354354    FloatPoint timeLocation(captureSize.width() * .05, captureSize.height() * .15);
    355355    context.setFillColor(Color::white);
    356     context.setTextDrawingMode(TextModeFill);
     356    context.setTextDrawingMode(TextDrawingMode::Fill);
    357357    String string = makeString(pad('0', 2, hours), ':', pad('0', 2, minutes), ':', pad('0', 2, seconds), '.', pad('0', 3, milliseconds % 1000));
    358358    context.drawText(timeFont, TextRun((StringView(string))), timeLocation);
  • trunk/Source/WebCore/rendering/TextPaintStyle.cpp

    r259817 r259845  
    186186#if ENABLE(LETTERPRESS)
    187187    if (paintStyle.useLetterpressEffect)
    188         newMode |= TextModeLetterpress;
     188        newMode.add(TextDrawingMode::Letterpress);
    189189    else
    190         newMode &= ~TextModeLetterpress;
     190        newMode.remove(TextDrawingMode::Letterpress);
    191191#endif
    192192    if (paintStyle.strokeWidth > 0 && paintStyle.strokeColor.isVisible())
    193         newMode |= TextModeStroke;
     193        newMode.add(TextDrawingMode::Stroke);
    194194    if (mode != newMode) {
    195195        context.setTextDrawingMode(newMode);
     
    202202
    203203    Color fillColor = fillColorType == UseEmphasisMarkColor ? paintStyle.emphasisMarkColor : paintStyle.fillColor;
    204     if (mode & TextModeFill && (fillColor != context.fillColor()))
     204    if (mode.contains(TextDrawingMode::Fill) && (fillColor != context.fillColor()))
    205205        context.setFillColor(fillColor);
    206206
    207     if (mode & TextModeStroke) {
     207    if (mode & TextDrawingMode::Stroke) {
    208208        if (paintStyle.strokeColor != context.strokeColor())
    209209            context.setStrokeColor(paintStyle.strokeColor);
  • trunk/Source/WebCore/rendering/TextPainter.cpp

    r259817 r259845  
    160160        for (auto order : paintOrder) {
    161161            switch (order) {
    162             case PaintType::Fill:
    163                 m_context.setTextDrawingMode(textDrawingMode & ~TextModeStroke);
     162            case PaintType::Fill: {
     163                auto textDrawingModeWithoutStroke = textDrawingMode;
     164                textDrawingModeWithoutStroke.remove(TextDrawingMode::Stroke);
     165                m_context.setTextDrawingMode(textDrawingModeWithoutStroke);
    164166                paintTextWithShadows(shadowToUse, shadowColorFilter, *m_font, textRun, boxRect, textOrigin, startOffset, endOffset, nullAtom(), 0, false);
    165167                shadowToUse = nullptr;
    166168                m_context.setTextDrawingMode(textDrawingMode);
    167169                break;
    168             case PaintType::Stroke:
    169                 m_context.setTextDrawingMode(textDrawingMode & ~TextModeFill);
     170            }
     171            case PaintType::Stroke: {
     172                auto textDrawingModeWithoutFill = textDrawingMode;
     173                textDrawingModeWithoutFill.remove(TextDrawingMode::Fill);
     174                m_context.setTextDrawingMode(textDrawingModeWithoutFill);
    170175                paintTextWithShadows(shadowToUse, shadowColorFilter, *m_font, textRun, boxRect, textOrigin, startOffset, endOffset, nullAtom(), 0, paintStyle.strokeWidth > 0);
    171176                shadowToUse = nullptr;
    172177                m_context.setTextDrawingMode(textDrawingMode);
     178            }
    173179                break;
    174180            case PaintType::Markers:
  • trunk/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp

    r259817 r259845  
    168168#endif
    169169
    170         context->setTextDrawingMode(resourceMode.contains(RenderSVGResourceMode::ApplyToFill) ? TextModeFill : TextModeStroke);
     170        context->setTextDrawingMode(resourceMode.contains(RenderSVGResourceMode::ApplyToFill) ? TextDrawingMode::Fill : TextDrawingMode::Stroke);
    171171    }
    172172
  • trunk/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp

    r259817 r259845  
    186186    if (resourceMode.contains(RenderSVGResourceMode::ApplyToText)) {
    187187        if (resourceMode.contains(RenderSVGResourceMode::ApplyToFill)) {
    188             context->setTextDrawingMode(TextModeFill);
     188            context->setTextDrawingMode(TextDrawingMode::Fill);
    189189
    190190#if USE(CG)
     
    192192#endif
    193193        } else if (resourceMode.contains(RenderSVGResourceMode::ApplyToStroke)) {
    194             context->setTextDrawingMode(TextModeStroke);
     194            context->setTextDrawingMode(TextDrawingMode::Stroke);
    195195
    196196#if USE(CG)
  • trunk/Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp

    r259817 r259845  
    5252
    5353        if (resourceMode.contains(RenderSVGResourceMode::ApplyToText))
    54             context->setTextDrawingMode(TextModeFill);
     54            context->setTextDrawingMode(TextDrawingMode::Fill);
    5555    } else if (resourceMode.contains(RenderSVGResourceMode::ApplyToStroke)) {
    5656        // When rendering the mask for a RenderSVGResourceClipper, the stroke code path is never hit.
     
    6262
    6363        if (resourceMode.contains(RenderSVGResourceMode::ApplyToText))
    64             context->setTextDrawingMode(TextModeStroke);
     64            context->setTextDrawingMode(TextDrawingMode::Stroke);
    6565    }
    6666
  • trunk/Source/WebKit/ChangeLog

    r259843 r259845  
     12020-04-09  Alex Christensen  <achristensen@webkit.org>
     2
     3        IPC serialization of enums should serialize std::underlying_type instead of uint64_t
     4        https://bugs.webkit.org/show_bug.cgi?id=210228
     5
     6        Reviewed by Chris Dumez and Darin Adler.
     7
     8        * Platform/IPC/Decoder.h:
     9        (IPC::Decoder::decode):
     10        (IPC::Decoder::operator>>):
     11        (IPC::Decoder::decodeEnum):
     12        * Platform/IPC/Encoder.h:
     13        * Shared/cf/ArgumentCodersCF.cpp:
     14        (IPC::encode):
     15        (IPC::decode):
     16
    1172020-04-08  Darin Adler  <darin@apple.com>
    218
  • trunk/Source/WebKit/Platform/IPC/Decoder.h

    r259817 r259845  
    105105    Decoder& operator>>(Optional<double>&);
    106106
    107     template<typename E>
    108     auto decode(E& e) -> std::enable_if_t<std::is_enum<E>::value, bool>
    109     {
    110         uint64_t value;
     107    template<typename E, typename = std::enable_if_t<std::is_enum<E>::value>>
     108    bool decode(E& e)
     109    {
     110        typename std::underlying_type<E>::type value;
    111111        if (!decode(value))
    112112            return false;
     
    118118    }
    119119
    120     template<typename E, std::enable_if_t<std::is_enum<E>::value>* = nullptr>
     120    template<typename E, typename = std::enable_if_t<std::is_enum<E>::value>>
    121121    Decoder& operator>>(Optional<E>& optional)
    122122    {
    123         Optional<uint64_t> value;
     123        Optional<typename std::underlying_type<E>::type> value;
    124124        *this >> value;
    125125        if (value && isValidEnum<E>(*value))
     
    130130    template<typename T> bool decodeEnum(T& result)
    131131    {
    132         static_assert(sizeof(T) <= 8, "Enum type T must not be larger than 64 bits!");
    133 
    134         uint64_t value;
     132        typename std::underlying_type<T>::type value;
    135133        if (!decode(value))
    136134            return false;
    137        
     135
    138136        result = static_cast<T>(value);
    139137        return true;
  • trunk/Source/WebKit/Platform/IPC/Encoder.h

    r259817 r259845  
    6262    template<typename T> void encodeEnum(T t)
    6363    {
    64         COMPILE_ASSERT(sizeof(T) <= sizeof(uint64_t), enum_type_must_not_be_larger_than_64_bits);
    65 
    66         encode(static_cast<uint64_t>(t));
     64        encode(static_cast<typename std::underlying_type<T>::type>(t));
    6765    }
    6866
     
    7674    Encoder& operator<<(T&& t)
    7775    {
    78         encode(static_cast<uint64_t>(t));
     76        encode(static_cast<typename std::underlying_type<T>::type>(t));
    7977        return *this;
    8078    }
     
    114112    auto encode(E value) -> std::enable_if_t<std::is_enum<E>::value>
    115113    {
    116         static_assert(sizeof(E) <= sizeof(uint64_t), "Enum type must not be larger than 64 bits.");
    117 
    118         ASSERT(isValidEnum<E>(static_cast<uint64_t>(value)));
    119         encode(static_cast<uint64_t>(value));
     114        ASSERT(isValidEnum<E>(static_cast<typename std::underlying_type<E>::type>(value)));
     115        encode(static_cast<typename std::underlying_type<E>::type>(value));
    120116    }
    121117
  • trunk/Source/WebKit/Shared/cf/ArgumentCodersCF.cpp

    r259817 r259845  
    492492    ASSERT_UNUSED(result, result);
    493493
    494     encoder.encodeEnum(numberType);
     494    encoder << static_cast<uint8_t>(numberType);
    495495    encoder << IPC::DataReference(buffer);
    496496}
     
    538538bool decode(Decoder& decoder, RetainPtr<CFNumberRef>& result)
    539539{
    540     CFNumberType numberType;
    541     if (!decoder.decodeEnum(numberType))
    542         return false;
     540    Optional<uint8_t> numberTypeFromIPC;
     541    decoder >> numberTypeFromIPC;
     542    if (!numberTypeFromIPC || *numberTypeFromIPC > kCFNumberMaxType)
     543        return false;
     544    auto numberType = static_cast<CFNumberType>(*numberTypeFromIPC);
    543545
    544546    IPC::DataReference dataReference;
     
    572574    ASSERT(numConvertedBytes == length);
    573575
    574     encoder.encodeEnum(encoding);
     576    encoder << static_cast<uint32_t>(encoding);
    575577    encoder << IPC::DataReference(buffer);
    576578}
     
    578580bool decode(Decoder& decoder, RetainPtr<CFStringRef>& result)
    579581{
    580     CFStringEncoding encoding;
    581     if (!decoder.decodeEnum(encoding))
    582         return false;
     582    Optional<uint32_t> encodingFromIPC;
     583    decoder >> encodingFromIPC;
     584    if (!encodingFromIPC)
     585        return false;
     586    auto encoding = static_cast<CFStringEncoding>(*encodingFromIPC);
    583587
    584588    if (!CFStringIsEncodingAvailable(encoding))
Note: See TracChangeset for help on using the changeset viewer.