<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[211374] trunk</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/211374">211374</a></dd>
<dt>Author</dt> <dd>graouts@webkit.org</dd>
<dt>Date</dt> <dd>2017-01-30 10:16:57 -0800 (Mon, 30 Jan 2017)</dd>
</dl>
<h3>Log Message</h3>
<pre>LayoutTest media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play.html is flaky
https://bugs.webkit.org/show_bug.cgi?id=167254
<rdar://problem/30259293>
Reviewed by Dean Jackson.
Source/WebCore:
When we would identify that we need to prolong an existing auto-hide timer, when the previous
auto-hide timer was marked as non-cancelable, calling _cancelAutoHideTimer() would not actually
cancel the previous timer, which would let it fire and hide the controls bar. We now have two
methods, _cancelAutoHideTimer() which always cancels the current auto-hide timer, and
_cancelNonEnforcedAutoHideTimer() which is used from all other existing call sites, which only
cancels the current auto-hide timer if it was marked as cancelable. This, and revised timing in
the test itself, make media/modern-media-controls/media-controller/media-controller-auto-hide-
mouse-leave-after-play.html a lot more reliable.
We also make a small drive-by fix where we ensure the "autoHideDelay" property is set first so
that setting other members which may set a timer do not used an undefined value for the auto-hide
timer delay.
* Modules/modern-media-controls/controls/controls-bar.js:
(ControlsBar.prototype.set visible):
(ControlsBar.prototype.handleEvent):
(ControlsBar.prototype._cancelNonEnforcedAutoHideTimer):
(ControlsBar.prototype._cancelAutoHideTimer):
LayoutTests:
We improve the test by setting off timers when the actual "play" and "pause" events are
triggered rather than when we call .play() or .pause() on the media element. This matches
when the auto-hide timer are set in ControlsBar and makes the test more robust. Combined
with the modern-media-controls WebCore module source changes, we can now stop marking this
test as flaky.
We apply the same change to media/modern-media-controls/media-controller/media-controller-auto-hide-pause.html
since it also sets off a timer based on the media being paused.
* media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play-expected.txt:
* media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play.html:
* media/modern-media-controls/media-controller/media-controller-auto-hide-pause.html:
* platform/mac/TestExpectations:</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerautohidemouseleaveafterplayexpectedtxt">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerautohidemouseleaveafterplayhtml">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play.html</a></li>
<li><a href="#trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerautohidepausehtml">trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-auto-hide-pause.html</a></li>
<li><a href="#trunkLayoutTestsplatformmacTestExpectations">trunk/LayoutTests/platform/mac/TestExpectations</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesmodernmediacontrolscontrolscontrolsbarjs">trunk/Source/WebCore/Modules/modern-media-controls/controls/controls-bar.js</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (211373 => 211374)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2017-01-30 18:14:25 UTC (rev 211373)
+++ trunk/LayoutTests/ChangeLog        2017-01-30 18:16:57 UTC (rev 211374)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2017-01-30 Antoine Quint <graouts@apple.com>
+
+ LayoutTest media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play.html is flaky
+ https://bugs.webkit.org/show_bug.cgi?id=167254
+ <rdar://problem/30259293>
+
+ Reviewed by Dean Jackson.
+
+ We improve the test by setting off timers when the actual "play" and "pause" events are
+ triggered rather than when we call .play() or .pause() on the media element. This matches
+ when the auto-hide timer are set in ControlsBar and makes the test more robust. Combined
+ with the modern-media-controls WebCore module source changes, we can now stop marking this
+ test as flaky.
+
+ We apply the same change to media/modern-media-controls/media-controller/media-controller-auto-hide-pause.html
+ since it also sets off a timer based on the media being paused.
+
+ * media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play-expected.txt:
+ * media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play.html:
+ * media/modern-media-controls/media-controller/media-controller-auto-hide-pause.html:
+ * platform/mac/TestExpectations:
+
</ins><span class="cx"> 2017-01-30 Daniel Bates <dabates@apple.com>
</span><span class="cx">
</span><span class="cx"> [QuickLook] Make HTTP QuickLook tests work in Apple Internal DumpRenderTree
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerautohidemouseleaveafterplayexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play-expected.txt (211373 => 211374)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play-expected.txt        2017-01-30 18:14:25 UTC (rev 211373)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play-expected.txt        2017-01-30 18:16:57 UTC (rev 211374)
</span><span class="lines">@@ -6,9 +6,11 @@
</span><span class="cx"> Video started playing, controls bar is visible by default.
</span><span class="cx"> PASS controlsBar.classList.contains('faded') is false
</span><span class="cx">
</span><del>-Pausing media, this stops the auto-hide timer.
</del><ins>+Pausing media.
+Media playback has paused, this stops the auto-hide timer.
</ins><span class="cx">
</span><del>-Resuming media playback, this should rewind the auto-hide timer and ensure that entering and leaving the media doesn't hide the controls bar until the auto-hide timer has expired after playing.
</del><ins>+Resuming media playback.
+Media playback has resumed, this should rewind the auto-hide timer and ensure that entering and leaving the media doesn't hide the controls bar until the auto-hide timer has expired after playing.
</ins><span class="cx">
</span><span class="cx"> Mouse entering the media.
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerautohidemouseleaveafterplayhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play.html (211373 => 211374)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play.html        2017-01-30 18:14:25 UTC (rev 211373)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play.html        2017-01-30 18:16:57 UTC (rev 211374)
</span><span class="lines">@@ -9,62 +9,70 @@
</span><span class="cx"> description("Testing the controls bar appears when the mouse enters and disappears when the mouse leaves the media.");
</span><span class="cx">
</span><span class="cx"> let controlsBar;
</span><del>-let played = false;
</del><span class="cx">
</span><del>-document.querySelector("video").addEventListener("play", (event) => {
- if (played)
- return;
</del><ins>+const media = document.querySelector("video");
+media.addEventListener("play", mediaStartedPlaying);
</ins><span class="cx">
</span><del>- played = true;
-
</del><ins>+function mediaStartedPlaying()
+{
+ media.removeEventListener("play", mediaStartedPlaying);
+ baseTime = Date.now();
+ controlsBar = window.internals.shadowRoot(media).querySelector(".controls-bar");
+
</ins><span class="cx"> window.requestAnimationFrame(() => {
</span><del>- const media = event.target;
- controlsBar = window.internals.shadowRoot(media).querySelector(".controls-bar");
</del><span class="cx">
</span><span class="cx"> debug("Video started playing, controls bar is visible by default.");
</span><span class="cx"> shouldBeFalse("controlsBar.classList.contains('faded')");
</span><span class="cx">
</span><span class="cx"> debug("");
</span><del>- debug("Pausing media, this stops the auto-hide timer.");
</del><ins>+ debug("Pausing media.");
+
+ media.addEventListener("pause", mediaPaused);
</ins><span class="cx"> media.pause();
</span><ins>+ });
+}
</ins><span class="cx">
</span><ins>+function mediaPaused()
+{
+ debug("Media playback has paused, this stops the auto-hide timer.");
+ debug("");
+ debug("Resuming media playback.");
+ media.addEventListener("play", mediaResumedPlaying);
+ media.play();
+}
+
+function mediaResumedPlaying()
+{
+ debug("Media playback has resumed, this should rewind the auto-hide timer and ensure that entering and leaving the media doesn't hide the controls bar until the auto-hide timer has expired after playing.");
+ setTimeout(() => {
+ debug("");
+ debug("Mouse entering the media.");
+ window.eventSender.mouseMoveTo(100, 100);
+
</ins><span class="cx"> setTimeout(() => {
</span><span class="cx"> debug("");
</span><del>- debug("Resuming media playback, this should rewind the auto-hide timer and ensure that entering and leaving the media doesn't hide the controls bar until the auto-hide timer has expired after playing.");
- media.play();
</del><ins>+ debug("Mouse leaving the media.");
+ window.eventSender.mouseMoveTo(400, 400);
</ins><span class="cx">
</span><del>- setTimeout(() => {
</del><ins>+ window.requestAnimationFrame(() => {
</ins><span class="cx"> debug("");
</span><del>- debug("Mouse entering the media.");
- eventSender.mouseMoveTo(100, 100);
</del><ins>+ debug("The initial auto-hide timer started when we resumed playback should not have expired or be overriden by the mouse entering and leaving the media, the controls should remain visible.");
+ shouldBeFalse("controlsBar.classList.contains('faded')");
+ });
+ }, 50);
+ }, 50);
</ins><span class="cx">
</span><del>- setTimeout(() => {
- debug("");
- debug("Mouse leaving the media.");
- eventSender.mouseMoveTo(400, 400);
</del><ins>+ setTimeout(() => {
+ debug("");
+ debug("The initial auto-hide timer started when we resumed playback should now have expired and the controls should be faded.");
+ shouldBeTrue("controlsBar.classList.contains('faded')");
</ins><span class="cx">
</span><del>- window.requestAnimationFrame(() => {
- debug("");
- debug("The initial auto-hide timer started when we resumed playback should not have expired or be overriden by the mouse entering and leaving the media, the controls should remain visible.");
- shouldBeFalse("controlsBar.classList.contains('faded')");
</del><ins>+ debug("");
+ media.remove();
+ finishJSTest();
+ }, 300);
+}
</ins><span class="cx">
</span><del>- });
- }, 50);
- }, 50);
-
- setTimeout(() => {
- debug("");
- debug("The initial auto-hide timer started when we resumed playback should now have expired and the controls should be faded.");
- shouldBeTrue("controlsBar.classList.contains('faded')");
-
- debug("");
- media.remove();
- finishJSTest();
- }, 300);
- });
- });
-});
-
</del><span class="cx"> </script>
</span><span class="cx"> <script src="../../../resources/js-test-post.js"></script>
</span><span class="cx"> </body>
</span></span></pre></div>
<a id="trunkLayoutTestsmediamodernmediacontrolsmediacontrollermediacontrollerautohidepausehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-auto-hide-pause.html (211373 => 211374)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-auto-hide-pause.html        2017-01-30 18:14:25 UTC (rev 211373)
+++ trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-auto-hide-pause.html        2017-01-30 18:16:57 UTC (rev 211374)
</span><span class="lines">@@ -10,7 +10,7 @@
</span><span class="cx">
</span><span class="cx"> let controlsBar;
</span><span class="cx">
</span><del>-document.querySelector("video").addEventListener("play", (event) => {
</del><ins>+document.querySelector("video").addEventListener("play", event => {
</ins><span class="cx"> window.requestAnimationFrame(() => {
</span><span class="cx"> const media = event.target;
</span><span class="cx"> controlsBar = window.internals.shadowRoot(media).querySelector(".controls-bar");
</span><span class="lines">@@ -19,16 +19,17 @@
</span><span class="cx"> shouldBeFalse("controlsBar.classList.contains('faded')");
</span><span class="cx">
</span><span class="cx"> media.pause();
</span><ins>+ media.addEventListener("pause", event => {
+ setTimeout(() => {
+ debug("");
+ debug("Auto-hide timer would have elapsed, but media was paused so controls bar should remain visible.");
+ shouldBeFalse("controlsBar.classList.contains('faded')");
</ins><span class="cx">
</span><del>- setTimeout(() => {
- debug("");
- debug("Auto-hide timer would have elapsed, but media was paused so controls bar should remain visible.");
- shouldBeFalse("controlsBar.classList.contains('faded')");
-
- debug("");
- media.remove();
- finishJSTest();
- }, 300);
</del><ins>+ debug("");
+ media.remove();
+ finishJSTest();
+ }, 300);
+ });
</ins><span class="cx"> });
</span><span class="cx"> });
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/TestExpectations (211373 => 211374)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/TestExpectations        2017-01-30 18:14:25 UTC (rev 211373)
+++ trunk/LayoutTests/platform/mac/TestExpectations        2017-01-30 18:16:57 UTC (rev 211374)
</span><span class="lines">@@ -1469,8 +1469,6 @@
</span><span class="cx">
</span><span class="cx"> webkit.org/b/165290 media/modern-media-controls/tracks-panel/tracks-panel-hide-click-outside.html [ Pass Timeout ]
</span><span class="cx">
</span><del>-webkit.org/b/167254 media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play.html [ Pass Failure ]
-
</del><span class="cx"> webkit.org/b/167263 media/modern-media-controls/media-controller/media-controller-auto-hide.html [ Pass Failure ]
</span><span class="cx">
</span><span class="cx"> webkit.org/b/167275 media/modern-media-controls/tracks-support/tracks-support-show-panel-after-dragging-controls.html [ Pass Failure ]
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (211373 => 211374)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-01-30 18:14:25 UTC (rev 211373)
+++ trunk/Source/WebCore/ChangeLog        2017-01-30 18:16:57 UTC (rev 211374)
</span><span class="lines">@@ -1,3 +1,30 @@
</span><ins>+2017-01-30 Antoine Quint <graouts@apple.com>
+
+ LayoutTest media/modern-media-controls/media-controller/media-controller-auto-hide-mouse-leave-after-play.html is flaky
+ https://bugs.webkit.org/show_bug.cgi?id=167254
+ <rdar://problem/30259293>
+
+ Reviewed by Dean Jackson.
+
+ When we would identify that we need to prolong an existing auto-hide timer, when the previous
+ auto-hide timer was marked as non-cancelable, calling _cancelAutoHideTimer() would not actually
+ cancel the previous timer, which would let it fire and hide the controls bar. We now have two
+ methods, _cancelAutoHideTimer() which always cancels the current auto-hide timer, and
+ _cancelNonEnforcedAutoHideTimer() which is used from all other existing call sites, which only
+ cancels the current auto-hide timer if it was marked as cancelable. This, and revised timing in
+ the test itself, make media/modern-media-controls/media-controller/media-controller-auto-hide-
+ mouse-leave-after-play.html a lot more reliable.
+
+ We also make a small drive-by fix where we ensure the "autoHideDelay" property is set first so
+ that setting other members which may set a timer do not used an undefined value for the auto-hide
+ timer delay.
+
+ * Modules/modern-media-controls/controls/controls-bar.js:
+ (ControlsBar.prototype.set visible):
+ (ControlsBar.prototype.handleEvent):
+ (ControlsBar.prototype._cancelNonEnforcedAutoHideTimer):
+ (ControlsBar.prototype._cancelAutoHideTimer):
+
</ins><span class="cx"> 2017-01-30 Carlos Garcia Campos <cgarcia@igalia.com>
</span><span class="cx">
</span><span class="cx"> REGRESSION(r202615?): [GStreamer] ASSERTION FAILED: isMainThread() in WebCore::BuiltinResourceHandleConstructorMap& WebCore::builtinResourceHandleConstructorMap()
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmodernmediacontrolscontrolscontrolsbarjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/controls-bar.js (211373 => 211374)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/modern-media-controls/controls/controls-bar.js        2017-01-30 18:14:25 UTC (rev 211373)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/controls-bar.js        2017-01-30 18:16:57 UTC (rev 211374)
</span><span class="lines">@@ -33,11 +33,11 @@
</span><span class="cx"> this._translation = new DOMPoint;
</span><span class="cx"> this._mediaControls = mediaControls;
</span><span class="cx">
</span><ins>+ this.autoHideDelay = ControlsBar.DefaultAutoHideDelay;
+
</ins><span class="cx"> this.fadesWhileIdle = false;
</span><span class="cx"> this.userInteractionEnabled = true;
</span><span class="cx">
</span><del>- this.autoHideDelay = ControlsBar.DefaultAutoHideDelay;
-
</del><span class="cx"> if (GestureRecognizer.SupportsTouches)
</span><span class="cx"> this._tapGestureRecognizer = new TapGestureRecognizer(this._mediaControls.element, this);
</span><span class="cx"> }
</span><span class="lines">@@ -118,7 +118,7 @@
</span><span class="cx"> if (flag && !this.visible)
</span><span class="cx"> this.faded = false;
</span><span class="cx"> else if (!flag)
</span><del>- this._cancelAutoHideTimer();
</del><ins>+ this._cancelNonEnforcedAutoHideTimer();
</ins><span class="cx">
</span><span class="cx"> super.visible = flag;
</span><span class="cx">
</span><span class="lines">@@ -157,7 +157,7 @@
</span><span class="cx"> } else if (event.currentTarget === this.element) {
</span><span class="cx"> if (event.type === "mouseenter") {
</span><span class="cx"> this._disableAutoHiding = true;
</span><del>- this._cancelAutoHideTimer();
</del><ins>+ this._cancelNonEnforcedAutoHideTimer();
</ins><span class="cx"> } else if (event.type === "mouseleave") {
</span><span class="cx"> delete this._disableAutoHiding;
</span><span class="cx"> this._resetAutoHideTimer(true);
</span><span class="lines">@@ -195,11 +195,15 @@
</span><span class="cx">
</span><span class="cx"> // Private
</span><span class="cx">
</span><ins>+ _cancelNonEnforcedAutoHideTimer()
+ {
+ if (!this._enforceAutoHideTimer)
+ this._cancelAutoHideTimer();
+
+ }
+
</ins><span class="cx"> _cancelAutoHideTimer()
</span><span class="cx"> {
</span><del>- if (this._enforceAutoHideTimer)
- return;
-
</del><span class="cx"> window.clearTimeout(this._autoHideTimer);
</span><span class="cx"> delete this._autoHideTimer;
</span><span class="cx"> }
</span></span></pre>
</div>
</div>
</body>
</html>