Title: [220293] trunk/Source
- Revision
- 220293
- Author
- [email protected]
- Date
- 2017-08-04 14:37:11 -0700 (Fri, 04 Aug 2017)
Log Message
Unreviewed, rolling out r220288.
This broke multiple builds.
Reverted changeset:
"Use MPAVRoutingController instead of deprecated versions."
https://bugs.webkit.org/show_bug.cgi?id=175063
http://trac.webkit.org/changeset/220288
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (220292 => 220293)
--- trunk/Source/WebCore/ChangeLog 2017-08-04 21:18:17 UTC (rev 220292)
+++ trunk/Source/WebCore/ChangeLog 2017-08-04 21:37:11 UTC (rev 220293)
@@ -1,3 +1,15 @@
+2017-08-04 Matt Lewis <[email protected]>
+
+ Unreviewed, rolling out r220288.
+
+ This broke multiple builds.
+
+ Reverted changeset:
+
+ "Use MPAVRoutingController instead of deprecated versions."
+ https://bugs.webkit.org/show_bug.cgi?id=175063
+ http://trac.webkit.org/changeset/220288
+
2017-08-03 Filip Pizlo <[email protected]>
The allocator used to allocate memory for MarkedBlocks and LargeAllocations should not be the Subspace itself
Modified: trunk/Source/WebCore/platform/spi/ios/MediaPlayerSPI.h (220292 => 220293)
--- trunk/Source/WebCore/platform/spi/ios/MediaPlayerSPI.h 2017-08-04 21:18:17 UTC (rev 220292)
+++ trunk/Source/WebCore/platform/spi/ios/MediaPlayerSPI.h 2017-08-04 21:37:11 UTC (rev 220293)
@@ -33,11 +33,17 @@
#if USE(APPLE_INTERNAL_SDK)
#import <MediaPlayer/MPAVRoutingController.h>
-#import <MediaPlayer/MPMediaControlsViewController.h>
+#import <MediaPlayer/MPAVRoutingSheet.h>
+#import <MediaPlayer/MPAudioVideoRoutingPopoverController.h>
#else
-NS_ASSUME_NONNULL_BEGIN
+enum {
+ MPAVItemTypeUnknown = 0,
+ MPAVItemTypeAudio = 1,
+ MPAVItemTypeVideo = 2,
+};
+typedef NSUInteger MPAVItemType;
enum {
MPRouteDiscoveryModeDisabled = 0,
@@ -54,12 +60,34 @@
@property (nonatomic, assign) MPRouteDiscoveryMode discoveryMode;
@end
-@interface MPMediaControlsViewController : UIViewController
-@property (nonatomic, copy, nullable) void (^didDismissHandler)(void);
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+@interface MPAudioVideoRoutingPopoverController : UIPopoverController
@end
+#pragma clang diagnostic pop
-NS_ASSUME_NONNULL_END
+@interface MPAudioVideoRoutingPopoverController ()
+- (id)initWithType:(MPAVItemType)avItemType;
+@end
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+@interface MPAVRoutingSheet : UIView
+@end
+#pragma clang diagnostic pop
+
+@interface MPAVRoutingSheet ()
+@property (nonatomic, assign, setter=setAVItemType:) MPAVItemType avItemType;
+
+@property (nonatomic, assign) BOOL mirroringOnly;
+
+- (id)initWithAVItemType:(MPAVItemType)avItemType;
+
+- (void)showInView:(UIView *)view withCompletionHandler:(void (^)(void))completionHandler;
+
+- (void)dismiss;
+@end
+
#endif
#endif
Modified: trunk/Source/WebKit/ChangeLog (220292 => 220293)
--- trunk/Source/WebKit/ChangeLog 2017-08-04 21:18:17 UTC (rev 220292)
+++ trunk/Source/WebKit/ChangeLog 2017-08-04 21:37:11 UTC (rev 220293)
@@ -1,3 +1,15 @@
+2017-08-04 Matt Lewis <[email protected]>
+
+ Unreviewed, rolling out r220288.
+
+ This broke multiple builds.
+
+ Reverted changeset:
+
+ "Use MPAVRoutingController instead of deprecated versions."
+ https://bugs.webkit.org/show_bug.cgi?id=175063
+ http://trac.webkit.org/changeset/220288
+
2017-08-04 Jeremy Jones <[email protected]>
Use MPAVRoutingController instead of deprecated versions.
Modified: trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm (220292 => 220293)
--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm 2017-08-04 21:18:17 UTC (rev 220292)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm 2017-08-04 21:37:11 UTC (rev 220293)
@@ -4000,8 +4000,8 @@
- (void)_showPlaybackTargetPicker:(BOOL)hasVideo fromRect:(const IntRect&)elementRect
{
if (!_airPlayRoutePicker)
- _airPlayRoutePicker = adoptNS([[WKAirPlayRoutePicker alloc] init]);
- [_airPlayRoutePicker showFromView:self];
+ _airPlayRoutePicker = adoptNS([[WKAirPlayRoutePicker alloc] initWithView:self]);
+ [_airPlayRoutePicker show:hasVideo fromRect:elementRect];
}
- (void)_showRunOpenPanel:(API::OpenPanelParameters*)parameters resultListener:(WebOpenPanelResultListenerProxy*)listener
Modified: trunk/Source/WebKit/UIProcess/ios/forms/WKAirPlayRoutePicker.h (220292 => 220293)
--- trunk/Source/WebKit/UIProcess/ios/forms/WKAirPlayRoutePicker.h 2017-08-04 21:18:17 UTC (rev 220292)
+++ trunk/Source/WebKit/UIProcess/ios/forms/WKAirPlayRoutePicker.h 2017-08-04 21:37:11 UTC (rev 220293)
@@ -25,12 +25,13 @@
#if PLATFORM(IOS)
-#import <Foundation/Foundation.h>
+#import <UIKit/UIPopoverController.h>
@class WKContentView;
-@interface WKAirPlayRoutePicker : NSObject
-- (void)showFromView:(WKContentView *)view;
+@interface WKAirPlayRoutePicker : UIView <UIPopoverControllerDelegate>
+- (instancetype)initWithView:(WKContentView *)view;
+- (void)show:(BOOL)hasVideo fromRect:(CGRect)elementRect;
@end
#endif // PLATFORM(IOS)
Modified: trunk/Source/WebKit/UIProcess/ios/forms/WKAirPlayRoutePicker.mm (220292 => 220293)
--- trunk/Source/WebKit/UIProcess/ios/forms/WKAirPlayRoutePicker.mm 2017-08-04 21:18:17 UTC (rev 220292)
+++ trunk/Source/WebKit/UIProcess/ios/forms/WKAirPlayRoutePicker.mm 2017-08-04 21:37:11 UTC (rev 220293)
@@ -30,55 +30,133 @@
#import "UIKitSPI.h"
#import "WKContentView.h"
+#import "WKContentViewInteraction.h"
+#import "WebPageProxy.h"
#import <WebCore/MediaPlayerSPI.h>
#import <wtf/RetainPtr.h>
#import <wtf/SoftLinking.h>
-#if !PLATFORM(WATCHOS) && !PLATFORM(APPLETV)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+
SOFT_LINK_FRAMEWORK(MediaPlayer)
SOFT_LINK_CLASS(MediaPlayer, MPAVRoutingController)
-SOFT_LINK_CLASS(MediaPlayer, MPMediaControlsViewController)
-#endif
+SOFT_LINK_CLASS(MediaPlayer, MPAudioVideoRoutingPopoverController)
+SOFT_LINK_CLASS(MediaPlayer, MPAVRoutingSheet)
using namespace WebKit;
@implementation WKAirPlayRoutePicker {
-#if !PLATFORM(WATCHOS) && !PLATFORM(APPLETV)
- RetainPtr<MPMediaControlsViewController> _actionSheet;
-#endif
+ RetainPtr<MPAVRoutingController> _routingController;
+ RetainPtr<MPAudioVideoRoutingPopoverController> _popoverController; // iPad
+ RetainPtr<MPAVRoutingSheet> _actionSheet; // iPhone
+ WKContentView* _view; // Weak reference.
}
+- (instancetype)initWithView:(WKContentView *)view
+{
+ if (!(self = [super init]))
+ return nil;
+
+ _view = view;
+ return self;
+}
+
- (void)dealloc
{
-#if !PLATFORM(WATCHOS) && !PLATFORM(APPLETV)
- [_actionSheet dismissViewControllerAnimated:0 completion:nil];
-#endif
+ // The ActionSheet's completion handler will release and clear the ActionSheet.
+ [_actionSheet dismiss];
+ [self _dismissAirPlayRoutePickerIPad];
+
[super dealloc];
}
-- (void)showFromView:(WKContentView *)view
+- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
-#if !PLATFORM(WATCHOS) && !PLATFORM(APPLETV)
+ if (popoverController != _popoverController)
+ return;
+
+ [self _dismissAirPlayRoutePickerIPad];
+}
+
+- (void)_presentAirPlayPopoverAnimated:(BOOL)animated fromRect:(CGRect)elementRect
+{
+ [_popoverController presentPopoverFromRect:elementRect inView:_view permittedArrowDirections:UIPopoverArrowDirectionAny animated:animated];
+}
+
+- (void)_windowWillRotate:(NSNotification *)notification
+{
+ [_popoverController dismissPopoverAnimated:NO];
+}
+
+- (void)_windowDidRotate:(NSNotification *)notification
+{
+ [self _dismissAirPlayRoutePickerIPad];
+}
+
+- (void)_dismissAirPlayRoutePickerIPad
+{
+ if (!_routingController)
+ return;
+
+ [_routingController setDiscoveryMode:MPRouteDiscoveryModeDisabled];
+ _routingController = nil;
+
+ if (!_popoverController)
+ return;
+
+ NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+ [center removeObserver:self name:UIWindowWillRotateNotification object:nil];
+ [center removeObserver:self name:UIWindowDidRotateNotification object:nil];
+
+ [_popoverController dismissPopoverAnimated:NO];
+ [_popoverController setDelegate:nil];
+ _popoverController = nil;
+}
+
+- (void)showAirPlayPickerIPad:(MPAVItemType)itemType fromRect:(CGRect)elementRect
+{
+ if (_popoverController)
+ return;
+
+ _popoverController = adoptNS([allocMPAudioVideoRoutingPopoverControllerInstance() initWithType:itemType]);
+ [_popoverController setDelegate:self];
+
+ NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+ [center addObserver:self selector:@selector(_windowWillRotate:) name:UIWindowWillRotateNotification object:nil];
+ [center addObserver:self selector:@selector(_windowDidRotate:) name:UIWindowDidRotateNotification object:nil];
+
+ [self _presentAirPlayPopoverAnimated:YES fromRect:elementRect];
+}
+
+- (void)showAirPlayPickerIPhone:(MPAVItemType)itemType
+{
if (_actionSheet)
return;
- __block RetainPtr<MPAVRoutingController> routingController = adoptNS([allocMPAVRoutingControllerInstance() initWithName:@"WebKit - HTML media element showing AirPlay route picker"]);
- [routingController setDiscoveryMode:MPRouteDiscoveryModeDetailed];
+ _actionSheet = adoptNS([allocMPAVRoutingSheetInstance() initWithAVItemType:itemType]);
- _actionSheet = adoptNS([allocMPMediaControlsViewControllerInstance() init]);
- _actionSheet.get().didDismissHandler = ^ {
- [routingController setDiscoveryMode:MPRouteDiscoveryModeDisabled];
- routingController = nil;
+ [_actionSheet showInView:_view withCompletionHandler:^{
+ [_routingController setDiscoveryMode:MPRouteDiscoveryModeDisabled];
+ _routingController = nil;
_actionSheet = nil;
- };
+ }];
+}
- UIViewController *viewControllerForPresentation = [UIViewController _viewControllerForFullScreenPresentationFromView:view];
- [viewControllerForPresentation presentViewController:_actionSheet.get() animated:YES completion:nil];
-#else
- UNUSED_PARAM(view);
-#endif
+- (void)show:(BOOL)hasVideo fromRect:(CGRect)elementRect
+{
+ _routingController = adoptNS([allocMPAVRoutingControllerInstance() initWithName:@"WebKit2 - HTML media element showing AirPlay route picker"]);
+ [_routingController setDiscoveryMode:MPRouteDiscoveryModeDetailed];
+
+ MPAVItemType itemType = hasVideo ? MPAVItemTypeVideo : MPAVItemTypeAudio;
+ if (UICurrentUserInterfaceIdiomIsPad())
+ [self showAirPlayPickerIPad:itemType fromRect:elementRect];
+ else
+ [self showAirPlayPickerIPhone:itemType];
}
@end
+#pragma clang diagnostic pop
+
#endif // PLATFORM(IOS)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes