Title: [221773] trunk/Source
Revision
221773
Author
[email protected]
Date
2017-09-07 17:24:07 -0700 (Thu, 07 Sep 2017)

Log Message

[Mac] Upstream QTKit-related WebKitSystemInterface functions
https://bugs.webkit.org/show_bug.cgi?id=176472

Reviewed by Eric Carlson.

Source/WebCore:

* platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
(WebCore::disableComponentsOnce):
(WebCore::MediaPlayerPrivateQTKit::createQTMovie):
(WebCore::MediaPlayerPrivateQTKit::hasClosedCaptions const):
(WebCore::MediaPlayerPrivateQTKit::setClosedCaptionsVisible):
(WebCore::selectPreferredAlternateTrackForMediaType):
(WebCore::selectPreferredAlternates):
(WebCore::MediaPlayerPrivateQTKit::updateStates):
(WebCore::mimeModernTypesCache):
(WebCore::MediaPlayerPrivateQTKit::originsInMediaCache):
(WebCore::MediaPlayerPrivateQTKit::clearMediaCache):
(WebCore::MediaPlayerPrivateQTKit::clearMediaCacheForOrigins):
(WebCore::MediaPlayerPrivateQTKit::hasSingleSecurityOrigin const):
(WebCore::MediaPlayerPrivateQTKit::movieLoadType const):
(WebCore::MediaPlayerPrivateQTKit::canSaveMediaData const):
* platform/mac/WebCoreSystemInterface.h:
* platform/mac/WebCoreSystemInterface.mm:
* platform/mac/WebVideoFullscreenHUDWindowController.mm:
(createMediaUIControl):
(createControlWithMediaUIControlType):
(createMediaUIBackgroundView):
(-[WebVideoFullscreenHUDWindowController windowDidLoad]):

Source/WebCore/PAL:

* pal/spi/mac/QTKitSPI.h:

Source/WebKit:

* WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
(InitWebCoreSystemInterface):

Source/WebKitLegacy/mac:

* WebCoreSupport/WebSystemInterface.mm:
(InitWebCoreSystemInterface):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (221772 => 221773)


--- trunk/Source/WebCore/ChangeLog	2017-09-07 23:23:57 UTC (rev 221772)
+++ trunk/Source/WebCore/ChangeLog	2017-09-08 00:24:07 UTC (rev 221773)
@@ -1,3 +1,33 @@
+2017-09-07  Andy Estes  <[email protected]>
+
+        [Mac] Upstream QTKit-related WebKitSystemInterface functions
+        https://bugs.webkit.org/show_bug.cgi?id=176472
+
+        Reviewed by Eric Carlson.
+
+        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
+        (WebCore::disableComponentsOnce):
+        (WebCore::MediaPlayerPrivateQTKit::createQTMovie):
+        (WebCore::MediaPlayerPrivateQTKit::hasClosedCaptions const):
+        (WebCore::MediaPlayerPrivateQTKit::setClosedCaptionsVisible):
+        (WebCore::selectPreferredAlternateTrackForMediaType):
+        (WebCore::selectPreferredAlternates):
+        (WebCore::MediaPlayerPrivateQTKit::updateStates):
+        (WebCore::mimeModernTypesCache):
+        (WebCore::MediaPlayerPrivateQTKit::originsInMediaCache):
+        (WebCore::MediaPlayerPrivateQTKit::clearMediaCache):
+        (WebCore::MediaPlayerPrivateQTKit::clearMediaCacheForOrigins):
+        (WebCore::MediaPlayerPrivateQTKit::hasSingleSecurityOrigin const):
+        (WebCore::MediaPlayerPrivateQTKit::movieLoadType const):
+        (WebCore::MediaPlayerPrivateQTKit::canSaveMediaData const):
+        * platform/mac/WebCoreSystemInterface.h:
+        * platform/mac/WebCoreSystemInterface.mm:
+        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
+        (createMediaUIControl):
+        (createControlWithMediaUIControlType):
+        (createMediaUIBackgroundView):
+        (-[WebVideoFullscreenHUDWindowController windowDidLoad]):
+
 2017-09-07  Youenn Fablet  <[email protected]>
 
         Align FetchResponse and FetchRequest body handling

Modified: trunk/Source/WebCore/PAL/ChangeLog (221772 => 221773)


--- trunk/Source/WebCore/PAL/ChangeLog	2017-09-07 23:23:57 UTC (rev 221772)
+++ trunk/Source/WebCore/PAL/ChangeLog	2017-09-08 00:24:07 UTC (rev 221773)
@@ -1,3 +1,12 @@
+2017-09-07  Andy Estes  <[email protected]>
+
+        [Mac] Upstream QTKit-related WebKitSystemInterface functions
+        https://bugs.webkit.org/show_bug.cgi?id=176472
+
+        Reviewed by Eric Carlson.
+
+        * pal/spi/mac/QTKitSPI.h:
+
 2017-09-07  Wenson Hsieh  <[email protected]>
 
         [Mac] Stop importing NSFunctionBar_Private.h in NSTouchBarSPI.h on the macOS 10.13+ SDK

Modified: trunk/Source/WebCore/PAL/pal/spi/mac/QTKitSPI.h (221772 => 221773)


--- trunk/Source/WebCore/PAL/pal/spi/mac/QTKitSPI.h	2017-09-07 23:23:57 UTC (rev 221772)
+++ trunk/Source/WebCore/PAL/pal/spi/mac/QTKitSPI.h	2017-09-08 00:24:07 UTC (rev 221773)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -25,8 +25,12 @@
 
 #pragma once
 
-#if USE(APPLE_INTERNAL_SDK) || __MAC_OS_X_VERSION_MAX_ALLOWED < 101200
-#import <QTKit/QTKit.h>
+#if USE(APPLE_INTERNAL_SDK)
+
+#import <QTKit/QTHUDBackgroundView_Private.h>
+#import <QTKit/QTKit_Private.h>
+#import <QTKit/QTUtilities_Private.h>
+
 #else
 
 enum {
@@ -46,8 +50,19 @@
 
 typedef enum {
     QTIncludeCommonTypes = 0,
+    QTIncludeOnlyFigMediaFileTypes = 1 << 8,
 } QTMovieFileTypeOptions;
 
+enum {
+    QTMovieTypeUnknown = 0,
+    QTMovieTypeLocal,
+    QTMovieTypeFastStart,
+    QTMovieTypeLiveStream,
+    QTMovieTypeStoredStream
+};
+
+@class QTTrack;
+
 @interface QTMedia : NSObject
 
 - (id)attributeForKey:(NSString *)attributeKey;
@@ -58,6 +73,8 @@
 
 + (NSArray *)movieFileTypes:(QTMovieFileTypeOptions)types;
 
++ (void)disableComponent:(ComponentDescription)component;
+
 - (id)initWithAttributes:(NSDictionary *)attributes error:(NSError **)errorPtr;
 
 - (void)play;
@@ -81,6 +98,14 @@
 
 - (NSArray *)tracks;
 
+- (NSArray *)alternateGroupTypes;
+- (NSArray *)alternatesForMediaType:(NSString *)type;
+- (void)deselectAlternateGroupTrack:(QTTrack *)alternateTrack;
+- (void)selectAlternateGroupTrack:(QTTrack *)alternateTrack;
+
+- (NSURL *)URL;
+- (UInt32)movieType;
+
 @end
 
 @interface QTMovieLayer : CALayer
@@ -106,4 +131,20 @@
 
 @end
 
+@interface QTHUDBackgroundView : NSView
+
+- (void)setContentBorderPosition:(CGFloat)contentBorderPosition;
+
+@end
+
+@interface QTUtilities : NSObject
+
++ (id)qtUtilities;
+
+- (NSArray *)sitesInDownloadCache;
+- (void)clearDownloadCache;
+- (void)clearDownloadCacheForSite:(NSString *)site;
+
+@end
+
 #endif

Modified: trunk/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm (221772 => 221773)


--- trunk/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm	2017-09-07 23:23:57 UTC (rev 221772)
+++ trunk/Source/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm	2017-09-08 00:24:07 UTC (rev 221773)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
+ * Copyright (C) 2007-2017 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -52,6 +52,7 @@
 
 SOFT_LINK_CLASS(QTKit, QTMovie)
 SOFT_LINK_CLASS(QTKit, QTMovieLayer)
+SOFT_LINK_CLASS(QTKit, QTUtilities)
 
 SOFT_LINK_POINTER(QTKit, QTTrackMediaTypeAttribute, NSString *)
 SOFT_LINK_POINTER(QTKit, QTMediaTypeAttribute, NSString *)
@@ -71,6 +72,7 @@
 SOFT_LINK_POINTER(QTKit, QTMovieLoadStateAttribute, NSString *)
 SOFT_LINK_POINTER(QTKit, QTMovieLoadStateErrorAttribute, NSString *)
 SOFT_LINK_POINTER(QTKit, QTMovieLoadStateDidChangeNotification, NSString *)
+SOFT_LINK_POINTER(QTKit, QTMovieLoadedRangesDidChangeNotification, NSString *);
 SOFT_LINK_POINTER(QTKit, QTMovieNaturalSizeAttribute, NSString *)
 SOFT_LINK_POINTER(QTKit, QTMovieCurrentSizeAttribute, NSString *)
 SOFT_LINK_POINTER(QTKit, QTMoviePreventExternalURLLinksAttribute, NSString *)
@@ -95,8 +97,8 @@
 - (NSArray *)loadedRanges;
 @end
 
-#define QTMovie getQTMovieClass()
 #define QTMovieLayer getQTMovieLayerClass()
+#define QTUtilities getQTUtilitiesClass()
 
 #define QTTrackMediaTypeAttribute getQTTrackMediaTypeAttribute()
 #define QTMediaTypeAttribute getQTMediaTypeAttribute()
@@ -116,6 +118,7 @@
 #define QTMovieLoadStateAttribute getQTMovieLoadStateAttribute()
 #define QTMovieLoadStateErrorAttribute getQTMovieLoadStateErrorAttribute()
 #define QTMovieLoadStateDidChangeNotification getQTMovieLoadStateDidChangeNotification()
+#define QTMovieLoadedRangesDidChangeNotification getQTMovieLoadedRangesDidChangeNotification()
 #define QTMovieNaturalSizeAttribute getQTMovieNaturalSizeAttribute()
 #define QTMovieCurrentSizeAttribute getQTMovieCurrentSizeAttribute()
 #define QTMoviePreventExternalURLLinksAttribute getQTMoviePreventExternalURLLinksAttribute()
@@ -292,7 +295,7 @@
     // QTKitServer has not yet started.  As a result, we must pass in exactly the flags we want to
     // disable per component.  As a failsafe, if in the future these flags change, we will disable the
     // PDF components for a third time with a wildcard flags field:
-    uint32_t componentsToDisable[11][5] = {
+    ComponentDescription componentsToDisable[11] = {
         {'eat ', 'TEXT', 'text', 0, 0},
         {'eat ', 'TXT ', 'text', 0, 0},    
         {'eat ', 'utxt', 'text', 0, 0},  
@@ -307,7 +310,7 @@
     };
 
     for (auto& component : componentsToDisable)
-        wkQTMovieDisableComponent(component);
+        [getQTMovieClass() disableComponent:component];
 }
 
 void MediaPlayerPrivateQTKit::createQTMovie(NSURL *url, NSDictionary *movieAttributes)
@@ -345,14 +348,10 @@
                                                object:m_qtMovie.get()];
 
     // In updateState(), we track when maxTimeLoaded() == duration().
-    // In newer version of QuickTime, a notification is emitted when maxTimeLoaded changes.
-    // In older version of QuickTime, QTMovieLoadStateDidChangeNotification be fired.
-    if (NSString *maxTimeLoadedChangeNotification = wkQTMovieMaxTimeLoadedChangeNotification()) {
-        [[NSNotificationCenter defaultCenter] addObserver:m_objcObserver.get()
-                                                 selector:@selector(loadedRangesChanged:)
-                                                     name:maxTimeLoadedChangeNotification
-                                                   object:m_qtMovie.get()];        
-    }
+    [[NSNotificationCenter defaultCenter] addObserver:m_objcObserver.get()
+                                             selector:@selector(loadedRangesChanged:)
+                                                 name:QTMovieLoadedRangesDidChangeNotification
+                                               object:m_qtMovie.get()];
 
     [[NSNotificationCenter defaultCenter] addObserver:m_objcObserver.get()
                                              selector:@selector(rateChanged:) 
@@ -771,18 +770,30 @@
 {
     if (!metaDataAvailable())
         return false;
-    return wkQTMovieHasClosedCaptions(m_qtMovie.get());  
+    return [[m_qtMovie alternateGroupTypes] containsObject:@"clcp"];
 }
 
 void MediaPlayerPrivateQTKit::setClosedCaptionsVisible(bool closedCaptionsVisible)
 {
-    if (metaDataAvailable()) {
-        wkQTMovieSetShowClosedCaptions(m_qtMovie.get(), closedCaptionsVisible);
+    if (!metaDataAvailable())
+        return;
 
-        if (closedCaptionsVisible && m_qtVideoLayer) {
-            // Captions will be rendered upside down unless we flag the movie as flipped (again). See <rdar://7408440>.
-            [m_qtVideoLayer.get() setGeometryFlipped:YES];
-        }
+    if (![[m_qtMovie alternateGroupTypes] containsObject:@"clcp"])
+        return;
+
+    NSArray *trackAlternatesArray = [m_qtMovie alternatesForMediaType:@"clcp"];
+    QTTrack *track = trackAlternatesArray[0][@"QTAlternates_QTTrack"];
+    if (!track)
+        return;
+
+    if (!closedCaptionsVisible)
+        [m_qtMovie deselectAlternateGroupTrack:track];
+    else
+        [m_qtMovie selectAlternateGroupTrack:track];
+
+    if (closedCaptionsVisible && m_qtVideoLayer) {
+        // Captions will be rendered upside down unless we flag the movie as flipped (again). See <rdar://7408440>.
+        [m_qtVideoLayer.get() setGeometryFlipped:YES];
     }
 }
 
@@ -941,6 +952,58 @@
         m_player->client().mediaPlayerRenderingModeChanged(m_player);
 }
 
+static void selectPreferredAlternateTrackForMediaType(QTMovie *movie, NSString *mediaType)
+{
+    NSArray *alternates = [movie alternatesForMediaType:mediaType];
+    if (!alternates.count)
+        return;
+
+    auto languageToQTTrackMap = adoptNS([[NSMutableDictionary alloc] initWithCapacity:alternates.count]);
+
+    for (NSUInteger index = 0; index < alternates.count; ++index) {
+        NSDictionary *alternateDict = alternates[index];
+        NSString *languageString = alternateDict[@"QTAlternates_LanguageCodeEncoding_ISO_639_2T"];
+        if (![languageString cStringUsingEncoding:kCFStringEncodingASCII])
+            continue;
+        if (!languageString)
+            languageString = alternateDict[@"QTAlternates_LanguageCodeEncoding_RFC_4646"];
+        if (!languageString) {
+            LangCode langCode = [alternateDict[@"QTAlternates_LanguageCodeEncoding_MacType_LangCode"] intValue];
+            auto identifier = adoptCF(CFLocaleCreateCanonicalLocaleIdentifierFromScriptManagerCodes(kCFAllocatorDefault, langCode, 0));
+            languageString = (NSString *)identifier.autorelease();
+        }
+        if (!languageString)
+            continue;
+
+        id alternateTrack = alternateDict[@"QTAlternates_QTTrack"];
+        if (!alternateTrack)
+            continue;
+
+        if (![[alternateTrack attributeForKey:@"QTTrackEnabledAttribute"] boolValue])
+            continue;
+
+        [languageToQTTrackMap setObject:alternateTrack forKey:languageString];
+    }
+
+    NSArray *preferredLanguages = [NSBundle preferredLocalizationsFromArray:[languageToQTTrackMap allKeys] forPreferences:nil];
+    if (preferredLanguages.count) {
+        id preferredTrack = [languageToQTTrackMap objectForKey:preferredLanguages[0]];
+        if (preferredTrack) {
+            // +[NSBundle preferredLocalizationsFromArray:forPreferences] may return a language which was
+            // not present in preferredLanguages, and will therefore not have an associated track.
+            [movie selectAlternateGroupTrack:preferredTrack];
+        }
+    }
+}
+
+static void selectPreferredAlternates(QTMovie *movie)
+{
+    selectPreferredAlternateTrackForMediaType(movie, @"vide");
+    selectPreferredAlternateTrackForMediaType(movie, @"soun");
+    selectPreferredAlternateTrackForMediaType(movie, @"cplp");
+    selectPreferredAlternateTrackForMediaType(movie, @"sbtl");
+}
+
 void MediaPlayerPrivateQTKit::updateStates()
 {
     MediaPlayer::NetworkState oldNetworkState = m_networkState;
@@ -965,7 +1028,7 @@
             loadState = QTMovieLoadStateError;
 
         if (loadState != QTMovieLoadStateError) {
-            wkQTMovieSelectPreferredAlternates(m_qtMovie.get());
+            selectPreferredAlternates(m_qtMovie.get());
             cacheMovieScale();
             MediaPlayer::MovieLoadType movieType = movieLoadType();
             m_isStreaming = movieType == MediaPlayer::StoredStream || movieType == MediaPlayer::LiveStream;
@@ -1267,13 +1330,13 @@
 
 static const HashSet<String, ASCIICaseInsensitiveHash>& mimeCommonTypesCache()
 {
-    static const auto cache = makeNeverDestroyed(createFileTypesSet([QTMovie movieFileTypes:QTIncludeCommonTypes]));
+    static const auto cache = makeNeverDestroyed(createFileTypesSet([getQTMovieClass() movieFileTypes:QTIncludeCommonTypes]));
     return cache;
 } 
 
 static const HashSet<String, ASCIICaseInsensitiveHash>& mimeModernTypesCache()
 {
-    static const auto cache = makeNeverDestroyed(createFileTypesSet([QTMovie movieFileTypes:(QTMovieFileTypeOptions)wkQTIncludeOnlyModernMediaFileTypes()]));
+    static const auto cache = makeNeverDestroyed(createFileTypesSet([getQTMovieClass() movieFileTypes:QTIncludeOnlyFigMediaFileTypes]));
     return cache;
 }
 
@@ -1324,7 +1387,7 @@
 HashSet<RefPtr<SecurityOrigin>> MediaPlayerPrivateQTKit::originsInMediaCache(const String&)
 {
     HashSet<RefPtr<SecurityOrigin>> origins;
-    NSArray *mediaSites = wkQTGetSitesInMediaDownloadCache();
+    NSArray *mediaSites = [[QTUtilities qtUtilities] sitesInDownloadCache];
     
     for (NSString *site in mediaSites) {
         URL siteAsURL = URL(URL(), site);
@@ -1337,7 +1400,7 @@
 void MediaPlayerPrivateQTKit::clearMediaCache(const String&, std::chrono::system_clock::time_point)
 {
     LOG(Media, "MediaPlayerPrivateQTKit::clearMediaCache()");
-    wkQTClearMediaDownloadCache();
+    [[QTUtilities qtUtilities] clearDownloadCache];
 }
 
 void MediaPlayerPrivateQTKit::clearMediaCacheForOrigins(const String&, const HashSet<RefPtr<SecurityOrigin>>& origins)
@@ -1344,7 +1407,7 @@
 {
     LOG(Media, "MediaPlayerPrivateQTKit::clearMediaCacheForOrigins()");
     for (auto& origin : origins)
-        wkQTClearMediaDownloadCacheForSite(origin->toRawString());
+        [[QTUtilities qtUtilities] clearDownloadCacheForSite:origin->toRawString()];
 }
 
 void MediaPlayerPrivateQTKit::disableUnsupportedTracks()
@@ -1468,7 +1531,7 @@
     if (!m_qtMovie)
         return false;
 
-    Ref<SecurityOrigin> resolvedOrigin = SecurityOrigin::create(URL(wkQTMovieResolvedURL(m_qtMovie.get())));
+    Ref<SecurityOrigin> resolvedOrigin = SecurityOrigin::create(URL([m_qtMovie URL]));
     Ref<SecurityOrigin> requestedOrigin = SecurityOrigin::createFromString(m_movieURL);
     return resolvedOrigin->isSameSchemeHostPort(requestedOrigin.get());
 }
@@ -1476,15 +1539,21 @@
 MediaPlayer::MovieLoadType MediaPlayerPrivateQTKit::movieLoadType() const
 {
     if (!m_qtMovie)
-        return MediaPlayer::Unknown;
+        return MediaPlayer::MovieLoadType::Unknown;
 
-    MediaPlayer::MovieLoadType movieType = (MediaPlayer::MovieLoadType)wkQTMovieGetType(m_qtMovie.get());
-
-    // Can't include WebKitSystemInterface from WebCore so we can't get the enum returned
-    // by wkQTMovieGetType, but at least verify that the value is in the valid range.
-    ASSERT(movieType >= MediaPlayer::Unknown && movieType <= MediaPlayer::LiveStream);
-
-    return movieType;
+    UInt32 movieType = [m_qtMovie movieType];
+    switch (movieType) {
+    case QTMovieTypeLocal:
+    case QTMovieTypeFastStart:
+        return MediaPlayer::MovieLoadType::Download;
+    case QTMovieTypeLiveStream:
+        return MediaPlayer::MovieLoadType::LiveStream;
+    case QTMovieTypeStoredStream:
+        return MediaPlayer::MovieLoadType::StoredStream;
+    case QTMovieTypeUnknown:
+    default:
+        return MediaPlayer::MovieLoadType::Unknown;
+    }
 }
 
 void MediaPlayerPrivateQTKit::setPreload(MediaPlayer::Preload preload)
@@ -1515,7 +1584,7 @@
         return false;
 
     if (m_qtMovie)
-        url = ""
+        url = "" URL]);
     else
         url = "" m_movieURL);
 

Modified: trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.h (221772 => 221773)


--- trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.h	2017-09-07 23:23:57 UTC (rev 221772)
+++ trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.h	2017-09-08 00:24:07 UTC (rev 221773)
@@ -131,32 +131,7 @@
 extern BOOL (*wkGetNSURLResponseMustRevalidate)(NSURLResponse *response);
 extern BOOL (*wkHitTestMediaUIPart)(int part, CGRect bounds, CGPoint point);
 extern void (*wkMeasureMediaUIPart)(int part, CGRect *bounds, CGSize *naturalSize);
-extern NSView *(*wkCreateMediaUIBackgroundView)(void);
 
-typedef enum {
-    wkMediaUIControlTimeline,
-    wkMediaUIControlSlider,
-    wkMediaUIControlPlayPauseButton,
-    wkMediaUIControlExitFullscreenButton,
-    wkMediaUIControlRewindButton,
-    wkMediaUIControlFastForwardButton,
-    wkMediaUIControlVolumeUpButton,
-    wkMediaUIControlVolumeDownButton
-} wkMediaUIControlType;
-extern NSControl *(*wkCreateMediaUIControl)(int);
-
-extern unsigned (*wkQTIncludeOnlyModernMediaFileTypes)(void);
-extern void (*wkQTMovieDisableComponent)(uint32_t[5]);
-extern float (*wkQTMovieMaxTimeLoaded)(QTMovie*);
-extern NSString *(*wkQTMovieMaxTimeLoadedChangeNotification)(void);
-extern int (*wkQTMovieGetType)(QTMovie*);
-extern BOOL (*wkQTMovieHasClosedCaptions)(QTMovie*);
-extern NSURL *(*wkQTMovieResolvedURL)(QTMovie*);
-extern void (*wkQTMovieSetShowClosedCaptions)(QTMovie*, BOOL);
-extern void (*wkQTMovieSelectPreferredAlternates)(QTMovie*);
-extern NSArray *(*wkQTGetSitesInMediaDownloadCache)();
-extern void (*wkQTClearMediaDownloadCacheForSite)(NSString *site);
-extern void (*wkQTClearMediaDownloadCache)();
 extern void (*wkSetCookieStoragePrivateBrowsingEnabled)(BOOL);
 #endif
 extern void (*wkSetCONNECTProxyForStream)(CFReadStreamRef, CFStringRef proxyHost, CFNumberRef proxyPort);

Modified: trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.mm (221772 => 221773)


--- trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.mm	2017-09-07 23:23:57 UTC (rev 221772)
+++ trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.mm	2017-09-08 00:24:07 UTC (rev 221773)
@@ -36,23 +36,9 @@
 BOOL (*wkHitTestMediaUIPart)(int part, CGRect bounds, CGPoint point);
 void (*wkDrawMediaUIPart)(int part, CGContextRef context, CGRect rect, unsigned state);
 void (*wkMeasureMediaUIPart)(int part, CGRect *bounds, CGSize *naturalSize);
-NSView *(*wkCreateMediaUIBackgroundView)(void);
-NSControl *(*wkCreateMediaUIControl)(int);
 NSTimeInterval (*wkGetNSURLResponseCalculatedExpiration)(NSURLResponse *response);
 BOOL (*wkGetNSURLResponseMustRevalidate)(NSURLResponse *response);
 void (*wkPopupMenu)(NSMenu*, NSPoint location, float width, NSView*, int selectedItem, NSFont*, NSControlSize controlSize, bool usesCustomAppearance);
-unsigned (*wkQTIncludeOnlyModernMediaFileTypes)(void);
-void (*wkQTMovieDisableComponent)(uint32_t[5]);
-float (*wkQTMovieMaxTimeLoaded)(QTMovie*);
-NSString *(*wkQTMovieMaxTimeLoadedChangeNotification)(void);
-int (*wkQTMovieGetType)(QTMovie*);
-BOOL (*wkQTMovieHasClosedCaptions)(QTMovie*);
-NSURL *(*wkQTMovieResolvedURL)(QTMovie*);
-void (*wkQTMovieSetShowClosedCaptions)(QTMovie*, BOOL);
-void (*wkQTMovieSelectPreferredAlternates)(QTMovie*);
-NSArray *(*wkQTGetSitesInMediaDownloadCache)();
-void (*wkQTClearMediaDownloadCacheForSite)(NSString *site);
-void (*wkQTClearMediaDownloadCache)();
 
 void (*wkSetCONNECTProxyForStream)(CFReadStreamRef, CFStringRef proxyHost, CFNumberRef proxyPort);
 void (*wkSetCONNECTProxyAuthorizationForStream)(CFReadStreamRef, CFStringRef proxyAuthorizationString);

Modified: trunk/Source/WebCore/platform/mac/WebVideoFullscreenHUDWindowController.mm (221772 => 221773)


--- trunk/Source/WebCore/platform/mac/WebVideoFullscreenHUDWindowController.mm	2017-09-07 23:23:57 UTC (rev 221772)
+++ trunk/Source/WebCore/platform/mac/WebVideoFullscreenHUDWindowController.mm	2017-09-08 00:24:07 UTC (rev 221773)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009-2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2009-2017 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -31,9 +31,38 @@
 #import <WebCore/HTMLVideoElement.h>
 #import <WebCoreSystemInterface.h>
 #import <pal/spi/cg/CoreGraphicsSPI.h>
+#import <pal/spi/mac/QTKitSPI.h>
+#import <wtf/SoftLinking.h>
 
+SOFT_LINK_FRAMEWORK(QTKit)
+
+SOFT_LINK_CLASS(QTKit, QTHUDBackgroundView)
+SOFT_LINK_CLASS(QTKit, QTHUDButton)
+SOFT_LINK_CLASS(QTKit, QTHUDSlider)
+SOFT_LINK_CLASS(QTKit, QTHUDTimeline)
+
+#define QTHUDBackgroundView getQTHUDBackgroundViewClass()
+#define QTHUDButton getQTHUDButtonClass()
+#define QTHUDSlider getQTHUDSliderClass()
+#define QTHUDTimeline getQTHUDTimelineClass()
+
 using namespace WebCore;
 
+namespace WebCore {
+
+enum class MediaUIControl {
+    Timeline,
+    Slider,
+    PlayPauseButton,
+    ExitFullscreenButton,
+    RewindButton,
+    FastForwardButton,
+    VolumeUpButton,
+    VolumeDownButton,
+};
+
+}
+
 @interface WebVideoFullscreenHUDWindowController (Private) <NSWindowDelegate>
 
 - (void)updateTime;
@@ -265,10 +294,68 @@
     [self setWindow:nil];
 }
 
-static NSControl *createControlWithMediaUIControlType(int controlType, NSRect frame)
+static NSControl *createMediaUIControl(MediaUIControl controlType)
 {
-    NSControl *control = wkCreateMediaUIControl(controlType);
-    [control setFrame:frame];
+    switch (controlType) {
+    case MediaUIControl::Timeline: {
+        NSSlider *slider = [[QTHUDTimeline alloc] init];
+        [[slider cell] setContinuous:YES];
+        return slider;
+    }
+    case MediaUIControl::Slider: {
+        NSButton *slider = [[QTHUDSlider alloc] init];
+        [[slider cell] setContinuous:YES];
+        return slider;
+    }
+    case MediaUIControl::PlayPauseButton: {
+        NSButton *button = [[QTHUDButton alloc] init];
+        [button setImage:[NSImage imageNamed:@"NSPlayTemplate"]];
+        [button setAlternateImage:[NSImage imageNamed:@"NSPauseQTPrivateTemplate"]];
+
+        [[button cell] setShowsStateBy:NSContentsCellMask];
+        [button setBordered:NO];
+        return button;
+    }
+    case MediaUIControl::ExitFullscreenButton: {
+        NSButton *button = [[QTHUDButton alloc] init];
+        [button setImage:[NSImage imageNamed:@"NSExitFullScreenTemplate"]];
+        [button setBordered:NO];
+        return button;
+    }
+    case MediaUIControl::RewindButton: {
+        NSButton *button = [[QTHUDButton alloc] init];
+        [button setImage:[NSImage imageNamed:@"NSRewindTemplate"]];
+        [button setBordered:NO];
+        return button;
+    }
+    case MediaUIControl::FastForwardButton: {
+        NSButton *button = [[QTHUDButton alloc] init];
+        [button setImage:[NSImage imageNamed:@"NSFastForwardTemplate"]];
+        [button setBordered:NO];
+        return button;
+    }
+    case MediaUIControl::VolumeUpButton: {
+        NSButton *button = [[QTHUDButton alloc] init];
+        [button setImage:[NSImage imageNamed:@"NSAudioOutputVolumeHighTemplate"]];
+        [button setBordered:NO];
+        return button;
+    }
+    case MediaUIControl::VolumeDownButton: {
+        NSButton *button = [[QTHUDButton alloc] init];
+        [button setImage:[NSImage imageNamed:@"NSAudioOutputVolumeLowTemplate"]];
+        [button setBordered:NO];
+        return button;
+    }
+    }
+
+    ASSERT_NOT_REACHED();
+    return nil;
+}
+
+static NSControl *createControlWithMediaUIControlType(MediaUIControl controlType, NSRect frame)
+{
+    NSControl *control = createMediaUIControl(controlType);
+    control.frame = frame;
     return control;
 }
 
@@ -285,6 +372,21 @@
     return textField;
 }
 
+static NSView *createMediaUIBackgroundView()
+{
+    id view = [[QTHUDBackgroundView alloc] init];
+
+    const CGFloat quickTimePlayerHUDHeight = 59;
+    const CGFloat quickTimePlayerHUDContentBorderPosition = 38;
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+    [view setContentBorderPosition:quickTimePlayerHUDContentBorderPosition / quickTimePlayerHUDHeight];
+#pragma clang diagnostic pop
+
+    return view;
+}
+
 - (void)windowDidLoad
 {
     static const CGFloat horizontalMargin = 10;
@@ -310,7 +412,7 @@
     NSWindow *window = [self window];
     ASSERT(window);
 
-    NSView *background = ""
+    NSView *background = ""
 
     [window setContentView:background];
     _area = [[NSTrackingArea alloc] initWithRect:[background bounds] options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways owner:self userInfo:nil];
@@ -320,7 +422,7 @@
     NSView *contentView = [window contentView];
 
     CGFloat center = CGFloor((windowWidth - playButtonWidth) / 2);
-    _playButton = (NSButton *)createControlWithMediaUIControlType(wkMediaUIControlPlayPauseButton, NSMakeRect(center, windowHeight - playButtonTopMargin - playButtonHeight, playButtonWidth, playButtonHeight));
+    _playButton = (NSButton *)createControlWithMediaUIControlType(MediaUIControl::PlayPauseButton, NSMakeRect(center, windowHeight - playButtonTopMargin - playButtonHeight, playButtonWidth, playButtonHeight));
     ASSERT([_playButton isKindOfClass:[NSButton class]]);
     [_playButton setTarget:self];
     [_playButton setAction:@selector(togglePlaying:)];
@@ -327,7 +429,7 @@
     [contentView addSubview:_playButton];
 
     CGFloat closeToRight = windowWidth - horizontalMargin - exitFullscreenButtonWidth;
-    NSControl *exitFullscreenButton = createControlWithMediaUIControlType(wkMediaUIControlExitFullscreenButton, NSMakeRect(closeToRight, windowHeight - exitFullscreenButtonTopMargin - exitFullscreenButtonHeight, exitFullscreenButtonWidth, exitFullscreenButtonHeight));
+    NSControl *exitFullscreenButton = createControlWithMediaUIControlType(MediaUIControl::ExitFullscreenButton, NSMakeRect(closeToRight, windowHeight - exitFullscreenButtonTopMargin - exitFullscreenButtonHeight, exitFullscreenButtonWidth, exitFullscreenButtonHeight));
     [exitFullscreenButton setAction:@selector(exitFullscreen:)];
     [exitFullscreenButton setTarget:self];
     [contentView addSubview:exitFullscreenButton];
@@ -335,7 +437,7 @@
     
     CGFloat volumeControlsBottom = windowHeight - volumeControlsTopMargin - volumeButtonHeight;
     CGFloat left = horizontalMargin;
-    NSControl *volumeDownButton = createControlWithMediaUIControlType(wkMediaUIControlVolumeDownButton, NSMakeRect(left, volumeControlsBottom, volumeButtonWidth, volumeButtonHeight));
+    NSControl *volumeDownButton = createControlWithMediaUIControlType(MediaUIControl::VolumeDownButton, NSMakeRect(left, volumeControlsBottom, volumeButtonWidth, volumeButtonHeight));
     [contentView addSubview:volumeDownButton];
     [volumeDownButton setTarget:self];
     [volumeDownButton setAction:@selector(setVolumeToZero:)];
@@ -342,7 +444,7 @@
     [volumeDownButton release];
 
     left += volumeButtonWidth;
-    _volumeSlider = createControlWithMediaUIControlType(wkMediaUIControlSlider, NSMakeRect(left, volumeControlsBottom + CGFloor((volumeButtonHeight - volumeSliderHeight) / 2), volumeSliderWidth, volumeSliderHeight));
+    _volumeSlider = createControlWithMediaUIControlType(MediaUIControl::Slider, NSMakeRect(left, volumeControlsBottom + CGFloor((volumeButtonHeight - volumeSliderHeight) / 2), volumeSliderWidth, volumeSliderHeight));
     [_volumeSlider setValue:[NSNumber numberWithDouble:[self maxVolume]] forKey:@"maxValue"];
     [_volumeSlider setTarget:self];
     [_volumeSlider setAction:@selector(volumeChanged:)];
@@ -349,13 +451,13 @@
     [contentView addSubview:_volumeSlider];
 
     left += volumeSliderWidth + volumeUpButtonLeftMargin;
-    NSControl *volumeUpButton = createControlWithMediaUIControlType(wkMediaUIControlVolumeUpButton, NSMakeRect(left, volumeControlsBottom, volumeButtonWidth, volumeButtonHeight));
+    NSControl *volumeUpButton = createControlWithMediaUIControlType(MediaUIControl::VolumeUpButton, NSMakeRect(left, volumeControlsBottom, volumeButtonWidth, volumeButtonHeight));
     [volumeUpButton setTarget:self];
     [volumeUpButton setAction:@selector(setVolumeToMaximum:)];
     [contentView addSubview:volumeUpButton];
     [volumeUpButton release];
 
-    _timeline = wkCreateMediaUIControl(wkMediaUIControlTimeline);
+    _timeline = createMediaUIControl(MediaUIControl::Timeline);
 
     [_timeline setTarget:self];
     [_timeline setAction:@selector(timelinePositionChanged:)];

Modified: trunk/Source/WebKit/ChangeLog (221772 => 221773)


--- trunk/Source/WebKit/ChangeLog	2017-09-07 23:23:57 UTC (rev 221772)
+++ trunk/Source/WebKit/ChangeLog	2017-09-08 00:24:07 UTC (rev 221773)
@@ -1,3 +1,13 @@
+2017-09-07  Andy Estes  <[email protected]>
+
+        [Mac] Upstream QTKit-related WebKitSystemInterface functions
+        https://bugs.webkit.org/show_bug.cgi?id=176472
+
+        Reviewed by Eric Carlson.
+
+        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
+        (InitWebCoreSystemInterface):
+
 2017-09-07  Alex Christensen  <[email protected]>
 
         Clean up API::UIClient

Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm (221772 => 221773)


--- trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm	2017-09-07 23:23:57 UTC (rev 221772)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm	2017-09-08 00:24:07 UTC (rev 221773)
@@ -43,18 +43,6 @@
         INIT(DrawMediaUIPart);
         INIT(HitTestMediaUIPart);
         INIT(MeasureMediaUIPart);
-        INIT(QTIncludeOnlyModernMediaFileTypes);
-        INIT(QTMovieDisableComponent);
-        INIT(QTMovieGetType);
-        INIT(QTMovieHasClosedCaptions);
-        INIT(QTMovieMaxTimeLoaded);
-        INIT(QTMovieMaxTimeLoadedChangeNotification);
-        INIT(QTMovieResolvedURL);
-        INIT(QTMovieSelectPreferredAlternates);
-        INIT(QTMovieSetShowClosedCaptions);
-        INIT(QTGetSitesInMediaDownloadCache);
-        INIT(QTClearMediaDownloadCacheForSite);
-        INIT(QTClearMediaDownloadCache);
 #endif
         INIT(SetCONNECTProxyAuthorizationForStream);
         INIT(SetCONNECTProxyForStream);

Modified: trunk/Source/WebKitLegacy/mac/ChangeLog (221772 => 221773)


--- trunk/Source/WebKitLegacy/mac/ChangeLog	2017-09-07 23:23:57 UTC (rev 221772)
+++ trunk/Source/WebKitLegacy/mac/ChangeLog	2017-09-08 00:24:07 UTC (rev 221773)
@@ -1,3 +1,13 @@
+2017-09-07  Andy Estes  <[email protected]>
+
+        [Mac] Upstream QTKit-related WebKitSystemInterface functions
+        https://bugs.webkit.org/show_bug.cgi?id=176472
+
+        Reviewed by Eric Carlson.
+
+        * WebCoreSupport/WebSystemInterface.mm:
+        (InitWebCoreSystemInterface):
+
 2017-09-07  Myles C. Maxfield  <[email protected]>
 
         [PAL] Unify PlatformUserPreferredLanguages.h with Language.h

Modified: trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebSystemInterface.mm (221772 => 221773)


--- trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebSystemInterface.mm	2017-09-07 23:23:57 UTC (rev 221772)
+++ trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebSystemInterface.mm	2017-09-08 00:24:07 UTC (rev 221773)
@@ -49,25 +49,9 @@
     INIT(DrawMediaSliderTrack);
     INIT(HitTestMediaUIPart);
     INIT(MeasureMediaUIPart);
-    INIT(CreateMediaUIBackgroundView);
-    INIT(CreateMediaUIControl);
 #endif
     INIT(SetCONNECTProxyAuthorizationForStream);
     INIT(SetCONNECTProxyForStream);
-#if ENABLE(VIDEO) && !PLATFORM(IOS)
-    INIT(QTIncludeOnlyModernMediaFileTypes);
-    INIT(QTMovieDisableComponent);
-    INIT(QTMovieMaxTimeLoaded);
-    INIT(QTMovieMaxTimeLoadedChangeNotification);
-    INIT(QTMovieGetType);
-    INIT(QTMovieHasClosedCaptions);
-    INIT(QTMovieResolvedURL);
-    INIT(QTMovieSetShowClosedCaptions);
-    INIT(QTMovieSelectPreferredAlternates);
-    INIT(QTGetSitesInMediaDownloadCache);
-    INIT(QTClearMediaDownloadCacheForSite);
-    INIT(QTClearMediaDownloadCache);
-#endif
 
 #if !PLATFORM(IOS)
     INIT(ExecutableWasLinkedOnOrBeforeSnowLeopard);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to