Commit 33dd468c authored by Tommy Steimel's avatar Tommy Steimel Committed by Commit Bot

Update media controls CSS classes when poster attribute is changed

This CL adds 'poster' to the list of attributes that the
MediaElementMutationCallback listens for. When changed, the CSS classes
of the media controls are updated. This fixes a bug where a poster added
after page load would not show up because it was hidden behind the
default poster.

Bug: 814956
Change-Id: I4b39e6995ddb35829d886e138fe8a1d573dd8036
Reviewed-on: https://chromium-review.googlesource.com/965589Reviewed-by: default avatarBecca Hughes <beccahughes@chromium.org>
Reviewed-by: default avatarMounir Lamouri <mlamouri@chromium.org>
Commit-Queue: Tommy Steimel <steimel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#543767}
parent 4be2115e
<!DOCTYPE html>
<html>
<title>Test that adding a poster after page load shows the poster.</title>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../../media-controls.js"></script>
<video controls width=400 preload=none src="../../content/60_sec_video.webm"></video>
<script>
async_test(t => {
const video = document.querySelector('video');
window.onload = t.step_func(() => {
assert_true(showsDefaultPoster());
video.setAttribute('poster', '../../content/greenbox.png');
setTimeout(t.step_func_done(() => {
assert_false(showsDefaultPoster());
}));
});
function showsDefaultPoster() {
return mediaControls(video).classList.contains('use-default-poster');
}
});
</script>
</html>
...@@ -243,8 +243,6 @@ class MediaControlsImpl::MediaControlsResizeObserverDelegate final ...@@ -243,8 +243,6 @@ class MediaControlsImpl::MediaControlsResizeObserverDelegate final
}; };
// Observes changes to the HTMLMediaElement attributes that affect controls. // Observes changes to the HTMLMediaElement attributes that affect controls.
// Currently only observes the disableRemotePlayback and disablePictureInPicture
// attributes.
class MediaControlsImpl::MediaElementMutationCallback class MediaControlsImpl::MediaElementMutationCallback
: public MutationObserver::Delegate { : public MutationObserver::Delegate {
public: public:
...@@ -253,9 +251,9 @@ class MediaControlsImpl::MediaElementMutationCallback ...@@ -253,9 +251,9 @@ class MediaControlsImpl::MediaElementMutationCallback
MutationObserverInit init; MutationObserverInit init;
init.setAttributeOldValue(true); init.setAttributeOldValue(true);
init.setAttributes(true); init.setAttributes(true);
init.setAttributeFilter( init.setAttributeFilter({HTMLNames::disableremoteplaybackAttr.ToString(),
{HTMLNames::disableremoteplaybackAttr.ToString(), HTMLNames::disablepictureinpictureAttr.ToString(),
HTMLNames::disablepictureinpictureAttr.ToString()}); HTMLNames::posterAttr.ToString()});
observer_->observe(&controls_->MediaElement(), init, ASSERT_NO_EXCEPTION); observer_->observe(&controls_->MediaElement(), init, ASSERT_NO_EXCEPTION);
} }
...@@ -274,8 +272,9 @@ class MediaControlsImpl::MediaElementMutationCallback ...@@ -274,8 +272,9 @@ class MediaControlsImpl::MediaElementMutationCallback
continue; continue;
if (record->attributeName() == if (record->attributeName() ==
HTMLNames::disableremoteplaybackAttr.ToString()) HTMLNames::disableremoteplaybackAttr.ToString()) {
controls_->RefreshCastButtonVisibilityWithoutUpdate(); controls_->RefreshCastButtonVisibilityWithoutUpdate();
}
if (record->attributeName() == if (record->attributeName() ==
HTMLNames::disablepictureinpictureAttr.ToString() && HTMLNames::disablepictureinpictureAttr.ToString() &&
...@@ -284,6 +283,9 @@ class MediaControlsImpl::MediaElementMutationCallback ...@@ -284,6 +283,9 @@ class MediaControlsImpl::MediaElementMutationCallback
ShouldShowPictureInPictureButton(controls_->MediaElement())); ShouldShowPictureInPictureButton(controls_->MediaElement()));
} }
if (record->attributeName() == HTMLNames::posterAttr.ToString())
controls_->UpdateCSSClassFromState();
BatchedControlUpdate batch(controls_); BatchedControlUpdate batch(controls_);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment