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..1f36deda8ff88a3764466c3e50f16481c07d59b6 100644 |
--- a/third_party/WebKit/Source/core/html/shadow/MediaRemotingInterstitial.cpp |
+++ b/third_party/WebKit/Source/core/html/shadow/MediaRemotingInterstitial.cpp |
@@ -4,15 +4,29 @@ |
#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()), |
+ is_shown_(false), |
+ 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 +46,45 @@ MediaRemotingInterstitial::MediaRemotingInterstitial( |
} |
void MediaRemotingInterstitial::Show() { |
+ if (is_shown_ && toggle_insterstitial_timer_.IsActive()) |
mlamouri (slow - plz ping)
2017/04/19 16:17:19
Why do you check if the timer is active? Actually,
xjz
2017/04/19 17:11:19
Done. Yes, the timer could be active. For example,
|
+ return; |
+ if (toggle_insterstitial_timer_.IsActive()) |
+ toggle_insterstitial_timer_.Stop(); |
+ is_shown_ = true; |
RemoveInlineStyleProperty(CSSPropertyDisplay); |
- exit_button_->OnShown(); |
+ toggle_insterstitial_timer_.StartOneShot(kStyleChangeTransSeconds, |
+ BLINK_FROM_HERE); |
} |
void MediaRemotingInterstitial::Hide() { |
- SetInlineStyleProperty(CSSPropertyDisplay, CSSValueNone); |
+ if (!is_shown_ && toggle_insterstitial_timer_.IsActive()) |
+ return; |
+ if (toggle_insterstitial_timer_.IsActive()) |
+ toggle_insterstitial_timer_.Stop(); |
+ is_shown_ = false; |
exit_button_->OnHidden(); |
+ SetInlineStyleProperty(CSSPropertyOpacity, 0, |
+ CSSPrimitiveValue::UnitType::kNumber); |
+ toggle_insterstitial_timer_.StartOneShot(kHiddenAnimationSeconds, |
+ BLINK_FROM_HERE); |
+} |
+ |
+void MediaRemotingInterstitial::ToggleInterstitialTimerFired(TimerBase*) { |
+ toggle_insterstitial_timer_.Stop(); |
+ if (is_shown_) { |
+ SetInlineStyleProperty(CSSPropertyOpacity, 1, |
+ CSSPrimitiveValue::UnitType::kNumber); |
+ exit_button_->OnShown(); |
mlamouri (slow - plz ping)
2017/04/19 16:17:19
Why are we not being consistent with onShown and o
xjz
2017/04/19 17:11:19
The initial thought was call onHidden() first to s
|
+ } 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() { |