Modified: trunk/Source/WebCore/ChangeLog (279288 => 279289)
--- trunk/Source/WebCore/ChangeLog 2021-06-25 17:12:12 UTC (rev 279288)
+++ trunk/Source/WebCore/ChangeLog 2021-06-25 17:55:19 UTC (rev 279289)
@@ -1,3 +1,24 @@
+2021-06-25 Philippe Normand <[email protected]>
+
+ WIRELESS_PLAYBACK_TARGET guards protect unrelated code
+ https://bugs.webkit.org/show_bug.cgi?id=227404
+
+ Reviewed by Eric Carlson.
+
+ The dispatchEvent(), addEventListener() and removeEventListener() are now unconditionally
+ implemented. The WIRELESS_PLAYBACK_TARGET guards were refactored to enclose only the code
+ specific to this feature.
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent):
+ (WebCore::HTMLMediaElement::setWirelessPlaybackTarget):
+ (WebCore::HTMLMediaElement::setShouldPlayToPlaybackTarget):
+ (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed):
+ (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged):
+ (WebCore::HTMLMediaElement::addEventListener):
+ (WebCore::HTMLMediaElement::removeEventListener):
+ * html/HTMLMediaElement.h:
+
2021-06-25 Ryan Haddad <[email protected]>
Unreviewed, reverting r279208.
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (279288 => 279289)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2021-06-25 17:12:12 UTC (rev 279288)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2021-06-25 17:55:19 UTC (rev 279289)
@@ -5813,6 +5813,51 @@
});
}
+void HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent()
+{
+ bool hasTargets = m_mediaSession && mediaSession().hasWirelessPlaybackTargets();
+ ALWAYS_LOG(LOGIDENTIFIER, "hasTargets = ", hasTargets);
+ auto event = WebKitPlaybackTargetAvailabilityEvent::create(eventNames().webkitplaybacktargetavailabilitychangedEvent, hasTargets);
+ scheduleEvent(WTFMove(event));
+ scheduleUpdateMediaState();
+}
+
+void HTMLMediaElement::setWirelessPlaybackTarget(Ref<MediaPlaybackTarget>&& device)
+{
+ bool hasActiveRoute = device->hasActiveRoute();
+ ALWAYS_LOG(LOGIDENTIFIER, hasActiveRoute);
+
+ if (m_player)
+ m_player->setWirelessPlaybackTarget(WTFMove(device));
+ m_remote->shouldPlayToRemoteTargetChanged(hasActiveRoute);
+}
+
+void HTMLMediaElement::setShouldPlayToPlaybackTarget(bool shouldPlay)
+{
+ if (m_player) {
+ m_player->setShouldPlayToPlaybackTarget(shouldPlay);
+ setIsPlayingToWirelessTarget(m_player->isCurrentPlaybackTargetWireless());
+ }
+}
+
+void HTMLMediaElement::playbackTargetPickerWasDismissed()
+{
+ m_remote->playbackTargetPickerWasDismissed();
+}
+
+void HTMLMediaElement::remoteHasAvailabilityCallbacksChanged()
+{
+ bool hasListeners = hasEventListeners(eventNames().webkitplaybacktargetavailabilitychangedEvent) || m_remote->hasAvailabilityCallbacks();
+ if (m_hasPlaybackTargetAvailabilityListeners == hasListeners)
+ return;
+
+ ALWAYS_LOG(LOGIDENTIFIER, "hasListeners: ", hasListeners);
+ m_hasPlaybackTargetAvailabilityListeners = hasListeners;
+ mediaSession().setHasPlaybackTargetAvailabilityListeners(hasListeners);
+ scheduleUpdateMediaState();
+}
+#endif // ENABLE(WIRELESS_PLAYBACK_TARGET)
+
void HTMLMediaElement::dispatchEvent(Event& event)
{
DEBUG_LOG(LOGIDENTIFIER, event.type());
@@ -5838,6 +5883,7 @@
updateShouldContinueAfterNeedKey();
#endif
+#if ENABLE(WIRELESS_PLAYBACK_TARGET)
if (eventType != eventNames().webkitplaybacktargetavailabilitychangedEvent)
return Node::addEventListener(eventType, WTFMove(listener), options);
@@ -5856,6 +5902,9 @@
enqueuePlaybackTargetAvailabilityChangedEvent(); // Ensure the event listener gets at least one event.
return true;
+#else
+ return Node::addEventListener(eventType, WTFMove(listener), options);
+#endif // ENABLE(WIRELESS_PLAYBACK_TARGET)
}
bool HTMLMediaElement::removeEventListener(const AtomString& eventType, EventListener& listener, const EventListenerOptions& options)
@@ -5865,10 +5914,12 @@
updateShouldContinueAfterNeedKey();
#endif
+ bool listenerWasRemoved = Node::removeEventListener(eventType, listener, options);
+#if ENABLE(WIRELESS_PLAYBACK_TARGET)
if (eventType != eventNames().webkitplaybacktargetavailabilitychangedEvent)
- return Node::removeEventListener(eventType, listener, options);
+ return listenerWasRemoved;
- if (!Node::removeEventListener(eventType, listener, options))
+ if (!listenerWasRemoved)
return false;
bool didRemoveLastAvailabilityChangedListener = !hasEventListeners(eventNames().webkitplaybacktargetavailabilitychangedEvent) && !m_remote->hasAvailabilityCallbacks();
@@ -5878,55 +5929,11 @@
mediaSession().setHasPlaybackTargetAvailabilityListeners(false);
scheduleUpdateMediaState();
}
+#endif // ENABLE(WIRELESS_PLAYBACK_TARGET)
- return true;
+ return listenerWasRemoved;
}
-void HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent()
-{
- bool hasTargets = m_mediaSession && mediaSession().hasWirelessPlaybackTargets();
- ALWAYS_LOG(LOGIDENTIFIER, "hasTargets = ", hasTargets);
- auto event = WebKitPlaybackTargetAvailabilityEvent::create(eventNames().webkitplaybacktargetavailabilitychangedEvent, hasTargets);
- scheduleEvent(WTFMove(event));
- scheduleUpdateMediaState();
-}
-
-void HTMLMediaElement::setWirelessPlaybackTarget(Ref<MediaPlaybackTarget>&& device)
-{
- bool hasActiveRoute = device->hasActiveRoute();
- ALWAYS_LOG(LOGIDENTIFIER, hasActiveRoute);
-
- if (m_player)
- m_player->setWirelessPlaybackTarget(WTFMove(device));
- m_remote->shouldPlayToRemoteTargetChanged(hasActiveRoute);
-}
-
-void HTMLMediaElement::setShouldPlayToPlaybackTarget(bool shouldPlay)
-{
- if (m_player) {
- m_player->setShouldPlayToPlaybackTarget(shouldPlay);
- setIsPlayingToWirelessTarget(m_player->isCurrentPlaybackTargetWireless());
- }
-}
-
-void HTMLMediaElement::playbackTargetPickerWasDismissed()
-{
- m_remote->playbackTargetPickerWasDismissed();
-}
-
-void HTMLMediaElement::remoteHasAvailabilityCallbacksChanged()
-{
- bool hasListeners = hasEventListeners(eventNames().webkitplaybacktargetavailabilitychangedEvent) || m_remote->hasAvailabilityCallbacks();
- if (m_hasPlaybackTargetAvailabilityListeners == hasListeners)
- return;
-
- ALWAYS_LOG(LOGIDENTIFIER, "hasListeners: ", hasListeners);
- m_hasPlaybackTargetAvailabilityListeners = hasListeners;
- mediaSession().setHasPlaybackTargetAvailabilityListeners(hasListeners);
- scheduleUpdateMediaState();
-}
-#endif // ENABLE(WIRELESS_PLAYBACK_TARGET)
-
bool HTMLMediaElement::webkitCurrentPlaybackTargetIsWireless() const
{
INFO_LOG(LOGIDENTIFIER, m_isPlayingToWirelessTarget);
Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (279288 => 279289)
--- trunk/Source/WebCore/html/HTMLMediaElement.h 2021-06-25 17:12:12 UTC (rev 279288)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h 2021-06-25 17:55:19 UTC (rev 279289)
@@ -398,11 +398,12 @@
void textTrackReadyStateChanged(TextTrack*);
void updateTextTrackRepresentationImageIfNeeded();
-#if ENABLE(WIRELESS_PLAYBACK_TARGET)
- void webkitShowPlaybackTargetPicker();
bool addEventListener(const AtomString& eventType, Ref<EventListener>&&, const AddEventListenerOptions&) override;
bool removeEventListener(const AtomString& eventType, EventListener&, const EventListenerOptions&) override;
+#if ENABLE(WIRELESS_PLAYBACK_TARGET)
+ void webkitShowPlaybackTargetPicker();
+
void wirelessRoutesAvailableDidChange() override;
void setWirelessPlaybackTarget(Ref<MediaPlaybackTarget>&&) override;
void setShouldPlayToPlaybackTarget(bool) override;
@@ -572,10 +573,8 @@
void didReceiveRemoteControlCommand(PlatformMediaSession::RemoteControlCommandType, const PlatformMediaSession::RemoteCommandArgument&) override;
-#if ENABLE(WIRELESS_PLAYBACK_TARGET)
using EventTarget::dispatchEvent;
void dispatchEvent(Event&) override;
-#endif
protected:
HTMLMediaElement(const QualifiedName&, Document&, bool createdByParser);