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

Unified Diff: third_party/WebKit/Source/core/html/HTMLMediaElement.cpp

Issue 2556333002: Detect change on video/viewport intersection when rendered remotely (Closed)
Patch Set: Add API to WebMediaPlayerClient. Created 4 years 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 side-by-side diff with in-line comments
Download patch
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 dcf3d60f9d3a77daeb6ba5f0f05e3c4c7e30e025..8ebf80990d836b331943b0a6fb81b7e13de61a81 100644
--- a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
@@ -128,6 +128,7 @@ namespace {
constexpr float kMostlyFillViewportThreshold = 0.85f;
constexpr double kMostlyFillViewportBecomeStableSeconds = 5;
+constexpr double kCheckIntersectWhenPausedIntervalInSeconds = 2;
miu 2016/12/10 02:18:37 If the "stable" check is 5 seconds, the timer inte
xjz 2016/12/12 18:58:45 Done.
enum MediaControlsShow {
MediaControlsShowAttribute = 0,
@@ -370,6 +371,9 @@ HTMLMediaElement::HTMLMediaElement(const QualifiedName& tagName,
m_viewportFillDebouncerTimer(
this,
&HTMLMediaElement::viewportFillDebouncerTimerFired),
+ m_checkIntersectionWhenPausedTimer(
+ this,
+ &HTMLMediaElement::checkIntersectionWhenPausedTimerFired),
m_playedTimeRanges(),
m_asyncEventQueue(GenericEventQueue::create(this)),
m_playbackRate(1.0f),
@@ -3254,6 +3258,7 @@ void HTMLMediaElement::updatePlayState() {
webMediaPlayer()->play();
}
+ m_checkIntersectionWhenPausedTimer.stop();
startPlaybackProgressTimer();
m_playing = true;
} else { // Should not be playing right now
@@ -3262,6 +3267,7 @@ void HTMLMediaElement::updatePlayState() {
}
m_playbackProgressTimer.stop();
+ startCheckIntersectionWhenPausedTimer();
m_playing = false;
double time = currentTime();
if (time > m_lastSeekTime)
@@ -3275,6 +3281,7 @@ void HTMLMediaElement::updatePlayState() {
void HTMLMediaElement::stopPeriodicTimers() {
m_progressEventTimer.stop();
m_playbackProgressTimer.stop();
+ m_checkIntersectionWhenPausedTimer.stop();
miu 2016/12/10 02:18:37 If you take my advice below, this extra stop() cal
xjz 2016/12/12 18:58:45 Done.
}
void HTMLMediaElement::
@@ -4033,8 +4040,13 @@ DEFINE_TRACE(HTMLMediaElement::AudioSourceProviderImpl) {
visitor->trace(m_client);
}
+void HTMLMediaElement::enableMonitorViewportIntersection(bool enable) {
+ m_enableMonitorViewportIntersection = enable;
miu 2016/12/10 02:18:37 IMHO, this would all be simpler if we didn't have
xjz 2016/12/12 18:58:45 Done.
+}
+
void HTMLMediaElement::checkViewportIntersectionChanged() {
- // TODO(xjz): Early return if we not in tab mirroring.
+ if (!m_enableMonitorViewportIntersection)
+ return;
IntersectionGeometry geometry(
document().frame()->localFrameRoot()->document(), this, Vector<Length>(),
@@ -4071,4 +4083,16 @@ void HTMLMediaElement::viewportFillDebouncerTimerFired(TimerBase*) {
m_webMediaPlayer->becameDominantVisibleContent(m_mostlyFillingViewport);
}
+void HTMLMediaElement::checkIntersectionWhenPausedTimerFired(TimerBase*) {
+ checkViewportIntersectionChanged();
+}
+
+void HTMLMediaElement::startCheckIntersectionWhenPausedTimer() {
+ if (m_checkIntersectionWhenPausedTimer.isActive())
+ return;
+
+ m_checkIntersectionWhenPausedTimer.startRepeating(
+ kCheckIntersectWhenPausedIntervalInSeconds, BLINK_FROM_HERE);
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698