Title: [174073] trunk/Source/WebCore
Revision
174073
Author
eric.carl...@apple.com
Date
2014-09-29 11:12:13 -0700 (Mon, 29 Sep 2014)

Log Message

[iOS] Optimize media controls AirPlay discovery
https://bugs.webkit.org/show_bug.cgi?id=137180

Reviewed by Darin Adler.

AirPlay discovery mode uses increases power consumption, so don't enable it when there
is no chance an AirPlay target picker will be useful.

* Modules/mediacontrols/mediaControlsiOS.js:
(ControllerIOS): Initialize isListeningForPlaybackTargetAvailabilityEvent.
(ControllerIOS.prototype.addVideoListeners): Don't enable register wireless playback event
    listeners, it isn't possible to show the target picker until there is an inline controller.
(ControllerIOS.prototype.removeVideoListeners): Call setShouldListenForPlaybackTargetAvailabilityEvent.
(ControllerIOS.prototype.setControlsType): Add wireless event listers on when not showing
    the one button controller.
(ControllerIOS.prototype.updateStatusDisplay): Unregister wireless event listeners when the
    media element is in an error state.
(ControllerIOS.prototype.setShouldListenForPlaybackTargetAvailabilityEvent): New, add or
    remove event listeners.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (174072 => 174073)


--- trunk/Source/WebCore/ChangeLog	2014-09-29 18:05:36 UTC (rev 174072)
+++ trunk/Source/WebCore/ChangeLog	2014-09-29 18:12:13 UTC (rev 174073)
@@ -1,5 +1,27 @@
 2014-09-29  Eric Carlson  <eric.carl...@apple.com>
 
+        [iOS] Optimize media controls AirPlay discovery
+        https://bugs.webkit.org/show_bug.cgi?id=137180
+
+        Reviewed by Darin Adler.
+        
+        AirPlay discovery mode uses increases power consumption, so don't enable it when there
+        is no chance an AirPlay target picker will be useful.
+
+        * Modules/mediacontrols/mediaControlsiOS.js:
+        (ControllerIOS): Initialize isListeningForPlaybackTargetAvailabilityEvent.
+        (ControllerIOS.prototype.addVideoListeners): Don't enable register wireless playback event
+            listeners, it isn't possible to show the target picker until there is an inline controller.
+        (ControllerIOS.prototype.removeVideoListeners): Call setShouldListenForPlaybackTargetAvailabilityEvent.
+        (ControllerIOS.prototype.setControlsType): Add wireless event listers on when not showing 
+            the one button controller.
+        (ControllerIOS.prototype.updateStatusDisplay): Unregister wireless event listeners when the
+            media element is in an error state.
+        (ControllerIOS.prototype.setShouldListenForPlaybackTargetAvailabilityEvent): New, add or
+            remove event listeners. 
+
+2014-09-29  Eric Carlson  <eric.carl...@apple.com>
+
         [iOS] Remove obsolete playbackTargetAvailabilityChanged methods
         https://bugs.webkit.org/show_bug.cgi?id=137179
 

Modified: trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js (174072 => 174073)


--- trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js	2014-09-29 18:05:36 UTC (rev 174072)
+++ trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js	2014-09-29 18:12:13 UTC (rev 174073)
@@ -7,6 +7,7 @@
 {
     this.hasWirelessPlaybackTargets = false;
     this._pageScaleFactor = 1;
+    this.isListeningForPlaybackTargetAvailabilityEvent = false;
     Controller.call(this, root, video, host);
 
     this.updateWirelessTargetAvailable();
@@ -29,11 +30,6 @@
 
         this.listenFor(this.video, 'webkitbeginfullscreen', this.handleFullscreenChange);
         this.listenFor(this.video, 'webkitendfullscreen', this.handleFullscreenChange);
-
-        if (window.WebKitPlaybackTargetAvailabilityEvent) {
-            this.listenFor(this.video, 'webkitcurrentplaybacktargetiswirelesschanged', this.handleWirelessPlaybackChange);
-            this.listenFor(this.video, 'webkitplaybacktargetavailabilitychanged', this.handleWirelessTargetAvailableChange);
-        }
     },
 
     removeVideoListeners: function() {
@@ -42,10 +38,7 @@
         this.stopListeningFor(this.video, 'webkitbeginfullscreen', this.handleFullscreenChange);
         this.stopListeningFor(this.video, 'webkitendfullscreen', this.handleFullscreenChange);
 
-        if (window.WebKitPlaybackTargetAvailabilityEvent) {
-            this.stopListeningFor(this.video, 'webkitcurrentplaybacktargetiswirelesschanged', this.handleWirelessPlaybackChange);
-            this.stopListeningFor(this.video, 'webkitplaybacktargetavailabilitychanged', this.handleWirelessTargetAvailableChange);
-        }
+        this.setShouldListenForPlaybackTargetAvailabilityEvent(false);
     },
 
     createBase: function() {
@@ -180,6 +173,8 @@
             this.addStartPlaybackControls();
         else
             this.removeStartPlaybackControls();
+
+        this.setShouldListenForPlaybackTargetAvailabilityEvent(type !== ControllerIOS.StartPlaybackControls);
     },
 
     addStartPlaybackControls: function() {
@@ -435,6 +430,8 @@
 
     updateStatusDisplay: function(event)
     {
+        if (this.video.error)
+            setShouldListenForPlaybackTargetAvailabilityEvent(false);
         this.controls.startPlaybackButton.classList.toggle(this.ClassNames.failed, this.video.error !== null);
         Controller.prototype.updateStatusDisplay.call(this, event);
     },
@@ -445,6 +442,24 @@
         Controller.prototype.setPlaying.call(this, isPlaying);
     },
 
+    setShouldListenForPlaybackTargetAvailabilityEvent: function(shouldListen)
+    {
+        if (!window.WebKitPlaybackTargetAvailabilityEvent || this.isListeningForPlaybackTargetAvailabilityEvent == shouldListen)
+            return;
+
+        if (shouldListen && (this.shouldHaveStartPlaybackButton() || this.video.error))
+            return;
+
+        this.isListeningForPlaybackTargetAvailabilityEvent = shouldListen;
+        if (shouldListen) {
+            this.listenFor(this.video, 'webkitcurrentplaybacktargetiswirelesschanged', this.handleWirelessPlaybackChange);
+            this.listenFor(this.video, 'webkitplaybacktargetavailabilitychanged', this.handleWirelessTargetAvailableChange);
+        } else {
+            this.stopListeningFor(this.video, 'webkitcurrentplaybacktargetiswirelesschanged', this.handleWirelessPlaybackChange);
+            this.stopListeningFor(this.video, 'webkitplaybacktargetavailabilitychanged', this.handleWirelessTargetAvailableChange);
+        }
+    },
+
     get pageScaleFactor() {
         return this._pageScaleFactor;
     },
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to