Index: third_party/WebKit/Source/core/html/shadow/MediaRemotingInterstitial.cpp |
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaRemotingInterstitial.cpp b/third_party/WebKit/Source/core/html/shadow/MediaRemotingInterstitial.cpp |
index e183d8e59310f7094da408fae10d9a88b3cb8dd3..f38296b13caa2f55ef6c9b2a6b8d504657ccf12d 100644 |
--- a/third_party/WebKit/Source/core/html/shadow/MediaRemotingInterstitial.cpp |
+++ b/third_party/WebKit/Source/core/html/shadow/MediaRemotingInterstitial.cpp |
@@ -4,15 +4,28 @@ |
#include "core/html/shadow/MediaRemotingInterstitial.h" |
+#include "core/dom/TaskRunnerHelper.h" |
#include "core/html/HTMLImageElement.h" |
#include "core/html/HTMLVideoElement.h" |
#include "core/html/shadow/MediaRemotingElements.h" |
+namespace { |
+ |
+constexpr double kStyleChangeTransSeconds = 0.2; |
+constexpr double kHiddenAnimationSeconds = 0.3; |
+ |
+} // namespace |
+ |
namespace blink { |
MediaRemotingInterstitial::MediaRemotingInterstitial( |
HTMLVideoElement& videoElement) |
: HTMLDivElement(videoElement.GetDocument()), |
+ toggle_insterstitial_timer_( |
+ TaskRunnerHelper::Get(TaskType::kUnthrottled, |
+ &videoElement.GetDocument()), |
+ this, |
+ &MediaRemotingInterstitial::ToggleInterstitialTimerFired), |
video_element_(&videoElement) { |
SetShadowPseudoId(AtomicString("-internal-media-remoting-interstitial")); |
background_image_ = HTMLImageElement::Create(videoElement.GetDocument()); |
@@ -32,13 +45,43 @@ MediaRemotingInterstitial::MediaRemotingInterstitial( |
} |
void MediaRemotingInterstitial::Show() { |
+ DCHECK(!should_be_visible_); |
+ if (toggle_insterstitial_timer_.IsActive()) |
+ toggle_insterstitial_timer_.Stop(); |
+ should_be_visible_ = true; |
RemoveInlineStyleProperty(CSSPropertyDisplay); |
exit_button_->OnShown(); |
+ toggle_insterstitial_timer_.StartOneShot(kStyleChangeTransSeconds, |
+ BLINK_FROM_HERE); |
} |
void MediaRemotingInterstitial::Hide() { |
- SetInlineStyleProperty(CSSPropertyDisplay, CSSValueNone); |
+ DCHECK(should_be_visible_); |
+ if (toggle_insterstitial_timer_.IsActive()) |
+ toggle_insterstitial_timer_.Stop(); |
+ should_be_visible_ = false; |
+ SetInlineStyleProperty(CSSPropertyOpacity, 0, |
+ CSSPrimitiveValue::UnitType::kNumber); |
exit_button_->OnHidden(); |
+ toggle_insterstitial_timer_.StartOneShot(kHiddenAnimationSeconds, |
+ BLINK_FROM_HERE); |
+} |
+ |
+void MediaRemotingInterstitial::ToggleInterstitialTimerFired(TimerBase*) { |
+ toggle_insterstitial_timer_.Stop(); |
+ if (should_be_visible_) { |
+ SetInlineStyleProperty(CSSPropertyOpacity, 1, |
+ CSSPrimitiveValue::UnitType::kNumber); |
+ } else { |
+ SetInlineStyleProperty(CSSPropertyDisplay, CSSValueNone); |
+ } |
+} |
+ |
+void MediaRemotingInterstitial::DidMoveToNewDocument(Document& old_document) { |
+ toggle_insterstitial_timer_.MoveToNewTaskRunner( |
+ TaskRunnerHelper::Get(TaskType::kUnthrottled, &GetDocument())); |
+ |
+ HTMLDivElement::DidMoveToNewDocument(old_document); |
} |
void MediaRemotingInterstitial::OnPosterImageChanged() { |