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;
},