Add initial DOM support for Media Capabilities
https://bugs.webkit.org/show_bug.cgi?id=181064

Reviewed by Eric Carlson.

Source/WebCore:

Test: media/mediacapabilities/mediacapabilities-types.html

Add basic, cross-platform, DOM facing type and API support for Media Capabilities API.

* bindings/scripts/CodeGenerator.pm:
(WK_ucfirst):
* CMakeLists.txt:
* DerivedSources.make:
* Modules/mediacapabilities/AudioConfiguration.h: Added.
* Modules/mediacapabilities/AudioConfiguration.idl: Added.
* Modules/mediacapabilities/MediaCapabilities.cpp: Added.
(WebCore::bucketMIMETypes):
(WebCore::isValidMIMEType):
(WebCore::isValidVideoConfiguration):
(WebCore::isValidAudioConfiguration):
(WebCore::isValidMediaConfiguration):
(WebCore::MediaCapabilities::decodingInfo):
(WebCore::MediaCapabilities::encodingInfo):
* Modules/mediacapabilities/MediaCapabilities.h: Added.
* Modules/mediacapabilities/MediaCapabilities.idl: Added.
* Modules/mediacapabilities/MediaCapabilitiesInfo.h: Added.
(WebCore::MediaCapabilitiesInfo::supported const):
(WebCore::MediaCapabilitiesInfo::setSupported):
(WebCore::MediaCapabilitiesInfo::smooth const):
(WebCore::MediaCapabilitiesInfo::setSmooth):
(WebCore::MediaCapabilitiesInfo::powerEfficient const):
(WebCore::MediaCapabilitiesInfo::setPowerEfficient):
* Modules/mediacapabilities/MediaCapabilitiesInfo.idl: Added.
* Modules/mediacapabilities/MediaConfiguration.h: Added.
* Modules/mediacapabilities/MediaConfiguration.idl: Added.
* Modules/mediacapabilities/MediaDecodingConfiguration.h: Added.
* Modules/mediacapabilities/MediaDecodingConfiguration.idl: Added.
* Modules/mediacapabilities/MediaDecodingType.h: Added.
* Modules/mediacapabilities/MediaDecodingType.idl: Added.
* Modules/mediacapabilities/MediaEncodingConfiguration.h: Added.
* Modules/mediacapabilities/MediaEncodingConfiguration.idl: Added.
* Modules/mediacapabilities/MediaEncodingType.h: Added.
* Modules/mediacapabilities/MediaEncodingType.idl: Added.
* Modules/mediacapabilities/NavigatorMediaCapabilities.cpp: Added.
(WebCore::NavigatorMediaCapabilities::NavigatorMediaCapabilities):
(WebCore::NavigatorMediaCapabilities::supplementName):
(WebCore::NavigatorMediaCapabilities::from):
(WebCore::NavigatorMediaCapabilities::mediaCapabilities):
(WebCore::NavigatorMediaCapabilities::mediaCapabilities const):
* Modules/mediacapabilities/NavigatorMediaCapabilities.h: Added.
* Modules/mediacapabilities/NavigatorMediaCapabilities.idl: Added.
* Modules/mediacapabilities/ScreenColorGamut.h: Added.
* Modules/mediacapabilities/ScreenColorGamut.idl: Added.
* Modules/mediacapabilities/ScreenLuminance.h: Added.
(WebCore::ScreenLuminance::min const):
(WebCore::ScreenLuminance::setMin):
(WebCore::ScreenLuminance::max const):
(WebCore::ScreenLuminance::setMax):
(WebCore::ScreenLuminance::maxAverage const):
(WebCore::ScreenLuminance::setMaxAverage):
* Modules/mediacapabilities/ScreenLuminance.idl: Added.
* Modules/mediacapabilities/VideoConfiguration.h: Added.
* Modules/mediacapabilities/VideoConfiguration.idl: Added.
* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/WebCoreBuiltinNames.h:
* page/RuntimeEnabledFeatures.h:
(WebCore::RuntimeEnabledFeatures::setMediaCapabilitiesEnabled):
(WebCore::RuntimeEnabledFeatures::mediaCapabilitiesEnabled const):
* page/Settings.yaml:

Source/WebKit:

Add a new preference to enable the (disabled-by-default) Media Capabilities API.

* Shared/WebPreferences.yaml:
* UIProcess/API/C/WKPreferences.cpp:
(WKPreferencesSetMediaCapabilitiesEnabled):
(WKPreferencesGetMediaCapabilitiesEnabled):
* UIProcess/API/C/WKPreferencesRef.h:

Source/WebKitLegacy/mac:

Add a new preference to enable the (disabled-by-default) Media Capabilities API.

* WebView/WebPreferenceKeysPrivate.h:
* WebView/WebPreferences.mm:
(+[WebPreferences initialize]):
(-[WebPreferences mediaCapabilitiesEnabled]):
(-[WebPreferences setMediaCapabilitiesEnabled:]):
* WebView/WebPreferencesPrivate.h:
* WebView/WebView.mm:
(-[WebView _preferencesChanged:]):

Tools:

* DumpRenderTree/mac/DumpRenderTree.mm:
(resetWebPreferencesToConsistentValues):
* WebKitTestRunner/TestController.cpp:
(WTR::TestController::resetPreferencesToConsistentValues):

LayoutTests:

* fast/dom/navigator-detached-no-crash-expected.txt:
* media/mediacapabilities/mediacapabilities-types-expected.txt: Added.
* media/mediacapabilities/mediacapabilities-types.html: Added.
* platform/gtk/fast/dom/navigator-detached-no-crash-expected.txt:
* platform/mac-elcapitan-wk2/fast/dom/navigator-detached-no-crash-expected.txt:
* platform/mac-wk1/fast/dom/navigator-detached-no-crash-expected.txt:
* platform/win/fast/dom/navigator-detached-no-crash-expected.txt:


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@226228 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebKitLegacy/mac/ChangeLog b/Source/WebKitLegacy/mac/ChangeLog
index 56c4340..2248cd6 100644
--- a/Source/WebKitLegacy/mac/ChangeLog
+++ b/Source/WebKitLegacy/mac/ChangeLog
@@ -1,3 +1,21 @@
+2017-12-21  Jer Noble  <jer.noble@apple.com>
+
+        Add initial DOM support for Media Capabilities
+        https://bugs.webkit.org/show_bug.cgi?id=181064
+
+        Reviewed by Eric Carlson.
+
+        Add a new preference to enable the (disabled-by-default) Media Capabilities API.
+
+        * WebView/WebPreferenceKeysPrivate.h:
+        * WebView/WebPreferences.mm:
+        (+[WebPreferences initialize]):
+        (-[WebPreferences mediaCapabilitiesEnabled]):
+        (-[WebPreferences setMediaCapabilitiesEnabled:]):
+        * WebView/WebPreferencesPrivate.h:
+        * WebView/WebView.mm:
+        (-[WebView _preferencesChanged:]):
+
 2017-12-21  Jeremy Jones  <jeremyj@apple.com>
 
         Enable picture-in-picture from inline element on suspend.
diff --git a/Source/WebKitLegacy/mac/WebView/WebPreferenceKeysPrivate.h b/Source/WebKitLegacy/mac/WebView/WebPreferenceKeysPrivate.h
index 744887b..0b817fc 100644
--- a/Source/WebKitLegacy/mac/WebView/WebPreferenceKeysPrivate.h
+++ b/Source/WebKitLegacy/mac/WebView/WebPreferenceKeysPrivate.h
@@ -254,3 +254,4 @@
 #define WebKitAllowMediaContentTypesRequiringHardwareSupportAsFallbackKey @"WebKitAllowMediaContentTypesRequiringHardwareSupportAsFallback"
 #define WebKitInspectorAdditionsEnabledPreferenceKey @"WebKitInspectorAdditionsEnabled"
 #define WebKitAccessibilityObjectModelEnabledPreferenceKey @"WebKitAccessibilityObjectModelEnabled"
+#define WebKitMediaCapabilitiesEnabledPreferenceKey @"WebKitMediaCapabilitiesEnabled"
diff --git a/Source/WebKitLegacy/mac/WebView/WebPreferences.mm b/Source/WebKitLegacy/mac/WebView/WebPreferences.mm
index 33bf0d9..166ecbe 100644
--- a/Source/WebKitLegacy/mac/WebView/WebPreferences.mm
+++ b/Source/WebKitLegacy/mac/WebView/WebPreferences.mm
@@ -681,6 +681,7 @@
         @NO, WebKitInspectorAdditionsEnabledPreferenceKey,
         (NSString *)Settings::defaultMediaContentTypesRequiringHardwareSupport(), WebKitMediaContentTypesRequiringHardwareSupportPreferenceKey,
         @NO, WebKitAccessibilityObjectModelEnabledPreferenceKey,
+        @NO, WebKitMediaCapabilitiesEnabledPreferenceKey,
         nil];
 
 #if !PLATFORM(IOS)
@@ -3276,6 +3277,15 @@
     [self _setBoolValue:flag forKey:WebKitAccessibilityObjectModelEnabledPreferenceKey];
 }
 
+- (BOOL)mediaCapabilitiesEnabled
+{
+    return [self _boolValueForKey:WebKitMediaCapabilitiesEnabledPreferenceKey];
+}
+
+- (void)setMediaCapabilitiesEnabled:(BOOL)flag
+{
+    [self _setBoolValue:flag forKey:WebKitMediaCapabilitiesEnabledPreferenceKey];
+}
 
 @end
 
diff --git a/Source/WebKitLegacy/mac/WebView/WebPreferencesPrivate.h b/Source/WebKitLegacy/mac/WebView/WebPreferencesPrivate.h
index c92af29..3320d75 100644
--- a/Source/WebKitLegacy/mac/WebView/WebPreferencesPrivate.h
+++ b/Source/WebKitLegacy/mac/WebView/WebPreferencesPrivate.h
@@ -597,6 +597,7 @@
 @property (nonatomic) BOOL inspectorAdditionsEnabled;
 @property (nonatomic) BOOL allowMediaContentTypesRequiringHardwareSupportAsFallback;
 @property (nonatomic) BOOL accessibilityObjectModelEnabled;
+@property (nonatomic) BOOL mediaCapabilitiesEnabled;
 
 #if TARGET_OS_IPHONE
 @property (nonatomic) BOOL quickLookDocumentSavingEnabled;
diff --git a/Source/WebKitLegacy/mac/WebView/WebView.mm b/Source/WebKitLegacy/mac/WebView/WebView.mm
index 482a0d5..05735e6 100644
--- a/Source/WebKitLegacy/mac/WebView/WebView.mm
+++ b/Source/WebKitLegacy/mac/WebView/WebView.mm
@@ -3045,6 +3045,7 @@
     RuntimeEnabledFeatures::sharedFeatures().setDirectoryUploadEnabled([preferences directoryUploadEnabled]);
     RuntimeEnabledFeatures::sharedFeatures().setMenuItemElementEnabled([preferences menuItemElementEnabled]);
     RuntimeEnabledFeatures::sharedFeatures().setAccessibilityObjectModelEnabled([preferences accessibilityObjectModelEnabled]);
+    RuntimeEnabledFeatures::sharedFeatures().setMediaCapabilitiesEnabled([preferences mediaCapabilitiesEnabled]);
     
 #if ENABLE(LEGACY_ENCRYPTED_MEDIA)
     RuntimeEnabledFeatures::sharedFeatures().setLegacyEncryptedMediaAPIEnabled(preferences.legacyEncryptedMediaAPIEnabled);