Changeset 280670 in webkit
- Timestamp:
- Aug 4, 2021, 4:47:46 PM (5 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 5 edited
-
ChangeLog (modified) (1 diff)
-
UIProcess/Cocoa/VideoFullscreenManagerProxy.h (modified) (4 diffs)
-
UIProcess/Cocoa/VideoFullscreenManagerProxy.mm (modified) (1 diff)
-
UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm (modified) (5 diffs)
-
UIProcess/mac/WKFullScreenWindowController.mm (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r280669 r280670 1 2021-08-04 Jean-Yves Avenard <jya@apple.com> 2 3 Use Observer in place of VideoFullscreenManagerProxyClient 4 https://bugs.webkit.org/show_bug.cgi?id=228761 5 rdar://problem/81489026 6 7 Reviewed by Jer Noble. 8 9 Use an Observer member rather than creating a child class that would be used 10 when the PiP state change. This prevents having to deal with lifetime and 11 potentially setting it up multiple times. 12 No change in observable behaviour, covered with existing tests. 13 14 * UIProcess/Cocoa/VideoFullscreenManagerProxy.h: Remove VideoFullscreenManagerProxyClient 15 class. Use WeakHashSet to store observers. 16 * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm: 17 (WebKit::VideoFullscreenManagerProxy::addVideoInPictureInPictureDidChangeObserver): 18 Method added, replace older setClient 19 (WebKit::VideoFullscreenManagerProxy::hasVideoInPictureInPictureDidChange): 20 Iterate over all observers and call accordingly. 21 * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm: 22 (-[WKFullScreenWindowController initWithWebView:]): Remove no longer necessary 23 code. 24 (-[WKFullScreenWindowController dealloc]): Remove no longer necessary 25 code. 26 (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]): 27 set PiP change observer if none already exists. 28 * UIProcess/mac/WKFullScreenWindowController.mm: 29 (-[WKFullScreenWindowController initWithWindow:webView:page:]): Remove no longer necessary 30 code. 31 (-[WKFullScreenWindowController dealloc]): Remove no longer necessary 32 code. 33 (-[WKFullScreenWindowController clearVideoFullscreenManagerObserver]): 34 (-[WKFullScreenWindowController setVideoFullscreenManagerObserver]): 35 (-[WKFullScreenWindowController didExitPictureInPicture]): 36 (-[WKFullScreenWindowController windowDidEnterFullScreen:]): 37 (-[WKFullScreenWindowController windowDidFailToExitFullScreen:]): 38 (-[WKFullScreenWindowController windowDidExitFullScreen:]): 39 1 40 2021-08-04 Tim Horton <timothy_horton@apple.com> 2 41 -
trunk/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.h
r277242 r280670 38 38 #include <wtf/HashMap.h> 39 39 #include <wtf/HashSet.h> 40 #include <wtf/Observer.h> 40 41 #include <wtf/RefCounted.h> 41 42 #include <wtf/RefPtr.h> 43 #include <wtf/WeakHashSet.h> 42 44 #include <wtf/text/WTFString.h> 43 45 … … 124 126 }; 125 127 126 class VideoFullscreenManagerProxyClient : public CanMakeWeakPtr<VideoFullscreenManagerProxyClient> {127 public:128 virtual ~VideoFullscreenManagerProxyClient() { };129 130 virtual void hasVideoInPictureInPictureDidChange(bool value) = 0;131 };132 133 128 class VideoFullscreenManagerProxy : public RefCounted<VideoFullscreenManagerProxy>, private IPC::MessageReceiver { 134 129 public: … … 151 146 152 147 PlatformVideoFullscreenInterface* controlsManagerInterface(); 153 void setClient(VideoFullscreenManagerProxyClient* client) { m_client = makeWeakPtr(client); }154 VideoFullscreenManagerProxyClient* client() const { return m_client.get(); }148 using VideoInPictureInPictureDidChangeObserver = WTF::Observer<void(bool)>; 149 void addVideoInPictureInPictureDidChangeObserver(const VideoInPictureInPictureDidChangeObserver&); 155 150 156 151 void forEachSession(Function<void(VideoFullscreenModelContext&, PlatformVideoFullscreenInterface&)>&&); … … 213 208 PlaybackSessionContextIdentifier m_controlsManagerContextId; 214 209 HashMap<PlaybackSessionContextIdentifier, int> m_clientCounts; 215 WeakPtr<VideoFullscreenManagerProxyClient> m_client;216 210 Vector<CompletionHandler<void()>> m_closeCompletionHandlers; 211 WeakHashSet<VideoInPictureInPictureDidChangeObserver> m_pipChangeObservers; 217 212 }; 218 213 -
trunk/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.mm
r278663 r280670 512 512 } 513 513 514 void VideoFullscreenManagerProxy::addVideoInPictureInPictureDidChangeObserver(const VideoInPictureInPictureDidChangeObserver& observer) 515 { 516 ASSERT(!m_pipChangeObservers.contains(observer)); 517 m_pipChangeObservers.add(observer); 518 } 519 514 520 void VideoFullscreenManagerProxy::hasVideoInPictureInPictureDidChange(bool value) 515 521 { 516 522 m_page->uiClient().hasVideoInPictureInPictureDidChange(m_page, value); 517 if (m_client) 518 m_client->hasVideoInPictureInPictureDidChange(value); 523 m_pipChangeObservers.forEach([value] (auto& observer) { observer(value); }); 519 524 } 520 525 -
trunk/Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm
r279287 r280670 436 436 @end 437 437 438 class WKFullScreenWindowControllerVideoFullscreenManagerProxyClient : public WebKit::VideoFullscreenManagerProxyClient {439 WTF_MAKE_FAST_ALLOCATED;440 public:441 void setParent(WKFullScreenWindowController *parent) { m_parent = parent; }442 443 private:444 void hasVideoInPictureInPictureDidChange(bool value) final445 {446 if (value)447 [m_parent didEnterPictureInPicture];448 else449 [m_parent didExitPictureInPicture];450 }451 452 WKFullScreenWindowController *m_parent { nullptr };453 };454 455 438 #pragma mark - 456 439 … … 471 454 RetainPtr<WKFullScreenInteractiveTransition> _interactiveDismissTransitionCoordinator; 472 455 473 WKFullScreenWindowControllerVideoFullscreenManagerProxyClient _videoFullscreenManagerProxyClient;456 std::unique_ptr<WebKit::VideoFullscreenManagerProxy::VideoInPictureInPictureDidChangeObserver> _pipObserver; 474 457 BOOL _shouldReturnToFullscreenFromPictureInPicture; 475 458 BOOL _enterFullscreenNeedsExitPictureInPicture; … … 498 481 499 482 self._webView = webView; 500 _videoFullscreenManagerProxyClient.setParent(self);501 483 502 484 return self; … … 507 489 [NSObject cancelPreviousPerformRequestsWithTarget:self]; 508 490 [[NSNotificationCenter defaultCenter] removeObserver:self]; 509 510 _videoFullscreenManagerProxyClient.setParent(nullptr);511 491 512 492 [super dealloc]; … … 696 676 697 677 if (auto* videoFullscreenManager = self._videoFullscreenManager) { 698 videoFullscreenManager->setClient(&_videoFullscreenManagerProxyClient); 699 678 if (!_pipObserver) { 679 _pipObserver = WTF::makeUnique<WebKit::VideoFullscreenManagerProxy::VideoInPictureInPictureDidChangeObserver>([self] (bool inPiP) { 680 if (inPiP) 681 [self didEnterPictureInPicture]; 682 else 683 [self didExitPictureInPicture]; 684 }); 685 videoFullscreenManager->addVideoInPictureInPictureDidChangeObserver(*_pipObserver); 686 } 700 687 if (auto* videoFullscreenInterface = videoFullscreenManager ? videoFullscreenManager->controlsManagerInterface() : nullptr) { 701 688 if (_returnToFullscreenFromPictureInPicture) -
trunk/Source/WebKit/UIProcess/mac/WKFullScreenWindowController.mm
r280628 r280670 60 60 @end 61 61 62 class WKFullScreenWindowControllerVideoFullscreenManagerProxyClient : public WebKit::VideoFullscreenManagerProxyClient {63 WTF_MAKE_FAST_ALLOCATED;64 public:65 void setParent(WKFullScreenWindowController *parent) { m_parent = parent; }66 67 private:68 void hasVideoInPictureInPictureDidChange(bool value) final69 {70 if (value)71 [m_parent didEnterPictureInPicture];72 else73 [m_parent didExitPictureInPicture];74 }75 76 WKFullScreenWindowController *m_parent { nullptr };77 };78 79 62 enum FullScreenState : NSInteger { 80 63 NotInFullScreen, … … 105 88 106 89 @implementation WKFullScreenWindowController { 107 WKFullScreenWindowControllerVideoFullscreenManagerProxyClient _videoFullscreenManagerProxyClient;90 std::unique_ptr<WebKit::VideoFullscreenManagerProxy::VideoInPictureInPictureDidChangeObserver> _pipObserver; 108 91 } 109 92 … … 142 125 _page = page.ptr(); 143 126 144 _videoFullscreenManagerProxyClient.setParent(self);145 146 127 [self videoControlsManagerDidChange]; 147 128 … … 156 137 157 138 [[NSNotificationCenter defaultCenter] removeObserver:self]; 158 159 _videoFullscreenManagerProxyClient.setParent(nullptr);160 139 161 140 [super dealloc]; … … 640 619 } 641 620 621 - (void)clearVideoFullscreenManagerObserver 622 { 623 _pipObserver = nullptr; 624 } 625 626 - (void)setVideoFullscreenManagerObserver 627 { 628 auto* videoFullscreenManager = self._videoFullscreenManager; 629 if (!videoFullscreenManager) 630 return; 631 632 ASSERT(!_pipObserver); 633 if (_pipObserver) 634 return; 635 636 _pipObserver = WTF::makeUnique<WebKit::VideoFullscreenManagerProxy::VideoInPictureInPictureDidChangeObserver>([self] (bool inPiP) { 637 if (inPiP) 638 [self didEnterPictureInPicture]; 639 else 640 [self didExitPictureInPicture]; 641 }); 642 643 videoFullscreenManager->addVideoInPictureInPictureDidChangeObserver(*_pipObserver); 644 } 645 642 646 - (void)didEnterPictureInPicture 643 647 { … … 646 650 } 647 651 648 - (void)setVideoFullscreenManagerClient:(WebKit::VideoFullscreenManagerProxyClient *)client649 {650 if (auto* videoFullscreenManager = self._videoFullscreenManager) {651 ASSERT((client && !videoFullscreenManager->client()) || (!client && videoFullscreenManager->client() == &_videoFullscreenManagerProxyClient));652 videoFullscreenManager->setClient(client);653 }654 }655 656 652 - (void)didExitPictureInPicture 657 653 { 658 [self setVideoFullscreenManagerClient:nullptr];654 [self clearVideoFullscreenManagerObserver]; 659 655 } 660 656 … … 691 687 RetainPtr<WKFullScreenWindowController> retain = self; 692 688 [self finishedEnterFullScreenAnimation:YES]; 693 [self setVideoFullscreenManager Client:&_videoFullscreenManagerProxyClient];689 [self setVideoFullscreenManagerObserver]; 694 690 } 695 691 … … 698 694 RetainPtr<WKFullScreenWindowController> retain = self; 699 695 [self finishedExitFullScreenAnimation:NO]; 700 [self setVideoFullscreenManagerClient:nullptr];696 [self clearVideoFullscreenManagerObserver]; 701 697 } 702 698 … … 705 701 RetainPtr<WKFullScreenWindowController> retain = self; 706 702 [self finishedExitFullScreenAnimation:YES]; 707 [self setVideoFullscreenManagerClient:nullptr];703 [self clearVideoFullscreenManagerObserver]; 708 704 } 709 705
Note:
See TracChangeset
for help on using the changeset viewer.