Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 340e63b309b7b27c301b2a02ea1275836cc1f4d8
      
https://github.com/WebKit/WebKit/commit/340e63b309b7b27c301b2a02ea1275836cc1f4d8
  Author: Aditya Keerthi <[email protected]>
  Date:   2023-04-27 (Thu, 27 Apr 2023)

  Changed paths:
    M LayoutTests/TestExpectations
    A 
LayoutTests/fast/css/appearance-apple-pay-button-style-dynamic-update-expected.html
    A LayoutTests/fast/css/appearance-apple-pay-button-style-dynamic-update.html
    A LayoutTests/fast/forms/meter-dynamic-update-expected.html
    A LayoutTests/fast/forms/meter-dynamic-update.html
    A LayoutTests/fast/forms/progress-dynamic-update-expected.html
    A LayoutTests/fast/forms/progress-dynamic-update.html
    A LayoutTests/fast/forms/range-datalist-dynamic-update-expected.html
    A LayoutTests/fast/forms/range-datalist-dynamic-update.html
    M LayoutTests/platform/ios/TestExpectations
    M LayoutTests/platform/mac/TestExpectations
    M Source/WebCore/platform/graphics/controls/ApplePayButtonPart.cpp
    M Source/WebCore/platform/graphics/controls/ApplePayButtonPart.h
    M Source/WebCore/platform/graphics/controls/MeterPart.cpp
    M Source/WebCore/platform/graphics/controls/MeterPart.h
    M Source/WebCore/platform/graphics/controls/ProgressBarPart.cpp
    M Source/WebCore/platform/graphics/controls/ProgressBarPart.h
    M Source/WebCore/platform/graphics/controls/SliderTrackPart.cpp
    M Source/WebCore/platform/graphics/controls/SliderTrackPart.h
    M Source/WebCore/rendering/RenderTheme.cpp
    M Source/WebCore/rendering/RenderTheme.h

  Log Message:
  -----------
  REGRESSION (Safari 16.4): Dynamically set `<meter>` doesn't show the value
https://bugs.webkit.org/show_bug.cgi?id=255914
rdar://108495001

Reviewed by Tim Horton.

257981@main began the process of refactoring form control rendering to support
the GPU process on macOS. Since the refactoring, form controls are represented
by various `ControlPart` subclasses, which can be drawn using a 
`GraphicsContext`.

For the more customizable controls (such as <meter>, <progress>,
<input type=range>, and Apple Pay buttons), form control state is encoded 
directly
on the `ControlPart` subclass. The `ControlPart` is only created once per 
renderer
in the various flavors of `RenderTheme::ensureControlPart`. Consequently, the
a form control's updated state is never reflected in the `ControlPart` once it
has been created. This results in dynamic changes to state not being reflected
in painting.

To fix, ensure the `ControlPart` is up-to-date with the latest state prior to
painting.

* LayoutTests/TestExpectations:
* 
LayoutTests/fast/css/appearance-apple-pay-button-style-dynamic-update-expected.html:
 Added.
* LayoutTests/fast/css/appearance-apple-pay-button-style-dynamic-update.html: 
Added.
* LayoutTests/fast/forms/meter-dynamic-update-expected.html: Added.
* LayoutTests/fast/forms/meter-dynamic-update.html: Added.
* LayoutTests/fast/forms/progress-dynamic-update-expected.html: Added.
* LayoutTests/fast/forms/progress-dynamic-update.html: Added.
* LayoutTests/fast/forms/range-datalist-dynamic-update-expected.html: Added.
* LayoutTests/fast/forms/range-datalist-dynamic-update.html: Added.
* LayoutTests/platform/ios/TestExpectations:
* LayoutTests/platform/mac/TestExpectations:
* Source/WebCore/platform/graphics/controls/ApplePayButtonPart.cpp:
(WebCore::ApplePayButtonPart::create):
* Source/WebCore/platform/graphics/controls/ApplePayButtonPart.h:
(WebCore::ApplePayButtonPart::setButtonType):
(WebCore::ApplePayButtonPart::setButtonStyle):
(WebCore::ApplePayButtonPart::setLocale):
* Source/WebCore/platform/graphics/controls/MeterPart.cpp:
(WebCore::MeterPart::create):
* Source/WebCore/platform/graphics/controls/MeterPart.h:
(WebCore::MeterPart::setGaugeRegion):
(WebCore::MeterPart::setValue):
(WebCore::MeterPart::setMinimum):
(WebCore::MeterPart::setMaximum):
* Source/WebCore/platform/graphics/controls/ProgressBarPart.cpp:
(WebCore::ProgressBarPart::create):
* Source/WebCore/platform/graphics/controls/ProgressBarPart.h:
(WebCore::ProgressBarPart::setPosition):
(WebCore::ProgressBarPart::setAnimationStartTime):
* Source/WebCore/platform/graphics/controls/SliderTrackPart.cpp:
(WebCore::SliderTrackPart::create):
* Source/WebCore/platform/graphics/controls/SliderTrackPart.h:
(WebCore::SliderTrackPart::setThumbSize):
(WebCore::SliderTrackPart::setTrackBounds):
(WebCore::SliderTrackPart::setTickRatios):
* Source/WebCore/rendering/RenderTheme.cpp:
(WebCore::updateApplePayButtonPartForRenderer):
(WebCore::updateMeterPartForRenderer):
(WebCore::updateProgressBarPartForRenderer):
(WebCore::updateSliderTrackPartForRenderer):
(WebCore::RenderTheme::createControlPart const):

Don't capture any state on creation, it is only necessary for painting, and
will be set prior to drawing.

(WebCore::RenderTheme::updateControlPartForRenderer const):

Update the `ControlPart` based on the latest state, only for controls that
require additional state.

(WebCore::RenderTheme::paint):

Ensure the `ControlPart` state is up-to-date prior to painting.

(WebCore::createApplePayButtonPartForRenderer): Deleted.
(WebCore::createMeterPartForRenderer): Deleted.
(WebCore::createProgressBarPartForRenderer): Deleted.
(WebCore::createSliderTrackPartForRenderer): Deleted.
* Source/WebCore/rendering/RenderTheme.h:

Canonical link: https://commits.webkit.org/263473@main


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to