Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(142)

Side by Side Diff: third_party/WebKit/Source/core/html/HTMLMediaElement.cpp

Issue 2767823002: Media Remoting: Add interstitial elements to media element shadow dom. (Closed)
Patch Set: Rebased. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights
3 * reserved. 3 * reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 3619 matching lines...) Expand 10 before | Expand all | Expand 10 after
3630 return true; 3630 return true;
3631 } 3631 }
3632 3632
3633 return false; 3633 return false;
3634 } 3634 }
3635 3635
3636 bool HTMLMediaElement::TextTracksVisible() const { 3636 bool HTMLMediaElement::TextTracksVisible() const {
3637 return text_tracks_visible_; 3637 return text_tracks_visible_;
3638 } 3638 }
3639 3639
3640 static void AssertShadowRootChildren(ShadowRoot& shadow_root) { 3640 // static
3641 void HTMLMediaElement::AssertShadowRootChildren(ShadowRoot& shadow_root) {
3641 #if DCHECK_IS_ON() 3642 #if DCHECK_IS_ON()
3642 // There can be up to two children, either or both of the text 3643 // There can be up to three children: media remoting interstitial, text track
3643 // track container and media controls. If both are present, the 3644 // container, and media controls. The media controls has to be the last child
3644 // text track container must be the first child. 3645 // if presend, and has to be the next sibling of the text track container if
3646 // both present. When present, media remoting interstitial has to be the first
3647 // child.
3645 unsigned number_of_children = shadow_root.CountChildren(); 3648 unsigned number_of_children = shadow_root.CountChildren();
3646 DCHECK_LE(number_of_children, 2u); 3649 DCHECK_LE(number_of_children, 3u);
3647 Node* first_child = shadow_root.FirstChild(); 3650 Node* first_child = shadow_root.FirstChild();
3648 Node* last_child = shadow_root.LastChild(); 3651 Node* last_child = shadow_root.LastChild();
3649 if (number_of_children == 1) { 3652 if (number_of_children == 1) {
3650 DCHECK(first_child->IsTextTrackContainer() || 3653 DCHECK(first_child->IsTextTrackContainer() ||
3651 first_child->IsMediaControls()); 3654 first_child->IsMediaControls() ||
3655 first_child->IsMediaRemotingInterstitial());
3652 } else if (number_of_children == 2) { 3656 } else if (number_of_children == 2) {
3653 DCHECK(first_child->IsTextTrackContainer()); 3657 DCHECK(first_child->IsTextTrackContainer() ||
3658 first_child->IsMediaRemotingInterstitial());
3659 DCHECK(last_child->IsTextTrackContainer() || last_child->IsMediaControls());
3660 if (first_child->IsTextTrackContainer())
3661 DCHECK(last_child->IsMediaControls());
3662 } else if (number_of_children == 3) {
3663 Node* second_child = first_child->nextSibling();
3664 DCHECK(first_child->IsMediaRemotingInterstitial());
3665 DCHECK(second_child->IsTextTrackContainer());
3654 DCHECK(last_child->IsMediaControls()); 3666 DCHECK(last_child->IsMediaControls());
3655 } 3667 }
3656 #endif 3668 #endif
3657 } 3669 }
3658 3670
3659 TextTrackContainer& HTMLMediaElement::EnsureTextTrackContainer() { 3671 TextTrackContainer& HTMLMediaElement::EnsureTextTrackContainer() {
3660 ShadowRoot& shadow_root = EnsureUserAgentShadowRoot(); 3672 ShadowRoot& shadow_root = EnsureUserAgentShadowRoot();
3661 AssertShadowRootChildren(shadow_root); 3673 AssertShadowRootChildren(shadow_root);
3662 3674
3663 Node* first_child = shadow_root.FirstChild(); 3675 Node* first_child = shadow_root.FirstChild();
3664 if (first_child && first_child->IsTextTrackContainer()) 3676 if (first_child && first_child->IsTextTrackContainer())
3665 return ToTextTrackContainer(*first_child); 3677 return ToTextTrackContainer(*first_child);
3678 Node* to_be_inserted = first_child;
3679
3680 if (first_child && first_child->IsMediaRemotingInterstitial()) {
3681 Node* second_child = first_child->nextSibling();
3682 if (second_child && second_child->IsTextTrackContainer())
3683 return ToTextTrackContainer(*second_child);
3684 to_be_inserted = second_child;
3685 }
3666 3686
3667 TextTrackContainer* text_track_container = TextTrackContainer::Create(*this); 3687 TextTrackContainer* text_track_container = TextTrackContainer::Create(*this);
3668 3688
3669 // The text track container should be inserted before the media controls, 3689 // The text track container should be inserted before the media controls,
3670 // so that they are rendered behind them. 3690 // so that they are rendered behind them.
3671 shadow_root.InsertBefore(text_track_container, first_child); 3691 shadow_root.InsertBefore(text_track_container, to_be_inserted);
3672 3692
3673 AssertShadowRootChildren(shadow_root); 3693 AssertShadowRootChildren(shadow_root);
3674 3694
3675 return *text_track_container; 3695 return *text_track_container;
3676 } 3696 }
3677 3697
3678 void HTMLMediaElement::UpdateTextTrackDisplay() { 3698 void HTMLMediaElement::UpdateTextTrackDisplay() {
3679 BLINK_MEDIA_LOG << "updateTextTrackDisplay(" << (void*)this << ")"; 3699 BLINK_MEDIA_LOG << "updateTextTrackDisplay(" << (void*)this << ")";
3680 3700
3681 EnsureTextTrackContainer().UpdateDisplay( 3701 EnsureTextTrackContainer().UpdateDisplay(
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after
4269 kMostlyFillViewportBecomeStableSeconds, BLINK_FROM_HERE); 4289 kMostlyFillViewportBecomeStableSeconds, BLINK_FROM_HERE);
4270 } 4290 }
4271 4291
4272 void HTMLMediaElement::ViewportFillDebouncerTimerFired(TimerBase*) { 4292 void HTMLMediaElement::ViewportFillDebouncerTimerFired(TimerBase*) {
4273 mostly_filling_viewport_ = true; 4293 mostly_filling_viewport_ = true;
4274 if (web_media_player_) 4294 if (web_media_player_)
4275 web_media_player_->BecameDominantVisibleContent(mostly_filling_viewport_); 4295 web_media_player_->BecameDominantVisibleContent(mostly_filling_viewport_);
4276 } 4296 }
4277 4297
4278 } // namespace blink 4298 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/html/HTMLMediaElement.h ('k') | third_party/WebKit/Source/core/html/HTMLVideoElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698