Skip to content

Commit

Permalink
[Cocoa] Upstream GroupActivitiesCoordinator
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=226757

Reviewed by Eric Carlson.

Upstream the backing objects for a GroupActivities-based MediaSessionCoordinator.

* SourcesCocoa.txt:
* UIProcess/Cocoa/GroupActivities/GroupActivitiesCoordinator.h: Added.
* UIProcess/Cocoa/GroupActivities/GroupActivitiesCoordinator.mm: Added.
(-[WKGroupActivitiesCoordinatorDelegate initWithParent:]):
(-[WKGroupActivitiesCoordinatorDelegate playbackCoordinator:didIssuePlayCommand:completionHandler:]):
(-[WKGroupActivitiesCoordinatorDelegate playbackCoordinator:didIssuePauseCommand:completionHandler:]):
(-[WKGroupActivitiesCoordinatorDelegate playbackCoordinator:didIssueSeekCommand:completionHandler:]):
(-[WKGroupActivitiesCoordinatorDelegate playbackCoordinator:didIssueBufferingCommand:completionHandler:]):
(-[WKGroupActivitiesCoordinatorDelegate playbackCoordinator:didIssuePrepareTransitionCommand:]):
(WebKit::GroupActivitiesCoordinator::create):
(WebKit::GroupActivitiesCoordinator::GroupActivitiesCoordinator):
(WebKit::GroupActivitiesCoordinator::~GroupActivitiesCoordinator):
(WebKit::GroupActivitiesCoordinator::sessionStateChanged):
(WebKit::GroupActivitiesCoordinator::identifier const):
(WebKit::GroupActivitiesCoordinator::join):
(WebKit::GroupActivitiesCoordinator::leave):
(WebKit::GroupActivitiesCoordinator::seekTo):
(WebKit::GroupActivitiesCoordinator::play):
(WebKit::GroupActivitiesCoordinator::pause):
(WebKit::GroupActivitiesCoordinator::setTrack):
(WebKit::GroupActivitiesCoordinator::positionStateChanged):
(WebKit::GroupActivitiesCoordinator::readyStateChanged):
(WebKit::GroupActivitiesCoordinator::playbackStateChanged):
(WebKit::GroupActivitiesCoordinator::trackIdentifierChanged):
(WebKit::GroupActivitiesCoordinator::issuePlayCommand):
(WebKit::GroupActivitiesCoordinator::issuePauseCommand):
(WebKit::GroupActivitiesCoordinator::issueSeekCommand):
(WebKit::GroupActivitiesCoordinator::issueBufferingCommand):
(WebKit::GroupActivitiesCoordinator::issuePrepareTransitionCommand):
* UIProcess/Cocoa/GroupActivities/GroupActivitiesSession.h: Added.
(WebKit::GroupActivitiesSession::groupSession):
* UIProcess/Cocoa/GroupActivities/GroupActivitiesSession.mm: Added.
(WebKit::GroupActivitiesSession::create):
(WebKit::GroupActivitiesSession::GroupActivitiesSession):
(WebKit::GroupActivitiesSession::~GroupActivitiesSession):
(WebKit::GroupActivitiesSession::join):
(WebKit::GroupActivitiesSession::leave):
(WebKit::GroupActivitiesSession::state const):
(WebKit::GroupActivitiesSession::uuid const):
(WebKit::GroupActivitiesSession::fallbackURL const):
(WebKit::GroupActivitiesSession::addStateChangeObserver):
(WebKit::GroupActivitiesSession::addFallbackURLObserver):
* UIProcess/Cocoa/GroupActivities/GroupActivitiesSessionNotifier.h: Added.
* UIProcess/Cocoa/GroupActivities/GroupActivitiesSessionNotifier.mm: Added.
(WebKitSwiftLibrary):
(WebKit::GroupActivitiesSessionNotifier::sharedNotifier):
(WebKit::GroupActivitiesSessionNotifier::GroupActivitiesSessionNotifier):
(WebKit::GroupActivitiesSessionNotifier::sessionStateChanged):
(WebKit::GroupActivitiesSessionNotifier::addWebPage):
(WebKit::GroupActivitiesSessionNotifier::removeWebPage):
(WebKit::GroupActivitiesSessionNotifier::webPageURLChanged):
(WebKit::GroupActivitiesSessionNotifier::hasSessionForURL):
(WebKit::GroupActivitiesSessionNotifier::takeSessionForURL):
* UIProcess/Cocoa/GroupActivities/WKGroupSession.h: Added.
* UIProcess/Cocoa/GroupActivities/WKGroupSession.swift: Added.
(WKURLActivityWrapper.urlActivity):
(WKURLActivityWrapper.fallbackURL):
(WKGroupSessionWrapper.groupSession):
(WKGroupSessionWrapper.cancellables):
(WKGroupSessionWrapper.activity):
(WKGroupSessionWrapper.uuid):
(WKGroupSessionWrapper.wrapperSessionState(_:)):
(WKGroupSessionWrapper.state):
(WKGroupSessionWrapper.newActivityCallback):
(WKGroupSessionWrapper.stateChangedCallback):
(WKGroupSessionWrapper.join):
(WKGroupSessionWrapper.leave):
(WKGroupSessionWrapper.coordinate(_:)):
(WKGroupSessionWrapper.activityChanged(_:)):
(WKGroupSessionWrapper.stateChanged(_:)):
(WKGroupSessionObserver.newSessionCallback):
(WKGroupSessionObserver.cancellables):
(WKGroupSessionObserver.recievedSession(_:)):
* UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::m_limitsNavigationsToAppBoundDomains):
(WebKit::WebPageProxy::~WebPageProxy):
(WebKit::WebPageProxy::didCommitLoadForFrame):
* WebKit.xcodeproj/project.pbxproj:

Canonical link: https://commits.webkit.org/239047@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@279133 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
jernoble committed Jun 22, 2021
1 parent fe06a06 commit e9d0c9d
Show file tree
Hide file tree
Showing 15 changed files with 1,186 additions and 54 deletions.
89 changes: 89 additions & 0 deletions Source/WebKit/ChangeLog
@@ -1,3 +1,92 @@
2021-06-07 Jer Noble <jer.noble@apple.com>

[Cocoa] Upstream GroupActivitiesCoordinator
https://bugs.webkit.org/show_bug.cgi?id=226757

Reviewed by Eric Carlson.

Upstream the backing objects for a GroupActivities-based MediaSessionCoordinator.

* SourcesCocoa.txt:
* UIProcess/Cocoa/GroupActivities/GroupActivitiesCoordinator.h: Added.
* UIProcess/Cocoa/GroupActivities/GroupActivitiesCoordinator.mm: Added.
(-[WKGroupActivitiesCoordinatorDelegate initWithParent:]):
(-[WKGroupActivitiesCoordinatorDelegate playbackCoordinator:didIssuePlayCommand:completionHandler:]):
(-[WKGroupActivitiesCoordinatorDelegate playbackCoordinator:didIssuePauseCommand:completionHandler:]):
(-[WKGroupActivitiesCoordinatorDelegate playbackCoordinator:didIssueSeekCommand:completionHandler:]):
(-[WKGroupActivitiesCoordinatorDelegate playbackCoordinator:didIssueBufferingCommand:completionHandler:]):
(-[WKGroupActivitiesCoordinatorDelegate playbackCoordinator:didIssuePrepareTransitionCommand:]):
(WebKit::GroupActivitiesCoordinator::create):
(WebKit::GroupActivitiesCoordinator::GroupActivitiesCoordinator):
(WebKit::GroupActivitiesCoordinator::~GroupActivitiesCoordinator):
(WebKit::GroupActivitiesCoordinator::sessionStateChanged):
(WebKit::GroupActivitiesCoordinator::identifier const):
(WebKit::GroupActivitiesCoordinator::join):
(WebKit::GroupActivitiesCoordinator::leave):
(WebKit::GroupActivitiesCoordinator::seekTo):
(WebKit::GroupActivitiesCoordinator::play):
(WebKit::GroupActivitiesCoordinator::pause):
(WebKit::GroupActivitiesCoordinator::setTrack):
(WebKit::GroupActivitiesCoordinator::positionStateChanged):
(WebKit::GroupActivitiesCoordinator::readyStateChanged):
(WebKit::GroupActivitiesCoordinator::playbackStateChanged):
(WebKit::GroupActivitiesCoordinator::trackIdentifierChanged):
(WebKit::GroupActivitiesCoordinator::issuePlayCommand):
(WebKit::GroupActivitiesCoordinator::issuePauseCommand):
(WebKit::GroupActivitiesCoordinator::issueSeekCommand):
(WebKit::GroupActivitiesCoordinator::issueBufferingCommand):
(WebKit::GroupActivitiesCoordinator::issuePrepareTransitionCommand):
* UIProcess/Cocoa/GroupActivities/GroupActivitiesSession.h: Added.
(WebKit::GroupActivitiesSession::groupSession):
* UIProcess/Cocoa/GroupActivities/GroupActivitiesSession.mm: Added.
(WebKit::GroupActivitiesSession::create):
(WebKit::GroupActivitiesSession::GroupActivitiesSession):
(WebKit::GroupActivitiesSession::~GroupActivitiesSession):
(WebKit::GroupActivitiesSession::join):
(WebKit::GroupActivitiesSession::leave):
(WebKit::GroupActivitiesSession::state const):
(WebKit::GroupActivitiesSession::uuid const):
(WebKit::GroupActivitiesSession::fallbackURL const):
(WebKit::GroupActivitiesSession::addStateChangeObserver):
(WebKit::GroupActivitiesSession::addFallbackURLObserver):
* UIProcess/Cocoa/GroupActivities/GroupActivitiesSessionNotifier.h: Added.
* UIProcess/Cocoa/GroupActivities/GroupActivitiesSessionNotifier.mm: Added.
(WebKitSwiftLibrary):
(WebKit::GroupActivitiesSessionNotifier::sharedNotifier):
(WebKit::GroupActivitiesSessionNotifier::GroupActivitiesSessionNotifier):
(WebKit::GroupActivitiesSessionNotifier::sessionStateChanged):
(WebKit::GroupActivitiesSessionNotifier::addWebPage):
(WebKit::GroupActivitiesSessionNotifier::removeWebPage):
(WebKit::GroupActivitiesSessionNotifier::webPageURLChanged):
(WebKit::GroupActivitiesSessionNotifier::hasSessionForURL):
(WebKit::GroupActivitiesSessionNotifier::takeSessionForURL):
* UIProcess/Cocoa/GroupActivities/WKGroupSession.h: Added.
* UIProcess/Cocoa/GroupActivities/WKGroupSession.swift: Added.
(WKURLActivityWrapper.urlActivity):
(WKURLActivityWrapper.fallbackURL):
(WKGroupSessionWrapper.groupSession):
(WKGroupSessionWrapper.cancellables):
(WKGroupSessionWrapper.activity):
(WKGroupSessionWrapper.uuid):
(WKGroupSessionWrapper.wrapperSessionState(_:)):
(WKGroupSessionWrapper.state):
(WKGroupSessionWrapper.newActivityCallback):
(WKGroupSessionWrapper.stateChangedCallback):
(WKGroupSessionWrapper.join):
(WKGroupSessionWrapper.leave):
(WKGroupSessionWrapper.coordinate(_:)):
(WKGroupSessionWrapper.activityChanged(_:)):
(WKGroupSessionWrapper.stateChanged(_:)):
(WKGroupSessionObserver.newSessionCallback):
(WKGroupSessionObserver.cancellables):
(WKGroupSessionObserver.recievedSession(_:)):
* UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::m_limitsNavigationsToAppBoundDomains):
(WebKit::WebPageProxy::~WebPageProxy):
(WebKit::WebPageProxy::didCommitLoadForFrame):
* WebKit.xcodeproj/project.pbxproj:

2021-06-22 Peng Liu <peng.liu6@apple.com>

ASSERTION FAILED: videoFullscreenManager->client() == nullptr in WKFullScreenWindowController.mm
Expand Down
4 changes: 4 additions & 0 deletions Source/WebKit/SourcesCocoa.txt
Expand Up @@ -374,6 +374,10 @@ UIProcess/Automation/ios/WebAutomationSessionIOS.mm

UIProcess/Automation/mac/WebAutomationSessionMac.mm

UIProcess/Cocoa/GroupActivities/GroupActivitiesCoordinator.mm
UIProcess/Cocoa/GroupActivities/GroupActivitiesSession.mm
UIProcess/Cocoa/GroupActivities/GroupActivitiesSessionNotifier.mm

UIProcess/Cocoa/SOAuthorization/NavigationSOAuthorizationSession.mm
UIProcess/Cocoa/SOAuthorization/PopUpSOAuthorizationSession.mm
UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.mm
Expand Down
@@ -0,0 +1,88 @@
/*
* Copyright (C) 2021 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/

#pragma once

#if ENABLE(MEDIA_SESSION_COORDINATOR) && HAVE(GROUP_ACTIVITIES)

#include "GroupActivitiesSession.h"
#include "MediaSessionCoordinatorProxyPrivate.h"
#include <wtf/CompletionHandler.h>

OBJC_CLASS AVDelegatingPlaybackCoordinator;
OBJC_CLASS AVDelegatingPlaybackCoordinatorPlayCommand;
OBJC_CLASS AVDelegatingPlaybackCoordinatorPauseCommand;
OBJC_CLASS AVDelegatingPlaybackCoordinatorSeekCommand;
OBJC_CLASS AVDelegatingPlaybackCoordinatorBufferingCommand;
OBJC_CLASS AVDelegatingPlaybackCoordinatorPrepareTransitionCommand;
OBJC_CLASS WKGroupActivitiesCoordinatorDelegate;

namespace WebKit {

class GroupActivitiesCoordinator final : public MediaSessionCoordinatorProxyPrivate {
WTF_MAKE_FAST_ALLOCATED;
public:
static Ref<GroupActivitiesCoordinator> create(GroupActivitiesSession&);
~GroupActivitiesCoordinator();

using CommandCompletionHandler = Function<void()>;
void issuePlayCommand(AVDelegatingPlaybackCoordinatorPlayCommand *, CommandCompletionHandler&&);
void issuePauseCommand(AVDelegatingPlaybackCoordinatorPauseCommand *, CommandCompletionHandler&&);
void issueSeekCommand(AVDelegatingPlaybackCoordinatorSeekCommand *, CommandCompletionHandler&&);
void issueBufferingCommand(AVDelegatingPlaybackCoordinatorBufferingCommand *, CommandCompletionHandler&&);
void issuePrepareTransitionCommand(AVDelegatingPlaybackCoordinatorPrepareTransitionCommand *);

private:
GroupActivitiesCoordinator(GroupActivitiesSession&);

void sessionStateChanged(const GroupActivitiesSession&, GroupActivitiesSession::State);

using CoordinatorCompletionHandler = CompletionHandler<void(std::optional<WebCore::ExceptionData>&&)>;
String identifier() const final;
void join(CoordinatorCompletionHandler&&) final;
void leave() final;
void seekTo(double, CoordinatorCompletionHandler&&) final;
void play(CoordinatorCompletionHandler&&) final;
void pause(CoordinatorCompletionHandler&&) final;
void setTrack(const String&, CoordinatorCompletionHandler&&) final;
void positionStateChanged(const std::optional<WebCore::MediaPositionState>&) final;
void readyStateChanged(WebCore::MediaSessionReadyState) final;
void playbackStateChanged(WebCore::MediaSessionPlaybackState) final;
void trackIdentifierChanged(const String&) final;

Ref<GroupActivitiesSession> m_session;
RetainPtr<WKGroupActivitiesCoordinatorDelegate> m_delegate;
RetainPtr<AVDelegatingPlaybackCoordinator> m_playbackCoordinator;

std::optional<WebCore::MediaPositionState> m_positionState;
std::optional<WebCore::MediaSessionReadyState> m_readyState;
std::optional<WebCore::MediaSessionPlaybackState> m_playbackState;

GroupActivitiesSession::StateChangeObserver m_stateChangeObserver;
};

}

#endif

0 comments on commit e9d0c9d

Please sign in to comment.