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);