| Index: third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
|
| diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
|
| index d707de7825bbde8897c969b77cb26add5a1e7dfc..d3e0fc4ebe09e239b56f59bda8002f00ea4d79a5 100644
|
| --- a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
|
| +++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
|
| @@ -3637,20 +3637,32 @@ bool HTMLMediaElement::TextTracksVisible() const {
|
| return text_tracks_visible_;
|
| }
|
|
|
| -static void AssertShadowRootChildren(ShadowRoot& shadow_root) {
|
| +// static
|
| +void HTMLMediaElement::AssertShadowRootChildren(ShadowRoot& shadow_root) {
|
| #if DCHECK_IS_ON()
|
| - // There can be up to two children, either or both of the text
|
| - // track container and media controls. If both are present, the
|
| - // text track container must be the first child.
|
| + // There can be up to three children: media remoting interstitial, text track
|
| + // container, and media controls. The media controls has to be the last child
|
| + // if presend, and has to be the next sibling of the text track container if
|
| + // both present. When present, media remoting interstitial has to be the first
|
| + // child.
|
| unsigned number_of_children = shadow_root.CountChildren();
|
| - DCHECK_LE(number_of_children, 2u);
|
| + DCHECK_LE(number_of_children, 3u);
|
| Node* first_child = shadow_root.FirstChild();
|
| Node* last_child = shadow_root.LastChild();
|
| if (number_of_children == 1) {
|
| DCHECK(first_child->IsTextTrackContainer() ||
|
| - first_child->IsMediaControls());
|
| + first_child->IsMediaControls() ||
|
| + first_child->IsMediaRemotingInterstitial());
|
| } else if (number_of_children == 2) {
|
| - DCHECK(first_child->IsTextTrackContainer());
|
| + DCHECK(first_child->IsTextTrackContainer() ||
|
| + first_child->IsMediaRemotingInterstitial());
|
| + DCHECK(last_child->IsTextTrackContainer() || last_child->IsMediaControls());
|
| + if (first_child->IsTextTrackContainer())
|
| + DCHECK(last_child->IsMediaControls());
|
| + } else if (number_of_children == 3) {
|
| + Node* second_child = first_child->nextSibling();
|
| + DCHECK(first_child->IsMediaRemotingInterstitial());
|
| + DCHECK(second_child->IsTextTrackContainer());
|
| DCHECK(last_child->IsMediaControls());
|
| }
|
| #endif
|
| @@ -3663,12 +3675,20 @@ TextTrackContainer& HTMLMediaElement::EnsureTextTrackContainer() {
|
| Node* first_child = shadow_root.FirstChild();
|
| if (first_child && first_child->IsTextTrackContainer())
|
| return ToTextTrackContainer(*first_child);
|
| + Node* to_be_inserted = first_child;
|
| +
|
| + if (first_child && first_child->IsMediaRemotingInterstitial()) {
|
| + Node* second_child = first_child->nextSibling();
|
| + if (second_child && second_child->IsTextTrackContainer())
|
| + return ToTextTrackContainer(*second_child);
|
| + to_be_inserted = second_child;
|
| + }
|
|
|
| TextTrackContainer* text_track_container = TextTrackContainer::Create(*this);
|
|
|
| // The text track container should be inserted before the media controls,
|
| // so that they are rendered behind them.
|
| - shadow_root.InsertBefore(text_track_container, first_child);
|
| + shadow_root.InsertBefore(text_track_container, to_be_inserted);
|
|
|
| AssertShadowRootChildren(shadow_root);
|
|
|
|
|