Commit a2ac19aa authored by Tommy Steimel's avatar Tommy Steimel Committed by Commit Bot

Prevent MediaControls from scrubbing state before video is ready

This CL changes the scrubbing check in MediaControlsImpl::State to only
return the scrubbing state when the video is actually scrubbable. This
fixes a bug where the video CSS class would have a ready state when no
video source was available.

Bug: 802155
Change-Id: Ib7dfd26cb1be98dde2fc53ea6e230103162f64b1
Reviewed-on: https://chromium-review.googlesource.com/884262Reviewed-by: default avatarMounir Lamouri (slow) <mlamouri@chromium.org>
Commit-Queue: Tommy Steimel <steimel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#532906}
parent 627b89c9
...@@ -610,23 +610,27 @@ void MediaControlsImpl::UpdateCSSClassFromState() { ...@@ -610,23 +610,27 @@ void MediaControlsImpl::UpdateCSSClassFromState() {
} }
MediaControlsImpl::ControlsState MediaControlsImpl::State() const { MediaControlsImpl::ControlsState MediaControlsImpl::State() const {
if (is_scrubbing_) HTMLMediaElement::NetworkState network_state =
MediaElement().getNetworkState();
HTMLMediaElement::ReadyState ready_state = MediaElement().getReadyState();
if (is_scrubbing_ && ready_state != HTMLMediaElement::kHaveNothing)
return ControlsState::kScrubbing; return ControlsState::kScrubbing;
switch (MediaElement().getNetworkState()) { switch (network_state) {
case HTMLMediaElement::kNetworkEmpty: case HTMLMediaElement::kNetworkEmpty:
case HTMLMediaElement::kNetworkNoSource: case HTMLMediaElement::kNetworkNoSource:
return ControlsState::kNoSource; return ControlsState::kNoSource;
case HTMLMediaElement::kNetworkLoading: case HTMLMediaElement::kNetworkLoading:
if (MediaElement().getReadyState() == HTMLMediaElement::kHaveNothing) if (ready_state == HTMLMediaElement::kHaveNothing)
return ControlsState::kLoadingMetadata; return ControlsState::kLoadingMetadata;
if (!MediaElement().paused() && if (!MediaElement().paused() &&
MediaElement().getReadyState() != HTMLMediaElement::kHaveEnoughData) { ready_state != HTMLMediaElement::kHaveEnoughData) {
return ControlsState::kBuffering; return ControlsState::kBuffering;
} }
break; break;
case HTMLMediaElement::kNetworkIdle: case HTMLMediaElement::kNetworkIdle:
if (MediaElement().getReadyState() == HTMLMediaElement::kHaveNothing) if (ready_state == HTMLMediaElement::kHaveNothing)
return ControlsState::kNotLoaded; return ControlsState::kNotLoaded;
break; break;
} }
......
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