Title: [219302] trunk/Source/WebCore
Revision
219302
Author
commit-qu...@webkit.org
Date
2017-07-10 11:27:26 -0700 (Mon, 10 Jul 2017)

Log Message

[WebIDL] Move plugin object customization into the generator
https://bugs.webkit.org/show_bug.cgi?id=174238

Patch by Sam Weinig <s...@webkit.org> on 2017-07-10
Reviewed by Chris Dumez.

- Added [Plugin] extended attribute to forward the necessary hooks
  for get/set/delete to the plugin code.
- Removed [CustomNamedSetter] and replaced it's remaining uses
  [CustomPut] (formally called [CustomPutFunction]).
- Renamed [CustomNamedGetterOnPrototype] to [CustomPutOnPrototype]
  because that is actually what it does.
- Removed [CustomGetOwnPropertySlotByIndex] and made
  [CustomGetOwnPropertySlot] imply it, as the other custom hooks
  do.
- Renamed [CustomEnumerateProperty] to [CustomGetOwnPropertyNames]
  to conform with other attribute names.
- Renamed [CustomCall] to [CustomGetCallData] to conform with other
  attribute names.

* CMakeLists.txt:
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/JSBindingsAllInOne.cpp:
* bindings/js/JSHTMLAppletElementCustom.cpp: Removed.
* bindings/js/JSHTMLEmbedElementCustom.cpp: Removed.
* bindings/js/JSHTMLObjectElementCustom.cpp: Removed.
Remove custom bindings.

* bindings/js/JSCSSStyleDeclarationCustom.cpp:
(WebCore::putCommon):
(WebCore::JSCSSStyleDeclaration::put):
(WebCore::JSCSSStyleDeclaration::putByIndex):
(WebCore::JSCSSStyleDeclaration::putDelegate): Deleted.
Use [CustomPut] rather than [CustomNamedSetter] to allow us
to get rid of [CustomNamedSetter]. Reuse put delegate as
common code to share between put and putByIndex.

* bindings/js/JSLocationCustom.cpp:
(WebCore::getOwnPropertySlotCommon):
(WebCore::JSLocation::getOwnPropertySlot):
(WebCore::JSLocation::getOwnPropertySlotByIndex):
Replace [CustomGetOwnPropertySlotAndDescriptor] with [CustomGetOwnPropertySlot]
which is more clear and reduces the number of variants of this hook override
we need.

(WebCore::putCommon):
(WebCore::JSLocation::put):
(WebCore::JSLocation::putByIndex):
Use [CustomPut] rather than [CustomNamedSetter] to allow us
to get rid of [CustomNamedSetter]. Reuse put delegate as
common code to share between put and putByIndex.

(WebCore::JSLocationPrototype::put):
[CustomPutOnPrototype] (which weirdly used incorrectly be called
[CustomNamedGetterOnPrototype]) now works like [CustomPut] meaning
you need to call Base.

* bindings/js/JSPluginElementFunctions.cpp:
(WebCore::pluginElementPropertyGetter):
(WebCore::pluginElementCustomGetOwnPropertySlot):
(WebCore::pluginElementCustomPut):
* bindings/js/JSPluginElementFunctions.h:
(WebCore::pluginElementCustomGetOwnPropertySlot): Deleted.
Remove templatized pluginElementCustomGetOwnPropertySlot, which was
completely unnecessary and merge its functionality into the out of
line overload. Remove pluginElementPropertyGetter from the header,
since it is only used in implementation, and unify the naming and
argument position (JSHTMLElement* comes first) of the hooks.

* bindings/scripts/CodeGeneratorJS.pm:
(GenerateIndexedGetter):
(GenerateNamedGetter):
(GenerateGetOwnPropertySlot):
(GenerateGetOwnPropertySlotByIndex):
(GenerateGetOwnPropertyNames):
(GeneratePut):
(GeneratePutByIndex):
(GenerateDeleteProperty):
(GenerateDeletePropertyByIndex):
(GenerateNamedDeleterDefinition):
(InstanceOverridesGetOwnPropertySlot):
(InstanceOverridesGetOwnPropertyNames):
(InstanceOverridesPut):
(InstanceOverridesDeleteProperty):
(GenerateHeader):
(GenerateImplementation):
(GenerateGetCallData):
(GeneratePluginCall):
(GenerateLegacyCallerDefinitions):
(GenerateLegacyCallerDefinition):
(GeneratePrototypeDeclaration):
(InstanceOverridesGetCallData):
(HeaderNeedsPrototypeDeclaration):
- Add support for [Plugin]
- Remove support for [CustomNamedSetter]
- Replace [CustomGetOwnPropertySlotByIndex] with [CustomGetOwnPropertySlot]
- Replace [CustomEnumerateProperty] with [CustomGetOwnPropertyNames]
- Replace [CustomPutFunction] with [CustomPut].
- Make subroutine names more consistent (remove a few Definition suffixes)

* bindings/scripts/IDLAttributes.json:
Update for new / removed attributes.

* bindings/scripts/test/JS/JSTestInterface.cpp:
* bindings/scripts/test/JS/JSTestInterface.h:
* bindings/scripts/test/JS/JSTestPluginInterface.cpp: Added.
* bindings/scripts/test/JS/JSTestPluginInterface.h: Added.
* bindings/scripts/test/TestInterface.idl:
* bindings/scripts/test/TestPluginInterface.idl: Added.
Update / add tests.

* css/CSSStyleDeclaration.idl:
* html/HTMLAppletElement.idl:
* html/HTMLEmbedElement.idl:
* html/HTMLObjectElement.idl:
* page/DOMWindow.idl:
* page/Location.idl:
* storage/Storage.idl:
Update for new / renamed attributes.

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/Source/WebCore/CMakeLists.txt (219301 => 219302)


--- trunk/Source/WebCore/CMakeLists.txt	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/CMakeLists.txt	2017-07-10 18:27:26 UTC (rev 219302)
@@ -1189,13 +1189,10 @@
     bindings/js/JSEventListener.cpp
     bindings/js/JSEventTargetCustom.cpp
     bindings/js/JSExceptionBase.cpp
-    bindings/js/JSHTMLAppletElementCustom.cpp
     bindings/js/JSHTMLCanvasElementCustom.cpp
     bindings/js/JSHTMLCollectionCustom.cpp
     bindings/js/JSHTMLDocumentCustom.cpp
     bindings/js/JSHTMLElementCustom.cpp
-    bindings/js/JSHTMLEmbedElementCustom.cpp
-    bindings/js/JSHTMLObjectElementCustom.cpp
     bindings/js/JSHTMLTemplateElementCustom.cpp
     bindings/js/JSHistoryCustom.cpp
     bindings/js/JSIDBCursorCustom.cpp

Modified: trunk/Source/WebCore/ChangeLog (219301 => 219302)


--- trunk/Source/WebCore/ChangeLog	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/ChangeLog	2017-07-10 18:27:26 UTC (rev 219302)
@@ -1,3 +1,124 @@
+2017-07-10  Sam Weinig  <s...@webkit.org>
+
+        [WebIDL] Move plugin object customization into the generator
+        https://bugs.webkit.org/show_bug.cgi?id=174238
+
+        Reviewed by Chris Dumez.
+
+        - Added [Plugin] extended attribute to forward the necessary hooks
+          for get/set/delete to the plugin code.
+        - Removed [CustomNamedSetter] and replaced it's remaining uses
+          [CustomPut] (formally called [CustomPutFunction]).
+        - Renamed [CustomNamedGetterOnPrototype] to [CustomPutOnPrototype]
+          because that is actually what it does.
+        - Removed [CustomGetOwnPropertySlotByIndex] and made 
+          [CustomGetOwnPropertySlot] imply it, as the other custom hooks
+          do.
+        - Renamed [CustomEnumerateProperty] to [CustomGetOwnPropertyNames]
+          to conform with other attribute names.
+        - Renamed [CustomCall] to [CustomGetCallData] to conform with other 
+          attribute names.
+
+        * CMakeLists.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * bindings/js/JSBindingsAllInOne.cpp:
+        * bindings/js/JSHTMLAppletElementCustom.cpp: Removed.
+        * bindings/js/JSHTMLEmbedElementCustom.cpp: Removed.
+        * bindings/js/JSHTMLObjectElementCustom.cpp: Removed.
+        Remove custom bindings.
+
+        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
+        (WebCore::putCommon):
+        (WebCore::JSCSSStyleDeclaration::put):
+        (WebCore::JSCSSStyleDeclaration::putByIndex):
+        (WebCore::JSCSSStyleDeclaration::putDelegate): Deleted.
+        Use [CustomPut] rather than [CustomNamedSetter] to allow us
+        to get rid of [CustomNamedSetter]. Reuse put delegate as
+        common code to share between put and putByIndex.
+
+        * bindings/js/JSLocationCustom.cpp:
+        (WebCore::getOwnPropertySlotCommon):
+        (WebCore::JSLocation::getOwnPropertySlot):
+        (WebCore::JSLocation::getOwnPropertySlotByIndex):
+        Replace [CustomGetOwnPropertySlotAndDescriptor] with [CustomGetOwnPropertySlot]
+        which is more clear and reduces the number of variants of this hook override
+        we need.
+
+        (WebCore::putCommon):
+        (WebCore::JSLocation::put):
+        (WebCore::JSLocation::putByIndex):
+        Use [CustomPut] rather than [CustomNamedSetter] to allow us
+        to get rid of [CustomNamedSetter]. Reuse put delegate as
+        common code to share between put and putByIndex.
+
+        (WebCore::JSLocationPrototype::put):
+        [CustomPutOnPrototype] (which weirdly used incorrectly be called 
+        [CustomNamedGetterOnPrototype]) now works like [CustomPut] meaning
+        you need to call Base.
+
+        * bindings/js/JSPluginElementFunctions.cpp:
+        (WebCore::pluginElementPropertyGetter):
+        (WebCore::pluginElementCustomGetOwnPropertySlot):
+        (WebCore::pluginElementCustomPut):
+        * bindings/js/JSPluginElementFunctions.h:
+        (WebCore::pluginElementCustomGetOwnPropertySlot): Deleted.
+        Remove templatized pluginElementCustomGetOwnPropertySlot, which was 
+        completely unnecessary and merge its functionality into the out of
+        line overload. Remove pluginElementPropertyGetter from the header,
+        since it is only used in implementation, and unify the naming and
+        argument position (JSHTMLElement* comes first) of the hooks.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateIndexedGetter):
+        (GenerateNamedGetter):
+        (GenerateGetOwnPropertySlot):
+        (GenerateGetOwnPropertySlotByIndex):
+        (GenerateGetOwnPropertyNames):
+        (GeneratePut):
+        (GeneratePutByIndex):
+        (GenerateDeleteProperty):
+        (GenerateDeletePropertyByIndex):
+        (GenerateNamedDeleterDefinition):
+        (InstanceOverridesGetOwnPropertySlot):
+        (InstanceOverridesGetOwnPropertyNames):
+        (InstanceOverridesPut):
+        (InstanceOverridesDeleteProperty):
+        (GenerateHeader):
+        (GenerateImplementation):
+        (GenerateGetCallData):
+        (GeneratePluginCall):
+        (GenerateLegacyCallerDefinitions):
+        (GenerateLegacyCallerDefinition):
+        (GeneratePrototypeDeclaration):
+        (InstanceOverridesGetCallData):
+        (HeaderNeedsPrototypeDeclaration):
+        - Add support for [Plugin]
+        - Remove support for [CustomNamedSetter]
+        - Replace [CustomGetOwnPropertySlotByIndex] with [CustomGetOwnPropertySlot]
+        - Replace [CustomEnumerateProperty] with [CustomGetOwnPropertyNames]
+        - Replace [CustomPutFunction] with [CustomPut].
+        - Make subroutine names more consistent (remove a few Definition suffixes)
+
+        * bindings/scripts/IDLAttributes.json:
+        Update for new / removed attributes.
+
+        * bindings/scripts/test/JS/JSTestInterface.cpp:
+        * bindings/scripts/test/JS/JSTestInterface.h:
+        * bindings/scripts/test/JS/JSTestPluginInterface.cpp: Added.
+        * bindings/scripts/test/JS/JSTestPluginInterface.h: Added.
+        * bindings/scripts/test/TestInterface.idl:
+        * bindings/scripts/test/TestPluginInterface.idl: Added.
+        Update / add tests.
+
+        * css/CSSStyleDeclaration.idl:
+        * html/HTMLAppletElement.idl:
+        * html/HTMLEmbedElement.idl:
+        * html/HTMLObjectElement.idl:
+        * page/DOMWindow.idl:
+        * page/Location.idl:
+        * storage/Storage.idl:
+        Update for new / renamed attributes.
+
 2017-07-03  Brian Burg  <bb...@apple.com>
 
         Web Replay: remove some unused code

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (219301 => 219302)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2017-07-10 18:27:26 UTC (rev 219302)
@@ -5601,7 +5601,6 @@
 		BC2ED6BC0C6BD2F000920BFF /* JSAttrCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2ED6BB0C6BD2F000920BFF /* JSAttrCustom.cpp */; };
 		BC305C790C076BB300CD20F0 /* JSHTMLObjectElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC305C770C076BB300CD20F0 /* JSHTMLObjectElement.cpp */; };
 		BC305C7A0C076BB300CD20F0 /* JSHTMLObjectElement.h in Headers */ = {isa = PBXBuildFile; fileRef = BC305C780C076BB300CD20F0 /* JSHTMLObjectElement.h */; };
-		BC305CA40C0781BB00CD20F0 /* JSHTMLObjectElementCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC305CA30C0781BB00CD20F0 /* JSHTMLObjectElementCustom.cpp */; };
 		BC33FB1B0F30EE85002CDD7C /* RenderLineBoxList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC33FB1A0F30EE85002CDD7C /* RenderLineBoxList.cpp */; };
 		BC348BBE0DB7F531004ABAB9 /* JSXMLHttpRequestCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC348BBD0DB7F531004ABAB9 /* JSXMLHttpRequestCustom.cpp */; };
 		BC348BD30DB7F804004ABAB9 /* JSXMLHttpRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC348BD10DB7F804004ABAB9 /* JSXMLHttpRequest.cpp */; };
@@ -5640,7 +5639,6 @@
 		BC4918C90BFEA050009D6316 /* JSHTMLIFrameElement.h in Headers */ = {isa = PBXBuildFile; fileRef = BC4918C30BFEA050009D6316 /* JSHTMLIFrameElement.h */; };
 		BC491B780C023EFD009D6316 /* JSHTMLMarqueeElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC491B760C023EFD009D6316 /* JSHTMLMarqueeElement.cpp */; };
 		BC491B790C023EFD009D6316 /* JSHTMLMarqueeElement.h in Headers */ = {isa = PBXBuildFile; fileRef = BC491B770C023EFD009D6316 /* JSHTMLMarqueeElement.h */; };
-		BC4EDEF40C08F3FB007EDD49 /* JSHTMLAppletElementCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC4EDEF30C08F3FB007EDD49 /* JSHTMLAppletElementCustom.cpp */; };
 		BC51156E12B1749C00C96754 /* ScrollAnimatorMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC51156D12B1749C00C96754 /* ScrollAnimatorMac.mm */; };
 		BC51580B0C03D404008BB0EE /* JSHTMLDocumentCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC51580A0C03D404008BB0EE /* JSHTMLDocumentCustom.cpp */; };
 		BC53C5F50DA56B920021EB5D /* Gradient.h in Headers */ = {isa = PBXBuildFile; fileRef = BC53C5F40DA56B920021EB5D /* Gradient.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -5720,7 +5718,6 @@
 		BC64B4DC0CB4298A005F2B62 /* CSSFontSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = BC64B4D40CB4298A005F2B62 /* CSSFontSelector.h */; };
 		BC6932730D7E293900AE44D1 /* JSDOMWindowBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC6932710D7E293900AE44D1 /* JSDOMWindowBase.cpp */; };
 		BC6932740D7E293900AE44D1 /* JSDOMWindowBase.h in Headers */ = {isa = PBXBuildFile; fileRef = BC6932720D7E293900AE44D1 /* JSDOMWindowBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		BC6D44BE0C07EFB60072D2C9 /* JSHTMLEmbedElementCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC6D44BD0C07EFB60072D2C9 /* JSHTMLEmbedElementCustom.cpp */; };
 		BC6D44EC0C07F2ED0072D2C9 /* JSHTMLEmbedElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC6D44EA0C07F2ED0072D2C9 /* JSHTMLEmbedElement.cpp */; };
 		BC6D44ED0C07F2ED0072D2C9 /* JSHTMLEmbedElement.h in Headers */ = {isa = PBXBuildFile; fileRef = BC6D44EB0C07F2ED0072D2C9 /* JSHTMLEmbedElement.h */; };
 		BC6D6E2609AF943500F59759 /* ScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = BC6D6E2509AF943500F59759 /* ScrollView.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -14070,7 +14067,6 @@
 		BC2ED6BB0C6BD2F000920BFF /* JSAttrCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAttrCustom.cpp; sourceTree = "<group>"; };
 		BC305C770C076BB300CD20F0 /* JSHTMLObjectElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLObjectElement.cpp; sourceTree = "<group>"; };
 		BC305C780C076BB300CD20F0 /* JSHTMLObjectElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSHTMLObjectElement.h; sourceTree = "<group>"; };
-		BC305CA30C0781BB00CD20F0 /* JSHTMLObjectElementCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLObjectElementCustom.cpp; sourceTree = "<group>"; };
 		BC33FB1A0F30EE85002CDD7C /* RenderLineBoxList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderLineBoxList.cpp; sourceTree = "<group>"; };
 		BC348BA70DB7F1B8004ABAB9 /* XMLHttpRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = XMLHttpRequest.idl; sourceTree = "<group>"; };
 		BC348BBD0DB7F531004ABAB9 /* JSXMLHttpRequestCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSXMLHttpRequestCustom.cpp; sourceTree = "<group>"; };
@@ -14109,7 +14105,6 @@
 		BC491B4E0C023E2D009D6316 /* HTMLMarqueeElement.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HTMLMarqueeElement.idl; sourceTree = "<group>"; };
 		BC491B760C023EFD009D6316 /* JSHTMLMarqueeElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLMarqueeElement.cpp; sourceTree = "<group>"; };
 		BC491B770C023EFD009D6316 /* JSHTMLMarqueeElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSHTMLMarqueeElement.h; sourceTree = "<group>"; };
-		BC4EDEF30C08F3FB007EDD49 /* JSHTMLAppletElementCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLAppletElementCustom.cpp; sourceTree = "<group>"; };
 		BC51156D12B1749C00C96754 /* ScrollAnimatorMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollAnimatorMac.mm; sourceTree = "<group>"; };
 		BC51580A0C03D404008BB0EE /* JSHTMLDocumentCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLDocumentCustom.cpp; sourceTree = "<group>"; };
 		BC53C5F40DA56B920021EB5D /* Gradient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gradient.h; sourceTree = "<group>"; };
@@ -14195,7 +14190,6 @@
 		BC64B4D40CB4298A005F2B62 /* CSSFontSelector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSFontSelector.h; sourceTree = "<group>"; };
 		BC6932710D7E293900AE44D1 /* JSDOMWindowBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMWindowBase.cpp; sourceTree = "<group>"; };
 		BC6932720D7E293900AE44D1 /* JSDOMWindowBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDOMWindowBase.h; sourceTree = "<group>"; };
-		BC6D44BD0C07EFB60072D2C9 /* JSHTMLEmbedElementCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLEmbedElementCustom.cpp; sourceTree = "<group>"; };
 		BC6D44EA0C07F2ED0072D2C9 /* JSHTMLEmbedElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLEmbedElement.cpp; sourceTree = "<group>"; };
 		BC6D44EB0C07F2ED0072D2C9 /* JSHTMLEmbedElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSHTMLEmbedElement.h; sourceTree = "<group>"; };
 		BC6D6E2509AF943500F59759 /* ScrollView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ScrollView.h; sourceTree = "<group>"; };
@@ -23619,11 +23613,8 @@
 				BCD9C25E0C17AA67005C90A2 /* JSDOMWindowCustom.cpp */,
 				652FBBBB0DE27CB60001D386 /* JSDOMWindowCustom.h */,
 				BCE7B1920D4E86960075A539 /* JSHistoryCustom.cpp */,
-				BC4EDEF30C08F3FB007EDD49 /* JSHTMLAppletElementCustom.cpp */,
 				9392262C1032107B006E7D5D /* JSHTMLCanvasElementCustom.cpp */,
 				BC5823F40C0A98DF0053F1B5 /* JSHTMLElementCustom.cpp */,
-				BC6D44BD0C07EFB60072D2C9 /* JSHTMLEmbedElementCustom.cpp */,
-				BC305CA30C0781BB00CD20F0 /* JSHTMLObjectElementCustom.cpp */,
 				D6F7960C166FFECE0076DD18 /* JSHTMLTemplateElementCustom.cpp */,
 				7A74ECBC101839DA00BF939E /* JSInspectorFrontendHostCustom.cpp */,
 				BCE1C43F0D9830F4003B02F2 /* JSLocationCustom.cpp */,
@@ -31973,7 +31964,6 @@
 				BC97E412109154FA0010D361 /* JSHTMLAllCollection.cpp in Sources */,
 				1A4A2DEF0A1B852A00C807F8 /* JSHTMLAnchorElement.cpp in Sources */,
 				1A4A2DF10A1B852A00C807F8 /* JSHTMLAppletElement.cpp in Sources */,
-				BC4EDEF40C08F3FB007EDD49 /* JSHTMLAppletElementCustom.cpp in Sources */,
 				1AE2AA1E0A1CDAB400B42B25 /* JSHTMLAreaElement.cpp in Sources */,
 				7C9DBFED1A9C49B1000D6B25 /* JSHTMLAttachmentElement.cpp in Sources */,
 				E44614370CD689C400FADA75 /* JSHTMLAudioElement.cpp in Sources */,
@@ -31997,7 +31987,6 @@
 				BC5823F50C0A98DF0053F1B5 /* JSHTMLElementCustom.cpp in Sources */,
 				938E65F709F0985D008A48EC /* JSHTMLElementWrapperFactory.cpp in Sources */,
 				BC6D44EC0C07F2ED0072D2C9 /* JSHTMLEmbedElement.cpp in Sources */,
-				BC6D44BE0C07EFB60072D2C9 /* JSHTMLEmbedElementCustom.cpp in Sources */,
 				1AE2AA260A1CDAB400B42B25 /* JSHTMLFieldSetElement.cpp in Sources */,
 				1AE2AA280A1CDAB400B42B25 /* JSHTMLFontElement.cpp in Sources */,
 				9BF9A8801648DD2F001C6B23 /* JSHTMLFormControlsCollection.cpp in Sources */,
@@ -32024,7 +32013,6 @@
 				A7BBE26611AFB3F20005EA03 /* JSHTMLMeterElement.cpp in Sources */,
 				1AE2AB290A1CE63B00B42B25 /* JSHTMLModElement.cpp in Sources */,
 				BC305C790C076BB300CD20F0 /* JSHTMLObjectElement.cpp in Sources */,
-				BC305CA40C0781BB00CD20F0 /* JSHTMLObjectElementCustom.cpp in Sources */,
 				1A85B1EA0A1B240500D8C87C /* JSHTMLOListElement.cpp in Sources */,
 				A80E7E9C0A1A83E3007FB8C5 /* JSHTMLOptGroupElement.cpp in Sources */,
 				A80E7E9A0A1A83E3007FB8C5 /* JSHTMLOptionElement.cpp in Sources */,

Modified: trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp (219301 => 219302)


--- trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp	2017-07-10 18:27:26 UTC (rev 219302)
@@ -64,13 +64,10 @@
 #include "JSEventListener.cpp"
 #include "JSEventTargetCustom.cpp"
 #include "JSExceptionBase.cpp"
-#include "JSHTMLAppletElementCustom.cpp"
 #include "JSHTMLCanvasElementCustom.cpp"
 #include "JSHTMLCollectionCustom.cpp"
 #include "JSHTMLDocumentCustom.cpp"
 #include "JSHTMLElementCustom.cpp"
-#include "JSHTMLEmbedElementCustom.cpp"
-#include "JSHTMLObjectElementCustom.cpp"
 #include "JSHTMLTemplateElementCustom.cpp"
 #include "JSHistoryCustom.cpp"
 #include "JSImageDataCustom.cpp"

Modified: trunk/Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp (219301 => 219302)


--- trunk/Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp	2017-07-10 18:27:26 UTC (rev 219302)
@@ -313,6 +313,7 @@
     return stylePropertyGetter(state, thisObject, propertyInfo.propertyID);
 }
 
+// FIXME: This should be converted to be a named getter.
 bool JSCSSStyleDeclaration::getOwnPropertySlotDelegate(ExecState* state, PropertyName propertyName, PropertySlot& slot)
 {
     auto propertyInfo = parseJavaScriptCSSPropertyName(propertyName);
@@ -322,7 +323,8 @@
     return true;
 }
 
-bool JSCSSStyleDeclaration::putDelegate(ExecState* state, PropertyName propertyName, JSValue value, PutPropertySlot&, bool& putResult)
+// FIXME: This should be converted to be a named setter.
+static bool putCommon(JSCSSStyleDeclaration& thisObject, ExecState& state, PropertyName propertyName, JSValue value, bool& putResult)
 {
     CustomElementReactionStack customElementReactionStack;
     auto propertyInfo = parseJavaScriptCSSPropertyName(propertyName);
@@ -329,7 +331,7 @@
     if (!propertyInfo.propertyID)
         return false;
 
-    auto propertyValue = convert<IDLTreatNullAsEmptyAdaptor<IDLDOMString>>(*state, value);
+    auto propertyValue = convert<IDLTreatNullAsEmptyAdaptor<IDLDOMString>>(state, value);
     if (propertyInfo.hadPixelOrPosPrefix)
         propertyValue.append("px");
 
@@ -342,11 +344,11 @@
         }
     }
 
-    auto setPropertyInternalResult = wrapped().setPropertyInternal(propertyInfo.propertyID, propertyValue, important);
+    auto setPropertyInternalResult = thisObject.wrapped().setPropertyInternal(propertyInfo.propertyID, propertyValue, important);
     if (setPropertyInternalResult.hasException()) {
-        auto& vm = state->vm();
+        auto& vm = state.vm();
         auto scope = DECLARE_THROW_SCOPE(vm);
-        propagateException(*state, scope, setPropertyInternalResult.releaseException());
+        propagateException(state, scope, setPropertyInternalResult.releaseException());
         return true;
     }
     putResult = setPropertyInternalResult.releaseReturnValue();
@@ -353,6 +355,30 @@
     return true;
 }
 
+bool JSCSSStyleDeclaration::put(JSCell* cell, ExecState* state, PropertyName propertyName, JSValue value, PutPropertySlot& putPropertySlot)
+{
+    auto* thisObject = jsCast<JSCSSStyleDeclaration*>(cell);
+    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+
+    bool putResult = false;
+    if (putCommon(*thisObject, *state, propertyName, value, putResult))
+        return putResult;
+
+    return JSObject::put(thisObject, state, propertyName, value, putPropertySlot);
+}
+
+bool JSCSSStyleDeclaration::putByIndex(JSCell* cell, ExecState* state, unsigned index, JSValue value, bool shouldThrow)
+{
+    auto* thisObject = jsCast<JSCSSStyleDeclaration*>(cell);
+    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+
+    bool putResult = false;
+    if (putCommon(*thisObject, *state, Identifier::from(state, index), value, putResult))
+        return putResult;
+
+    return JSObject::putByIndex(cell, state, index, value, shouldThrow);
+}
+
 JSValue JSCSSStyleDeclaration::getPropertyCSSValue(ExecState& state)
 {
     VM& vm = state.vm();

Deleted: trunk/Source/WebCore/bindings/js/JSHTMLAppletElementCustom.cpp (219301 => 219302)


--- trunk/Source/WebCore/bindings/js/JSHTMLAppletElementCustom.cpp	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/bindings/js/JSHTMLAppletElementCustom.cpp	2017-07-10 18:27:26 UTC (rev 219302)
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#include "config.h"
-#include "JSHTMLAppletElement.h"
-
-#include "HTMLAppletElement.h"
-#include "JSPluginElementFunctions.h"
-
-namespace WebCore {
-
-using namespace JSC;
-
-bool JSHTMLAppletElement::getOwnPropertySlotDelegate(ExecState* exec, PropertyName propertyName, PropertySlot& slot)
-{
-    return pluginElementCustomGetOwnPropertySlot<JSHTMLAppletElement, Base>(exec, propertyName, slot, this);
-}
-
-bool JSHTMLAppletElement::putDelegate(ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot& slot, bool& putResult)
-{
-    return pluginElementCustomPut(exec, propertyName, value, this, slot, putResult);
-}
-
-CallType JSHTMLAppletElement::getCallData(JSCell* cell, CallData& callData)
-{
-    return pluginElementGetCallData(jsCast<JSHTMLAppletElement*>(cell), callData);
-}
-
-} // namespace WebCore

Deleted: trunk/Source/WebCore/bindings/js/JSHTMLEmbedElementCustom.cpp (219301 => 219302)


--- trunk/Source/WebCore/bindings/js/JSHTMLEmbedElementCustom.cpp	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/bindings/js/JSHTMLEmbedElementCustom.cpp	2017-07-10 18:27:26 UTC (rev 219302)
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#include "config.h"
-#include "JSHTMLEmbedElement.h"
-
-#include "HTMLEmbedElement.h"
-#include "JSPluginElementFunctions.h"
-
-namespace WebCore {
-
-using namespace JSC;
-
-bool JSHTMLEmbedElement::getOwnPropertySlotDelegate(ExecState* exec, PropertyName propertyName, PropertySlot& slot)
-{
-    return pluginElementCustomGetOwnPropertySlot<JSHTMLEmbedElement, Base>(exec, propertyName, slot, this);
-}
-
-bool JSHTMLEmbedElement::putDelegate(ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot& slot, bool& putResult)
-{
-    return pluginElementCustomPut(exec, propertyName, value, this, slot, putResult);
-}
-
-CallType JSHTMLEmbedElement::getCallData(JSCell* cell, CallData& callData)
-{
-    return pluginElementGetCallData(jsCast<JSHTMLEmbedElement*>(cell), callData);
-}
-
-} // namespace WebCore

Deleted: trunk/Source/WebCore/bindings/js/JSHTMLObjectElementCustom.cpp (219301 => 219302)


--- trunk/Source/WebCore/bindings/js/JSHTMLObjectElementCustom.cpp	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/bindings/js/JSHTMLObjectElementCustom.cpp	2017-07-10 18:27:26 UTC (rev 219302)
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#include "config.h"
-#include "JSHTMLObjectElement.h"
-
-#include "HTMLObjectElement.h"
-#include "JSPluginElementFunctions.h"
-
-namespace WebCore {
-
-using namespace JSC;
-
-bool JSHTMLObjectElement::getOwnPropertySlotDelegate(ExecState* exec, PropertyName propertyName, PropertySlot& slot)
-{
-    return pluginElementCustomGetOwnPropertySlot<JSHTMLObjectElement, Base>(exec, propertyName, slot, this);
-}
-
-bool JSHTMLObjectElement::putDelegate(ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot& slot, bool& putResult)
-{
-    return pluginElementCustomPut(exec, propertyName, value, this, slot, putResult);
-}
-
-CallType JSHTMLObjectElement::getCallData(JSCell* cell, CallData& callData)
-{
-    return pluginElementGetCallData(jsCast<JSHTMLObjectElement*>(cell), callData);
-}
-
-} // namespace WebCore

Modified: trunk/Source/WebCore/bindings/js/JSLocationCustom.cpp (219301 => 219302)


--- trunk/Source/WebCore/bindings/js/JSLocationCustom.cpp	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/bindings/js/JSLocationCustom.cpp	2017-07-10 18:27:26 UTC (rev 219302)
@@ -34,12 +34,12 @@
 
 namespace WebCore {
 
-bool JSLocation::getOwnPropertySlotDelegate(ExecState* state, PropertyName propertyName, PropertySlot& slot)
+static bool getOwnPropertySlotCommon(JSLocation& thisObject, ExecState& state, PropertyName propertyName, PropertySlot& slot)
 {
-    VM& vm = state->vm();
+    VM& vm = state.vm();
     auto scope = DECLARE_THROW_SCOPE(vm);
 
-    Frame* frame = wrapped().frame();
+    Frame* frame = thisObject.wrapped().frame();
     if (!frame) {
         slot.setUndefined();
         return true;
@@ -51,60 +51,100 @@
     // Our custom code is only needed to implement the Window cross-domain scheme, so if access is
     // allowed, return false so the normal lookup will take place.
     String message;
-    if (BindingSecurity::shouldAllowAccessToFrame(*state, *frame, message))
+    if (BindingSecurity::shouldAllowAccessToFrame(state, *frame, message))
         return false;
 
     // https://html.spec.whatwg.org/#crossorigingetownpropertyhelper-(-o,-p-)
-    if (propertyName == state->propertyNames().toStringTagSymbol || propertyName == state->propertyNames().hasInstanceSymbol || propertyName == state->propertyNames().isConcatSpreadableSymbol) {
-        slot.setValue(this, ReadOnly | DontEnum, jsUndefined());
+    if (propertyName == state.propertyNames().toStringTagSymbol || propertyName == state.propertyNames().hasInstanceSymbol || propertyName == state.propertyNames().isConcatSpreadableSymbol) {
+        slot.setValue(&thisObject, ReadOnly | DontEnum, jsUndefined());
         return true;
     }
 
     // We only allow access to Location.replace() cross origin.
-    if (propertyName == state->propertyNames().replace) {
-        slot.setCustom(this, ReadOnly | DontEnum, nonCachingStaticFunctionGetter<jsLocationInstanceFunctionReplace, 1>);
+    if (propertyName == state.propertyNames().replace) {
+        slot.setCustom(&thisObject, ReadOnly | DontEnum, nonCachingStaticFunctionGetter<jsLocationInstanceFunctionReplace, 1>);
         return true;
     }
 
     // Getting location.href cross origin needs to throw. However, getOwnPropertyDescriptor() needs to return
     // a descriptor that has a setter but no getter.
-    if (slot.internalMethodType() == PropertySlot::InternalMethodType::GetOwnProperty && propertyName == state->propertyNames().href) {
+    if (slot.internalMethodType() == PropertySlot::InternalMethodType::GetOwnProperty && propertyName == state.propertyNames().href) {
         auto* entry = JSLocation::info()->staticPropHashTable->entry(propertyName);
         CustomGetterSetter* customGetterSetter = CustomGetterSetter::create(vm, nullptr, entry->propertyPutter());
-        slot.setCustomGetterSetter(this, DontEnum | CustomAccessor, customGetterSetter);
+        slot.setCustomGetterSetter(&thisObject, DontEnum | CustomAccessor, customGetterSetter);
         return true;
     }
 
-    throwSecurityError(*state, scope, message);
+    throwSecurityError(state, scope, message);
     slot.setUndefined();
     return true;
 }
 
-bool JSLocation::putDelegate(ExecState* state, PropertyName propertyName, JSValue, PutPropertySlot&, bool& putResult)
+bool JSLocation::getOwnPropertySlot(JSObject* object, ExecState* state, PropertyName propertyName, PropertySlot& slot)
 {
-    putResult = false;
+    auto* thisObject = jsCast<JSLocation*>(object);
+    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
 
-    Frame* frame = wrapped().frame();
+    if (getOwnPropertySlotCommon(*thisObject, *state, propertyName, slot))
+        return true;
+    return JSObject::getOwnPropertySlot(object, state, propertyName, slot);
+}
+
+bool JSLocation::getOwnPropertySlotByIndex(JSObject* object, ExecState* state, unsigned index, PropertySlot& slot)
+{
+    auto* thisObject = jsCast<JSLocation*>(object);
+    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+
+    if (getOwnPropertySlotCommon(*thisObject, *state, Identifier::from(state, index), slot))
+        return true;
+    return JSObject::getOwnPropertySlotByIndex(object, state, index, slot);
+}
+
+static bool putCommon(JSLocation& thisObject, ExecState& state, PropertyName propertyName)
+{
+    Frame* frame = thisObject.wrapped().frame();
     if (!frame)
         return true;
 
     // Silently block access to toString and valueOf.
-    if (propertyName == state->propertyNames().toString || propertyName == state->propertyNames().valueOf)
+    if (propertyName == state.propertyNames().toString || propertyName == state.propertyNames().valueOf)
         return true;
 
     // Always allow assigning to the whole location.
     // However, alllowing assigning of pieces might inadvertently disclose parts of the original location.
     // So fall through to the access check for those.
-    if (propertyName == state->propertyNames().href)
+    if (propertyName == state.propertyNames().href)
         return false;
 
     // Block access and throw if there is a security error.
-    if (!BindingSecurity::shouldAllowAccessToFrame(state, frame, ThrowSecurityError))
+    if (!BindingSecurity::shouldAllowAccessToFrame(&state, frame, ThrowSecurityError))
         return true;
 
     return false;
 }
 
+bool JSLocation::put(JSCell* cell, ExecState* state, PropertyName propertyName, JSValue value, PutPropertySlot& putPropertySlot)
+{
+    auto* thisObject = jsCast<JSLocation*>(cell);
+    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+
+    if (putCommon(*thisObject, *state, propertyName))
+        return false;
+
+    return JSObject::put(thisObject, state, propertyName, value, putPropertySlot);
+}
+
+bool JSLocation::putByIndex(JSCell* cell, ExecState* state, unsigned index, JSValue value, bool shouldThrow)
+{
+    auto* thisObject = jsCast<JSLocation*>(cell);
+    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+
+    if (putCommon(*thisObject, *state, Identifier::from(state, index)))
+        return false;
+
+    return JSObject::putByIndex(cell, state, index, value, shouldThrow);
+}
+
 bool JSLocation::deleteProperty(JSCell* cell, ExecState* exec, PropertyName propertyName)
 {
     JSLocation* thisObject = jsCast<JSLocation*>(cell);
@@ -188,10 +228,12 @@
     return ASCIILiteral("Location");
 }
 
-bool JSLocationPrototype::putDelegate(ExecState* exec, PropertyName propertyName, JSValue, PutPropertySlot&, bool& putResult)
+bool JSLocationPrototype::put(JSCell* cell, ExecState* state, PropertyName propertyName, JSValue value, PutPropertySlot& slot)
 {
-    putResult = false;
-    return (propertyName == exec->propertyNames().toString || propertyName == exec->propertyNames().valueOf);
+    auto* thisObject = jsCast<JSLocationPrototype*>(cell);
+    if (propertyName == state->propertyNames().toString || propertyName == state->propertyNames().valueOf)
+        return false;
+    return Base::put(thisObject, state, propertyName, value, slot);
 }
 
 bool JSLocationPrototype::defineOwnProperty(JSObject* object, ExecState* exec, PropertyName propertyName, const PropertyDescriptor& descriptor, bool throwException)

Modified: trunk/Source/WebCore/bindings/js/JSPluginElementFunctions.cpp (219301 => 219302)


--- trunk/Source/WebCore/bindings/js/JSPluginElementFunctions.cpp	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/bindings/js/JSPluginElementFunctions.cpp	2017-07-10 18:27:26 UTC (rev 219302)
@@ -94,7 +94,7 @@
     return instance->createRuntimeObject(exec);
 }
     
-EncodedJSValue pluginElementPropertyGetter(ExecState* exec, EncodedJSValue thisValue, PropertyName propertyName)
+static EncodedJSValue pluginElementPropertyGetter(ExecState* exec, EncodedJSValue thisValue, PropertyName propertyName)
 {
     VM& vm = exec->vm();
     auto scope = DECLARE_THROW_SCOPE(vm);
@@ -109,8 +109,14 @@
     return JSValue::encode(scriptObject->get(exec, propertyName));
 }
 
-bool pluginElementCustomGetOwnPropertySlot(ExecState* exec, PropertyName propertyName, PropertySlot& slot, JSHTMLElement* element)
+bool pluginElementCustomGetOwnPropertySlot(JSHTMLElement* element, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
 {
+    if (!element->globalObject()->world().isNormal()) {
+        JSC::JSValue proto = element->getPrototypeDirect();
+        if (proto.isObject() && JSC::jsCast<JSC::JSObject*>(asObject(proto))->hasProperty(exec, propertyName))
+            return false;
+    }
+
     JSObject* scriptObject = pluginScriptObject(exec, element);
     if (!scriptObject)
         return false;
@@ -117,11 +123,12 @@
 
     if (!scriptObject->hasProperty(exec, propertyName))
         return false;
+
     slot.setCustom(element, DontDelete | DontEnum, pluginElementPropertyGetter);
     return true;
 }
 
-bool pluginElementCustomPut(ExecState* exec, PropertyName propertyName, JSValue value, JSHTMLElement* element, PutPropertySlot& slot, bool& putResult)
+bool pluginElementCustomPut(JSHTMLElement* element, ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot& slot, bool& putResult)
 {
     JSObject* scriptObject = pluginScriptObject(exec, element);
     if (!scriptObject)
@@ -154,7 +161,7 @@
     return JSValue::encode(result);
 }
 
-CallType pluginElementGetCallData(JSHTMLElement* element, CallData& callData)
+CallType pluginElementCustomGetCallData(JSHTMLElement* element, CallData& callData)
 {
     // First, ask the plug-in view base for its runtime object.
     if (JSObject* scriptObject = pluginScriptObjectFromPluginViewBase(element)) {

Modified: trunk/Source/WebCore/bindings/js/JSPluginElementFunctions.h (219301 => 219302)


--- trunk/Source/WebCore/bindings/js/JSPluginElementFunctions.h	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/bindings/js/JSPluginElementFunctions.h	2017-07-10 18:27:26 UTC (rev 219302)
@@ -37,20 +37,8 @@
     JSC::Bindings::Instance* pluginInstance(HTMLElement&);
     WEBCORE_EXPORT JSC::JSObject* pluginScriptObject(JSC::ExecState*, JSHTMLElement*);
 
-    JSC::EncodedJSValue pluginElementPropertyGetter(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
-    bool pluginElementCustomGetOwnPropertySlot(JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&, JSHTMLElement*);
-    bool pluginElementCustomPut(JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSHTMLElement*, JSC::PutPropertySlot&, bool& putResult);
-    JSC::CallType pluginElementGetCallData(JSHTMLElement*, JSC::CallData&);
+    bool pluginElementCustomGetOwnPropertySlot(JSHTMLElement*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&);
+    bool pluginElementCustomPut(JSHTMLElement*, JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&, bool& putResult);
+    JSC::CallType pluginElementCustomGetCallData(JSHTMLElement*, JSC::CallData&);
 
-    template <class Type, class Base> bool pluginElementCustomGetOwnPropertySlot(JSC::ExecState* exec, JSC::PropertyName propertyName, JSC::PropertySlot& slot, Type* element)
-    {
-        if (!element->globalObject()->world().isNormal()) {
-            JSC::JSValue proto = element->getPrototypeDirect();
-            if (proto.isObject() && JSC::jsCast<JSC::JSObject*>(asObject(proto))->hasProperty(exec, propertyName))
-                return false;
-        }
-
-        return pluginElementCustomGetOwnPropertySlot(exec, propertyName, slot, element);
-    }
-
 } // namespace WebCore

Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (219301 => 219302)


--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2017-07-10 18:27:26 UTC (rev 219302)
@@ -535,7 +535,7 @@
     # 1.2.8 Return desc.
     
     my @attributes = ();
-    push(@attributes, "ReadOnly") if !GetIndexedSetterOperation($interface) && !$interface->extendedAttributes->{CustomNamedSetter};
+    push(@attributes, "ReadOnly") if !GetIndexedSetterOperation($interface) && !$interface->extendedAttributes->{Plugin};
     
     my $attributeString = ((@attributes > 0) ? join(" | ", @attributes) : "0");
 
@@ -572,7 +572,7 @@
     # 2.10 Return desc.
     
     my @attributes = ();
-    push(@attributes, "ReadOnly") if !GetNamedSetterOperation($interface) && !$interface->extendedAttributes->{CustomNamedSetter};
+    push(@attributes, "ReadOnly") if !GetNamedSetterOperation($interface) && !$interface->extendedAttributes->{Plugin};
     push(@attributes, "DontEnum") if $interface->extendedAttributes->{LegacyUnenumerableNamedProperties};
     
     my $attributeString = ((@attributes > 0) ? join(" | ", @attributes) : "0");
@@ -667,7 +667,7 @@
         # 1.3. Set ignoreNamedProps to true.
         # NOTE: Setting ignoreNamedProps has the effect of skipping step 2, so we can early return here
         #       rather than going through the paces of having an actual ignoreNamedProps update.
-        if ($namedGetterOperation || $interface->extendedAttributes->{CustomGetOwnPropertySlotAndDescriptor}) {
+        if ($namedGetterOperation || $interface->extendedAttributes->{CustomGetOwnPropertySlotAndDescriptor} || $interface->extendedAttributes->{Plugin}) {
             push(@$outputArray, "        return JSObject::getOwnPropertySlot(object, state, propertyName, slot);\n");
         }
         push(@$outputArray, "    }\n");
@@ -701,12 +701,19 @@
         push(@$outputArray, "        return true;\n");
         push(@$outputArray, "    }\n");
     }
-    
+
+    # FIXME: There is only one remaining user of this, CSSStyleDeclaration.idl. Let's get them onto named / indexed getters.
     if ($interface->extendedAttributes->{CustomGetOwnPropertySlotAndDescriptor}) {
         push(@$outputArray, "    if (thisObject->getOwnPropertySlotDelegate(state, propertyName, slot))\n");
         push(@$outputArray, "        return true;\n");
     }
-    
+
+    if ($interface->extendedAttributes->{Plugin}) {
+        AddToImplIncludes("JSPluginElementFunctions.h");
+        push(@$outputArray, "    if (pluginElementCustomGetOwnPropertySlot(thisObject, state, propertyName, slot))\n");
+        push(@$outputArray, "        return true;\n");
+    }
+
     # 3. Return OrdinaryGetOwnProperty(O, P).
     push(@$outputArray, "    return JSObject::getOwnPropertySlot(object, state, propertyName, slot);\n");
     
@@ -718,7 +725,7 @@
 {
     my ($outputArray, $interface, $className) = @_;
     
-    return if $interface->extendedAttributes->{CustomGetOwnPropertySlotByIndex};
+    return if $interface->extendedAttributes->{CustomGetOwnPropertySlot};
 
     # Sink the int-to-string conversion that happens when we create a PropertyName
     # to the point where we actually need it.
@@ -772,7 +779,7 @@
         # 1.3. Set ignoreNamedProps to true.
         # NOTE: Setting ignoreNamedProps has the effect of skipping step 2, so we can early return here
         #       rather than going through the paces of having an actual ignoreNamedProps update.
-        if ($namedGetterOperation || $interface->extendedAttributes->{CustomGetOwnPropertySlotAndDescriptor}) {
+        if ($namedGetterOperation || $interface->extendedAttributes->{CustomGetOwnPropertySlotAndDescriptor} || $interface->extendedAttributes->{Plugin}) {
             push(@$outputArray, "        return JSObject::getOwnPropertySlotByIndex(object, state, index, slot);\n");
         }
         push(@$outputArray, "    }\n");
@@ -809,6 +816,7 @@
         push(@$outputArray, "    }\n");
     }
     
+    # FIXME: There is only one remaining user of this, CSSStyleDeclaration.idl. Let's get them onto named / indexed getters.
     if ($interface->extendedAttributes->{CustomGetOwnPropertySlotAndDescriptor}) {
         &$propertyNameGeneration();
     
@@ -815,7 +823,15 @@
         push(@$outputArray, "    if (thisObject->getOwnPropertySlotDelegate(state, propertyName, slot))\n");
         push(@$outputArray, "        return true;\n");
     }
-    
+
+    if ($interface->extendedAttributes->{Plugin}) {
+        &$propertyNameGeneration();
+
+        AddToImplIncludes("JSPluginElementFunctions.h");
+        push(@$outputArray, "    if (pluginElementCustomGetOwnPropertySlot(thisObject, state, propertyName, slot))\n");
+        push(@$outputArray, "        return true;\n");
+    }
+
     # 3. Return OrdinaryGetOwnProperty(O, P).
     push(@$outputArray, "    return JSObject::getOwnPropertySlotByIndex(object, state, index, slot);\n");
     
@@ -827,7 +843,7 @@
 {
     my ($outputArray, $interface, $className) = @_;
     
-    return if $interface->extendedAttributes->{CustomEnumerateProperty};
+    return if $interface->extendedAttributes->{CustomGetOwnPropertyNames};
     
     my $namedGetterOperation = GetNamedGetterOperation($interface);
     my $indexedGetterOperation = GetIndexedGetterOperation($interface);
@@ -913,7 +929,7 @@
 {
     my ($outputArray, $interface, $className) = @_;
     
-    return if $interface->extendedAttributes->{CustomPutFunction};
+    return if $interface->extendedAttributes->{CustomPut};
     
     my $namedSetterOperation = GetNamedSetterOperation($interface);
     my $indexedSetterOperation = GetIndexedSetterOperation($interface);
@@ -961,13 +977,15 @@
         push(@$outputArray, "    }\n\n");
     }
     
-    assert("Using both a named property setter and [CustomNamedSetter] together is not supported.") if $namedSetterOperation && $interface->extendedAttributes->{CustomNamedSetter};
-    if ($interface->extendedAttributes->{CustomNamedSetter}) {
+    assert("Using both a named property setter and [Plugin] together is not supported.") if $namedSetterOperation && $interface->extendedAttributes->{Plugin};
+    if ($interface->extendedAttributes->{Plugin}) {
+        AddToImplIncludes("JSPluginElementFunctions.h");
+
         push(@$outputArray, "    bool putResult = false;\n");
-        push(@$outputArray, "    if (thisObject->putDelegate(state, propertyName, value, putPropertySlot, putResult))\n");
+        push(@$outputArray, "    if (pluginElementCustomPut(thisObject, state, propertyName, value, putPropertySlot, putResult))\n");
         push(@$outputArray, "        return putResult;\n\n");
     }
-    
+
     push(@$outputArray, "    return JSObject::put(thisObject, state, propertyName, value, putPropertySlot);\n");
     push(@$outputArray, "}\n\n");
 }
@@ -976,13 +994,13 @@
 {
     my ($outputArray, $interface, $className) = @_;
     
-    return if $interface->extendedAttributes->{CustomPutFunction};
-    
+    return if $interface->extendedAttributes->{CustomPut};
+
     my $namedSetterOperation = GetNamedSetterOperation($interface);
     my $indexedSetterOperation = GetIndexedSetterOperation($interface);
     
     my $overrideBuiltins = $codeGenerator->InheritsExtendedAttribute($interface, "OverrideBuiltins");
-    my $ellidesCallsToBase = ($namedSetterOperation && $overrideBuiltins) && !$interface->extendedAttributes->{CustomNamedSetter};
+    my $ellidesCallsToBase = ($namedSetterOperation && $overrideBuiltins) && !$interface->extendedAttributes->{Plugin};
     
     push(@$outputArray, "bool ${className}::putByIndex(JSCell* cell, ExecState* state, unsigned index, JSValue value, bool" . (!$ellidesCallsToBase ? " shouldThrow" : "") . ")\n");
     push(@$outputArray, "{\n");
@@ -1021,16 +1039,17 @@
             push(@$outputArray, "    }\n\n");
         }
     }
-    
-    assert("Using both a named property setter and [CustomNamedSetter] together is not supported.") if $namedSetterOperation && $interface->extendedAttributes->{CustomNamedSetter};
-    if ($interface->extendedAttributes->{CustomNamedSetter}) {
+
+    assert("Using both a named property setter and [Plugin] together is not supported.") if $namedSetterOperation && $interface->extendedAttributes->{Plugin};
+    if ($interface->extendedAttributes->{Plugin}) {
+        AddToImplIncludes("JSPluginElementFunctions.h");
         push(@$outputArray, "    auto propertyName = Identifier::from(state, index);\n");
-        push(@$outputArray, "    PutPropertySlot slot(thisObject, shouldThrow);\n");
+        push(@$outputArray, "    PutPropertySlot putPropertySlot(thisObject, shouldThrow);\n");
         push(@$outputArray, "    bool putResult = false;\n");
-        push(@$outputArray, "    if (thisObject->putDelegate(state, propertyName, value, slot, putResult))\n");
+        push(@$outputArray, "    if (pluginElementCustomPut(thisObject, state, propertyName, value, putPropertySlot, putResult))\n");
         push(@$outputArray, "        return putResult;\n\n");
     }
-    
+
     if (!$ellidesCallsToBase) {
         push(@$outputArray, "    return JSObject::putByIndex(cell, state, index, value, shouldThrow);\n");
     }
@@ -1252,7 +1271,7 @@
     push(@$outputArray, "    }\n");
 }
 
-sub GenerateDeletePropertyDefinition
+sub GenerateDeleteProperty
 {
     my ($outputArray, $interface, $className, $operation, $conditional) = @_;
 
@@ -1283,7 +1302,7 @@
     push(@$outputArray, "}\n\n");
 }
 
-sub GenerateDeletePropertyByIndexDefinition
+sub GenerateDeletePropertyByIndex
 {
     my ($outputArray, $interface, $className, $operation, $conditional) = @_;
 
@@ -1347,8 +1366,8 @@
         push(@$outputArray, "#if ${conditionalString}\n\n");;
     }
 
-    GenerateDeletePropertyDefinition($outputArray, $interface, $className, $namedDeleterOperation, $conditional);
-    GenerateDeletePropertyByIndexDefinition($outputArray, $interface, $className, $namedDeleterOperation, $conditional);
+    GenerateDeleteProperty($outputArray, $interface, $className, $namedDeleterOperation, $conditional);
+    GenerateDeletePropertyByIndex($outputArray, $interface, $className, $namedDeleterOperation, $conditional);
 
     push(@implContent, "#endif\n\n") if $conditional;
 }
@@ -1808,8 +1827,8 @@
 {
     my $interface = shift;
     return $interface->extendedAttributes->{CustomGetOwnPropertySlot}
-        || $interface->extendedAttributes->{CustomGetOwnPropertySlotByIndex}
         || $interface->extendedAttributes->{CustomGetOwnPropertySlotAndDescriptor}
+        || $interface->extendedAttributes->{Plugin}
         || GetIndexedGetterOperation($interface)
         || GetNamedGetterOperation($interface);
 }
@@ -1817,7 +1836,7 @@
 sub InstanceOverridesGetOwnPropertyNames
 {
     my $interface = shift;
-    return $interface->extendedAttributes->{CustomEnumerateProperty}
+    return $interface->extendedAttributes->{CustomGetOwnPropertyNames}
         || GetIndexedGetterOperation($interface)
         || GetNamedGetterOperation($interface);
 }
@@ -1825,8 +1844,8 @@
 sub InstanceOverridesPut
 {
     my $interface = shift;
-    return $interface->extendedAttributes->{CustomNamedSetter}
-        || $interface->extendedAttributes->{CustomPutFunction}
+    return $interface->extendedAttributes->{CustomPut}
+        || $interface->extendedAttributes->{Plugin}
         || GetIndexedSetterOperation($interface)
         || GetNamedSetterOperation($interface);
 }
@@ -1839,7 +1858,7 @@
         || GetNamedSetterOperation($interface);
 }
 
-sub InstanceOverridesDelete
+sub InstanceOverridesDeleteProperty
 {
     my $interface = shift;
     return $interface->extendedAttributes->{CustomDeleteProperty}
@@ -2572,12 +2591,12 @@
         push(@headerContent, "    static bool defineOwnProperty(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, const JSC::PropertyDescriptor&, bool shouldThrow);\n");
     }
 
-    if (InstanceOverridesDelete($interface)) {
+    if (InstanceOverridesDeleteProperty($interface)) {
         push(@headerContent, "    static bool deleteProperty(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName);\n");
         push(@headerContent, "    static bool deletePropertyByIndex(JSC::JSCell*, JSC::ExecState*, unsigned);\n");
     }
 
-    if (InstanceOverridesCall($interface)) {
+    if (InstanceOverridesGetCallData($interface)) {
         push(@headerContent, "    static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&);\n\n");
         $headerIncludes{"<runtime/CallData.h>"} = 1;
         $structureFlags{"JSC::TypeOfShouldCallGetCallData"} = 1;
@@ -2796,11 +2815,7 @@
     if ($interface->extendedAttributes->{CustomGetOwnPropertySlotAndDescriptor}) {
         push(@headerContent, "    bool getOwnPropertySlotDelegate(JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&);\n");
     }
-    
-    if ($interface->extendedAttributes->{CustomNamedSetter}) {
-        push(@headerContent, "    bool putDelegate(JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&, bool& putResult);\n");
-    }
-    
+
     push(@headerContent, "};\n\n");
 
     if (ShouldGenerateWrapperOwnerCode($hasParent, $interface)) {
@@ -4100,17 +4115,6 @@
         push(@implContent, "}\n\n");
     }
 
-    if ($interface->extendedAttributes->{CustomNamedGetterOnPrototype}) {
-        push(@implContent, "bool ${className}Prototype::put(JSCell* cell, ExecState* state, PropertyName propertyName, JSValue value, PutPropertySlot& slot)\n");
-        push(@implContent, "{\n");
-        push(@implContent, "    auto* thisObject = jsCast<${className}Prototype*>(cell);\n");
-        push(@implContent, "    bool putResult = false;\n");
-        push(@implContent, "    if (thisObject->putDelegate(state, propertyName, value, slot, putResult))\n");
-        push(@implContent, "        return putResult;\n");
-        push(@implContent, "    return Base::put(thisObject, state, propertyName, value, slot);\n");
-        push(@implContent, "}\n\n");
-    }
-
     # - Initialize static ClassInfo object
     push(@implContent, "const ClassInfo $className" . "::s_info = { \"${visibleInterfaceName}\", &Base::s_info, ");
 
@@ -4297,12 +4301,12 @@
         GenerateDefineOwnProperty(\@implContent, $interface, $className);
     }
 
-    if (InstanceOverridesDelete($interface)) {
+    if (InstanceOverridesDeleteProperty($interface)) {
         GenerateNamedDeleterDefinition(\@implContent, $interface, $className);
     }
     
-    if (InstanceOverridesCall($interface)) {
-        GenerateLegacyCallerDefinitions($interface, $className);
+    if (InstanceOverridesGetCallData($interface)) {
+        GenerateGetCallData(\@implContent, $interface, $className);
     }
     
     if ($numAttributes > 0) {
@@ -5250,70 +5254,97 @@
     push(@implContent, "\n");
 }
 
+sub GenerateGetCallData
+{
+    my ($outputArray, $interface, $className) = @_;
+
+    return if $interface->extendedAttributes->{CustomGetCallData};
+
+    if ($interface->extendedAttributes->{Plugin}) {
+        GeneratePluginCall($outputArray, $interface, $className);
+    } else {
+        GenerateLegacyCallerDefinitions($outputArray, $interface, $className);
+    }
+}
+
+sub GeneratePluginCall
+{
+    my ($outputArray, $interface, $className) = @_;
+
+    AddToImplIncludes("JSPluginElementFunctions.h");
+
+    push(@$outputArray, "CallType ${className}::getCallData(JSCell* cell, CallData& callData)\n");
+    push(@$outputArray, "{\n");
+    push(@$outputArray, "    auto* thisObject = jsCast<${className}*>(cell);\n");
+    push(@$outputArray, "    ASSERT_GC_OBJECT_INHERITS(thisObject, info());\n\n");
+
+    push(@$outputArray, "    return pluginElementCustomGetCallData(thisObject, callData);\n");
+    push(@$outputArray, "}\n");
+    push(@$outputArray, "\n");
+}
+
 sub GenerateLegacyCallerDefinitions
 {
-    my ($interface, $className) = @_;
+    my ($outputArray, $interface, $className) = @_;
 
-    return if $interface->extendedAttributes->{CustomCall};
-    
     my @legacyCallers = @{$interface->{LegacyCallers}};
     if (@legacyCallers > 1) {
         foreach my $legacyCaller (@legacyCallers) {
-            GenerateLegacyCallerDefinition($interface, $className, $legacyCaller);
+            GenerateLegacyCallerDefinition($outputArray, $interface, $className, $legacyCaller);
         }
 
         my $overloadFunctionPrefix = "call${className}";
 
-        push(@implContent, "EncodedJSValue JSC_HOST_CALL ${overloadFunctionPrefix}(ExecState* state)\n");
-        push(@implContent, "{\n");
-        push(@implContent, "    VM& vm = state->vm();\n");
-        push(@implContent, "    auto throwScope = DECLARE_THROW_SCOPE(vm);\n");
-        push(@implContent, "    UNUSED_PARAM(throwScope);\n");
+        push(@$outputArray, "EncodedJSValue JSC_HOST_CALL ${overloadFunctionPrefix}(ExecState* state)\n");
+        push(@$outputArray, "{\n");
+        push(@$outputArray, "    VM& vm = state->vm();\n");
+        push(@$outputArray, "    auto throwScope = DECLARE_THROW_SCOPE(vm);\n");
+        push(@$outputArray, "    UNUSED_PARAM(throwScope);\n");
 
         GenerateOverloadDispatcher($legacyCallers[0], $interface, $overloadFunctionPrefix, "", "state");
 
-        push(@implContent, "}\n\n");
+        push(@$outputArray, "}\n\n");
     } else {
-        GenerateLegacyCallerDefinition($interface, $className, $legacyCallers[0]);
+        GenerateLegacyCallerDefinition($outputArray, $interface, $className, $legacyCallers[0]);
     }
 
-    push(@implContent, "CallType ${className}::getCallData(JSCell*, CallData& callData)\n");
-    push(@implContent, "{\n");
-    push(@implContent, "    callData.native.function = call${className};\n");
-    push(@implContent, "    return CallType::Host;\n");
-    push(@implContent, "}\n");
-    push(@implContent, "\n");
+    push(@$outputArray, "CallType ${className}::getCallData(JSCell*, CallData& callData)\n");
+    push(@$outputArray, "{\n");
+    push(@$outputArray, "    callData.native.function = call${className};\n");
+    push(@$outputArray, "    return CallType::Host;\n");
+    push(@$outputArray, "}\n");
+    push(@$outputArray, "\n");
 }
 
 sub GenerateLegacyCallerDefinition
 {
-    my ($interface, $className, $operation) = @_;
+    my ($outputArray, $interface, $className, $operation) = @_;
 
     my $isOverloaded = $operation->{overloads} && @{$operation->{overloads}} > 1;
     if ($isOverloaded) {
-        push(@implContent, "static inline EncodedJSValue call${className}$operation->{overloadIndex}(ExecState* state)\n");
+        push(@$outputArray, "static inline EncodedJSValue call${className}$operation->{overloadIndex}(ExecState* state)\n");
     } else {
-        push(@implContent, "static EncodedJSValue JSC_HOST_CALL call${className}(ExecState* state)\n");
+        push(@$outputArray, "static EncodedJSValue JSC_HOST_CALL call${className}(ExecState* state)\n");
     }
 
-    push(@implContent, "{\n");
-    push(@implContent, "    VM& vm = state->vm();\n");
-    push(@implContent, "    auto throwScope = DECLARE_THROW_SCOPE(vm);\n");
-    push(@implContent, "    UNUSED_PARAM(throwScope);\n");
+    push(@$outputArray, "{\n");
+    push(@$outputArray, "    VM& vm = state->vm();\n");
+    push(@$outputArray, "    auto throwScope = DECLARE_THROW_SCOPE(vm);\n");
+    push(@$outputArray, "    UNUSED_PARAM(throwScope);\n");
 
     my $indent = "    ";
-    GenerateArgumentsCountCheck(\@implContent, $operation, $interface, $indent);
+    GenerateArgumentsCountCheck($outputArray, $operation, $interface, $indent);
 
-    push(@implContent, "    auto* castedThis = jsCast<${className}*>(state->jsCallee());\n");
-    push(@implContent, "    ASSERT(castedThis);\n");
-    push(@implContent, "    auto& impl = castedThis->wrapped();\n");
+    push(@$outputArray, "    auto* castedThis = jsCast<${className}*>(state->jsCallee());\n");
+    push(@$outputArray, "    ASSERT(castedThis);\n");
+    push(@$outputArray, "    auto& impl = castedThis->wrapped();\n");
 
     my $functionImplementationName = $operation->extendedAttributes->{ImplementedAs} || $codeGenerator->WK_lcfirst($operation->name) || "legacyCallerOperationFromBindings";
-    my $functionString = GenerateParametersCheck(\@implContent, $operation, $interface, $functionImplementationName, $indent);
+    my $functionString = GenerateParametersCheck($outputArray, $operation, $interface, $functionImplementationName, $indent);
 
-    GenerateImplementationFunctionCall(\@implContent, $operation, $interface, $functionString, $indent);
+    GenerateImplementationFunctionCall($outputArray, $operation, $interface, $functionString, $indent);
 
-    push(@implContent, "}\n\n");
+    push(@$outputArray, "}\n\n");
 }
 
 sub GenerateCallWithUsingReferences
@@ -6818,13 +6849,12 @@
         }
     }
 
-    if ($interface->extendedAttributes->{CustomNamedGetterOnPrototype}) {
+    # FIXME: Should this override putByIndex as well?
+    if ($interface->extendedAttributes->{CustomPutOnPrototype}) {
         push(@$outputArray, "\n");
         push(@$outputArray, "    static bool put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&);\n");
-        push(@$outputArray, "    bool putDelegate(JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&, bool& putResult);\n");
     }
 
-    # Custom defineOwnProperty function
     if ($interface->extendedAttributes->{CustomDefineOwnPropertyOnPrototype}) {
         push(@$outputArray, "\n");
         push(@$outputArray, "    static bool defineOwnProperty(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, const JSC::PropertyDescriptor&, bool shouldThrow);\n");
@@ -7086,10 +7116,10 @@
         || $interface->extendedAttributes->{JSBuiltinConstructor};
 }
 
-sub InstanceOverridesCall
+sub InstanceOverridesGetCallData
 {
     my $interface = shift;
-    return $interface->extendedAttributes->{CustomCall} || $interface->{LegacyCallers}
+    return $interface->{LegacyCallers} || $interface->extendedAttributes->{CustomGetCallData} || $interface->extendedAttributes->{Plugin};
 }
 
 sub HeaderNeedsPrototypeDeclaration
@@ -7096,7 +7126,7 @@
 {
     my $interface = shift;
     return IsDOMGlobalObject($interface)
-        || $interface->extendedAttributes->{CustomNamedGetterOnPrototype}
+        || $interface->extendedAttributes->{CustomPutOnPrototype}
         || $interface->extendedAttributes->{CustomDefineOwnPropertyOnPrototype};
 }
 

Modified: trunk/Source/WebCore/bindings/scripts/IDLAttributes.json (219301 => 219302)


--- trunk/Source/WebCore/bindings/scripts/IDLAttributes.json	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/bindings/scripts/IDLAttributes.json	2017-07-10 18:27:26 UTC (rev 219302)
@@ -78,9 +78,6 @@
         "Custom": {
             "contextsAllowed": ["attribute", "operation"]
         },
-        "CustomCall": {
-            "contextsAllowed": ["interface"]
-        },
         "CustomConstructor": {
             "contextsAllowed": ["interface"]
         },
@@ -93,13 +90,13 @@
         "CustomDeleteProperty": {
             "contextsAllowed": ["interface"]
         },
-        "CustomEnumerateProperty": {
+        "CustomGetCallData": {
             "contextsAllowed": ["interface"]
         },
-        "CustomGetOwnPropertySlot": {
+        "CustomGetOwnPropertyNames": {
             "contextsAllowed": ["interface"]
         },
-        "CustomGetOwnPropertySlotByIndex": {
+        "CustomGetOwnPropertySlot": {
             "contextsAllowed": ["interface"]
         },
         "CustomGetOwnPropertySlotAndDescriptor": {
@@ -117,12 +114,6 @@
         "CustomIsReachable": {
             "contextsAllowed": ["interface"]
         },
-        "CustomNamedGetterOnPrototype": {
-            "contextsAllowed": ["interface"]
-        },
-        "CustomNamedSetter": {
-            "contextsAllowed": ["interface"]
-        },
         "CustomPreventExtensions": {
             "contextsAllowed": ["interface"]
         },
@@ -132,9 +123,12 @@
         "CustomPushEventHandlerScope": {
             "contextsAllowed": ["interface"]
         },
-        "CustomPutFunction": {
+        "CustomPut": {
             "contextsAllowed": ["interface"]
         },
+        "CustomPutOnPrototype": {
+            "contextsAllowed": ["interface"]
+        },
         "CustomSetter": {
             "contextsAllowed": ["attribute"]
         },
@@ -341,6 +335,10 @@
             "contextsAllowed": ["operation"],
             "notes" : "Only used by WebKitTestRunner and DumpRenderTree"
         },
+        "Plugin": {
+            "contextsAllowed": ["interface"],
+            "notes" : "Should only be used by elements that forward to Netscape plug-ins"
+        },
         "PrimaryGlobal": {
             "contextsAllowed": ["interface"],
             "values": ["*"],

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp (219301 => 219302)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp	2017-07-10 18:27:26 UTC (rev 219302)
@@ -413,32 +413,6 @@
     thisObject->JSTestInterface::~JSTestInterface();
 }
 
-bool JSTestInterface::put(JSCell* cell, ExecState* state, PropertyName propertyName, JSValue value, PutPropertySlot& putPropertySlot)
-{
-    auto* thisObject = jsCast<JSTestInterface*>(cell);
-    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
-
-    bool putResult = false;
-    if (thisObject->putDelegate(state, propertyName, value, putPropertySlot, putResult))
-        return putResult;
-
-    return JSObject::put(thisObject, state, propertyName, value, putPropertySlot);
-}
-
-bool JSTestInterface::putByIndex(JSCell* cell, ExecState* state, unsigned index, JSValue value, bool shouldThrow)
-{
-    auto* thisObject = jsCast<JSTestInterface*>(cell);
-    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
-
-    auto propertyName = Identifier::from(state, index);
-    PutPropertySlot slot(thisObject, shouldThrow);
-    bool putResult = false;
-    if (thisObject->putDelegate(state, propertyName, value, slot, putResult))
-        return putResult;
-
-    return JSObject::putByIndex(cell, state, index, value, shouldThrow);
-}
-
 template<> inline JSTestInterface* IDLAttribute<JSTestInterface>::cast(ExecState& state, EncodedJSValue thisValue)
 {
     return jsDynamicDowncast<JSTestInterface*>(state.vm(), JSValue::decode(thisValue));

Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h (219301 => 219302)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h	2017-07-10 18:27:26 UTC (rev 219302)
@@ -79,7 +79,6 @@
     JSTestInterface(JSC::Structure*, JSDOMGlobalObject&, Ref<TestInterface>&&);
 
     void finishCreation(JSC::VM&);
-    bool putDelegate(JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&, bool& putResult);
 };
 
 class JSTestInterfaceOwner : public JSC::WeakHandleOwner {

Added: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPluginInterface.cpp (0 => 219302)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPluginInterface.cpp	                        (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPluginInterface.cpp	2017-07-10 18:27:26 UTC (rev 219302)
@@ -0,0 +1,269 @@
+/*
+    This file is part of the WebKit open source project.
+    This file has been generated by generate-bindings.pl. DO NOT MODIFY!
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "config.h"
+#include "JSTestPluginInterface.h"
+
+#include "JSDOMBinding.h"
+#include "JSDOMConstructorNotConstructable.h"
+#include "JSDOMExceptionHandling.h"
+#include "JSDOMWrapperCache.h"
+#include "JSPluginElementFunctions.h"
+#include <runtime/FunctionPrototype.h>
+#include <runtime/JSCInlines.h>
+#include <wtf/GetPtr.h>
+
+using namespace JSC;
+
+namespace WebCore {
+
+// Attributes
+
+JSC::EncodedJSValue jsTestPluginInterfaceConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+bool setJSTestPluginInterfaceConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+
+class JSTestPluginInterfacePrototype : public JSC::JSNonFinalObject {
+public:
+    using Base = JSC::JSNonFinalObject;
+    static JSTestPluginInterfacePrototype* create(JSC::VM& vm, JSDOMGlobalObject* globalObject, JSC::Structure* structure)
+    {
+        JSTestPluginInterfacePrototype* ptr = new (NotNull, JSC::allocateCell<JSTestPluginInterfacePrototype>(vm.heap)) JSTestPluginInterfacePrototype(vm, globalObject, structure);
+        ptr->finishCreation(vm);
+        return ptr;
+    }
+
+    DECLARE_INFO;
+    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
+    {
+        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
+    }
+
+private:
+    JSTestPluginInterfacePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
+        : JSC::JSNonFinalObject(vm, structure)
+    {
+    }
+
+    void finishCreation(JSC::VM&);
+};
+
+using JSTestPluginInterfaceConstructor = JSDOMConstructorNotConstructable<JSTestPluginInterface>;
+
+template<> JSValue JSTestPluginInterfaceConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
+{
+    UNUSED_PARAM(vm);
+    return globalObject.functionPrototype();
+}
+
+template<> void JSTestPluginInterfaceConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)
+{
+    putDirect(vm, vm.propertyNames->prototype, JSTestPluginInterface::prototype(vm, globalObject), DontDelete | ReadOnly | DontEnum);
+    putDirect(vm, vm.propertyNames->name, jsNontrivialString(&vm, String(ASCIILiteral("TestPluginInterface"))), ReadOnly | DontEnum);
+    putDirect(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontEnum);
+}
+
+template<> const ClassInfo JSTestPluginInterfaceConstructor::s_info = { "TestPluginInterface", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestPluginInterfaceConstructor) };
+
+/* Hash table for prototype */
+
+static const HashTableValue JSTestPluginInterfacePrototypeTableValues[] =
+{
+    { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestPluginInterfaceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestPluginInterfaceConstructor) } },
+};
+
+const ClassInfo JSTestPluginInterfacePrototype::s_info = { "TestPluginInterfacePrototype", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestPluginInterfacePrototype) };
+
+void JSTestPluginInterfacePrototype::finishCreation(VM& vm)
+{
+    Base::finishCreation(vm);
+    reifyStaticProperties(vm, JSTestPluginInterfacePrototypeTableValues, *this);
+}
+
+const ClassInfo JSTestPluginInterface::s_info = { "TestPluginInterface", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestPluginInterface) };
+
+JSTestPluginInterface::JSTestPluginInterface(Structure* structure, JSDOMGlobalObject& globalObject, Ref<TestPluginInterface>&& impl)
+    : JSDOMWrapper<TestPluginInterface>(structure, globalObject, WTFMove(impl))
+{
+}
+
+void JSTestPluginInterface::finishCreation(VM& vm)
+{
+    Base::finishCreation(vm);
+    ASSERT(inherits(vm, info()));
+
+}
+
+JSObject* JSTestPluginInterface::createPrototype(VM& vm, JSDOMGlobalObject& globalObject)
+{
+    return JSTestPluginInterfacePrototype::create(vm, &globalObject, JSTestPluginInterfacePrototype::createStructure(vm, &globalObject, globalObject.objectPrototype()));
+}
+
+JSObject* JSTestPluginInterface::prototype(VM& vm, JSDOMGlobalObject& globalObject)
+{
+    return getDOMPrototype<JSTestPluginInterface>(vm, globalObject);
+}
+
+JSValue JSTestPluginInterface::getConstructor(VM& vm, const JSGlobalObject* globalObject)
+{
+    return getDOMConstructor<JSTestPluginInterfaceConstructor>(vm, *jsCast<const JSDOMGlobalObject*>(globalObject));
+}
+
+void JSTestPluginInterface::destroy(JSC::JSCell* cell)
+{
+    JSTestPluginInterface* thisObject = static_cast<JSTestPluginInterface*>(cell);
+    thisObject->JSTestPluginInterface::~JSTestPluginInterface();
+}
+
+bool JSTestPluginInterface::getOwnPropertySlot(JSObject* object, ExecState* state, PropertyName propertyName, PropertySlot& slot)
+{
+    auto* thisObject = jsCast<JSTestPluginInterface*>(object);
+    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+    if (pluginElementCustomGetOwnPropertySlot(thisObject, state, propertyName, slot))
+        return true;
+    return JSObject::getOwnPropertySlot(object, state, propertyName, slot);
+}
+
+bool JSTestPluginInterface::getOwnPropertySlotByIndex(JSObject* object, ExecState* state, unsigned index, PropertySlot& slot)
+{
+    auto* thisObject = jsCast<JSTestPluginInterface*>(object);
+    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+    auto propertyName = Identifier::from(state, index);
+    if (pluginElementCustomGetOwnPropertySlot(thisObject, state, propertyName, slot))
+        return true;
+    return JSObject::getOwnPropertySlotByIndex(object, state, index, slot);
+}
+
+bool JSTestPluginInterface::put(JSCell* cell, ExecState* state, PropertyName propertyName, JSValue value, PutPropertySlot& putPropertySlot)
+{
+    auto* thisObject = jsCast<JSTestPluginInterface*>(cell);
+    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+
+    bool putResult = false;
+    if (pluginElementCustomPut(thisObject, state, propertyName, value, putPropertySlot, putResult))
+        return putResult;
+
+    return JSObject::put(thisObject, state, propertyName, value, putPropertySlot);
+}
+
+bool JSTestPluginInterface::putByIndex(JSCell* cell, ExecState* state, unsigned index, JSValue value, bool shouldThrow)
+{
+    auto* thisObject = jsCast<JSTestPluginInterface*>(cell);
+    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+
+    auto propertyName = Identifier::from(state, index);
+    PutPropertySlot putPropertySlot(thisObject, shouldThrow);
+    bool putResult = false;
+    if (pluginElementCustomPut(thisObject, state, propertyName, value, putPropertySlot, putResult))
+        return putResult;
+
+    return JSObject::putByIndex(cell, state, index, value, shouldThrow);
+}
+
+CallType JSTestPluginInterface::getCallData(JSCell* cell, CallData& callData)
+{
+    auto* thisObject = jsCast<JSTestPluginInterface*>(cell);
+    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+
+    return pluginElementCustomGetCallData(thisObject, callData);
+}
+
+EncodedJSValue jsTestPluginInterfaceConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    VM& vm = state->vm();
+    auto throwScope = DECLARE_THROW_SCOPE(vm);
+    auto* prototype = jsDynamicDowncast<JSTestPluginInterfacePrototype*>(vm, JSValue::decode(thisValue));
+    if (UNLIKELY(!prototype))
+        return throwVMTypeError(state, throwScope);
+    return JSValue::encode(JSTestPluginInterface::getConstructor(state->vm(), prototype->globalObject()));
+}
+
+bool setJSTestPluginInterfaceConstructor(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    VM& vm = state->vm();
+    auto throwScope = DECLARE_THROW_SCOPE(vm);
+    auto* prototype = jsDynamicDowncast<JSTestPluginInterfacePrototype*>(vm, JSValue::decode(thisValue));
+    if (UNLIKELY(!prototype)) {
+        throwVMTypeError(state, throwScope);
+        return false;
+    }
+    // Shadowing a built-in constructor
+    return prototype->putDirect(state->vm(), state->propertyNames().constructor, JSValue::decode(encodedValue));
+}
+
+bool JSTestPluginInterfaceOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor)
+{
+    UNUSED_PARAM(handle);
+    UNUSED_PARAM(visitor);
+    return false;
+}
+
+void JSTestPluginInterfaceOwner::finalize(JSC::Handle<JSC::Unknown> handle, void* context)
+{
+    auto* jsTestPluginInterface = static_cast<JSTestPluginInterface*>(handle.slot()->asCell());
+    auto& world = *static_cast<DOMWrapperWorld*>(context);
+    uncacheWrapper(world, &jsTestPluginInterface->wrapped(), jsTestPluginInterface);
+}
+
+#if ENABLE(BINDING_INTEGRITY)
+#if PLATFORM(WIN)
+#pragma warning(disable: 4483)
+extern "C" { extern void (*const __identifier("??_7TestPluginInterface@WebCore@@6B@")[])(); }
+#else
+extern "C" { extern void* _ZTVN7WebCore19TestPluginInterfaceE[]; }
+#endif
+#endif
+
+JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject* globalObject, Ref<TestPluginInterface>&& impl)
+{
+
+#if ENABLE(BINDING_INTEGRITY)
+    void* actualVTablePointer = *(reinterpret_cast<void**>(impl.ptr()));
+#if PLATFORM(WIN)
+    void* expectedVTablePointer = reinterpret_cast<void*>(__identifier("??_7TestPluginInterface@WebCore@@6B@"));
+#else
+    void* expectedVTablePointer = &_ZTVN7WebCore19TestPluginInterfaceE[2];
+#endif
+
+    // If this fails TestPluginInterface does not have a vtable, so you need to add the
+    // ImplementationLacksVTable attribute to the interface definition
+    static_assert(std::is_polymorphic<TestPluginInterface>::value, "TestPluginInterface is not polymorphic");
+
+    // If you hit this assertion you either have a use after free bug, or
+    // TestPluginInterface has subclasses. If TestPluginInterface has subclasses that get passed
+    // to toJS() we currently require TestPluginInterface you to opt out of binding hardening
+    // by adding the SkipVTableValidation attribute to the interface IDL definition
+    RELEASE_ASSERT(actualVTablePointer == expectedVTablePointer);
+#endif
+    return createWrapper<TestPluginInterface>(globalObject, WTFMove(impl));
+}
+
+JSC::JSValue toJS(JSC::ExecState* state, JSDOMGlobalObject* globalObject, TestPluginInterface& impl)
+{
+    return wrap(state, globalObject, impl);
+}
+
+TestPluginInterface* JSTestPluginInterface::toWrapped(JSC::VM& vm, JSC::JSValue value)
+{
+    if (auto* wrapper = jsDynamicDowncast<JSTestPluginInterface*>(vm, value))
+        return &wrapper->wrapped();
+    return nullptr;
+}
+
+}

Copied: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPluginInterface.h (from rev 219301, trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h) (0 => 219302)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPluginInterface.h	                        (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestPluginInterface.h	2017-07-10 18:27:26 UTC (rev 219302)
@@ -0,0 +1,94 @@
+/*
+    This file is part of the WebKit open source project.
+    This file has been generated by generate-bindings.pl. DO NOT MODIFY!
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#pragma once
+
+#include "JSDOMWrapper.h"
+#include "TestPluginInterface.h"
+#include <runtime/CallData.h>
+#include <wtf/NeverDestroyed.h>
+
+namespace WebCore {
+
+class JSTestPluginInterface : public JSDOMWrapper<TestPluginInterface> {
+public:
+    using Base = JSDOMWrapper<TestPluginInterface>;
+    static JSTestPluginInterface* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref<TestPluginInterface>&& impl)
+    {
+        JSTestPluginInterface* ptr = new (NotNull, JSC::allocateCell<JSTestPluginInterface>(globalObject->vm().heap)) JSTestPluginInterface(structure, *globalObject, WTFMove(impl));
+        ptr->finishCreation(globalObject->vm());
+        return ptr;
+    }
+
+    static JSC::JSObject* createPrototype(JSC::VM&, JSDOMGlobalObject&);
+    static JSC::JSObject* prototype(JSC::VM&, JSDOMGlobalObject&);
+    static TestPluginInterface* toWrapped(JSC::VM&, JSC::JSValue);
+    static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&);
+    static bool getOwnPropertySlotByIndex(JSC::JSObject*, JSC::ExecState*, unsigned propertyName, JSC::PropertySlot&);
+    static bool put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&);
+    static bool putByIndex(JSC::JSCell*, JSC::ExecState*, unsigned propertyName, JSC::JSValue, bool shouldThrow);
+    static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&);
+
+    static void destroy(JSC::JSCell*);
+
+    DECLARE_INFO;
+
+    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
+    {
+        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
+    }
+
+    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
+public:
+    static const unsigned StructureFlags = JSC::InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero | JSC::OverridesGetOwnPropertySlot | JSC::TypeOfShouldCallGetCallData | Base::StructureFlags;
+protected:
+    JSTestPluginInterface(JSC::Structure*, JSDOMGlobalObject&, Ref<TestPluginInterface>&&);
+
+    void finishCreation(JSC::VM&);
+};
+
+class JSTestPluginInterfaceOwner : public JSC::WeakHandleOwner {
+public:
+    virtual bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown>, void* context, JSC::SlotVisitor&);
+    virtual void finalize(JSC::Handle<JSC::Unknown>, void* context);
+};
+
+inline JSC::WeakHandleOwner* wrapperOwner(DOMWrapperWorld&, TestPluginInterface*)
+{
+    static NeverDestroyed<JSTestPluginInterfaceOwner> owner;
+    return &owner.get();
+}
+
+inline void* wrapperKey(TestPluginInterface* wrappableObject)
+{
+    return wrappableObject;
+}
+
+JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, TestPluginInterface&);
+inline JSC::JSValue toJS(JSC::ExecState* state, JSDOMGlobalObject* globalObject, TestPluginInterface* impl) { return impl ? toJS(state, globalObject, *impl) : JSC::jsNull(); }
+JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject*, Ref<TestPluginInterface>&&);
+inline JSC::JSValue toJSNewlyCreated(JSC::ExecState* state, JSDOMGlobalObject* globalObject, RefPtr<TestPluginInterface>&& impl) { return impl ? toJSNewlyCreated(state, globalObject, impl.releaseNonNull()) : JSC::jsNull(); }
+
+template<> struct JSDOMWrapperConverterTraits<TestPluginInterface> {
+    using WrapperClass = JSTestPluginInterface;
+    using ToWrappedReturnType = TestPluginInterface*;
+};
+
+} // namespace WebCore

Modified: trunk/Source/WebCore/bindings/scripts/test/TestInterface.idl (219301 => 219302)


--- trunk/Source/WebCore/bindings/scripts/test/TestInterface.idl	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/bindings/scripts/test/TestInterface.idl	2017-07-10 18:27:26 UTC (rev 219302)
@@ -30,7 +30,7 @@
 // changes in its output.
 [
     ActiveDOMObject,
-    CustomNamedSetter,
+    CustomPut,
     Conditional=Condition1|Condition2,
     ConstructorCallWith=ScriptExecutionContext,
     Constructor(DOMString str1, optional DOMString str2 = "defaultString"),

Added: trunk/Source/WebCore/bindings/scripts/test/TestPluginInterface.idl (0 => 219302)


--- trunk/Source/WebCore/bindings/scripts/test/TestPluginInterface.idl	                        (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/TestPluginInterface.idl	2017-07-10 18:27:26 UTC (rev 219302)
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 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
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+[
+    Plugin
+] interface TestPluginInterface {
+};

Modified: trunk/Source/WebCore/css/CSSStyleDeclaration.idl (219301 => 219302)


--- trunk/Source/WebCore/css/CSSStyleDeclaration.idl	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/css/CSSStyleDeclaration.idl	2017-07-10 18:27:26 UTC (rev 219302)
@@ -19,9 +19,9 @@
  */
 
 [
-    CustomEnumerateProperty,
+    CustomGetOwnPropertyNames,
     CustomGetOwnPropertySlotAndDescriptor,
-    CustomNamedSetter,
+    CustomPut,
     ExportMacro=WEBCORE_EXPORT,
     GenerateIsReachable,
     JSCustomHeader,

Modified: trunk/Source/WebCore/html/HTMLAppletElement.idl (219301 => 219302)


--- trunk/Source/WebCore/html/HTMLAppletElement.idl	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/html/HTMLAppletElement.idl	2017-07-10 18:27:26 UTC (rev 219302)
@@ -19,9 +19,7 @@
  */
 
 [
-    CustomCall,
-    CustomGetOwnPropertySlotAndDescriptor,
-    CustomNamedSetter,
+    Plugin
 ] interface HTMLAppletElement : HTMLElement {
     [Reflect] attribute DOMString align;
     [Reflect] attribute DOMString alt;

Modified: trunk/Source/WebCore/html/HTMLEmbedElement.idl (219301 => 219302)


--- trunk/Source/WebCore/html/HTMLEmbedElement.idl	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/html/HTMLEmbedElement.idl	2017-07-10 18:27:26 UTC (rev 219302)
@@ -19,9 +19,7 @@
  */
 
 [
-    CustomCall,
-    CustomGetOwnPropertySlotAndDescriptor,
-    CustomNamedSetter,
+    Plugin
 ] interface HTMLEmbedElement : HTMLElement {
     [Reflect] attribute DOMString align;
     [Reflect] attribute DOMString height;

Modified: trunk/Source/WebCore/html/HTMLObjectElement.idl (219301 => 219302)


--- trunk/Source/WebCore/html/HTMLObjectElement.idl	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/html/HTMLObjectElement.idl	2017-07-10 18:27:26 UTC (rev 219302)
@@ -19,9 +19,7 @@
  */
 
 [
-    CustomCall,
-    CustomGetOwnPropertySlotAndDescriptor,
-    CustomNamedSetter
+    Plugin
 ] interface HTMLObjectElement : HTMLElement {
     readonly attribute HTMLFormElement form;
     [Reflect] attribute DOMString code;

Modified: trunk/Source/WebCore/page/DOMWindow.idl (219301 => 219302)


--- trunk/Source/WebCore/page/DOMWindow.idl	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/page/DOMWindow.idl	2017-07-10 18:27:26 UTC (rev 219302)
@@ -30,13 +30,12 @@
     CheckSecurity,
     CustomDefineOwnProperty,
     CustomDeleteProperty,
-    CustomEnumerateProperty,
+    CustomGetOwnPropertyNames,
     CustomGetOwnPropertySlot,
-    CustomGetOwnPropertySlotByIndex,
     CustomGetPrototype,
     CustomPreventExtensions,
     CustomProxyToJSObject,
-    CustomPutFunction,
+    CustomPut,
     CustomToStringName,
     ExportMacro=WEBCORE_EXPORT,
     ImplicitThis,

Modified: trunk/Source/WebCore/page/Location.idl (219301 => 219302)


--- trunk/Source/WebCore/page/Location.idl	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/page/Location.idl	2017-07-10 18:27:26 UTC (rev 219302)
@@ -31,16 +31,16 @@
     CustomDefineOwnProperty,
     CustomDefineOwnPropertyOnPrototype,
     CustomDeleteProperty,
-    CustomEnumerateProperty,
-    CustomGetOwnPropertySlotAndDescriptor,
+    CustomGetOwnPropertyNames,
+    CustomGetOwnPropertySlot,
     CustomGetPrototype,
-    CustomNamedGetterOnPrototype,
-    CustomNamedSetter,
     CustomPreventExtensions,
+    CustomPut,
+    CustomPutOnPrototype,
     CustomToStringName,
     GenerateIsReachable=ImplFrame,
     IsImmutablePrototypeExoticObject,
-    Unforgeable,
+    Unforgeable
 ] interface Location {
     [SetterCallWith=ActiveWindow&FirstWindow, SetterMayThrowException, DoNotCheckSecurityOnSetter] stringifier attribute USVString href;
 

Modified: trunk/Source/WebCore/storage/Storage.idl (219301 => 219302)


--- trunk/Source/WebCore/storage/Storage.idl	2017-07-10 18:24:26 UTC (rev 219301)
+++ trunk/Source/WebCore/storage/Storage.idl	2017-07-10 18:27:26 UTC (rev 219302)
@@ -24,7 +24,7 @@
  */
 
 [
-    CustomEnumerateProperty,
+    CustomGetOwnPropertyNames,
     GenerateIsReachable=ImplFrame,
     SkipVTableValidation,
 ] interface Storage {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to