⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 238528 in webkit


Ignore:
Timestamp:
Nov 26, 2018, 4:02:28 PM (8 years ago)
Author:
jer.noble@apple.com
Message:

Adopt -setOverrideRouteSharingPolicy:routingContextUID: SPI
https://bugs.webkit.org/show_bug.cgi?id=190951
<rdar://problem/45213065>

Reviewed by Alex Christensen.

Source/WebCore:

Request the correct route policy and context from the VideoFullscreenModel.

  • platform/cocoa/VideoFullscreenModel.h:

(WebCore::VideoFullscreenModel::requestRouteSharingPolicyAndContextUID):

  • platform/cocoa/VideoFullscreenModelVideoElement.h:
  • platform/cocoa/VideoFullscreenModelVideoElement.mm:

(WebCore::VideoFullscreenModelVideoElement::requestRouteSharingPolicyAndContextUID):

  • platform/ios/VideoFullscreenInterfaceAVKit.h:
  • platform/ios/VideoFullscreenInterfaceAVKit.mm:

(-[WebAVPlayerViewController setWebKitOverrideRouteSharingPolicy:routingContextUID:]):
(VideoFullscreenInterfaceAVKit::setVideoFullscreenModel):
(VideoFullscreenInterfaceAVKit::doSetup):

Source/WebCore/PAL:

  • pal/spi/cocoa/AVKitSPI.h:

Source/WebKit:

Add an asyncronous reply request to VideoFullscreenManager.

  • Platform/IPC/MessageSender.h:

(IPC::MessageSender::sendWithAsyncReply):

  • UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
  • UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:

(WebKit::VideoFullscreenModelContext::requestRouteSharingPolicyAndContextUID):

  • WebProcess/cocoa/VideoFullscreenManager.h:
  • WebProcess/cocoa/VideoFullscreenManager.messages.in:
  • WebProcess/cocoa/VideoFullscreenManager.mm:

(WebKit::VideoFullscreenManager::requestRouteSharingPolicyAndContextUID):

Location:
trunk/Source
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r238524 r238528  
     12018-11-26  Jer Noble  <jer.noble@apple.com>
     2
     3        Adopt -setOverrideRouteSharingPolicy:routingContextUID: SPI
     4        https://bugs.webkit.org/show_bug.cgi?id=190951
     5        <rdar://problem/45213065>
     6
     7        Reviewed by Alex Christensen.
     8
     9        Request the correct route policy and context from the VideoFullscreenModel.
     10
     11        * platform/cocoa/VideoFullscreenModel.h:
     12        (WebCore::VideoFullscreenModel::requestRouteSharingPolicyAndContextUID):
     13        * platform/cocoa/VideoFullscreenModelVideoElement.h:
     14        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
     15        (WebCore::VideoFullscreenModelVideoElement::requestRouteSharingPolicyAndContextUID):
     16        * platform/ios/VideoFullscreenInterfaceAVKit.h:
     17        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
     18        (-[WebAVPlayerViewController setWebKitOverrideRouteSharingPolicy:routingContextUID:]):
     19        (VideoFullscreenInterfaceAVKit::setVideoFullscreenModel):
     20        (VideoFullscreenInterfaceAVKit::doSetup):
     21
    1222018-11-24  Ryosuke Niwa  <rniwa@webkit.org>
    223
  • trunk/Source/WebCore/PAL/ChangeLog

    r238515 r238528  
     12018-11-26  Jer Noble  <jer.noble@apple.com>
     2
     3        Adopt -setOverrideRouteSharingPolicy:routingContextUID: SPI
     4        https://bugs.webkit.org/show_bug.cgi?id=190951
     5        <rdar://problem/45213065>
     6
     7        Reviewed by Alex Christensen.
     8
     9        * pal/spi/cocoa/AVKitSPI.h:
     10
    1112018-11-26  Andy Estes  <aestes@apple.com>
    212
  • trunk/Source/WebCore/PAL/pal/spi/cocoa/AVKitSPI.h

    r237483 r238528  
    7474@property (nonatomic, readonly, getter=isPictureInPictureSuspended) BOOL pictureInPictureSuspended;
    7575@property (nonatomic, readonly) BOOL pictureInPictureWasStartedWhenEnteringBackground;
     76- (void)setWebKitOverrideRouteSharingPolicy:(NSUInteger)routeSharingPolicy routingContextUID:(NSString *)routingContextUID;
    7677@end
    7778
     
    164165@property (nonatomic, readonly, getter=isPictureInPictureActive) BOOL pictureInPictureActive;
    165166@property (nonatomic, readonly) BOOL pictureInPictureWasStartedWhenEnteringBackground;
     167- (void)setWebKitOverrideRouteSharingPolicy:(NSUInteger)routeSharingPolicy routingContextUID:(NSString *)routingContextUID;
    166168@end
    167169
  • trunk/Source/WebCore/platform/cocoa/VideoFullscreenModel.h

    r237483 r238528  
    2929#if PLATFORM(IOS_FAMILY) || (PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE))
    3030
     31#include "AudioSession.h"
    3132#include "FloatRect.h"
    3233#include "HTMLMediaElementEnums.h"
    3334#include "MediaPlayerEnums.h"
    3435#include "PlaybackSessionModel.h"
     36#include <wtf/CompletionHandler.h>
    3537
    3638#if PLATFORM(IOS_FAMILY)
     
    6365    virtual void didExitPictureInPicture() = 0;
    6466
     67    virtual void requestRouteSharingPolicyAndContextUID(CompletionHandler<void(RouteSharingPolicy, String)>&& completionHandler) { completionHandler(RouteSharingPolicy::Default, emptyString()); }
     68
    6569#if PLATFORM(IOS_FAMILY)
    6670    virtual UIViewController *presentingViewController() { return nullptr; }
  • trunk/Source/WebCore/platform/cocoa/VideoFullscreenModelVideoElement.h

    r237483 r238528  
    7373    bool hasVideo() const override { return m_hasVideo; }
    7474
     75    WEBCORE_EXPORT void requestRouteSharingPolicyAndContextUID(CompletionHandler<void(RouteSharingPolicy, String)>&&) override;
    7576
    7677protected:
  • trunk/Source/WebCore/platform/cocoa/VideoFullscreenModelVideoElement.mm

    r237483 r238528  
    188188}
    189189
     190void VideoFullscreenModelVideoElement::requestRouteSharingPolicyAndContextUID(CompletionHandler<void(RouteSharingPolicy, String)>&& completionHandler)
     191{
     192    auto& session = AudioSession::sharedSession();
     193    completionHandler(session.routeSharingPolicy(), session.routingContextUID());
     194}
     195
    190196void VideoFullscreenModelVideoElement::addClient(VideoFullscreenModelClient& client)
    191197{
  • trunk/Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.h

    r237483 r238528  
    5858class VideoFullscreenModel;
    5959class VideoFullscreenChangeObserver;
    60    
     60
    6161class VideoFullscreenInterfaceAVKit final
    6262    : public VideoFullscreenModelClient
     
    185185    RunLoop::Timer<VideoFullscreenInterfaceAVKit> m_watchdogTimer;
    186186    FloatRect m_inlineRect;
     187    RouteSharingPolicy m_routeSharingPolicy { RouteSharingPolicy::Default };
     188    String m_routingContextUID;
    187189    bool m_allowsPictureInPicturePlayback { false };
    188190    bool m_wirelessVideoPlaybackDisabled { true };
  • trunk/Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm

    r238516 r238528  
    548548
    549549- (BOOL)playerViewControllerShouldHandleDoneButtonTap:(AVPlayerViewController *)playerViewController;
     550- (void)setWebKitOverrideRouteSharingPolicy:(NSUInteger)routeSharingPolicy routingContextUID:(NSString *)routingContextUID;
    550551@end
    551552NS_ASSUME_NONNULL_END
     
    579580
    580581    return YES;
     582}
     583
     584- (void)setWebKitOverrideRouteSharingPolicy:(NSUInteger)routeSharingPolicy routingContextUID:(NSString *)routingContextUID
     585{
     586#pragma clang diagnostic push
     587#pragma clang diagnostic ignored "-Wunknown-pragmas"
     588#pragma clang diagnostic ignored "-Wunguarded-availability-new"
     589    if ([_avPlayerViewController respondsToSelector:@selector(setWebKitOverrideRouteSharingPolicy:routingContextUID:)])
     590        [_avPlayerViewController setWebKitOverrideRouteSharingPolicy:routeSharingPolicy routingContextUID:routingContextUID];
     591#pragma clang diagnostic pop
    581592}
    582593
     
    765776    m_videoFullscreenModel = model;
    766777
    767     if (m_videoFullscreenModel)
     778    if (m_videoFullscreenModel) {
    768779        m_videoFullscreenModel->addClient(*this);
     780        m_videoFullscreenModel->requestRouteSharingPolicyAndContextUID([this, protectedThis = makeRefPtr(this)] (RouteSharingPolicy policy, String contextUID) {
     781            m_routeSharingPolicy = policy;
     782            m_routingContextUID = contextUID;
     783
     784            if (m_playerViewController && !m_routingContextUID.isEmpty())
     785                [m_playerViewController setWebKitOverrideRouteSharingPolicy:(NSUInteger)m_routeSharingPolicy routingContextUID:m_routingContextUID];
     786        });
     787    }
    769788
    770789    hasVideoChanged(m_videoFullscreenModel ? m_videoFullscreenModel->hasVideo() : false);
     
    12301249    [m_playerViewController setAllowsPictureInPicturePlayback:m_allowsPictureInPicturePlayback];
    12311250    [playerController() setPictureInPicturePossible:m_allowsPictureInPicturePlayback];
     1251    if (!m_routingContextUID.isEmpty())
     1252        [m_playerViewController setWebKitOverrideRouteSharingPolicy:(NSUInteger)m_routeSharingPolicy routingContextUID:m_routingContextUID];
    12321253
    12331254#if PLATFORM(WATCHOS)
  • trunk/Source/WebKit/ChangeLog

    r238527 r238528  
     12018-11-26  Jer Noble  <jer.noble@apple.com>
     2
     3        Adopt -setOverrideRouteSharingPolicy:routingContextUID: SPI
     4        https://bugs.webkit.org/show_bug.cgi?id=190951
     5        <rdar://problem/45213065>
     6
     7        Reviewed by Alex Christensen.
     8
     9        Add an asyncronous reply request to VideoFullscreenManager.
     10
     11        * Platform/IPC/MessageSender.h:
     12        (IPC::MessageSender::sendWithAsyncReply):
     13        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
     14        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
     15        (WebKit::VideoFullscreenModelContext::requestRouteSharingPolicyAndContextUID):
     16        * WebProcess/cocoa/VideoFullscreenManager.h:
     17        * WebProcess/cocoa/VideoFullscreenManager.messages.in:
     18        * WebProcess/cocoa/VideoFullscreenManager.mm:
     19        (WebKit::VideoFullscreenManager::requestRouteSharingPolicyAndContextUID):
     20
    1212018-11-26  Alex Christensen  <achristensen@webkit.org>
    222
  • trunk/Source/WebKit/Platform/IPC/MessageSender.h

    r237483 r238528  
    6666    }
    6767
     68    template<typename T, typename... Args>
     69    void sendWithAsyncReply(T&& message, CompletionHandler<void(Args...)>&& args, uint64_t destinationID = 0)
     70    {
     71        ASSERT(messageSenderConnection());
     72
     73        messageSenderConnection()->sendWithAsyncReply(WTFMove(message), WTFMove(args), destinationID);
     74    }
     75
    6876    virtual bool sendMessage(std::unique_ptr<Encoder>, OptionSet<SendOption>);
    6977
  • trunk/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.h

    r237483 r238528  
    2929
    3030#include "MessageReceiver.h"
     31#include <WebCore/AudioSession.h>
    3132#include <WebCore/GraphicsLayer.h>
    3233#include <WebCore/PlatformView.h>
     
    3738#include <wtf/RefCounted.h>
    3839#include <wtf/RefPtr.h>
     40#include <wtf/text/WTFString.h>
    3941
    4042#if PLATFORM(IOS_FAMILY)
     
    9496    void willExitPictureInPicture() final;
    9597    void didExitPictureInPicture() final;
     98    void requestRouteSharingPolicyAndContextUID(CompletionHandler<void(WebCore::RouteSharingPolicy, String)>&&) final;
    9699
    97100    // VideoFullscreenChangeObserver
     
    127130    void applicationDidBecomeActive();
    128131    bool isVisible() const;
     132
     133    void requestRouteSharingPolicyAndContextUID(uint64_t contextId, CompletionHandler<void(WebCore::RouteSharingPolicy, String)>&&);
    129134
    130135#if ENABLE(VIDEO_PRESENTATION_MODE)
  • trunk/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.mm

    r238468 r238528  
    275275}
    276276
     277void VideoFullscreenModelContext::requestRouteSharingPolicyAndContextUID(CompletionHandler<void(WebCore::RouteSharingPolicy, String)>&& completionHandler)
     278{
     279    if (m_manager)
     280        m_manager->requestRouteSharingPolicyAndContextUID(m_contextId, WTFMove(completionHandler));
     281    else
     282        completionHandler(WebCore::RouteSharingPolicy::Default, emptyString());
     283}
     284
    277285void VideoFullscreenModelContext::willEnterPictureInPicture()
    278286{
     
    392400    for (auto& tuple : m_contextMap.values())
    393401        std::get<1>(tuple)->applicationDidBecomeActive();
     402}
     403
     404void VideoFullscreenManagerProxy::requestRouteSharingPolicyAndContextUID(uint64_t contextId, CompletionHandler<void(WebCore::RouteSharingPolicy, String)>&& callback)
     405{
     406    m_page->sendWithAsyncReply(Messages::VideoFullscreenManager::RequestRouteSharingPolicyAndContextUID(contextId), WTFMove(callback));
    394407}
    395408
  • trunk/Source/WebKit/WebProcess/cocoa/VideoFullscreenManager.h

    r237483 r238528  
    2828#if (PLATFORM(IOS_FAMILY) && HAVE(AVKIT)) || (PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE))
    2929
     30#include "Connection.h"
    3031#include "MessageReceiver.h"
     32#include "VideoFullscreenManagerMessages.h"
    3133#include <WebCore/EventListener.h>
    3234#include <WebCore/HTMLMediaElementEnums.h>
     
    152154    void fullscreenModeChanged(uint64_t contextId, WebCore::HTMLMediaElementEnums::VideoFullscreenMode);
    153155    void fullscreenMayReturnToInline(uint64_t contextId, bool isPageVisible);
    154    
     156    void requestRouteSharingPolicyAndContextUID(uint64_t contextId, Messages::VideoFullscreenManager::RequestRouteSharingPolicyAndContextUID::AsyncReply&&);
     157
    155158    WebPage* m_page;
    156159    Ref<PlaybackSessionManager> m_playbackSessionManager;
  • trunk/Source/WebKit/WebProcess/cocoa/VideoFullscreenManager.messages.in

    r237483 r238528  
    3636    FullscreenModeChanged(uint64_t contextId, WebCore::HTMLMediaElementEnums::VideoFullscreenMode videoFullscreenMode)
    3737    FullscreenMayReturnToInline(uint64_t contextId, bool isPageVisible)
     38    RequestRouteSharingPolicyAndContextUID(uint64_t contextId) -> (enum:uint8_t WebCore::RouteSharingPolicy routeSharingPolicy, String routingContextUID) Async
    3839}
    3940#endif
  • trunk/Source/WebKit/WebProcess/cocoa/VideoFullscreenManager.mm

    r237483 r238528  
    3131#import "Logging.h"
    3232#import "PlaybackSessionManager.h"
    33 #import "VideoFullscreenManagerMessages.h"
    3433#import "VideoFullscreenManagerProxyMessages.h"
    3534#import "WebCoreArgumentCoders.h"
     
    559558    m_page->send(Messages::VideoFullscreenManagerProxy::PreparedToReturnToInline(contextId, true, inlineVideoFrame(*model.videoElement())), m_page->pageID());
    560559}
     560
     561void VideoFullscreenManager::requestRouteSharingPolicyAndContextUID(uint64_t contextId, Messages::VideoFullscreenManager::RequestRouteSharingPolicyAndContextUID::AsyncReply&& reply)
     562{
     563    ensureModel(contextId).requestRouteSharingPolicyAndContextUID(WTFMove(reply));
     564}
    561565   
    562566void VideoFullscreenManager::setVideoLayerFrameFenced(uint64_t contextId, WebCore::FloatRect bounds, IPC::Attachment fencePort)
Note: See TracChangeset for help on using the changeset viewer.