OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. |
3 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. | 3 * Copyright (C) 2011, 2012 Google Inc. All rights 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 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 | 105 |
106 if (media_element.ControlsListInternal()->ShouldHideFullscreen()) { | 106 if (media_element.ControlsListInternal()->ShouldHideFullscreen()) { |
107 UseCounter::Count(media_element.GetDocument(), | 107 UseCounter::Count(media_element.GetDocument(), |
108 UseCounter::kHTMLMediaElementControlsListNoFullscreen); | 108 UseCounter::kHTMLMediaElementControlsListNoFullscreen); |
109 return false; | 109 return false; |
110 } | 110 } |
111 | 111 |
112 return true; | 112 return true; |
113 } | 113 } |
114 | 114 |
115 bool ShouldShowCastButton(HTMLMediaElement& media_element) { | |
116 if (media_element.FastHasAttribute(HTMLNames::disableremoteplaybackAttr)) | |
117 return false; | |
118 | |
119 // Explicitly do not show cast button when the mediaControlsEnabled setting is | |
120 // false to make sure the overlay does not appear. | |
121 Document& document = media_element.GetDocument(); | |
122 if (document.GetSettings() && | |
123 !document.GetSettings()->GetMediaControlsEnabled()) | |
124 return false; | |
125 | |
126 // The page disabled the button via the attribute. | |
127 if (media_element.ControlsListInternal()->ShouldHideRemotePlayback()) { | |
128 UseCounter::Count( | |
129 media_element.GetDocument(), | |
130 UseCounter::kHTMLMediaElementControlsListNoRemotePlayback); | |
131 return false; | |
132 } | |
133 | |
134 return media_element.HasRemoteRoutes(); | |
135 } | |
136 | |
137 bool PreferHiddenVolumeControls(const Document& document) { | 115 bool PreferHiddenVolumeControls(const Document& document) { |
138 return !document.GetSettings() || | 116 return !document.GetSettings() || |
139 document.GetSettings()->GetPreferHiddenVolumeControls(); | 117 document.GetSettings()->GetPreferHiddenVolumeControls(); |
140 } | 118 } |
141 | 119 |
142 } // anonymous namespace | 120 } // anonymous namespace |
143 | 121 |
144 class MediaControlsImpl::BatchedControlUpdate { | 122 class MediaControlsImpl::BatchedControlUpdate { |
145 WTF_MAKE_NONCOPYABLE(BatchedControlUpdate); | 123 WTF_MAKE_NONCOPYABLE(BatchedControlUpdate); |
146 STACK_ALLOCATED(); | 124 STACK_ALLOCATED(); |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
487 LayoutObject* MediaControlsImpl::ContainerLayoutObject() { | 465 LayoutObject* MediaControlsImpl::ContainerLayoutObject() { |
488 return GetLayoutObject(); | 466 return GetLayoutObject(); |
489 } | 467 } |
490 | 468 |
491 void MediaControlsImpl::Show() { | 469 void MediaControlsImpl::Show() { |
492 MakeOpaque(); | 470 MakeOpaque(); |
493 panel_->SetIsWanted(true); | 471 panel_->SetIsWanted(true); |
494 panel_->SetIsDisplayed(true); | 472 panel_->SetIsDisplayed(true); |
495 if (overlay_play_button_) | 473 if (overlay_play_button_) |
496 overlay_play_button_->UpdateDisplayType(); | 474 overlay_play_button_->UpdateDisplayType(); |
| 475 RefreshCastButtonVisibility(); |
497 } | 476 } |
498 | 477 |
499 void MediaControlsImpl::Hide() { | 478 void MediaControlsImpl::Hide() { |
500 panel_->SetIsWanted(false); | 479 panel_->SetIsWanted(false); |
501 panel_->SetIsDisplayed(false); | 480 panel_->SetIsDisplayed(false); |
502 if (overlay_play_button_) | 481 if (overlay_play_button_) |
503 overlay_play_button_->SetIsWanted(false); | 482 overlay_play_button_->SetIsWanted(false); |
504 } | 483 } |
505 | 484 |
506 bool MediaControlsImpl::IsVisible() const { | 485 bool MediaControlsImpl::IsVisible() const { |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
623 track->setMode(TextTrack::DisabledKeyword()); | 602 track->setMode(TextTrack::DisabledKeyword()); |
624 } | 603 } |
625 } | 604 } |
626 | 605 |
627 void MediaControlsImpl::RefreshCastButtonVisibility() { | 606 void MediaControlsImpl::RefreshCastButtonVisibility() { |
628 RefreshCastButtonVisibilityWithoutUpdate(); | 607 RefreshCastButtonVisibilityWithoutUpdate(); |
629 BatchedControlUpdate batch(this); | 608 BatchedControlUpdate batch(this); |
630 } | 609 } |
631 | 610 |
632 void MediaControlsImpl::RefreshCastButtonVisibilityWithoutUpdate() { | 611 void MediaControlsImpl::RefreshCastButtonVisibilityWithoutUpdate() { |
633 if (!ShouldShowCastButton(MediaElement())) { | 612 MediaControlCastButtonElement* try_show_button = cast_button_.Get(); |
634 cast_button_->SetIsWanted(false); | 613 MediaControlCastButtonElement* hide_button = overlay_cast_button_.Get(); |
635 overlay_cast_button_->SetIsWanted(false); | 614 if (!MediaElement().ShouldShowControls()) { |
636 return; | 615 try_show_button = overlay_cast_button_.Get(); |
| 616 hide_button = cast_button_.Get(); |
637 } | 617 } |
638 | 618 hide_button->SetIsWanted(false); |
639 // The reason for the autoplay test is that some pages (e.g. vimeo.com) have | 619 try_show_button->SetIsWanted(try_show_button->ShouldShow()); |
640 // an autoplay background video, which doesn't autoplay on Chrome for Android | 620 if (try_show_button->IsWanted()) |
641 // (we prevent it) so starts paused. In such cases we don't want to | 621 try_show_button->UpdateDisplayType(); |
642 // automatically show the cast button, since it looks strange and is unlikely | |
643 // to correspond with anything the user wants to do. If a user does want to | |
644 // cast a paused autoplay video then they can still do so by touching or | |
645 // clicking on the video, which will cause the cast button to appear. | |
646 if (!MediaElement().ShouldShowControls() && !MediaElement().Autoplay() && | |
647 MediaElement().paused()) { | |
648 // Note that this is a case where we add the overlay cast button | |
649 // without wanting the panel cast button. We depend on the fact | |
650 // that computeWhichControlsFit() won't change overlay cast button | |
651 // visibility in the case where the cast button isn't wanted. | |
652 // We don't call compute...() here, but it will be called as | |
653 // non-cast changes (e.g., resize) occur. If the panel button | |
654 // is shown, however, compute...() will take control of the | |
655 // overlay cast button if it needs to hide it from the panel. | |
656 overlay_cast_button_->TryShowOverlay(); | |
657 cast_button_->SetIsWanted(false); | |
658 } else if (MediaElement().ShouldShowControls()) { | |
659 overlay_cast_button_->SetIsWanted(false); | |
660 cast_button_->SetIsWanted(true); | |
661 } | |
662 } | 622 } |
663 | 623 |
664 void MediaControlsImpl::ShowOverlayCastButtonIfNeeded() { | 624 void MediaControlsImpl::ShowOverlayCastButtonIfNeeded() { |
665 if (MediaElement().ShouldShowControls() || | 625 if (MediaElement().ShouldShowControls() || |
666 !ShouldShowCastButton(MediaElement())) | 626 !overlay_cast_button_->ShouldShow()) { |
667 return; | 627 return; |
| 628 } |
668 | 629 |
669 overlay_cast_button_->TryShowOverlay(); | 630 overlay_cast_button_->SetIsWanted(true); |
670 ResetHideMediaControlsTimer(); | 631 ResetHideMediaControlsTimer(); |
671 } | 632 } |
672 | 633 |
673 void MediaControlsImpl::EnterFullscreen() { | 634 void MediaControlsImpl::EnterFullscreen() { |
674 Fullscreen::RequestFullscreen(MediaElement()); | 635 Fullscreen::RequestFullscreen(MediaElement()); |
675 } | 636 } |
676 | 637 |
677 void MediaControlsImpl::ExitFullscreen() { | 638 void MediaControlsImpl::ExitFullscreen() { |
678 Fullscreen::ExitFullscreen(GetDocument()); | 639 Fullscreen::ExitFullscreen(GetDocument()); |
679 } | 640 } |
680 | 641 |
681 void MediaControlsImpl::StartedCasting() { | |
682 cast_button_->SetIsPlayingRemotely(true); | |
683 overlay_cast_button_->SetIsPlayingRemotely(true); | |
684 } | |
685 | |
686 void MediaControlsImpl::StoppedCasting() { | |
687 cast_button_->SetIsPlayingRemotely(false); | |
688 overlay_cast_button_->SetIsPlayingRemotely(false); | |
689 } | |
690 | |
691 void MediaControlsImpl::DefaultEventHandler(Event* event) { | 642 void MediaControlsImpl::DefaultEventHandler(Event* event) { |
692 HTMLDivElement::DefaultEventHandler(event); | 643 HTMLDivElement::DefaultEventHandler(event); |
693 | 644 |
694 // Do not handle events to not interfere with the rest of the page if no | 645 // Do not handle events to not interfere with the rest of the page if no |
695 // controls should be visible. | 646 // controls should be visible. |
696 if (!MediaElement().ShouldShowControls()) | 647 if (!MediaElement().ShouldShowControls()) |
697 return; | 648 return; |
698 | 649 |
699 // Add IgnoreControlsHover to m_hideTimerBehaviorFlags when we see a touch | 650 // Add IgnoreControlsHover to m_hideTimerBehaviorFlags when we see a touch |
700 // event, to allow the hide-timer to do the right thing when it fires. | 651 // event, to allow the hide-timer to do the right thing when it fires. |
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1129 visitor->Trace(cast_button_); | 1080 visitor->Trace(cast_button_); |
1130 visitor->Trace(overlay_cast_button_); | 1081 visitor->Trace(overlay_cast_button_); |
1131 visitor->Trace(media_event_listener_); | 1082 visitor->Trace(media_event_listener_); |
1132 visitor->Trace(window_event_listener_); | 1083 visitor->Trace(window_event_listener_); |
1133 visitor->Trace(orientation_lock_delegate_); | 1084 visitor->Trace(orientation_lock_delegate_); |
1134 MediaControls::Trace(visitor); | 1085 MediaControls::Trace(visitor); |
1135 HTMLDivElement::Trace(visitor); | 1086 HTMLDivElement::Trace(visitor); |
1136 } | 1087 } |
1137 | 1088 |
1138 } // namespace blink | 1089 } // namespace blink |
OLD | NEW |