Bindings: Require value for extended attributes EnabledAtRuntime and EnabledForWorld
authordbates@webkit.org <dbates@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 18 May 2017 21:35:31 +0000 (21:35 +0000)
committerdbates@webkit.org <dbates@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 18 May 2017 21:35:31 +0000 (21:35 +0000)
https://bugs.webkit.org/show_bug.cgi?id=172252

Reviewed by Sam Weinig.

According to Sam Weinig it is an anti-feature that EnabledAtRuntime can be specified
without a value. We should make it require a value for the name of the RuntimeEnabledFeatures
function to use in the generated code. For similar reasons we should also require
a value for the extended attribute EnabledForWorld.

* Modules/websockets/WebSocket.idl: Substitute EnabledAtRuntime=WebSocket for EnabledAtRuntime.
* bindings/scripts/CodeGeneratorJS.pm:
(GetRuntimeEnableFunctionName):
* html/HTMLAudioElement.idl: Substitute EnabledAtRuntime=Audio for EnabledAtRuntime.
* page/RuntimeEnabledFeatures.cpp:
(WebCore::RuntimeEnabledFeatures::audioEnabled):
(WebCore::RuntimeEnabledFeatures::htmlAudioElementEnabled): Deleted. This function duplicated
the functionality of RuntimeEnabledFeatures::audioEnabled(). Instead we explicitly
write EnabledAtRuntime=Audio in HTMLAudioElement.idl to use RuntimeEnabledFeatures::audioEnabled()
to determine whether to expose/conceal the HTMLAudioElement global constructor at runtime.
* page/RuntimeEnabledFeatures.h:

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

Source/WebCore/ChangeLog
Source/WebCore/Modules/websockets/WebSocket.idl
Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
Source/WebCore/html/HTMLAudioElement.idl
Source/WebCore/page/RuntimeEnabledFeatures.cpp
Source/WebCore/page/RuntimeEnabledFeatures.h

index beeb4d4..3e45914 100644 (file)
@@ -1,3 +1,27 @@
+2017-05-18  Daniel Bates  <dabates@apple.com>
+
+        Bindings: Require value for extended attributes EnabledAtRuntime and EnabledForWorld
+        https://bugs.webkit.org/show_bug.cgi?id=172252
+
+        Reviewed by Sam Weinig.
+
+        According to Sam Weinig it is an anti-feature that EnabledAtRuntime can be specified
+        without a value. We should make it require a value for the name of the RuntimeEnabledFeatures
+        function to use in the generated code. For similar reasons we should also require
+        a value for the extended attribute EnabledForWorld.
+
+        * Modules/websockets/WebSocket.idl: Substitute EnabledAtRuntime=WebSocket for EnabledAtRuntime.
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GetRuntimeEnableFunctionName):
+        * html/HTMLAudioElement.idl: Substitute EnabledAtRuntime=Audio for EnabledAtRuntime.
+        * page/RuntimeEnabledFeatures.cpp:
+        (WebCore::RuntimeEnabledFeatures::audioEnabled):
+        (WebCore::RuntimeEnabledFeatures::htmlAudioElementEnabled): Deleted. This function duplicated
+        the functionality of RuntimeEnabledFeatures::audioEnabled(). Instead we explicitly
+        write EnabledAtRuntime=Audio in HTMLAudioElement.idl to use RuntimeEnabledFeatures::audioEnabled()
+        to determine whether to expose/conceal the HTMLAudioElement global constructor at runtime.
+        * page/RuntimeEnabledFeatures.h:
+
 2017-05-18  Jer Noble  <jer.noble@apple.com>
 
         Allow nested timers to propagate user gestures so long as the total nested interval is less than 1s.
index 18ab819..9229575 100644 (file)
@@ -36,7 +36,7 @@
     Constructor(USVString url, DOMString protocol),
     ConstructorMayThrowException,
     ConstructorCallWith=ScriptExecutionContext,
-    EnabledAtRuntime,
+    EnabledAtRuntime=WebSocket,
     Exposed=(Window,Worker),
 ] interface WebSocket : EventTarget {
     readonly attribute USVString URL; // Lowercased .url is the one in the spec, but leaving .URL for compatibility reasons.
index c255f3d..3371205 100644 (file)
@@ -2970,11 +2970,12 @@ sub GetRuntimeEnableFunctionName
     AddToImplIncludes("RuntimeEnabledFeatures.h");
 
     if ($context->extendedAttributes->{EnabledForWorld}) {
+        assert("Must specify value for EnabledForWorld.") if $context->extendedAttributes->{EnabledForWorld} eq "VALUE_IS_MISSING";
         return "worldForDOMObject(this)." . ToMethodName($context->extendedAttributes->{EnabledForWorld}) . "()";
     }
 
-    # If a parameter is given (e.g. "EnabledAtRuntime=FeatureName") return the RuntimeEnabledFeatures::sharedFeatures().{FeatureName}Enabled() method.
-    if ($context->extendedAttributes->{EnabledAtRuntime} && $context->extendedAttributes->{EnabledAtRuntime} ne "VALUE_IS_MISSING") {
+    if ($context->extendedAttributes->{EnabledAtRuntime}) {
+        assert("Must specify value for EnabledAtRuntime.") if $context->extendedAttributes->{EnabledAtRuntime} eq "VALUE_IS_MISSING";
         my @flags = split /&/, $context->extendedAttributes->{EnabledAtRuntime};
         my $result = "";
         foreach my $flag (@flags) {
@@ -2984,9 +2985,6 @@ sub GetRuntimeEnableFunctionName
         $result = "(" . $result . ")" unless scalar @flags eq 1;
         return $result;
     }
-
-    # Otherwise return a function named RuntimeEnabledFeatures::sharedFeatures().{methodName}Enabled().
-    return "RuntimeEnabledFeatures::sharedFeatures()." . ToMethodName($context->name) . "Enabled()";
 }
 
 sub GetCastingHelperForThisObject
index ddd4582..99ac643 100644 (file)
@@ -24,7 +24,7 @@
  */
 
 [
-    EnabledAtRuntime,
+    EnabledAtRuntime=Audio,
     Conditional=VIDEO,
     ConstructorCallWith=Document,
     NamedConstructor=Audio(optional DOMString src)
index 1bc7648..e3956f1 100644 (file)
@@ -62,11 +62,6 @@ bool RuntimeEnabledFeatures::htmlMediaElementEnabled() const
     return MediaPlayer::isAvailable();
 }
 
-bool RuntimeEnabledFeatures::htmlAudioElementEnabled() const
-{
-    return MediaPlayer::isAvailable();
-}
-
 bool RuntimeEnabledFeatures::htmlVideoElementEnabled() const
 {
     return MediaPlayer::isAvailable();
index 61811e4..35777d9 100644 (file)
@@ -201,7 +201,6 @@ public:
 #if ENABLE(VIDEO)
     bool audioEnabled() const;
     bool htmlMediaElementEnabled() const;
-    bool htmlAudioElementEnabled() const;
     bool htmlVideoElementEnabled() const;
     bool htmlSourceElementEnabled() const;
     bool mediaControllerEnabled() const;