Changeset 195068 in webkit


Ignore:
Timestamp:
Jan 14, 2016 11:19:34 AM (8 years ago)
Author:
matthew_hanson@apple.com
Message:

Merge r194672. rdar://problem/24154288

Location:
branches/safari-601-branch
Files:
2 added
15 edited

Legend:

Unmodified
Added
Removed
  • branches/safari-601-branch/LayoutTests/ChangeLog

    r195067 r195068  
     12016-01-14  Matthew Hanson  <matthew_hanson@apple.com>
     2
     3        Merge r194672. rdar://problem/24154288
     4
     5    2016-01-06  Eric Carlson  <eric.carlson@apple.com>
     6
     7            AirPlay route availability event not always sent
     8            https://bugs.webkit.org/show_bug.cgi?id=152802
     9
     10            Reviewed by Jer Noble.
     11
     12            * media/airplay-target-availability-expected.txt: Added.
     13            * media/airplay-target-availability.html: Added.
     14            * platform/mac/TestExpectations: Skip new test on Yosemite.
     15            * platform/efl/TestExpectations: Skip new test.
     16            * platform/gtk/TestExpectations: Ditto.
     17            * platform/win/TestExpectations: Ditto.
     18
    1192016-01-14  Matthew Hanson  <matthew_hanson@apple.com>
    220
  • branches/safari-601-branch/LayoutTests/platform/efl/TestExpectations

    r193578 r195068  
    23022302# This test uses an MPEG-4 video
    23032303media/video-seek-to-current-time.html [ Skip ]
     2304
     2305# WIRELESS_PLAYBACK_TARGET not enabled.
     2306media/airplay-target-availability.html
  • branches/safari-601-branch/LayoutTests/platform/gtk/TestExpectations

    r188393 r195068  
    24042404# This test uses an MPEG-4 video
    24052405media/video-seek-to-current-time.html [ Skip ]
     2406
     2407# WIRELESS_PLAYBACK_TARGET not enabled.
     2408media/airplay-target-availability.html
  • branches/safari-601-branch/LayoutTests/platform/mac/TestExpectations

    r195067 r195068  
    13821382[ Yosemite ElCapitan ] css3/font-variant-small-caps-synthesis-coverage.html [ ImageOnlyFailure ]
    13831383[ Yosemite ElCapitan ] css3/font-variant-petite-caps-synthesis-coverage.html [ ImageOnlyFailure ]
     1384
     1385# WIRELESS_PLAYBACK_TARGET not enabled on Yosemite.
     1386[ Yosemite ] media/airplay-target-availability.html
  • branches/safari-601-branch/LayoutTests/platform/win/TestExpectations

    r194288 r195068  
    31413141# This test uses an MPEG-4 video
    31423142media/video-seek-to-current-time.html [ Skip ]
     3143
     3144# WIRELESS_PLAYBACK_TARGET not enabled.
     3145media/airplay-target-availability.html
  • branches/safari-601-branch/Source/WebCore/ChangeLog

    r195067 r195068  
     12016-01-14  Matthew Hanson  <matthew_hanson@apple.com>
     2
     3        Merge r194672. rdar://problem/24154288
     4
     5    2016-01-06  Eric Carlson  <eric.carlson@apple.com>
     6
     7            AirPlay route availability event not always sent
     8            https://bugs.webkit.org/show_bug.cgi?id=152802
     9
     10            Reviewed by Jer Noble.
     11
     12            Test: media/airplay-target-availability.html
     13
     14            * Modules/mediasession/WebMediaSessionManager.cpp:
     15            (WebCore::mediaProducerStateString): Log the new flags.
     16            (WebCore::WebMediaSessionManager::clientStateDidChange): Schedule a client reconfiguration if
     17              the 'requires monitoring', 'has listener', or 'has audio or video' flags have changed.
     18            (WebCore::WebMediaSessionManager::configurePlaybackTargetMonitoring): Start monitoring if
     19              at least one client has a listener and at least one has audio/video.
     20
     21            * html/HTMLMediaElement.cpp:
     22            (WebCore::HTMLMediaElement::mediaState): Set new flags.
     23            * html/HTMLMediaElement.h:
     24
     25            * page/MediaProducer.h: Define new flags. Add new state enum.
     26
     27            * platform/graphics/MediaPlaybackTargetContext.h: Initial state is "Unknown".
     28
     29            * platform/mock/MediaPlaybackTargetMock.h:
     30            * platform/mock/MediaPlaybackTargetPickerMock.cpp:
     31            (WebCore::MediaPlaybackTargetPickerMock::externalOutputDeviceAvailable): Enums not bitfields.
     32            (WebCore::MediaPlaybackTargetPickerMock::startingMonitoringPlaybackTargets): Ditto. Don't make
     33              device change callback if the device state is "Unknown".
     34            (WebCore::MediaPlaybackTargetPickerMock::setState): Ditto.
     35            * platform/mock/MediaPlaybackTargetPickerMock.h:
     36
     37            * testing/Internals.cpp:
     38            (WebCore::Internals::setMockMediaPlaybackTargetPickerState): Support new state.
     39
    1402016-01-14  Matthew Hanson  <matthew_hanson@apple.com>
    241
  • branches/safari-601-branch/Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp

    r195067 r195068  
    7575    if (flags & MediaProducer::IsPlayingToExternalDevice)
    7676        string.append("IsPlayingToExternalDevice + ");
     77    if (flags & MediaProducer::HasPlaybackTargetAvailabilityListener)
     78        string.append("HasPlaybackTargetAvailabilityListener + ");
    7779    if (flags & MediaProducer::RequiresPlaybackTargetMonitoring)
    7880        string.append("RequiresPlaybackTargetMonitoring + ");
     
    8183    if (flags & MediaProducer::DidPlayToEnd)
    8284        string.append("DidPlayToEnd + ");
     85    if (flags & MediaProducer::HasAudioOrVideo)
     86        string.append("HasAudioOrVideo + ");
    8387    if (string.isEmpty())
    8488        string.append("IsNotPlaying");
     
    210214
    211215    changedClientState->flags = newFlags;
    212     if (!flagsAreSet(oldFlags, MediaProducer::RequiresPlaybackTargetMonitoring) && flagsAreSet(newFlags, MediaProducer::RequiresPlaybackTargetMonitoring))
     216
     217    MediaProducer::MediaStateFlags updateConfigurationFlags = MediaProducer::RequiresPlaybackTargetMonitoring | MediaProducer::HasPlaybackTargetAvailabilityListener | MediaProducer::HasAudioOrVideo;
     218    if (!flagsAreSet(oldFlags, updateConfigurationFlags) && flagsAreSet(newFlags, updateConfigurationFlags))
    213219        scheduleDelayedTask(TargetMonitoringConfigurationTask);
    214220
     
    232238    }
    233239
    234     // Do not take begin playing to the device unless playback has just started.
     240    // Do not begin playing to the device unless playback has just started.
    235241    if (!flagsAreSet(newFlags, MediaProducer::IsPlayingVideo) || flagsAreSet(oldFlags, MediaProducer::IsPlayingVideo))
    236242        return;
     
    340346{
    341347    bool monitoringRequired = false;
     348    bool hasAvailabilityListener = false;
     349    bool haveClientWithMedia = false;
    342350    for (auto& state : m_clientState) {
    343351        if (state->flags & MediaProducer::RequiresPlaybackTargetMonitoring) {
     
    345353            break;
    346354        }
     355        if (state->flags & MediaProducer::HasPlaybackTargetAvailabilityListener)
     356            hasAvailabilityListener = true;
     357        if (state->flags & MediaProducer::HasAudioOrVideo)
     358            haveClientWithMedia = true;
    347359    }
    348360
    349361    LOG(Media, "WebMediaSessionManager::configurePlaybackTargetMonitoring - monitoringRequired = %i", (int)monitoringRequired);
    350362
    351     if (monitoringRequired)
     363    if (monitoringRequired || (hasAvailabilityListener && haveClientWithMedia))
    352364        targetPicker().startingMonitoringPlaybackTargets();
    353365    else
  • branches/safari-601-branch/Source/WebCore/html/HTMLMediaElement.cpp

    r188424 r195068  
    64356435MediaProducer::MediaStateFlags HTMLMediaElement::mediaState() const
    64366436{
    6437 
    64386437    MediaStateFlags state = IsNotPlaying;
    64396438
     
    64446443        state |= IsPlayingToExternalDevice;
    64456444
    6446     if (m_player && m_hasPlaybackTargetAvailabilityListeners && !m_mediaSession->wirelessVideoPlaybackDisabled(*this))
    6447         state |= RequiresPlaybackTargetMonitoring;
     6445    if (m_hasPlaybackTargetAvailabilityListeners) {
     6446        state |= HasPlaybackTargetAvailabilityListener;
     6447        if (!m_mediaSession->wirelessVideoPlaybackDisabled(*this))
     6448            state |= RequiresPlaybackTargetMonitoring;
     6449    }
    64486450
    64496451    bool requireUserGesture = m_mediaSession->hasBehaviorRestriction(MediaElementSession::RequireUserGestureToAutoplayToExternalDevice);
    64506452    if (m_readyState >= HAVE_METADATA && !requireUserGesture && !m_failedToPlayToWirelessTarget)
    64516453        state |= ExternalDeviceAutoPlayCandidate;
     6454
     6455    if (hasActiveVideo || hasAudio)
     6456        state |= HasAudioOrVideo;
    64526457
    64536458    if (hasActiveVideo && endedPlayback())
  • branches/safari-601-branch/Source/WebCore/html/HTMLMediaElement.h

    r188393 r195068  
    746746    };
    747747    void updateMediaState(UpdateMediaState updateState = UpdateMediaState::Synchronously);
     748    bool hasPlaybackTargetAvailabilityListeners() const { return m_hasPlaybackTargetAvailabilityListeners; }
    748749#endif
    749750
  • branches/safari-601-branch/Source/WebCore/page/MediaProducer.h

    r186361 r195068  
    3939        ExternalDeviceAutoPlayCandidate = 1 << 4,
    4040        DidPlayToEnd = 1 << 5,
     41        HasPlaybackTargetAvailabilityListener = 1 << 9,
     42        HasAudioOrVideo = 1 << 10,
    4143    };
    4244    typedef unsigned MediaStateFlags;
  • branches/safari-601-branch/Source/WebCore/platform/graphics/MediaPlaybackTargetContext.h

    r195067 r195068  
    4949
    5050    enum ContextState {
    51         Unavailable = 0,
    52         OutputDeviceAvailable = 1 << 0,
     51        Unknown = 0,
     52        OutputDeviceUnavailable = 1,
     53        OutputDeviceAvailable = 2,
    5354    };
    5455    typedef unsigned State;
     
    9899    AVOutputContext *m_outputContext { nullptr };
    99100    String m_name;
    100     State m_state { Unavailable };
     101    State m_state { Unknown };
    101102};
    102103
  • branches/safari-601-branch/Source/WebCore/platform/mock/MediaPlaybackTargetMock.h

    r195067 r195068  
    5656
    5757    String m_name;
    58     MediaPlaybackTargetContext::State m_state { MediaPlaybackTargetContext::Unavailable };
     58    MediaPlaybackTargetContext::State m_state { MediaPlaybackTargetContext::Unknown };
    5959    mutable MediaPlaybackTargetContext m_context;
    6060};
  • branches/safari-601-branch/Source/WebCore/platform/mock/MediaPlaybackTargetPickerMock.cpp

    r195067 r195068  
    6161{
    6262    LOG(Media, "MediaPlaybackTargetPickerMock::externalOutputDeviceAvailable");
    63     return m_state & MediaPlaybackTargetContext::OutputDeviceAvailable;
     63    return m_state == MediaPlaybackTargetContext::OutputDeviceAvailable;
    6464}
    6565
     
    9191    LOG(Media, "MediaPlaybackTargetPickerMock::startingMonitoringPlaybackTargets");
    9292
    93     if (m_state & MediaPlaybackTargetContext::OutputDeviceAvailable)
     93    if (m_state == MediaPlaybackTargetContext::OutputDeviceAvailable)
    9494        availableDevicesDidChange();
    9595
    96     if (!m_deviceName.isEmpty())
     96    if (!m_deviceName.isEmpty() && m_state != MediaPlaybackTargetContext::Unknown)
    9797        currentDeviceDidChange();
    9898}
     
    106106{
    107107    LOG(Media, "MediaPlaybackTargetPickerMock::invalidatePlaybackTargets");
    108     setState(WTF::emptyString(), MediaPlaybackTargetContext::Unavailable);
     108    setState(emptyString(), MediaPlaybackTargetContext::Unknown);
    109109}
    110110
     
    113113    LOG(Media, "MediaPlaybackTargetPickerMock::setState - name = %s, state = 0x%x", deviceName.utf8().data(), (unsigned)state);
    114114
    115     if (deviceName != m_deviceName) {
     115    if (deviceName != m_deviceName && state != MediaPlaybackTargetContext::Unknown) {
    116116        m_deviceName = deviceName;
    117117        currentDeviceDidChange();
  • branches/safari-601-branch/Source/WebCore/platform/mock/MediaPlaybackTargetPickerMock.h

    r195067 r195068  
    5959    String m_deviceName;
    6060    RunLoop::Timer<MediaPlaybackTargetPickerMock> m_timer;
    61     MediaPlaybackTargetContext::State m_state { MediaPlaybackTargetContext::Unavailable };
     61    MediaPlaybackTargetContext::State m_state { MediaPlaybackTargetContext::Unknown };
    6262    bool m_showingMenu { false };
    6363};
  • branches/safari-601-branch/Source/WebCore/testing/Internals.cpp

    r195067 r195068  
    28192819    ASSERT(page);
    28202820
    2821     MediaPlaybackTargetContext::State state = MediaPlaybackTargetContext::Unavailable;
     2821    MediaPlaybackTargetContext::State state = MediaPlaybackTargetContext::Unknown;
    28222822
    28232823    if (equalIgnoringCase(deviceState, "DeviceAvailable"))
    28242824        state = MediaPlaybackTargetContext::OutputDeviceAvailable;
     2825    else if (equalIgnoringCase(deviceState, "DeviceUnavailable"))
     2826        state = MediaPlaybackTargetContext::OutputDeviceUnavailable;
     2827    else if (equalIgnoringCase(deviceState, "Unknown"))
     2828        state = MediaPlaybackTargetContext::Unknown;
    28252829    else {
    28262830        ec = INVALID_ACCESS_ERR;
Note: See TracChangeset for help on using the changeset viewer.