Unreviewed, rolling out r220288.
authorjlewis3@apple.com <jlewis3@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Aug 2017 21:37:11 +0000 (21:37 +0000)
committerjlewis3@apple.com <jlewis3@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Aug 2017 21:37:11 +0000 (21:37 +0000)
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

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@220293 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/spi/ios/MediaPlayerSPI.h
Source/WebKit/ChangeLog
Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
Source/WebKit/UIProcess/ios/forms/WKAirPlayRoutePicker.h
Source/WebKit/UIProcess/ios/forms/WKAirPlayRoutePicker.mm

index 1152e19..9da5822 100644 (file)
@@ -1,3 +1,15 @@
+2017-08-04  Matt Lewis  <jlewis3@apple.com>
+
+        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  <fpizlo@apple.com>
 
         The allocator used to allocate memory for MarkedBlocks and LargeAllocations should not be the Subspace itself
index f683543..65a0144 100644 (file)
 #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,11 +60,33 @@ typedef NSInteger MPRouteDiscoveryMode;
 @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
+
+@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
 
-NS_ASSUME_NONNULL_END
+@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
 
index d870d83..cf3b538 100644 (file)
@@ -1,3 +1,15 @@
+2017-08-04  Matt Lewis  <jlewis3@apple.com>
+
+        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  <jeremyj@apple.com>
 
         Use MPAVRoutingController instead of deprecated versions.
index 8331043..94ea374 100644 (file)
@@ -4000,8 +4000,8 @@ static bool isAssistableInputType(InputType type)
 - (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
index 4f02fe1..1795a16 100644 (file)
 
 #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)
index e0a4316..57597fe 100644 (file)
 
 #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 (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 !PLATFORM(WATCHOS) && !PLATFORM(APPLETV)
     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)