Title: [243046] trunk
Revision
243046
Author
jer.no...@apple.com
Date
2019-03-16 15:00:51 -0700 (Sat, 16 Mar 2019)

Log Message

Add a new MediaCapabilitiesExtensionsEnabled setting
https://bugs.webkit.org/show_bug.cgi?id=195843

Reviewed by Geoffrey Garen.

Source/WebCore:

Add a new setting, MediaCapabilitiesExtensionsEnabled, which controls whether extensions
to the Media Capabilities API are available.

Drive-by fix: make sure that the configuration is passed through to MediaCapabilitiesInfo
when no factory can support the configuration.

* Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl:
* Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl:
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateDictionaryImplementationContent):
* bindings/scripts/IDLAttributes.json:
* page/Settings.yaml:
* platform/mediacapabilities/MediaEngineConfigurationFactory.cpp:
(WebCore::MediaEngineConfigurationFactory::createDecodingConfiguration):

Source/WebKit:

* Shared/WebPreferences.yaml:

LayoutTests:

* media/mediacapabilities/mock-decodingInfo-supportedConfiguration-expected.txt:
* media/mediacapabilities/mock-decodingInfo-supportedConfiguration.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (243045 => 243046)


--- trunk/LayoutTests/ChangeLog	2019-03-16 21:22:20 UTC (rev 243045)
+++ trunk/LayoutTests/ChangeLog	2019-03-16 22:00:51 UTC (rev 243046)
@@ -1,3 +1,13 @@
+2019-03-16  Jer Noble  <jer.no...@apple.com>
+
+        Add a new MediaCapabilitiesExtensionsEnabled setting
+        https://bugs.webkit.org/show_bug.cgi?id=195843
+
+        Reviewed by Geoffrey Garen.
+
+        * media/mediacapabilities/mock-decodingInfo-supportedConfiguration-expected.txt:
+        * media/mediacapabilities/mock-decodingInfo-supportedConfiguration.html:
+
 2019-03-16  Wenson Hsieh  <wenson_hs...@apple.com>
 
         [iOS] Software keyboard never appears when editing on some websites

Modified: trunk/LayoutTests/media/mediacapabilities/mock-decodingInfo-supportedConfiguration-expected.txt (243045 => 243046)


--- trunk/LayoutTests/media/mediacapabilities/mock-decodingInfo-supportedConfiguration-expected.txt	2019-03-16 21:22:20 UTC (rev 243045)
+++ trunk/LayoutTests/media/mediacapabilities/mock-decodingInfo-supportedConfiguration-expected.txt	2019-03-16 22:00:51 UTC (rev 243046)
@@ -1,4 +1,5 @@
 RUN(internals.enableMockMediaCapabilities())
+RUN(internals.settings.setMediaCapabilitiesExtensionsEnabled(true))
 RUN(promise = navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/mp4; codecs="avc1"', height: 720, bitrate: 1000, width: 1280, framerate: 24.5 }, unsupportedProperty: true });)
 Promise resolved OK
 EXPECTED (info.supported == 'true') OK
@@ -12,5 +13,18 @@
 EXPECTED (info.supportedConfiguration.video.width == '1280') OK
 EXPECTED (info.supportedConfiguration.video.framerate == '24.5') OK
 EXPECTED (typeof info.supportedConfiguration.unsupportedProperty == 'undefined') OK
+RUN(promise = navigator.mediaCapabilities.decodingInfo({ type: 'media-source', video: { contentType: 'video/mp4; codecs="avc1"', height: 720, bitrate: 1000, width: 1280, framerate: 24.5 }, unsupportedProperty: true });)
+Promise resolved OK
+EXPECTED (info.supported == 'false') OK
+EXPECTED (info.smooth == 'false') OK
+EXPECTED (info.powerEfficient == 'false') OK
+EXPECTED (typeof info.supportedConfiguration != 'undefined') OK
+EXPECTED (info.supportedConfiguration.type == 'media-source') OK
+EXPECTED (info.supportedConfiguration.video.contentType == 'video/mp4; codecs="avc1"') OK
+EXPECTED (info.supportedConfiguration.video.height == '720') OK
+EXPECTED (info.supportedConfiguration.video.bitrate == '1000') OK
+EXPECTED (info.supportedConfiguration.video.width == '1280') OK
+EXPECTED (info.supportedConfiguration.video.framerate == '24.5') OK
+EXPECTED (typeof info.supportedConfiguration.unsupportedProperty == 'undefined') OK
 END OF TEST
 

Modified: trunk/LayoutTests/media/mediacapabilities/mock-decodingInfo-supportedConfiguration.html (243045 => 243046)


--- trunk/LayoutTests/media/mediacapabilities/mock-decodingInfo-supportedConfiguration.html	2019-03-16 21:22:20 UTC (rev 243045)
+++ trunk/LayoutTests/media/mediacapabilities/mock-decodingInfo-supportedConfiguration.html	2019-03-16 22:00:51 UTC (rev 243046)
@@ -14,6 +14,7 @@
         }
 
         run('internals.enableMockMediaCapabilities()');
+        run('internals.settings.setMediaCapabilitiesExtensionsEnabled(true)');
 
         run("promise = navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/mp4; codecs=\"avc1\"', height: 720, bitrate: 1000, width: 1280, framerate: 24.5 }, unsupportedProperty: true });");
         info = await shouldResolve(promise);
@@ -28,6 +29,20 @@
         testExpected('info.supportedConfiguration.video.width', 1280);
         testExpected('info.supportedConfiguration.video.framerate', 24.5);
         testExpected('typeof info.supportedConfiguration.unsupportedProperty', 'undefined');
+
+        run("promise = navigator.mediaCapabilities.decodingInfo({ type: 'media-source', video: { contentType: 'video/mp4; codecs=\"avc1\"', height: 720, bitrate: 1000, width: 1280, framerate: 24.5 }, unsupportedProperty: true });");
+        info = await shouldResolve(promise);
+        testExpected('info.supported', false);
+        testExpected('info.smooth', false);
+        testExpected('info.powerEfficient', false);
+        testExpected('typeof info.supportedConfiguration', 'undefined', '!=');
+        testExpected('info.supportedConfiguration.type', 'media-source');
+        testExpected('info.supportedConfiguration.video.contentType', 'video/mp4; codecs="avc1"');
+        testExpected('info.supportedConfiguration.video.height', 720);
+        testExpected('info.supportedConfiguration.video.bitrate', 1000);
+        testExpected('info.supportedConfiguration.video.width', 1280);
+        testExpected('info.supportedConfiguration.video.framerate', 24.5);
+        testExpected('typeof info.supportedConfiguration.unsupportedProperty', 'undefined');
         endTest();
     }
     </script>

Modified: trunk/Source/WebCore/ChangeLog (243045 => 243046)


--- trunk/Source/WebCore/ChangeLog	2019-03-16 21:22:20 UTC (rev 243045)
+++ trunk/Source/WebCore/ChangeLog	2019-03-16 22:00:51 UTC (rev 243046)
@@ -1,3 +1,25 @@
+2019-03-16  Jer Noble  <jer.no...@apple.com>
+
+        Add a new MediaCapabilitiesExtensionsEnabled setting
+        https://bugs.webkit.org/show_bug.cgi?id=195843
+
+        Reviewed by Geoffrey Garen.
+
+        Add a new setting, MediaCapabilitiesExtensionsEnabled, which controls whether extensions
+        to the Media Capabilities API are available.
+
+        Drive-by fix: make sure that the configuration is passed through to MediaCapabilitiesInfo
+        when no factory can support the configuration.
+
+        * Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl:
+        * Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl:
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateDictionaryImplementationContent):
+        * bindings/scripts/IDLAttributes.json:
+        * page/Settings.yaml:
+        * platform/mediacapabilities/MediaEngineConfigurationFactory.cpp:
+        (WebCore::MediaEngineConfigurationFactory::createDecodingConfiguration):
+
 2019-03-16  Zalan Bujtas  <za...@apple.com>
 
         [iOS] Unable to close trending window on naver.com.

Modified: trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl (243045 => 243046)


--- trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl	2019-03-16 21:22:20 UTC (rev 243045)
+++ trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl	2019-03-16 22:00:51 UTC (rev 243046)
@@ -28,5 +28,5 @@
     JSGenerateToJSObject,
 ]
 dictionary MediaCapabilitiesDecodingInfo : MediaCapabilitiesInfo {
-    MediaDecodingConfiguration supportedConfiguration;
+    [EnabledBySetting=MediaCapabilitiesExtensions] MediaDecodingConfiguration supportedConfiguration;
 };

Modified: trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl (243045 => 243046)


--- trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl	2019-03-16 21:22:20 UTC (rev 243045)
+++ trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl	2019-03-16 22:00:51 UTC (rev 243046)
@@ -28,5 +28,5 @@
     JSGenerateToJSObject,
 ]
 dictionary MediaCapabilitiesEncodingInfo : MediaCapabilitiesInfo {
-    MediaEncodingConfiguration supportedConfiguration;
+    [EnabledBySetting=MediaCapabilitiesExtensions] MediaEncodingConfiguration supportedConfiguration;
 };

Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (243045 => 243046)


--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2019-03-16 21:22:20 UTC (rev 243045)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2019-03-16 22:00:51 UTC (rev 243046)
@@ -2403,20 +2403,31 @@
                     # 2. Let value be the result of converting idlValue to an ECMAScript value.
                     # 3. Perform ! CreateDataProperty(O, key, value).
 
+                my $needsRuntimeCheck = NeedsRuntimeCheck($dictionary, $member);
+                my $indent = "";
+                if ($needsRuntimeCheck) {
+                    my $runtimeEnableConditionalString = GenerateRuntimeEnableConditionalString($dictionary, $member, "true");
+                    $result .= "    if (${runtimeEnableConditionalString}) {\n";
+                    $indent = "    ";
+                }
+
                 if (!$member->isRequired && not defined $member->default) {
                     my $IDLType = GetIDLType($typeScope, $member->type);
                     my $conversionExpression = NativeToJSValueUsingReferences($member, $typeScope, "${IDLType}::extractValueFromNullable(${valueExpression})", "globalObject");
 
-                    $result .= "    if (!${IDLType}::isNullValue(${valueExpression})) {\n";
-                    $result .= "        auto ${key}Value = ${conversionExpression};\n";
-                    $result .= "        result->putDirect(vm, JSC::Identifier::fromString(&vm, \"${key}\"), ${key}Value);\n";
-                    $result .= "    }\n";
+                    $result .= "${indent}    if (!${IDLType}::isNullValue(${valueExpression})) {\n";
+                    $result .= "${indent}        auto ${key}Value = ${conversionExpression};\n";
+                    $result .= "${indent}        result->putDirect(vm, JSC::Identifier::fromString(&vm, \"${key}\"), ${key}Value);\n";
+                    $result .= "${indent}    }\n";
                 } else {
                     my $conversionExpression = NativeToJSValueUsingReferences($member, $typeScope, $valueExpression, "globalObject");
 
-                    $result .= "    auto ${key}Value = ${conversionExpression};\n";
-                    $result .= "    result->putDirect(vm, JSC::Identifier::fromString(&vm, \"${key}\"), ${key}Value);\n";
+                    $result .= "${indent}    auto ${key}Value = ${conversionExpression};\n";
+                    $result .= "${indent}    result->putDirect(vm, JSC::Identifier::fromString(&vm, \"${key}\"), ${key}Value);\n";
                 }
+                if ($needsRuntimeCheck) {
+                    $result .= "    }\n";
+                }
             }
         }
 

Modified: trunk/Source/WebCore/bindings/scripts/IDLAttributes.json (243045 => 243046)


--- trunk/Source/WebCore/bindings/scripts/IDLAttributes.json	2019-03-16 21:22:20 UTC (rev 243045)
+++ trunk/Source/WebCore/bindings/scripts/IDLAttributes.json	2019-03-16 22:00:51 UTC (rev 243046)
@@ -181,7 +181,7 @@
             "values": ["*"]
         },
         "EnabledBySetting": {
-            "contextsAllowed": ["interface", "dictionary", "enum", "attribute", "operation", "constant"],
+            "contextsAllowed": ["interface", "dictionary", "enum", "attribute", "operation", "constant", "dictionary-member"],
             "values": ["*"]
         },
         "DisabledByQuirk": {

Modified: trunk/Source/WebCore/page/Settings.yaml (243045 => 243046)


--- trunk/Source/WebCore/page/Settings.yaml	2019-03-16 21:22:20 UTC (rev 243045)
+++ trunk/Source/WebCore/page/Settings.yaml	2019-03-16 22:00:51 UTC (rev 243046)
@@ -784,6 +784,10 @@
 mediaCapabilitiesEnabled:
   initial: false
 
+mediaCapabilitiesExtensionsEnabled:
+  type: bool
+  initial: false
+
 clientCoordinatesRelativeToLayoutViewport:
   initial: false
   onChange: setNeedsRecalcStyleInAllFrames

Modified: trunk/Source/WebCore/platform/mediacapabilities/MediaEngineConfigurationFactory.cpp (243045 => 243046)


--- trunk/Source/WebCore/platform/mediacapabilities/MediaEngineConfigurationFactory.cpp	2019-03-16 21:22:20 UTC (rev 243045)
+++ trunk/Source/WebCore/platform/mediacapabilities/MediaEngineConfigurationFactory.cpp	2019-03-16 22:00:51 UTC (rev 243046)
@@ -80,13 +80,13 @@
 
     auto factoryCallback = [] (auto factoryCallback, auto nextFactory, auto&& config, auto&& callback) mutable {
         if (nextFactory == factories().end()) {
-            callback({ });
+            callback({{ }, WTFMove(config)});
             return;
         }
 
         auto& factory = *nextFactory;
         if (!factory.createDecodingConfiguration) {
-            callback({ });
+            callback({{ }, WTFMove(config)});
             return;
         }
 

Modified: trunk/Source/WebKit/ChangeLog (243045 => 243046)


--- trunk/Source/WebKit/ChangeLog	2019-03-16 21:22:20 UTC (rev 243045)
+++ trunk/Source/WebKit/ChangeLog	2019-03-16 22:00:51 UTC (rev 243046)
@@ -1,3 +1,12 @@
+2019-03-16  Jer Noble  <jer.no...@apple.com>
+
+        Add a new MediaCapabilitiesExtensionsEnabled setting
+        https://bugs.webkit.org/show_bug.cgi?id=195843
+
+        Reviewed by Geoffrey Garen.
+
+        * Shared/WebPreferences.yaml:
+
 2019-03-16  Wenson Hsieh  <wenson_hs...@apple.com>
 
         [iOS] Software keyboard never appears when editing on some websites

Modified: trunk/Source/WebKit/Shared/WebPreferences.yaml (243045 => 243046)


--- trunk/Source/WebKit/Shared/WebPreferences.yaml	2019-03-16 21:22:20 UTC (rev 243045)
+++ trunk/Source/WebKit/Shared/WebPreferences.yaml	2019-03-16 22:00:51 UTC (rev 243046)
@@ -1374,6 +1374,13 @@
   category: experimental
   webcoreBinding: none
 
+MediaCapabilitiesExtensionsEnabled:
+  type: bool
+  defaultValue: true
+  humanReadableName: "Media Capabilities Extensions"
+  humanReadableDescription: "Media Capabilities Extensions"
+  category: experimental
+
 # For internal features:
 # The type should be boolean.
 # You must provide a humanReadableName and humanReadableDescription for all debug features. They
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to