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

Changeset 237458 in webkit


Ignore:
Timestamp:
Oct 26, 2018, 8:04:44 AM (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.

Drive-by fix: messages.py generates "WTFMove(*arg1, *arg2)" instead of "WTFMove(*arg1), WTFMove(*arg2)"
in its reply handler generation.

  • Platform/IPC/MessageSender.h:

(IPC::MessageSender::sendWithAsyncReply):

  • Scripts/webkit/messages.py:
  • 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:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r237457 r237458  
     12018-10-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-10-26  Zalan Bujtas  <zalan@apple.com>
    223
  • trunk/Source/WebCore/PAL/ChangeLog

    r237405 r237458  
     12018-10-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-10-24  Alexey Proskuryakov  <ap@apple.com>
    212
  • trunk/Source/WebCore/PAL/pal/spi/cocoa/AVKitSPI.h

    r237266 r237458  
    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

    r237266 r237458  
    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

    r237266 r237458  
    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

    r237266 r237458  
    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

    r237266 r237458  
    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

    r237266 r237458  
    542542
    543543- (BOOL)playerViewControllerShouldHandleDoneButtonTap:(AVPlayerViewController *)playerViewController;
     544- (void)setWebKitOverrideRouteSharingPolicy:(NSUInteger)routeSharingPolicy routingContextUID:(NSString *)routingContextUID;
    544545@end
    545546NS_ASSUME_NONNULL_END
    … …  
    573574
    574575    return YES;
     576}
     577
     578- (void)setWebKitOverrideRouteSharingPolicy:(NSUInteger)routeSharingPolicy routingContextUID:(NSString *)routingContextUID
     579{
     580#pragma clang diagnostic push
     581#pragma clang diagnostic ignored "-Wunknown-pragmas"
     582#pragma clang diagnostic ignored "-Wunguarded-availability-new"
     583    if ([_avPlayerViewController respondsToSelector:@selector(setWebKitOverrideRouteSharingPolicy:routingContextUID:)])
     584        [_avPlayerViewController setWebKitOverrideRouteSharingPolicy:routeSharingPolicy routingContextUID:routingContextUID];
     585#pragma clang diagnostic pop
    575586}
    576587
    … …  
    759770    m_videoFullscreenModel = model;
    760771
    761     if (m_videoFullscreenModel)
     772    if (m_videoFullscreenModel) {
    762773        m_videoFullscreenModel->addClient(*this);
     774        m_videoFullscreenModel->requestRouteSharingPolicyAndContextUID([this, protectedThis = makeRefPtr(this)] (RouteSharingPolicy policy, String contextUID) {
     775            m_routeSharingPolicy = policy;
     776            m_routingContextUID = contextUID;
     777
     778            if (m_playerViewController && !m_routingContextUID.isEmpty())
     779                [m_playerViewController setWebKitOverrideRouteSharingPolicy:(NSUInteger)m_routeSharingPolicy routingContextUID:m_routingContextUID];
     780        });
     781    }
    763782
    764783    hasVideoChanged(m_videoFullscreenModel ? m_videoFullscreenModel->hasVideo() : false);
    … …  
    12211240    [m_playerViewController setAllowsPictureInPicturePlayback:m_allowsPictureInPicturePlayback];
    12221241    [playerController() setPictureInPicturePossible:m_allowsPictureInPicturePlayback];
     1242    if (!m_routingContextUID.isEmpty())
     1243        [m_playerViewController setWebKitOverrideRouteSharingPolicy:(NSUInteger)m_routeSharingPolicy routingContextUID:m_routingContextUID];
    12231244
    12241245#if PLATFORM(WATCHOS)
  • trunk/Source/WebKit/ChangeLog

    r237423 r237458  
     12018-10-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        Drive-by fix: messages.py generates "WTFMove(*arg1, *arg2)" instead of "WTFMove(*arg1), WTFMove(*arg2)"
     12        in its reply handler generation.
     13
     14        * Platform/IPC/MessageSender.h:
     15        (IPC::MessageSender::sendWithAsyncReply):
     16        * Scripts/webkit/messages.py:
     17        * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
     18        * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
     19        (WebKit::VideoFullscreenModelContext::requestRouteSharingPolicyAndContextUID):
     20        * WebProcess/cocoa/VideoFullscreenManager.h:
     21        * WebProcess/cocoa/VideoFullscreenManager.messages.in:
     22        * WebProcess/cocoa/VideoFullscreenManager.mm:
     23        (WebKit::VideoFullscreenManager::requestRouteSharingPolicyAndContextUID):
     24
    1252018-10-25  Michael Catanzaro  <mcatanzaro@igalia.com>
    226
  • trunk/Source/WebKit/Platform/IPC/MessageSender.h

    r208415 r237458  
    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/Scripts/webkit/messages.py

    r237300 r237458  
    560560            if message.has_attribute(ASYNC_ATTRIBUTE):
    561561                move_parameters = message.name, ', '.join([move_type(x.type) for x in message.reply_parameters])
     562                move_values = ', '.join(['WTFMove(*%s)' % x.name for x in message.reply_parameters])
    562563                result.append('void %s::callReply(IPC::Decoder& decoder, CompletionHandler<void(%s)>&& completionHandler)\n{\n' % move_parameters)
    563564                for x in message.reply_parameters:
    … …  
    565566                    result.append('    decoder >> %s;\n' % x.name)
    566567                    result.append('    if (!%s) {\n        ASSERT_NOT_REACHED();\n        return;\n    }\n' % x.name)
    567                 result.append('    completionHandler(WTFMove(*%s));\n}\n\n' % (', *'.join(x.name for x in message.reply_parameters)))
     568                result.append('    completionHandler(%s);\n}\n\n' % move_values)
    568569                result.append('void %s::cancelReply(CompletionHandler<void(%s)>&& completionHandler)\n{\n    completionHandler(' % move_parameters)
    569570                result.append(', '.join(['{ }' for x in message.reply_parameters]))
  • trunk/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.h

    r237266 r237458  
    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

    r237266 r237458  
    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

    r237266 r237458  
    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

    r237266 r237458  
    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

    r237266 r237458  
    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.