Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
8303217: Webview loaded webpage is not showing play, volume related b…
…uttons for embeded Audio/Video elements

8300954: HTML default Range input control not rendered

Co-authored-by: Hima Bindu Meda <hmeda@openjdk.org>
Reviewed-by: kcr, hmeda
  • Loading branch information
Jay Bhaskar and Hima Bindu Meda committed Mar 6, 2023
1 parent b213450 commit bbdc599
Show file tree
Hide file tree
Showing 18 changed files with 397 additions and 4 deletions.
Expand Up @@ -119,6 +119,8 @@ video::-webkit-media-controls-panel div.mute-box.hidden {

audio::-webkit-media-controls-mute-button,
video::-webkit-media-controls-mute-button {
-webkit-appearance:media-mute-button;
appearance:media-mute-button;
display: flex;
flex: none;
border: none;
Expand Down Expand Up @@ -155,6 +157,8 @@ video::-webkit-media-controls-mute-button.muted {

audio::-webkit-media-controls-play-button,
video::-webkit-media-controls-play-button {
-webkit-appearance:media-play-button;
appearance:media-play-button;
display: flex;
flex: none;
border: none;
Expand Down
Expand Up @@ -490,6 +490,83 @@ template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ControlPart e)
case SliderVerticalPart:
m_value.valueID = CSSValueSliderVertical;
break;
#if PLATFORM(JAVA)
case SliderThumbHorizontalPart:
m_value.valueID = CSSValueSliderthumbHorizontal;
break;
case SliderThumbVerticalPart:
m_value.valueID = CSSValueSliderthumbVertical;
break;
case MediaControlsBackgroundPart:
m_value.valueID = CSSValueMediaControlsBackground;
break;
case MediaControlsDarkBarBackgroundPart:
m_value.valueID = CSSValueMediaControlsDarkBarBackground;
break;
case MediaControlsLightBarBackgroundPart:
m_value.valueID = CSSValueMediaControlsLightBarBackground;
break;
case MediaCurrentTimePart:
m_value.valueID = CSSValueMediaCurrentTimeDisplay;
break;
case MediaEnterFullscreenButtonPart:
m_value.valueID = CSSValueMediaEnterFullscreenButton;
break;
case MediaExitFullscreenButtonPart:
m_value.valueID = CSSValueMediaExitFullscreenButton;
break;
case MediaFullScreenVolumeSliderPart:
m_value.valueID = CSSValueMediaFullscreenVolumeSlider;
break;
case MediaFullScreenVolumeSliderThumbPart:
m_value.valueID = CSSValueMediaFullscreenVolumeSliderThumb;
break;
case MediaMuteButtonPart:
m_value.valueID = CSSValueMediaMuteButton;
break;
case MediaOverlayPlayButtonPart:
m_value.valueID = CSSValueMediaOverlayPlayButton;
break;
case MediaPlayButtonPart:
m_value.valueID = CSSValueMediaPlayButton;
break;
case MediaReturnToRealtimeButtonPart:
m_value.valueID = CSSValueMediaReturnToRealtimeButton;
break;
case MediaRewindButtonPart:
m_value.valueID = CSSValueMediaRewindButton;
break;
case MediaSeekBackButtonPart:
m_value.valueID = CSSValueMediaSeekBackButton;
break;
case MediaSeekForwardButtonPart:
m_value.valueID = CSSValueMediaSeekForwardButton;
break;
case MediaSliderPart:
m_value.valueID = CSSValueMediaSlider;
break;
case MediaSliderThumbPart:
m_value.valueID = CSSValueMediaSliderthumb;
break ;
case MediaTimeRemainingPart:
m_value.valueID = CSSValueMediaTimeRemainingDisplay;
break;
case MediaToggleClosedCaptionsButtonPart:
m_value.valueID = CSSValueMediaToggleClosedCaptionsButton;
break;
case MediaVolumeSliderPart:
m_value.valueID = CSSValueMediaVolumeSlider;
break;
case MediaVolumeSliderContainerPart:
m_value.valueID = CSSValueMediaVolumeSliderContainer;
break;
case MediaVolumeSliderMuteButtonPart:
m_value.valueID = CSSValueMediaVolumeSliderMuteButton;
break;
case MediaVolumeSliderThumbPart:
m_value.valueID = CSSValueMediaVolumeSliderthumb;
break;
#endif
case SearchFieldPart:
m_value.valueID = CSSValueSearchfield;
break;
Expand Down Expand Up @@ -527,8 +604,10 @@ template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ControlPart e)
case SearchFieldResultsDecorationPart:
case SearchFieldResultsButtonPart:
case SearchFieldCancelButtonPart:
#if !PLATFORM(JAVA)
case SliderThumbHorizontalPart:
case SliderThumbVerticalPart:
#endif
ASSERT_NOT_REACHED();
m_value.valueID = CSSValueNone;
break;
Expand Down
Expand Up @@ -5219,12 +5219,38 @@
"square-button",
"button",
"listbox",
"media-controls-background",
"media-controls-dark-bar-background",
"media-controls-fullscreen-background",
"media-controls-light-bar-background",
"media-current-time-display",
"media-enter-fullscreen-button",
"media-exit-fullscreen-button",
"media-fullscreen-volume-slider",
"media-fullscreen-volume-slider-thumb",
"media-mute-button",
"media-overlay-play-button",
"media-play-button",
"media-return-to-realtime-button",
"media-rewind-button",
"media-seek-back-button",
"media-seek-forward-button",
"media-slider",
"media-sliderthumb",
"media-time-remaining-display",
"media-toggle-closed-captions-button",
"media-volume-slider",
"media-volume-slider-container",
"media-volume-slider-mute-button",
"media-volume-sliderthumb",
"menulist",
"menulist-button",
"meter",
"progress-bar",
"slider-horizontal",
"slider-vertical",
"sliderthumb-horizontal",
"sliderthumb-vertical",
"searchfield",
"textfield",
"-apple-pay-button",
Expand Down
Expand Up @@ -849,6 +849,34 @@ meter
progress-bar
slider-horizontal
slider-vertical
// if platform JAVA
sliderthumb-horizontal
sliderthumb-vertical
media-controls-background
media-controls-dark-bar-background
media-controls-fullscreen-background
media-controls-light-bar-background
media-current-time-display
media-enter-fullscreen-button
media-exit-fullscreen-button
media-fullscreen-volume-slider
media-fullscreen-volume-slider-thumb
media-mute-button
media-overlay-play-button
media-play-button
media-return-to-realtime-button
media-rewind-button
media-seek-back-button
media-seek-forward-button
media-slider
media-sliderthumb
media-time-remaining-display
media-toggle-closed-captions-button
media-volume-slider
media-volume-slider-container
media-volume-slider-mute-button
media-volume-sliderthumb
// end platform JAVA
searchfield
#if defined(ENABLE_APPLE_PAY) && ENABLE_APPLE_PAY
-apple-pay-button
Expand Down
Expand Up @@ -870,6 +870,9 @@ button[type="menu"], button[type="menu"]:active {
#endif

input[type="range"] {
/*This is needed for PLATFORM(JAVA)*/
-webkit-appearance: slider-horizontal;
appearance: slider-horizontal;
padding: initial;
border: initial;
margin: 2px;
Expand All @@ -893,7 +896,9 @@ input[type="range"]::-webkit-slider-runnable-track {
}

input[type="range"]::-webkit-slider-thumb, input[type="range"]::-webkit-media-slider-thumb {
appearance: auto;
/*This is needed for PLATFORM(JAVA)*/
-webkit-appearance: sliderthumb-horizontal;
appearance: sliderthumb-horizontal;
box-sizing: border-box;
display: block;
}
Expand Down
Expand Up @@ -147,6 +147,20 @@ const AtomString& webkitListButton()
return webkitListButton;
}

#if PLATFORM(JAVA)
const AtomString& webkitMediaSliderThumb()
{
static MainThreadNeverDestroyed<const AtomString> webkitMediaSliderThumb("-webkit-media-slider-thumb"_s);
return webkitMediaSliderThumb;
}

const AtomString& webkitMediaSliderContainer()
{
static MainThreadNeverDestroyed<const AtomString> webkitMediaSliderContainer("-webkit-media-slider-container"_s);
return webkitMediaSliderContainer;
}
#endif

const AtomString& webkitMediaTextTrackContainer()
{
static MainThreadNeverDestroyed<const AtomString> webkitMediaTextTrackContainer("-webkit-media-text-track-container"_s);
Expand Down
Expand Up @@ -60,6 +60,10 @@ const AtomString& webkitGenericCueRoot();
const AtomString& webkitInnerSpinButton();

const AtomString& webkitListButton();
#if PLATFORM(JAVA)
const AtomString& webkitMediaSliderThumb();
const AtomString& webkitMediaSliderContainer();
#endif

const AtomString& webkitMediaTextTrackContainer();

Expand Down
Expand Up @@ -64,6 +64,9 @@ using namespace HTMLNames;

WTF_MAKE_ISO_ALLOCATED_IMPL(SliderThumbElement);
WTF_MAKE_ISO_ALLOCATED_IMPL(SliderContainerElement);
#if PLATFORM(JAVA)
WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSliderThumb);
#endif

inline static Decimal sliderPosition(HTMLInputElement& element)
{
Expand All @@ -78,6 +81,36 @@ inline static bool hasVerticalAppearance(HTMLInputElement& input)
return input.renderer()->style().effectiveAppearance() == SliderVerticalPart;
}

#if PLATFORM(JAVA)
RenderSliderThumb::RenderSliderThumb(SliderThumbElement& element, RenderStyle&& style)
: RenderBlockFlow(element, WTFMove(style))
{
}

void RenderSliderThumb::updateAppearance(const RenderStyle* parentStyle)
{
if (parentStyle->effectiveAppearance() == SliderVerticalPart)
mutableStyle().setEffectiveAppearance(SliderThumbVerticalPart);
else if (parentStyle->effectiveAppearance() == SliderHorizontalPart)
mutableStyle().setEffectiveAppearance(SliderThumbHorizontalPart);
else if (parentStyle->effectiveAppearance() == MediaSliderPart)
mutableStyle().setEffectiveAppearance(MediaSliderThumbPart);
else if (parentStyle->effectiveAppearance() == MediaVolumeSliderPart)
mutableStyle().setEffectiveAppearance(MediaVolumeSliderThumbPart);
else if (parentStyle->effectiveAppearance() == MediaFullScreenVolumeSliderPart)
mutableStyle().setEffectiveAppearance(MediaFullScreenVolumeSliderThumbPart);
if (style().hasEffectiveAppearance()) {
ASSERT(element());
theme().adjustSliderThumbSize(mutableStyle(), element());
}
}

bool RenderSliderThumb::isSliderThumb() const
{
return true;
}
#endif

// --------------------------------

// FIXME: Find a way to cascade appearance and adjust heights, and get rid of this class.
Expand Down Expand Up @@ -194,6 +227,13 @@ void SliderThumbElement::setPositionFromValue()
renderer()->setNeedsLayout();
}

#if PLATFORM(JAVA)
RenderPtr<RenderElement> SliderThumbElement::createElementRenderer(RenderStyle&& style, const RenderTreePosition&)
{
return createRenderer<RenderSliderThumb>(*this, WTFMove(style));
}
#endif

bool SliderThumbElement::isDisabledFormControl() const
{
auto input = hostInput();
Expand Down Expand Up @@ -554,6 +594,7 @@ std::optional<Style::ElementStyle> SliderThumbElement::resolveCustomStyle(const

auto elementStyle = resolveStyle(resolutionContext);
switch (hostStyle->effectiveAppearance()) {
#if !PLATFORM(JAVA)
case SliderVerticalPart:
elementStyle.renderStyle->setEffectiveAppearance(SliderThumbVerticalPart);
break;
Expand All @@ -563,9 +604,30 @@ std::optional<Style::ElementStyle> SliderThumbElement::resolveCustomStyle(const
default:
break;
}

return elementStyle;
#else
case MediaSliderPart:
case MediaSliderThumbPart:
case MediaVolumeSliderPart:
case MediaVolumeSliderThumbPart:
case MediaFullScreenVolumeSliderPart:
case MediaFullScreenVolumeSliderThumbPart:
m_shadowPseudoId = ShadowPseudoIds::webkitMediaSliderThumb();
break;
default:
m_shadowPseudoId = ShadowPseudoIds::webkitSliderThumb();
}
#endif

return std::nullopt;
}

#if PLATFORM(JAVA)
const AtomString& SliderThumbElement::shadowPseudoId() const
{
return m_shadowPseudoId;
}
#endif

Ref<Element> SliderThumbElement::cloneElementWithoutAttributesAndChildren(Document& targetDocument)
{
Expand Down Expand Up @@ -593,4 +655,34 @@ RenderPtr<RenderElement> SliderContainerElement::createElementRenderer(RenderSty
return createRenderer<RenderSliderContainer>(*this, WTFMove(style));
}

#if PLATFORM(JAVA)
std::optional<Style::ElementStyle> SliderContainerElement::resolveCustomStyle(const Style::ResolutionContext&, const RenderStyle* hostStyle)
{
// This doesn't actually compute style. This is just a hack to pick shadow pseudo id when host style is known.

if (!hostStyle)
return std::nullopt;

switch (hostStyle->effectiveAppearance()) {
case MediaSliderPart:
case MediaSliderThumbPart:
case MediaVolumeSliderPart:
case MediaVolumeSliderThumbPart:
case MediaFullScreenVolumeSliderPart:
case MediaFullScreenVolumeSliderThumbPart:
m_shadowPseudoId = ShadowPseudoIds::webkitMediaSliderContainer();
break;
default:
m_shadowPseudoId = ShadowPseudoIds::webkitSliderContainer();
}

return std::nullopt;
}

const AtomString& SliderContainerElement::shadowPseudoId() const
{
return m_shadowPseudoId;
}
#endif

}

1 comment on commit bbdc599

@openjdk-notifier
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.