WebKit Bugzilla
Attachment 338865 Details for
Bug 183442
: WebAssembly: add support for stream APIs - JavaScript API
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-183442-20180426115314.patch (text/plain), 103.61 KB, created by
GSkachkov
on 2018-04-26 01:53:17 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
GSkachkov
Created:
2018-04-26 01:53:17 PDT
Size:
103.61 KB
patch
obsolete
>Subversion Revision: 231042 >diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog >index 65a52c14faa9d34e530c7530fe8b09f3f093239e..862a80b7a4f73b10938be8ac272d611f01022ac9 100644 >--- a/Source/JavaScriptCore/ChangeLog >+++ b/Source/JavaScriptCore/ChangeLog >@@ -1,3 +1,77 @@ >+2018-04-24 Oleksandr Skachkov <gskachkov@gmail.com> >+ >+ WebAssembly: add support for stream APIs - JavaScript API >+ https://bugs.webkit.org/show_bug.cgi?id=183442 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Add WebAssembly stream API. Current patch only add functions >+ WebAssembly.compileStreaming and WebAssembly.instantiateStreaming but, >+ does not add streaming way of the implementation. So in current version it >+ only wait for load whole module, than start to parse. >+ >+ * JavaScriptCore.xcodeproj/project.pbxproj: >+ * jsc.cpp: >+ * runtime/JSGlobalObject.cpp: >+ * runtime/JSGlobalObject.h: >+ * wasm/js/WebAssemblyPrototype.cpp: >+ (JSC::WebAssemblyPrototype::webAssemblyModuleValidateAsyncInternal): >+ (JSC::webAssemblyCompileFunc): >+ (JSC::WebAssemblyPrototype::webAssemblyModuleValidateAsync): >+ (JSC::WebAssemblyPrototype::webAssemblyModuleInstantinateAsync): >+ (JSC::WebAssemblyPrototype::webAssemblyModuleInstantinateAsyncInternal): >+ (JSC::webAssemblyCompileStreamingFunc): >+ (JSC::webAssemblyInstantiateStreamingFunc): >+ * wasm/js/WebAssemblyPrototype.h: >+ >+ * DerivedSources.make: >+ * JavaScriptCore.xcodeproj/project.pbxproj: >+ * builtins/BuiltinNames.h: >+ * builtins/WebAssemblyPrototype.js: Copied from Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.h. >+ (compileStreaming): >+ (instantiateStreaming): >+ * jsc.cpp: >+ * runtime/JSGlobalObject.cpp: >+ (JSC::JSGlobalObject::init): >+ * runtime/JSGlobalObject.h: >+ * runtime/Options.h: >+ * wasm/js/WebAssemblyPrototype.cpp: >+ (JSC::webAssemblyModuleValidateAsyncInternal): >+ (JSC::webAssemblyCompileFunc): >+ (JSC::WebAssemblyPrototype::webAssemblyModuleValidateAsync): >+ (JSC::webAssemblyModuleInstantinateAsyncInternal): >+ (JSC::WebAssemblyPrototype::webAssemblyModuleInstantinateAsync): >+ (JSC::webAssemblyCompileStreamingInternal): >+ (JSC::webAssemblyInstantiateStreamingInternal): >+ (JSC::WebAssemblyPrototype::create): >+ (JSC::WebAssemblyPrototype::finishCreation): >+ * wasm/js/WebAssemblyPrototype.h: >+ >+ * CMakeLists.txt: >+ * Configurations/FeatureDefines.xcconfig: >+ * DerivedSources.make: >+ * JavaScriptCore.xcodeproj/project.pbxproj: >+ * builtins/BuiltinNames.h: >+ * builtins/WebAssemblyPrototype.js: Copied from Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.h. >+ (compileStreaming): >+ (instantiateStreaming): >+ * jsc.cpp: >+ * runtime/JSGlobalObject.cpp: >+ (JSC::JSGlobalObject::init): >+ * runtime/JSGlobalObject.h: >+ * runtime/Options.h: >+ * wasm/js/WebAssemblyPrototype.cpp: >+ (JSC::webAssemblyModuleValidateAsyncInternal): >+ (JSC::webAssemblyCompileFunc): >+ (JSC::WebAssemblyPrototype::webAssemblyModuleValidateAsync): >+ (JSC::webAssemblyModuleInstantinateAsyncInternal): >+ (JSC::WebAssemblyPrototype::webAssemblyModuleInstantinateAsync): >+ (JSC::webAssemblyCompileStreamingInternal): >+ (JSC::webAssemblyInstantiateStreamingInternal): >+ (JSC::WebAssemblyPrototype::create): >+ (JSC::WebAssemblyPrototype::finishCreation): >+ * wasm/js/WebAssemblyPrototype.h: >+ > 2018-04-25 Robin Morisset <rmorisset@apple.com> > > In FTLLowerDFGToB3.cpp::compileCreateRest, always use a contiguous array as the indexing type when under isWatchingHavingABadTimeWatchpoint >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index b60aae27e92f030c34b1f0fd312ab72ac15172b1..7d8e44672be806e8eeba556172281859b029f0e6 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,24 @@ >+2018-04-24 Oleksandr Skachkov <gskachkov@gmail.com> >+ >+ WebAssembly: add support for stream APIs - JavaScript API >+ https://bugs.webkit.org/show_bug.cgi?id=183442 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Add WebAssembly streaming API to WebCore. >+ >+ * Configurations/FeatureDefines.xcconfig: >+ * bindings/js/JSDOMWindowBase.cpp: >+ (WebCore::tryAllocate): >+ (WebCore::isResponseCorrect): >+ (WebCore::JSDOMWindowBase::compileStreaming): >+ (WebCore::JSDOMWindowBase::instantiateStreaming): >+ (WebCore::JSDOMWindowBase::handleStreamingAction): >+ (WebCore::JSDOMWindowBase::handleResponseOnStreamingAction): >+ * bindings/js/JSDOMWindowBase.h: >+ * bindings/js/JSRemoteDOMWindowBase.cpp: >+ * bindings/js/JSWorkerGlobalScopeBase.cpp: >+ > 2018-04-25 Michael Catanzaro <mcatanzaro@igalia.com> > > [WPE] Build and link against latest WPEBackend and WPEBackend-fdo >diff --git a/Source/WebCore/PAL/ChangeLog b/Source/WebCore/PAL/ChangeLog >index aa61cb53eab1d9393b45c79e8830a51102cc48d3..89eda3a1c636f3d73023ce78e17220cfea19e715 100644 >--- a/Source/WebCore/PAL/ChangeLog >+++ b/Source/WebCore/PAL/ChangeLog >@@ -1,3 +1,14 @@ >+2018-04-24 Oleksandr Skachkov <gskachkov@gmail.com> >+ >+ WebAssembly: add support for stream APIs - JavaScript API >+ https://bugs.webkit.org/show_bug.cgi?id=183442 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Add WEBASSEMBLY_STREAMING_API feature flag >+ >+ * Configurations/FeatureDefines.xcconfig: >+ > 2018-04-24 Jer Noble <jer.noble@apple.com> > > Don't add system framework paths to FRAMEWORK_SEARCH_PATHS >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 7d22fdb5216ed102a37b6f0223e44074af6d8b9e..de3f1fcdb3fb9acf66cef59f086e7dc3973bc0a0 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,14 @@ >+2018-04-24 Oleksandr Skachkov <gskachkov@gmail.com> >+ >+ WebAssembly: add support for stream APIs - JavaScript API >+ https://bugs.webkit.org/show_bug.cgi?id=183442 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Add WEBASSEMBLY_STREAMING_API feature flag >+ >+ * Configurations/FeatureDefines.xcconfig: >+ > 2018-04-25 Michael Catanzaro <mcatanzaro@igalia.com> > > [WPE] Build and link against latest WPEBackend and WPEBackend-fdo >diff --git a/Source/WebKitLegacy/mac/ChangeLog b/Source/WebKitLegacy/mac/ChangeLog >index 07d48cd31952d9d65ee10aad21649c57b66d5bf3..e8ec946c1bbf7b825c0fdfe8005d8d4a9ab024ee 100644 >--- a/Source/WebKitLegacy/mac/ChangeLog >+++ b/Source/WebKitLegacy/mac/ChangeLog >@@ -1,3 +1,14 @@ >+2018-04-24 Oleksandr Skachkov <gskachkov@gmail.com> >+ >+ WebAssembly: add support for stream APIs - JavaScript API >+ https://bugs.webkit.org/show_bug.cgi?id=183442 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Add WEBASSEMBLY_STREAMINNG_API feature flag >+ >+ * Configurations/FeatureDefines.xcconfig: >+ > 2018-04-25 Jiewen Tan <jiewen_tan@apple.com> > > Remove access to keychain from the WebContent process >diff --git a/Source/JavaScriptCore/CMakeLists.txt b/Source/JavaScriptCore/CMakeLists.txt >index ead6ddcfd64041885b91def61fe009cfe3615017..ed2e4e0ef65bcd732c45c997b40b7100f228cde8 100644 >--- a/Source/JavaScriptCore/CMakeLists.txt >+++ b/Source/JavaScriptCore/CMakeLists.txt >@@ -927,6 +927,8 @@ set(JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS > wasm/WasmTierUpCount.h > > wasm/js/JSWebAssemblyModule.h >+ wasm/js/WebAssemblyPrototype.h >+ > > yarr/RegularExpression.h > yarr/Yarr.h >@@ -1119,6 +1121,7 @@ set(JavaScriptCore_BUILTINS_SOURCES > ${JAVASCRIPTCORE_DIR}/builtins/StringPrototype.js > ${JAVASCRIPTCORE_DIR}/builtins/TypedArrayConstructor.js > ${JAVASCRIPTCORE_DIR}/builtins/TypedArrayPrototype.js >+ ${JAVASCRIPTCORE_DIR}/builtins/WebAssemblyPrototype.js > ) > > add_custom_command( >diff --git a/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig b/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig >index 37a63748fc031816d4969fe2490edf6c8657493d..576b7e41b34fdc5fdaabcaeb9701f19c724cecdd 100644 >--- a/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig >+++ b/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig >@@ -354,6 +354,8 @@ ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN_macosx = ENABLE_VIDEO_USES_ELEMENT_FULLSCRE > > ENABLE_WEBASSEMBLY = ; > >+ENABLE_WEBASSEMBLY_STREAMING_API = ENABLE_WEBASSEMBLY_STREAMING_API; >+ > ENABLE_WEBGL = ENABLE_WEBGL; > > ENABLE_WEBGL2 = ENABLE_WEBGL2; >@@ -380,4 +382,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXTRA_ZOOM_MODE) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MINIMAL_SIMULATOR) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXTRA_ZOOM_MODE) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MINIMAL_SIMULATOR) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >diff --git a/Source/JavaScriptCore/DerivedSources.make b/Source/JavaScriptCore/DerivedSources.make >index 8295690c7c5b7429da6f15cf1e76b32b359b5221..358f18f15a7595081fb7a7ed9f13f37564ec7bf0 100644 >--- a/Source/JavaScriptCore/DerivedSources.make >+++ b/Source/JavaScriptCore/DerivedSources.make >@@ -124,6 +124,7 @@ JavaScriptCore_BUILTINS_SOURCES = \ > $(JavaScriptCore)/builtins/StringPrototype.js \ > $(JavaScriptCore)/builtins/TypedArrayConstructor.js \ > $(JavaScriptCore)/builtins/TypedArrayPrototype.js \ >+ $(JavaScriptCore)/builtins/WebAssemblyPrototype.js \ > # > > # The combined output file depends on the contents of builtins and generator scripts, so >diff --git a/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj b/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj >index 383a06b7af5de5f8831d247ba64d1e8d85859aa0..235a37467f267f471109f9fd459ecb6f159284eb 100644 >--- a/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj >+++ b/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj >@@ -1500,7 +1500,7 @@ > AD2FCC1F1DB59CB200B3E736 /* WebAssemblyRuntimeErrorPrototype.lut.h in Headers */ = {isa = PBXBuildFile; fileRef = AD2FCC131DB59C5900B3E736 /* WebAssemblyRuntimeErrorPrototype.lut.h */; }; > AD2FCC201DB59CB200B3E736 /* WebAssemblyTableConstructor.lut.h in Headers */ = {isa = PBXBuildFile; fileRef = AD2FCC141DB59C5900B3E736 /* WebAssemblyTableConstructor.lut.h */; }; > AD2FCC211DB59CB200B3E736 /* WebAssemblyTablePrototype.lut.h in Headers */ = {isa = PBXBuildFile; fileRef = AD2FCC151DB59C5900B3E736 /* WebAssemblyTablePrototype.lut.h */; }; >- AD2FCC2D1DB838FD00B3E736 /* WebAssemblyPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = AD2FCC271DB838C400B3E736 /* WebAssemblyPrototype.h */; }; >+ AD2FCC2D1DB838FD00B3E736 /* WebAssemblyPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = AD2FCC271DB838C400B3E736 /* WebAssemblyPrototype.h */; settings = {ATTRIBUTES = (Private, ); }; }; > AD412B341E7B2E9E008AF157 /* WasmContext.h in Headers */ = {isa = PBXBuildFile; fileRef = AD412B321E7B2E8A008AF157 /* WasmContext.h */; settings = {ATTRIBUTES = (Private, ); }; }; > AD4252511E5D0E14009D2A97 /* FullCodeOrigin.h in Headers */ = {isa = PBXBuildFile; fileRef = AD4252501E5D0DEB009D2A97 /* FullCodeOrigin.h */; }; > AD4937C41DDBE6140077C807 /* AbstractModuleRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = AD4937C21DDBE60A0077C807 /* AbstractModuleRecord.h */; settings = {ATTRIBUTES = (Private, ); }; }; >@@ -3793,6 +3793,7 @@ > 8B3BF5E31E3D365A0076A87A /* AsyncGeneratorPrototype.lut.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsyncGeneratorPrototype.lut.h; sourceTree = "<group>"; }; > 8B6016F31F3E3CC000F9DE6A /* AsyncFromSyncIteratorPrototype.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AsyncFromSyncIteratorPrototype.cpp; sourceTree = "<group>"; }; > 8B6016F41F3E3CC000F9DE6A /* AsyncFromSyncIteratorPrototype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsyncFromSyncIteratorPrototype.h; sourceTree = "<group>"; }; >+ 8B89612C20868584005DD39B /* WebAssemblyPrototype.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = WebAssemblyPrototype.js; sourceTree = "<group>"; }; > 8B9F6D551D5912FA001C739F /* IterationKind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IterationKind.h; sourceTree = "<group>"; }; > 8BC064821E180B4A00B2B8CA /* AsyncGeneratorPrototype.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = AsyncGeneratorPrototype.js; sourceTree = "<group>"; }; > 8BC064831E1A4FD000B2B8CA /* AsyncGeneratorFunctionConstructor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AsyncGeneratorFunctionConstructor.cpp; sourceTree = "<group>"; }; >@@ -6658,6 +6659,7 @@ > 865A30F0135007E100CDB49E /* JSCJSValueInlines.h */, > FE2B0B681FD0D2970075DA5F /* JSCPoison.cpp */, > FE2B0B701FD8C4630075DA5F /* JSCPoison.h */, >+ FE7497E5209001B00003565B /* JSCPtrTag.h */, > 72AAF7CB1D0D318B005E60BE /* JSCustomGetterSetterFunction.cpp */, > 72AAF7CC1D0D318B005E60BE /* JSCustomGetterSetterFunction.h */, > 0F2B66BD17B6B5AB00A7AE3F /* JSDataView.cpp */, >@@ -6743,7 +6745,6 @@ > 2A05ABD41961DF2400341750 /* JSPropertyNameEnumerator.h */, > 862553CE16136AA5009F17D0 /* JSProxy.cpp */, > 862553CF16136AA5009F17D0 /* JSProxy.h */, >- FE7497E5209001B00003565B /* JSCPtrTag.h */, > 534638721E70D01500F12AC1 /* JSRunLoopTimer.cpp */, > 534638701E70CF3D00F12AC1 /* JSRunLoopTimer.h */, > 14874AE115EBDE4A002E3587 /* JSScope.cpp */, >@@ -7942,6 +7943,7 @@ > A1E0451B1C25B4B100BB663C /* StringPrototype.js */, > 534C457A1BC703DC007476A7 /* TypedArrayConstructor.js */, > 53917E831B791CB8000EBD33 /* TypedArrayPrototype.js */, >+ 8B89612C20868584005DD39B /* WebAssemblyPrototype.js */, > ); > path = builtins; > sourceTree = "<group>"; >@@ -8914,6 +8916,7 @@ > 0FB467801FDDA6F1003FCB09 /* IsoCellSet.h in Headers */, > 0FB467811FDDA6F7003FCB09 /* IsoCellSetInlines.h in Headers */, > 0FDCE12D1FAFB4E5006F3901 /* IsoSubspace.h in Headers */, >+ 0F5E0FE72086AD480097F0DE /* IsoSubspacePerVM.h in Headers */, > 8B9F6D561D5912FA001C739F /* IterationKind.h in Headers */, > FE4D55B81AE716CA0052E459 /* IterationStatus.h in Headers */, > 70113D4C1A8DB093003848C4 /* IteratorOperations.h in Headers */, >@@ -8987,6 +8990,7 @@ > A5D2E665195E174000A518E7 /* JSContextRefInternal.h in Headers */, > 148CD1D8108CF902008163C6 /* JSContextRefPrivate.h in Headers */, > FE2B0B731FD9EF700075DA5F /* JSCPoison.h in Headers */, >+ FE7497E6209001B10003565B /* JSCPtrTag.h in Headers */, > A72028B81797601E0098028C /* JSCTestRunnerUtils.h in Headers */, > 72AAF7CE1D0D31B3005E60BE /* JSCustomGetterSetterFunction.h in Headers */, > 0F2B66EC17B6B5AB00A7AE3F /* JSDataView.h in Headers */, >@@ -9061,7 +9065,6 @@ > 7C008CDB187124BB00955C24 /* JSPromiseDeferred.h in Headers */, > 7C184E1F17BEE22E007CB63A /* JSPromisePrototype.h in Headers */, > 996B731F1BDA08EF00331B84 /* JSPromisePrototype.lut.h in Headers */, >- FE7497E6209001B10003565B /* JSCPtrTag.h in Headers */, > 2A05ABD61961DF2400341750 /* JSPropertyNameEnumerator.h in Headers */, > 862553D216136E1A009F17D0 /* JSProxy.h in Headers */, > A552C3801ADDB8FE00139726 /* JSRemoteInspector.h in Headers */, >@@ -9490,7 +9493,6 @@ > 53F8D2001E8387D400D21116 /* WasmBBQPlanInlines.h in Headers */, > AD4B1DFA1DF244E20071AE32 /* WasmBinding.h in Headers */, > 525C0DDA1E935847002184CD /* WasmCallee.h in Headers */, >- 0F5E0FE72086AD480097F0DE /* IsoSubspacePerVM.h in Headers */, > 53FD04D41D7AB291003287D3 /* WasmCallingConvention.h in Headers */, > 526AC4B71E977C5D003500E1 /* WasmCodeBlock.h in Headers */, > AD412B341E7B2E9E008AF157 /* WasmContext.h in Headers */, >diff --git a/Source/JavaScriptCore/builtins/BuiltinNames.h b/Source/JavaScriptCore/builtins/BuiltinNames.h >index 198fd1c85c383dd32eb609c125922c2c2e70829c..e522a1e1b8f29c532a9c608202c5c139b452d3ca 100644 >--- a/Source/JavaScriptCore/builtins/BuiltinNames.h >+++ b/Source/JavaScriptCore/builtins/BuiltinNames.h >@@ -189,6 +189,8 @@ namespace JSC { > macro(LinkError) \ > macro(RuntimeError) \ > macro(meta) \ >+ macro(webAssemblyCompileStreamingInternal) \ >+ macro(webAssemblyInstantiateStreamingInternal) \ > > namespace Symbols { > #define DECLARE_BUILTIN_STATIC_SYMBOLS(name) extern SymbolImpl::StaticSymbolImpl name##Symbol; >diff --git a/Source/JavaScriptCore/builtins/WebAssemblyPrototype.js b/Source/JavaScriptCore/builtins/WebAssemblyPrototype.js >new file mode 100644 >index 0000000000000000000000000000000000000000..9cc5411a00404fd217d3228d0c8a920eb870887f >--- /dev/null >+++ b/Source/JavaScriptCore/builtins/WebAssemblyPrototype.js >@@ -0,0 +1,33 @@ >+/* >+ * Copyright (C) 2018 Oleksandr Skachkov <gskachkov@gmail.com>. >+ * >+ * 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. >+ */ >+ >+function compileStreaming(argument) { >+ return @Promise.@resolve(argument).@then(@webAssemblyCompileStreamingInternal); >+} >+ >+function instantiateStreaming(argument) { >+ return @Promise.@resolve(argument).@then(@webAssemblyInstantiateStreamingInternal); >+} >+ >diff --git a/Source/JavaScriptCore/jsc.cpp b/Source/JavaScriptCore/jsc.cpp >index 4a73e87e96e0bffd8ce1a971928f385f67f2067e..3b1724848352f4248c94cc078667197d2f8523ad 100644 >--- a/Source/JavaScriptCore/jsc.cpp >+++ b/Source/JavaScriptCore/jsc.cpp >@@ -642,6 +642,8 @@ const GlobalObjectMethodTable GlobalObject::s_globalObjectMethodTable = { > nullptr, // moduleLoaderEvaluate > nullptr, // promiseRejectionTracker > nullptr, // defaultLanguage >+ nullptr, // compileStreaming >+ nullptr, // instantinateStreaming > }; > > GlobalObject::GlobalObject(VM& vm, Structure* structure) >diff --git a/Source/JavaScriptCore/runtime/JSGlobalObject.cpp b/Source/JavaScriptCore/runtime/JSGlobalObject.cpp >index d4674c019d864804f4c66685da9df965fd1ed9c7..1f826e303a3e8d2b124a5895516bf317633e08e1 100644 >--- a/Source/JavaScriptCore/runtime/JSGlobalObject.cpp >+++ b/Source/JavaScriptCore/runtime/JSGlobalObject.cpp >@@ -169,6 +169,7 @@ > #include "WeakMapPrototype.h" > #include "WeakSetConstructor.h" > #include "WeakSetPrototype.h" >+#include "WebAssemblyPrototype.h" > #include "WebAssemblyToJSCallee.h" > #include <wtf/RandomNumber.h> > >@@ -286,6 +287,8 @@ const GlobalObjectMethodTable JSGlobalObject::s_globalObjectMethodTable = { > nullptr, // moduleLoaderEvaluate > nullptr, // promiseRejectionTracker > nullptr, // defaultLanguage >+ nullptr, // compileStreaming >+ nullptr, // instantiateStreaming > }; > > /* Source for JSGlobalObject.lut.h >@@ -938,6 +941,10 @@ putDirectWithoutTransition(vm, vm.propertyNames-> jsName, lowerName ## Construct > GlobalPropertyInfo(vm.propertyNames->builtinNames().setBucketHeadPrivateName(), privateFuncSetBucketHead, PropertyAttribute::DontEnum | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly), > GlobalPropertyInfo(vm.propertyNames->builtinNames().setBucketNextPrivateName(), privateFuncSetBucketNext, PropertyAttribute::DontEnum | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly), > GlobalPropertyInfo(vm.propertyNames->builtinNames().setBucketKeyPrivateName(), privateFuncSetBucketKey, PropertyAttribute::DontEnum | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly), >+ >+ // WebAssembly Streaming API >+ GlobalPropertyInfo(vm.propertyNames->builtinNames().webAssemblyCompileStreamingInternalPrivateName(), JSFunction::create(vm, this, 1, String(), webAssemblyCompileStreamingInternal), PropertyAttribute::DontEnum | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly), >+ GlobalPropertyInfo(vm.propertyNames->builtinNames().webAssemblyInstantiateStreamingInternalPrivateName(), JSFunction::create(vm, this, 1, String(), webAssemblyInstantiateStreamingInternal), PropertyAttribute::DontEnum | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly), > #if !ASSERT_DISABLED > GlobalPropertyInfo(vm.propertyNames->builtinNames().assertPrivateName(), JSFunction::create(vm, this, 1, String(), assertCall), PropertyAttribute::DontEnum | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly), > #endif >diff --git a/Source/JavaScriptCore/runtime/JSGlobalObject.h b/Source/JavaScriptCore/runtime/JSGlobalObject.h >index 7ad0f74ba26d3689d294a8afdff48ade0540b4dd..36cf09cf33d388c7820bbd31775f4ee98c6d68ca 100644 >--- a/Source/JavaScriptCore/runtime/JSGlobalObject.h >+++ b/Source/JavaScriptCore/runtime/JSGlobalObject.h >@@ -32,6 +32,7 @@ > #include "JSCPoison.h" > #include "JSClassRef.h" > #include "JSGlobalLexicalEnvironment.h" >+#include "JSPromiseDeferred.h" > #include "JSSegmentedVariableObject.h" > #include "JSWeakObjectMapRefInternal.h" > #include "LazyProperty.h" >@@ -217,6 +218,12 @@ struct GlobalObjectMethodTable { > > typedef String (*DefaultLanguageFunctionPtr)(); > DefaultLanguageFunctionPtr defaultLanguage; >+ >+ typedef void (*CompileStreamingPtr)(JSGlobalObject*, ExecState*, JSPromiseDeferred*, JSValue); >+ CompileStreamingPtr compileStreaming; >+ >+ typedef void (*InstantiateStreamingPtr)(JSGlobalObject*, ExecState*, JSPromiseDeferred*, JSValue, JSObject*); >+ InstantiateStreamingPtr instantiateStreaming; > }; > > class JSGlobalObject : public JSSegmentedVariableObject { >diff --git a/Source/JavaScriptCore/runtime/Options.h b/Source/JavaScriptCore/runtime/Options.h >index b3f4f2e0184d39420889183e4b31ae47a5cf7191..cbd3b2929d817f2424c1a8d4039ffc2e8fe66b50 100644 >--- a/Source/JavaScriptCore/runtime/Options.h >+++ b/Source/JavaScriptCore/runtime/Options.h >@@ -112,6 +112,12 @@ constexpr bool enableAsyncIteration = true; > constexpr bool enableAsyncIteration = false; > #endif > >+#if ENABLE(WEBASSEMBLY_STREAMING_API) >+constexpr bool enableWebAssemblyStreamingApi = true; >+#else >+constexpr bool enableWebAssemblyStreamingApi = false; >+#endif >+ > #define JSC_OPTIONS(v) \ > v(bool, validateOptions, false, Normal, "crashes if mis-typed JSC options were passed to the VM") \ > v(unsigned, dumpOptions, 0, Normal, "dumps JSC options (0 = None, 1 = Overridden only, 2 = All, 3 = Verbose)") \ >@@ -484,6 +490,7 @@ constexpr bool enableAsyncIteration = false; > v(bool, crashIfWebAssemblyCantFastMemory, false, Normal, "If true, we will crash if we can't obtain fast memory for wasm.") \ > v(unsigned, maxNumWebAssemblyFastMemories, 4, Normal, nullptr) \ > v(bool, useFastTLSForWasmContext, true, Normal, "If true, we will store context in fast TLS. If false, we will pin it to a register.") \ >+ v(bool, useWebAssemblyStreamingApi, true, Normal, "Allow to run WebAssembly's Streaming API") \ > v(bool, useCallICsForWebAssemblyToJSCalls, true, Normal, "If true, we will use CallLinkInfo to inline cache Wasm to JS calls.") \ > v(bool, useEagerWebAssemblyModuleHashing, false, Normal, "Unnamed WebAssembly modules are identified in backtraces through their hash, if available.") \ > v(bool, useObjectRestSpread, true, Normal, "If true, we will enable Object Rest/Spread feature.") \ >@@ -530,6 +537,7 @@ enum OptionEquivalence { > v(enableDollarVM, useDollarVM, SameOption) \ > v(enableWebAssembly, useWebAssembly, SameOption) \ > v(enableAsyncIterator, useAsyncIterator, SameOption) \ >+ v(enableWebAssemblyStreamingApi, useWebAssemblyStreamingApi, SameOption) \ > v(verboseDFGByteCodeParsing, verboseDFGBytecodeParsing, SameOption) \ > > >diff --git a/Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.cpp b/Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.cpp >index c7ad0e3ddca8d64449af159171afcb86a380ea69..fde2506be921af90a2117a940292350b215ffa21 100644 >--- a/Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.cpp >+++ b/Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.cpp >@@ -31,6 +31,7 @@ > #include "CatchScope.h" > #include "Exception.h" > #include "FunctionPrototype.h" >+#include "JSCBuiltins.h" > #include "JSCInlines.h" > #include "JSModuleNamespaceObject.h" > #include "JSPromiseDeferred.h" >@@ -39,6 +40,7 @@ > #include "JSWebAssemblyInstance.h" > #include "JSWebAssemblyModule.h" > #include "ObjectConstructor.h" >+#include "Options.h" > #include "PromiseDeferredTimer.h" > #include "StrongInlines.h" > #include "ThrowScope.h" >@@ -80,6 +82,32 @@ static void reject(ExecState* exec, CatchScope& catchScope, JSPromiseDeferred* p > CLEAR_AND_RETURN_IF_EXCEPTION(catchScope, void()); > } > >+static void webAssemblyModuleValidateAsyncInternal(ExecState* exec, JSPromiseDeferred* promise, Vector<uint8_t>&& source) >+{ >+ VM& vm = exec->vm(); >+ auto* globalObject = exec->lexicalGlobalObject(); >+ >+ Vector<Strong<JSCell>> dependencies; >+ dependencies.append(Strong<JSCell>(vm, globalObject)); >+ >+ vm.promiseDeferredTimer->addPendingPromise(promise, WTFMove(dependencies)); >+ >+ Wasm::Module::validateAsync(&vm.wasmContext, WTFMove(source), createSharedTask<Wasm::Module::CallbackType>([promise, globalObject, &vm] (Wasm::Module::ValidationResult&& result) mutable { >+ vm.promiseDeferredTimer->scheduleWorkSoon(promise, [promise, globalObject, result = WTFMove(result), &vm] () mutable { >+ auto scope = DECLARE_CATCH_SCOPE(vm); >+ ExecState* exec = globalObject->globalExec(); >+ JSValue module = JSWebAssemblyModule::createStub(vm, exec, globalObject->WebAssemblyModuleStructure(), WTFMove(result)); >+ if (UNLIKELY(scope.exception())) { >+ reject(exec, scope, promise); >+ return; >+ } >+ >+ promise->resolve(exec, module); >+ CLEAR_AND_RETURN_IF_EXCEPTION(scope, void()); >+ }); >+ })); >+} >+ > static EncodedJSValue JSC_HOST_CALL webAssemblyCompileFunc(ExecState* exec) > { > VM& vm = exec->vm(); >@@ -91,31 +119,12 @@ static EncodedJSValue JSC_HOST_CALL webAssemblyCompileFunc(ExecState* exec) > > { > auto catchScope = DECLARE_CATCH_SCOPE(vm); >- >- Vector<Strong<JSCell>> dependencies; >- dependencies.append(Strong<JSCell>(vm, globalObject)); >- vm.promiseDeferredTimer->addPendingPromise(promise, WTFMove(dependencies)); >- > Vector<uint8_t> source = createSourceBufferFromValue(vm, exec, exec->argument(0)); > > if (UNLIKELY(catchScope.exception())) > reject(exec, catchScope, promise); >- else { >- Wasm::Module::validateAsync(&vm.wasmContext, WTFMove(source), createSharedTask<Wasm::Module::CallbackType>([promise, globalObject, &vm] (Wasm::Module::ValidationResult&& result) mutable { >- vm.promiseDeferredTimer->scheduleWorkSoon(promise, [promise, globalObject, result = WTFMove(result), &vm] () mutable { >- auto scope = DECLARE_CATCH_SCOPE(vm); >- ExecState* exec = globalObject->globalExec(); >- JSValue module = JSWebAssemblyModule::createStub(vm, exec, globalObject->WebAssemblyModuleStructure(), WTFMove(result)); >- if (UNLIKELY(scope.exception())) { >- reject(exec, scope, promise); >- return; >- } >- >- promise->resolve(exec, module); >- CLEAR_AND_RETURN_IF_EXCEPTION(scope, void()); >- }); >- })); >- } >+ else >+ webAssemblyModuleValidateAsyncInternal(exec, promise, WTFMove(source)); > > return JSValue::encode(promise->promise()); > } >@@ -144,6 +153,14 @@ static void resolve(VM& vm, ExecState* exec, JSPromiseDeferred* promise, JSWebAs > CLEAR_AND_RETURN_IF_EXCEPTION(scope, void()); > } > >+void WebAssemblyPrototype::webAssemblyModuleValidateAsync(ExecState* exec, JSPromiseDeferred* promise, Vector<uint8_t>&& source) >+{ >+ VM& vm = exec->vm(); >+ auto catchScope = DECLARE_CATCH_SCOPE(vm); >+ webAssemblyModuleValidateAsyncInternal(exec, promise, WTFMove(source)); >+ CLEAR_AND_RETURN_IF_EXCEPTION(catchScope, void()); >+} >+ > static void instantiate(VM& vm, ExecState* exec, JSPromiseDeferred* promise, JSWebAssemblyModule* module, JSObject* importObject, const Identifier& moduleKey, Resolve resolveKind, Wasm::CreationMode creationMode) > { > auto scope = DECLARE_CATCH_SCOPE(vm); >@@ -205,6 +222,37 @@ JSValue WebAssemblyPrototype::instantiate(ExecState* exec, JSPromiseDeferred* pr > return promise->promise(); > } > >+static void webAssemblyModuleInstantinateAsyncInternal(ExecState* exec, JSPromiseDeferred* promise, Vector<uint8_t>&& source, JSObject* importObject) >+{ >+ auto* globalObject = exec->lexicalGlobalObject(); >+ VM& vm = exec->vm(); >+ >+ Vector<Strong<JSCell>> dependencies; >+ dependencies.append(Strong<JSCell>(vm, importObject)); >+ vm.promiseDeferredTimer->addPendingPromise(promise, WTFMove(dependencies)); >+ >+ Wasm::Module::validateAsync(&vm.wasmContext, WTFMove(source), createSharedTask<Wasm::Module::CallbackType>([promise, importObject, globalObject, &vm] (Wasm::Module::ValidationResult&& result) mutable { >+ vm.promiseDeferredTimer->scheduleWorkSoon(promise, [promise, importObject, globalObject, result = WTFMove(result), &vm] () mutable { >+ auto scope = DECLARE_CATCH_SCOPE(vm); >+ ExecState* exec = globalObject->globalExec(); >+ JSWebAssemblyModule* module = JSWebAssemblyModule::createStub(vm, exec, globalObject->WebAssemblyModuleStructure(), WTFMove(result)); >+ if (UNLIKELY(scope.exception())) >+ return reject(exec, scope, promise); >+ >+ instantiate(vm, exec, promise, module, importObject, JSWebAssemblyInstance::createPrivateModuleKey(), Resolve::WithModuleAndInstance, Wasm::CreationMode::FromJS); >+ CLEAR_AND_RETURN_IF_EXCEPTION(scope, reject(exec, scope, promise)); >+ }); >+ })); >+} >+ >+void WebAssemblyPrototype::webAssemblyModuleInstantinateAsync(ExecState* exec, JSPromiseDeferred* promise, Vector<uint8_t>&& source, JSObject* importedObject) >+{ >+ VM& vm = exec->vm(); >+ auto catchScope = DECLARE_CATCH_SCOPE(vm); >+ webAssemblyModuleInstantinateAsyncInternal(exec, promise, WTFMove(source), importedObject); >+ CLEAR_AND_RETURN_IF_EXCEPTION(catchScope, void()); >+} >+ > static EncodedJSValue JSC_HOST_CALL webAssemblyInstantiateFunc(ExecState* exec) > { > VM& vm = exec->vm(); >@@ -250,10 +298,72 @@ static EncodedJSValue JSC_HOST_CALL webAssemblyValidateFunc(ExecState* exec) > return JSValue::encode(jsBoolean(plan.parseAndValidateModule())); > } > >-WebAssemblyPrototype* WebAssemblyPrototype::create(VM& vm, JSGlobalObject*, Structure* structure) >+EncodedJSValue JSC_HOST_CALL webAssemblyCompileStreamingInternal(ExecState* exec) >+{ >+ VM& vm = exec->vm(); >+ auto* globalObject = exec->lexicalGlobalObject(); >+ auto catchScope = DECLARE_CATCH_SCOPE(vm); >+ >+ JSPromiseDeferred* promise = JSPromiseDeferred::create(exec, globalObject); >+ >+ Vector<Strong<JSCell>> dependencies; >+ dependencies.append(Strong<JSCell>(vm, globalObject)); >+ vm.promiseDeferredTimer->addPendingPromise(promise, WTFMove(dependencies)); >+ >+ if (globalObject->globalObjectMethodTable()->compileStreaming) >+ globalObject->globalObjectMethodTable()->compileStreaming(globalObject, exec, promise, exec->argument(0)); >+ else { >+ // CompileStreaming is not supported in jsc, only in browser environment >+ ASSERT_NOT_REACHED(); >+ } >+ >+ CLEAR_AND_RETURN_IF_EXCEPTION(catchScope, JSValue::encode(promise->promise())); >+ >+ return JSValue::encode(promise->promise()); >+} >+ >+EncodedJSValue JSC_HOST_CALL webAssemblyInstantiateStreamingInternal(ExecState* exec) >+{ >+ VM& vm = exec->vm(); >+ auto throwScope = DECLARE_THROW_SCOPE(vm); >+ auto* globalObject = exec->lexicalGlobalObject(); >+ >+ JSPromiseDeferred* promise = JSPromiseDeferred::create(exec, globalObject); >+ >+ RETURN_IF_EXCEPTION(throwScope, encodedJSValue()); >+ { >+ auto catchScope = DECLARE_CATCH_SCOPE(vm); >+ >+ JSValue importArgument = exec->argument(1); >+ JSObject* importObject = importArgument.getObject(); >+ if (UNLIKELY(!importArgument.isUndefined() && !importObject)) { >+ promise->reject(exec, createTypeError(exec, >+ ASCIILiteral("second argument to WebAssembly.instantiateStreaming must be undefined or an Object"), defaultSourceAppender, runtimeTypeForValue(importArgument))); >+ CLEAR_AND_RETURN_IF_EXCEPTION(catchScope, JSValue::encode(promise->promise())); >+ } else { >+ if (globalObject->globalObjectMethodTable()->instantiateStreaming) { >+ Vector<Strong<JSCell>> dependencies; >+ dependencies.append(Strong<JSCell>(vm, globalObject)); >+ dependencies.append(Strong<JSCell>(vm, importObject)); >+ vm.promiseDeferredTimer->addPendingPromise(promise, WTFMove(dependencies)); >+ >+ // FIXME: <http://webkit.org/b/184888> if there's an importObject and it contains a Memory, then we can compile the module with the right memory type (fast or not) by looking at the memory's type. >+ globalObject->globalObjectMethodTable()->instantiateStreaming(globalObject, exec, promise, exec->argument(0), importObject); >+ } else { >+ // InstantiateStreaming is not supported in jsc, only in browser environment. >+ ASSERT_NOT_REACHED(); >+ } >+ } >+ CLEAR_AND_RETURN_IF_EXCEPTION(catchScope, JSValue::encode(promise->promise())); >+ >+ return JSValue::encode(promise->promise()); >+ } >+} >+ >+WebAssemblyPrototype* WebAssemblyPrototype::create(VM& vm, JSGlobalObject* globalObject, Structure* structure) > { > auto* object = new (NotNull, allocateCell<WebAssemblyPrototype>(vm.heap)) WebAssemblyPrototype(vm, structure); >- object->finishCreation(vm); >+ object->finishCreation(vm, globalObject); > return object; > } > >@@ -262,9 +372,14 @@ Structure* WebAssemblyPrototype::createStructure(VM& vm, JSGlobalObject* globalO > return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), info()); > } > >-void WebAssemblyPrototype::finishCreation(VM& vm) >+void WebAssemblyPrototype::finishCreation(VM& vm, JSGlobalObject* globalObject) > { > Base::finishCreation(vm); >+ >+ if (Options::useWebAssemblyStreamingApi()) { >+ JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("compileStreaming", webAssemblyPrototypeCompileStreamingCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum)); >+ JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("instantiateStreaming", webAssemblyPrototypeInstantiateStreamingCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum)); >+ } > } > > WebAssemblyPrototype::WebAssemblyPrototype(VM& vm, Structure* structure) >diff --git a/Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.h b/Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.h >index bbb226dbcc699e3f0f0b8af1c95470559c6954a1..78c879fa3be09acce37483b3650d02d83e39ec22 100644 >--- a/Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.h >+++ b/Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.h >@@ -39,18 +39,23 @@ public: > > static WebAssemblyPrototype* create(VM&, JSGlobalObject*, Structure*); > static Structure* createStructure(VM&, JSGlobalObject*, JSValue); >+ JS_EXPORT_PRIVATE static void webAssemblyModuleValidateAsync(ExecState*, JSPromiseDeferred*, Vector<uint8_t>&&); >+ JS_EXPORT_PRIVATE static void webAssemblyModuleInstantinateAsync(ExecState*, JSPromiseDeferred*, Vector<uint8_t>&&, JSObject*); > > DECLARE_INFO; > > static JSValue instantiate(ExecState*, JSPromiseDeferred*, const Identifier&, JSValue); > > protected: >- void finishCreation(VM&); >+ void finishCreation(VM&, JSGlobalObject*); > > private: > WebAssemblyPrototype(VM&, Structure*); > }; > >+EncodedJSValue JSC_HOST_CALL webAssemblyCompileStreamingInternal(ExecState*); >+EncodedJSValue JSC_HOST_CALL webAssemblyInstantiateStreamingInternal(ExecState*); >+ > } // namespace JSC > > #endif // ENABLE(WEBASSEMBLY) >diff --git a/Source/WebCore/Configurations/FeatureDefines.xcconfig b/Source/WebCore/Configurations/FeatureDefines.xcconfig >index 37a63748fc031816d4969fe2490edf6c8657493d..576b7e41b34fdc5fdaabcaeb9701f19c724cecdd 100644 >--- a/Source/WebCore/Configurations/FeatureDefines.xcconfig >+++ b/Source/WebCore/Configurations/FeatureDefines.xcconfig >@@ -354,6 +354,8 @@ ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN_macosx = ENABLE_VIDEO_USES_ELEMENT_FULLSCRE > > ENABLE_WEBASSEMBLY = ; > >+ENABLE_WEBASSEMBLY_STREAMING_API = ENABLE_WEBASSEMBLY_STREAMING_API; >+ > ENABLE_WEBGL = ENABLE_WEBGL; > > ENABLE_WEBGL2 = ENABLE_WEBGL2; >@@ -380,4 +382,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXTRA_ZOOM_MODE) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MINIMAL_SIMULATOR) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXTRA_ZOOM_MODE) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MINIMAL_SIMULATOR) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >diff --git a/Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig b/Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig >index 37a63748fc031816d4969fe2490edf6c8657493d..576b7e41b34fdc5fdaabcaeb9701f19c724cecdd 100644 >--- a/Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig >+++ b/Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig >@@ -354,6 +354,8 @@ ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN_macosx = ENABLE_VIDEO_USES_ELEMENT_FULLSCRE > > ENABLE_WEBASSEMBLY = ; > >+ENABLE_WEBASSEMBLY_STREAMING_API = ENABLE_WEBASSEMBLY_STREAMING_API; >+ > ENABLE_WEBGL = ENABLE_WEBGL; > > ENABLE_WEBGL2 = ENABLE_WEBGL2; >@@ -380,4 +382,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXTRA_ZOOM_MODE) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MINIMAL_SIMULATOR) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXTRA_ZOOM_MODE) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MINIMAL_SIMULATOR) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >diff --git a/Source/WebCore/bindings/js/JSDOMWindowBase.cpp b/Source/WebCore/bindings/js/JSDOMWindowBase.cpp >index da35c16813b79259c2ebd4193a4dfe724e588d15..893c386e077b13948d5e23b3cde94a3b900dc9f1 100644 >--- a/Source/WebCore/bindings/js/JSDOMWindowBase.cpp >+++ b/Source/WebCore/bindings/js/JSDOMWindowBase.cpp >@@ -29,11 +29,13 @@ > #include "CommonVM.h" > #include "DOMWindow.h" > #include "Document.h" >+#include "FetchResponse.h" > #include "Frame.h" > #include "InspectorController.h" > #include "JSDOMBindingSecurity.h" > #include "JSDOMGlobalObjectTask.h" > #include "JSDOMWindowCustom.h" >+#include "JSFetchResponse.h" > #include "JSMainThreadExecState.h" > #include "JSNode.h" > #include "Logging.h" >@@ -50,6 +52,7 @@ > #include <JavaScriptCore/JSInternalPromiseDeferred.h> > #include <JavaScriptCore/Microtask.h> > #include <JavaScriptCore/StrongInlines.h> >+#include <JavaScriptCore/WebAssemblyPrototype.h> > #include <wtf/Language.h> > #include <wtf/MainThread.h> > >@@ -75,7 +78,9 @@ const GlobalObjectMethodTable JSDOMWindowBase::s_globalObjectMethodTable = { > &moduleLoaderCreateImportMetaProperties, > &moduleLoaderEvaluate, > &promiseRejectionTracker, >- &defaultLanguage >+ &defaultLanguage, >+ &compileStreaming, >+ &instantiateStreaming > }; > > JSDOMWindowBase::JSDOMWindowBase(VM& vm, Structure* structure, RefPtr<DOMWindow>&& window, JSWindowProxy* proxy) >@@ -364,6 +369,117 @@ JSC::JSObject* JSDOMWindowBase::moduleLoaderCreateImportMetaProperties(JSC::JSGl > return constructEmptyObject(exec, globalObject->nullPrototypeObjectStructure()); > } > >+static std::optional<Vector<uint8_t>> tryAllocate(JSC::ExecState* exec, JSC::JSPromiseDeferred* promise, const char* data, size_t byteSize) >+{ >+ Vector<uint8_t> arrayBuffer; >+ if (!arrayBuffer.tryReserveCapacity(byteSize)) { >+ promise->reject(exec, createOutOfMemoryError(exec)); >+ return std::nullopt; >+ } >+ >+ arrayBuffer.grow(byteSize); >+ memcpy(arrayBuffer.data(), data, byteSize); >+ >+ return arrayBuffer; >+} >+ >+static bool isResponseCorrect(JSC::ExecState* exec, FetchResponse* inputResponse, JSC::JSPromiseDeferred* promise) >+{ >+ bool isResponseCorsSameOrigin = inputResponse->type() == ResourceResponse::Type::Basic || inputResponse->type() == ResourceResponse::Type::Cors || inputResponse->type() == ResourceResponse::Type::Default; >+ >+ if (!isResponseCorsSameOrigin) { >+ promise->reject(exec, createTypeError(exec, ASCIILiteral("Response is not CORS-same-origin"))); >+ return false; >+ } >+ >+ if (!inputResponse->ok()) { >+ promise->reject(exec, createTypeError(exec, ASCIILiteral("Response has not returned OK status"))); >+ return false; >+ } >+ >+ auto contentType = inputResponse->headers().fastGet(HTTPHeaderName::ContentType); >+ if (!equalLettersIgnoringASCIICase(contentType, "application/wasm")) { >+ promise->reject(exec, createTypeError(exec, ASCIILiteral("Unexpected response MIME type. Expected 'application/wasm'"))); >+ return false; >+ } >+ >+ return true; >+} >+ >+void JSDOMWindowBase::compileStreaming(JSC::JSGlobalObject* globalObject, JSC::ExecState* exec, JSC::JSPromiseDeferred* promise, JSC::JSValue source) >+{ >+ handleStreamingAction(globalObject, exec, promise, source, [promise] (JSC::ExecState* exec, const char* data, size_t byteSize) mutable { >+ if (auto arrayBuffer = tryAllocate(exec, promise, data, byteSize)) >+ JSC::WebAssemblyPrototype::webAssemblyModuleValidateAsync(exec, promise, WTFMove(*arrayBuffer)); >+ }); >+} >+ >+void JSDOMWindowBase::instantiateStreaming(JSC::JSGlobalObject* globalObject, JSC::ExecState* exec, JSC::JSPromiseDeferred* promise, JSC::JSValue source, JSC::JSObject* importedObject) >+{ >+ handleStreamingAction(globalObject, exec, promise, source, [promise, importedObject] (JSC::ExecState* exec, const char* data, size_t byteSize) mutable { >+ if (auto arrayBuffer = tryAllocate(exec, promise, data, byteSize)) >+ JSC::WebAssemblyPrototype::webAssemblyModuleInstantinateAsync(exec, promise, WTFMove(*arrayBuffer), importedObject); >+ }); >+} >+ >+void JSDOMWindowBase::handleStreamingAction(JSC::JSGlobalObject* globalObject, JSC::ExecState* exec, JSC::JSPromiseDeferred* promise, JSC::JSValue source, std::function<void(JSC::ExecState* exec, const char* data, size_t byteSize)>&& callback) >+{ >+ ASSERT(source); >+ VM& vm = exec->vm(); >+ if (auto inputResponse = JSFetchResponse::toWrapped(vm, source)) >+ handleResponseOnStreamingAction(globalObject, exec, inputResponse, promise, WTFMove(callback)); >+ else >+ promise->reject(exec, createTypeError(exec, ASCIILiteral("first argument must be an Response or Promise for Response"))); >+} >+ >+void JSDOMWindowBase::handleResponseOnStreamingAction(JSC::JSGlobalObject* globalObject, JSC::ExecState* exec, FetchResponse* inputResponse, JSC::JSPromiseDeferred* promise, std::function<void(JSC::ExecState* exec, const char* data, size_t byteSize)>&& actionCallback) >+{ >+ if (!isResponseCorrect(exec, inputResponse, promise)) >+ return; >+ >+ if (inputResponse->isBodyReceivedByChunk()) { >+ inputResponse->consumeBodyReceivedByChunk([promise, callback = WTFMove(actionCallback), globalObject, data = SharedBuffer::create()] (auto&& result) mutable { >+ ExecState* exec = globalObject->globalExec(); >+ if (result.hasException()) { >+ promise->reject(exec, createTypeError(exec, result.exception().message())); >+ return; >+ } >+ >+ if (auto chunk = result.returnValue()) >+ data->append(reinterpret_cast<const char*>(chunk->data), chunk->size); >+ else { >+ VM& vm = exec->vm(); >+ JSLockHolder lock(vm); >+ >+ callback(exec, data->data(), data->size()); >+ } >+ }); >+ return; >+ } >+ >+ auto body = inputResponse->consumeBody(); >+ WTF::switchOn(body, [&] (Ref<FormData>& formData) { >+ if (auto buffer = formData->asSharedBuffer()) { >+ VM& vm = exec->vm(); >+ JSLockHolder lock(vm); >+ >+ auto callback = WTFMove(actionCallback); >+ callback(exec, buffer->data(), buffer->size()); >+ return; >+ } >+ // FIXME: http://webkit.org/b/184886> Implement loading for the Blob type >+ promise->reject(exec, createTypeError(exec, ASCIILiteral("Unexpected Response's Content-type"))); >+ }, [&] (Ref<SharedBuffer>& buffer) { >+ VM& vm = exec->vm(); >+ JSLockHolder lock(vm); >+ >+ auto callback = WTFMove(actionCallback); >+ callback(exec, buffer->data(), buffer->size()); >+ }, [&] (std::nullptr_t&) { >+ promise->reject(exec, createTypeError(exec, ASCIILiteral("Unexpected Response's Content-type"))); >+ }); >+} >+ > void JSDOMWindowBase::promiseRejectionTracker(JSGlobalObject* jsGlobalObject, ExecState* exec, JSPromise* promise, JSPromiseRejectionOperation operation) > { > // https://html.spec.whatwg.org/multipage/webappapis.html#the-hostpromiserejectiontracker-implementation >diff --git a/Source/WebCore/bindings/js/JSDOMWindowBase.h b/Source/WebCore/bindings/js/JSDOMWindowBase.h >index f5709a9fca0951a04ad17f60fa53e5e3624bf6e0..2efcc93af913b3e3000a1b49943342fdfa95374c 100644 >--- a/Source/WebCore/bindings/js/JSDOMWindowBase.h >+++ b/Source/WebCore/bindings/js/JSDOMWindowBase.h >@@ -42,6 +42,7 @@ namespace WebCore { > > class DOMWrapperWorld; > class Frame; >+class FetchResponse; > class JSDOMWindow; > class JSDOMWindowBasePrivate; > class JSWindowProxy; >@@ -88,12 +89,20 @@ protected: > JSC::WatchpointSet m_windowCloseWatchpoints; > > private: >+ using ResponseCallback = WTF::Function<void(const char*, size_t)>; >+ > static JSC::Identifier moduleLoaderResolve(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSModuleLoader*, JSC::JSValue, JSC::JSValue, JSC::JSValue); > static JSC::JSInternalPromise* moduleLoaderFetch(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSModuleLoader*, JSC::JSValue, JSC::JSValue, JSC::JSValue); > static JSC::JSValue moduleLoaderEvaluate(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSModuleLoader*, JSC::JSValue, JSC::JSValue, JSC::JSValue); > static JSC::JSInternalPromise* moduleLoaderImportModule(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSModuleLoader*, JSC::JSString*, JSC::JSValue, const JSC::SourceOrigin&); > static JSC::JSObject* moduleLoaderCreateImportMetaProperties(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSModuleLoader*, JSC::JSValue, JSC::JSModuleRecord*, JSC::JSValue); > >+ static void compileStreaming(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSPromiseDeferred*, JSC::JSValue); >+ static void instantiateStreaming(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSPromiseDeferred*, JSC::JSValue, JSC::JSObject*); >+ >+ static void handleStreamingAction(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSPromiseDeferred*, JSC::JSValue, std::function<void(JSC::ExecState*, const char*, size_t)>&& callback); >+ static void handleResponseOnStreamingAction(JSC::JSGlobalObject*, JSC::ExecState*, FetchResponse*, JSC::JSPromiseDeferred*, std::function<void(JSC::ExecState*, const char*, size_t)>&& callback); >+ > static void promiseRejectionTracker(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSPromise*, JSC::JSPromiseRejectionOperation); > > RefPtr<DOMWindow> m_wrapped; >diff --git a/Source/WebCore/bindings/js/JSRemoteDOMWindowBase.cpp b/Source/WebCore/bindings/js/JSRemoteDOMWindowBase.cpp >index 47e340190f7b04472ddcca57f268e96a9942f9fa..66d2c8df9a87f7fad03cbc231ad13e28c205f595 100644 >--- a/Source/WebCore/bindings/js/JSRemoteDOMWindowBase.cpp >+++ b/Source/WebCore/bindings/js/JSRemoteDOMWindowBase.cpp >@@ -48,6 +48,8 @@ const GlobalObjectMethodTable JSRemoteDOMWindowBase::s_globalObjectMethodTable = > nullptr, // moduleLoaderEvaluate > nullptr, // promiseRejectionTracker > nullptr, // defaultLanguage >+ nullptr, // compileStreaming >+ nullptr, // instantiateStreaming > }; > > JSRemoteDOMWindowBase::JSRemoteDOMWindowBase(VM& vm, Structure* structure, RefPtr<RemoteDOMWindow>&& window, JSWindowProxy* proxy) >diff --git a/Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp b/Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp >index 85bf75c51b2b2ffe7a74742fa0ddfb73c13b5b7a..fd60df88afd6e09166c41b0279d22318dad888e3 100644 >--- a/Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp >+++ b/Source/WebCore/bindings/js/JSWorkerGlobalScopeBase.cpp >@@ -61,7 +61,9 @@ const GlobalObjectMethodTable JSWorkerGlobalScopeBase::s_globalObjectMethodTable > nullptr, // moduleLoaderCreateImportMetaProperties > nullptr, // moduleLoaderEvaluate > nullptr, // promiseRejectionTracker >- &defaultLanguage >+ &defaultLanguage, >+ nullptr, // compileStreaming >+ nullptr, // instantiateStreaming > }; > > JSWorkerGlobalScopeBase::JSWorkerGlobalScopeBase(JSC::VM& vm, JSC::Structure* structure, RefPtr<WorkerGlobalScope>&& impl) >diff --git a/Source/WebKit/Configurations/FeatureDefines.xcconfig b/Source/WebKit/Configurations/FeatureDefines.xcconfig >index 37a63748fc031816d4969fe2490edf6c8657493d..576b7e41b34fdc5fdaabcaeb9701f19c724cecdd 100644 >--- a/Source/WebKit/Configurations/FeatureDefines.xcconfig >+++ b/Source/WebKit/Configurations/FeatureDefines.xcconfig >@@ -354,6 +354,8 @@ ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN_macosx = ENABLE_VIDEO_USES_ELEMENT_FULLSCRE > > ENABLE_WEBASSEMBLY = ; > >+ENABLE_WEBASSEMBLY_STREAMING_API = ENABLE_WEBASSEMBLY_STREAMING_API; >+ > ENABLE_WEBGL = ENABLE_WEBGL; > > ENABLE_WEBGL2 = ENABLE_WEBGL2; >@@ -380,4 +382,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXTRA_ZOOM_MODE) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MINIMAL_SIMULATOR) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXTRA_ZOOM_MODE) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MINIMAL_SIMULATOR) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >diff --git a/Source/WebKitLegacy/mac/Configurations/FeatureDefines.xcconfig b/Source/WebKitLegacy/mac/Configurations/FeatureDefines.xcconfig >index 37a63748fc031816d4969fe2490edf6c8657493d..576b7e41b34fdc5fdaabcaeb9701f19c724cecdd 100644 >--- a/Source/WebKitLegacy/mac/Configurations/FeatureDefines.xcconfig >+++ b/Source/WebKitLegacy/mac/Configurations/FeatureDefines.xcconfig >@@ -354,6 +354,8 @@ ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN_macosx = ENABLE_VIDEO_USES_ELEMENT_FULLSCRE > > ENABLE_WEBASSEMBLY = ; > >+ENABLE_WEBASSEMBLY_STREAMING_API = ENABLE_WEBASSEMBLY_STREAMING_API; >+ > ENABLE_WEBGL = ENABLE_WEBGL; > > ENABLE_WEBGL2 = ENABLE_WEBGL2; >@@ -380,4 +382,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXTRA_ZOOM_MODE) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MINIMAL_SIMULATOR) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXTRA_ZOOM_MODE) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MINIMAL_SIMULATOR) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >diff --git a/Source/cmake/WebKitFeatures.cmake b/Source/cmake/WebKitFeatures.cmake >index 6aa7eebbbf2de89295c5ff3fded928806a77dd04..80c019c3fad2e9933fe3ccb36c11ee27b4679b78 100644 >--- a/Source/cmake/WebKitFeatures.cmake >+++ b/Source/cmake/WebKitFeatures.cmake >@@ -174,6 +174,7 @@ macro(WEBKIT_OPTION_BEGIN) > WEBKIT_OPTION_DEFINE(ENABLE_VIDEO_TRACK "Toggle Track support for HTML5 video" PRIVATE ON) > WEBKIT_OPTION_DEFINE(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN "Toggle video element fullscreen support" PRIVATE ON) > WEBKIT_OPTION_DEFINE(ENABLE_WEBASSEMBLY "Toggle WebAssembly support" PRIVATE ${ENABLE_FTL_DEFAULT}) >+ WEBKIT_OPTION_DEFINE(ENABLE_WEBASSEMBLY_STREAMING_API "Toggle WebAssembly streaming api support." PRIVATE ON) > WEBKIT_OPTION_DEFINE(ENABLE_WEBDRIVER "Whether to enable the WebDriver service process" PRIVATE OFF) > WEBKIT_OPTION_DEFINE(ENABLE_WEBGL "Toggle WebGL support" PRIVATE ON) > WEBKIT_OPTION_DEFINE(ENABLE_WEBGL2 "Toggle WebGL 2.0 support" PRIVATE OFF) >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index 92e52145c54ab0b7f2e8a2adb0c73edb70483a77..babe76cafbe3d29bd51f6c538e34ce3d1675560a 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,12 @@ >+2018-04-24 Oleksandr Skachkov <gskachkov@gmail.com> >+ >+ WebAssembly: add support for stream APIs - JavaScript API >+ https://bugs.webkit.org/show_bug.cgi?id=183442 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: >+ > 2018-04-25 Michael Catanzaro <mcatanzaro@igalia.com> > > [WPE] Build and link against latest WPEBackend and WPEBackend-fdo >diff --git a/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig b/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig >index 37a63748fc031816d4969fe2490edf6c8657493d..576b7e41b34fdc5fdaabcaeb9701f19c724cecdd 100644 >--- a/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig >+++ b/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig >@@ -354,6 +354,8 @@ ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN_macosx = ENABLE_VIDEO_USES_ELEMENT_FULLSCRE > > ENABLE_WEBASSEMBLY = ; > >+ENABLE_WEBASSEMBLY_STREAMING_API = ENABLE_WEBASSEMBLY_STREAMING_API; >+ > ENABLE_WEBGL = ENABLE_WEBGL; > > ENABLE_WEBGL2 = ENABLE_WEBGL2; >@@ -380,4 +382,4 @@ ENABLE_WIRELESS_PLAYBACK_TARGET = ENABLE_WIRELESS_PLAYBACK_TARGET; > > ENABLE_XSLT = ENABLE_XSLT; > >-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXTRA_ZOOM_MODE) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MINIMAL_SIMULATOR) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_APPLE_PAY) $(ENABLE_APPLE_PAY_SESSION_V3) $(ENABLE_APPLICATION_MANIFEST) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_AVF_CAPTIONS) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATA_INTERACTION) $(ENABLE_DATACUE_VALUE) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DRAG_SUPPORT) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_EXTRA_ZOOM_MODE) $(ENABLE_FAST_JIT_PERMISSIONS) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FTL_JIT) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_INTERSECTION_OBSERVER) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_JIT) $(ENABLE_JS_ASYNC_ITERATION) $(ENABLE_KEYBOARD_CODE_ATTRIBUTE) $(ENABLE_KEYBOARD_KEY_ATTRIBUTE) $(ENABLE_LAYOUT_FORMATTING_CONTEXT) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER) $(ENABLE_LEGACY_ENCRYPTED_MEDIA) $(ENABLE_LETTERPRESS) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MAC_VIDEO_TOOLBOX) $(ENABLE_MATHML) $(ENABLE_MEDIA_CAPTURE) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MINIMAL_SIMULATOR) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_STANDALONE) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAYMENT_REQUEST) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_SERVICE_WORKER) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_USER_MESSAGE_HANDLERS) $(ENABLE_USERSELECT_ALL) $(ENABLE_VARIATION_FONTS) $(ENABLE_VIDEO) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_VIDEO_TRACK) $(ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_AUTHN) $(ENABLE_WEB_RTC) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBASSEMBLY_STREAMING_API) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEBGPU) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_XSLT); >diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog >index a9f5633df9c1a6d2af8991a77a1341506c810562..59ffa32467a775e88bb9c422d18340d60c89b0ee 100644 >--- a/LayoutTests/imported/w3c/ChangeLog >+++ b/LayoutTests/imported/w3c/ChangeLog >@@ -1,3 +1,20 @@ >+2018-04-24 Oleksandr Skachkov <gskachkov@gmail.com> >+ >+ WebAssembly: add support for stream APIs - JavaScript API >+ https://bugs.webkit.org/show_bug.cgi?id=183442 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * web-platform-tests/wasm/resources/incrementer.no_mime_type.wasm: Added. >+ * web-platform-tests/wasm/resources/incrementer.wasm: Added. >+ * web-platform-tests/wasm/resources/incrementer.wasm.headers: Added. >+ * web-platform-tests/wasm/resources/incrementer.wrong_mime_type.wasm: Added. >+ * web-platform-tests/wasm/resources/incrementer.wrong_mime_type.wasm.headers: Added. >+ * web-platform-tests/wasm/wasm_stream_compile_test-expected.txt: Added. >+ * web-platform-tests/wasm/wasm_stream_compile_test.html: Added. >+ * web-platform-tests/wasm/wasm_stream_instantinate_test-expected.txt: Added. >+ * web-platform-tests/wasm/wasm_stream_instantinate_test.html: Added. >+ > 2018-04-25 Youenn Fablet <youenn@apple.com> > > Use NetworkLoadChecker for all subresource loads except fetch/XHR >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wasm/resources/incrementer.no_mime_type.wasm b/LayoutTests/imported/w3c/web-platform-tests/wasm/resources/incrementer.no_mime_type.wasm >new file mode 100644 >index 0000000000000000000000000000000000000000..47afcdef2a2812acccecd0f203d30d3023593f3d >GIT binary patch >literal 46 >zcmZQbEY4+QU|?WmV@zPIXRK#tVq{?FW#r7vOD;;yP0cG|VBq3pWM@!daAeHl1^}?K >B2ZjIu > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wasm/resources/incrementer.wasm b/LayoutTests/imported/w3c/web-platform-tests/wasm/resources/incrementer.wasm >new file mode 100644 >index 0000000000000000000000000000000000000000..47afcdef2a2812acccecd0f203d30d3023593f3d >GIT binary patch >literal 46 >zcmZQbEY4+QU|?WmV@zPIXRK#tVq{?FW#r7vOD;;yP0cG|VBq3pWM@!daAeHl1^}?K >B2ZjIu > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wasm/resources/incrementer.wasm.headers b/LayoutTests/imported/w3c/web-platform-tests/wasm/resources/incrementer.wasm.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..76b9c163b6cd337d653dce90f82b3ab24dc1239a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wasm/resources/incrementer.wasm.headers >@@ -0,0 +1,2 @@ >+Content-Type: application/wasm >+Cache-Control: max-age=3600 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wasm/resources/incrementer.wrong_mime_type.wasm b/LayoutTests/imported/w3c/web-platform-tests/wasm/resources/incrementer.wrong_mime_type.wasm >new file mode 100644 >index 0000000000000000000000000000000000000000..47afcdef2a2812acccecd0f203d30d3023593f3d >GIT binary patch >literal 46 >zcmZQbEY4+QU|?WmV@zPIXRK#tVq{?FW#r7vOD;;yP0cG|VBq3pWM@!daAeHl1^}?K >B2ZjIu > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wasm/resources/incrementer.wrong_mime_type.wasm.headers b/LayoutTests/imported/w3c/web-platform-tests/wasm/resources/incrementer.wrong_mime_type.wasm.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..833ee71634def23f8dc089c8f89fbc09d8d69754 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wasm/resources/incrementer.wrong_mime_type.wasm.headers >@@ -0,0 +1,2 @@ >+Content-Type: text/css >+Cache-Control: max-age=3600 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_compile_test-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_compile_test-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7829e917807bd8c5ea7e074e800cad8f118a06cf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_compile_test-expected.txt >@@ -0,0 +1,12 @@ >+ >+PASS compileStreaming using resolved response >+PASS compileStreaming using resolved response and check instantiate >+PASS compileStreaming using promise response from fetch and check instantiate >+PASS compileStreaming raise error if wrong mime type >+PASS compileStreaming raise error if no mime type >+PASS compileStreaming raise error if 404 status >+PASS compileStreaming check CORS >+PASS compileStreaming raise error if no-cors >+PASS compileStreaming receive promise with response created from ArrayBuffer >+PASS compileStreaming receive response that deliver data by chunks as bufferArray >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_compile_test.html b/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_compile_test.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9273ff195a7262f07633b62e3e8458cec0dcd0db >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_compile_test.html >@@ -0,0 +1,109 @@ >+<!DOCTYPE html> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/common/get-host-info.sub.js"></script> >+<script> >+ >+ promise_test(async function() { >+ var response = await fetch('resources/incrementer.wasm'); >+ const module = await WebAssembly.compileStreaming(response); >+ assert_true(module instanceof WebAssembly.Module); >+ }, "compileStreaming using resolved response"); >+ >+ promise_test(async function() { >+ var response = await fetch('resources/incrementer.wasm'); >+ const module = await WebAssembly.compileStreaming(response); >+ const instance = new WebAssembly.Instance(module); >+ assert_true(instance instanceof WebAssembly.Instance); >+ }, "compileStreaming using resolved response and check instantiate"); >+ >+ promise_test(async function() { >+ var result = fetch('resources/incrementer.wasm'); >+ const module = await WebAssembly.compileStreaming(result); >+ const instance = new WebAssembly.Instance(module); >+ assert_true(instance instanceof WebAssembly.Instance); >+ }, "compileStreaming using promise response from fetch and check instantiate"); >+ >+ promise_test(async function() { >+ try { >+ var result = fetch('resources/incrementer.wrong_mime_type.wasm'); >+ const module = await WebAssembly.compileStreaming(result); >+ assert_true(false); >+ } catch (e) { >+ assert_true(e.message.includes('MIME type')); >+ assert_true(e instanceof Error); >+ } >+ }, "compileStreaming raise error if wrong mime type"); >+ >+ promise_test(async function() { >+ try { >+ var result = fetch('resources/incrementer.no_mime_type.wasm'); >+ const module = await WebAssembly.compileStreaming(result); >+ assert_true(false); >+ } catch (e) { >+ assert_true(e.message.includes('MIME type')); >+ assert_true(e instanceof Error); >+ } >+ }, "compileStreaming raise error if no mime type"); >+ >+ promise_test(async function() { >+ try { >+ var result = fetch('resources/incrementer1.wasm'); >+ const module = await WebAssembly.compileStreaming(result); >+ assert_true(false); >+ } catch (e) { >+ assert_equals(e.message, "Response has not returned OK status"); >+ assert_true(e instanceof Error); >+ } >+ }, "compileStreaming raise error if 404 status"); >+ >+ const getWasmUrl = fileName => { >+ var host_info = get_host_info(); >+ var url = host_info.HTTP_ORIGIN_WITH_DIFFERENT_PORT + '/wasm/'; >+ return url + fileName + "?pipe=header(Access-Control-Allow-Origin,*)"; >+ }; >+ >+ promise_test(async function() { >+ var result = fetch(getWasmUrl('resources/incrementer.wasm'), {"mode": "cors"} ); >+ const module = await WebAssembly.compileStreaming(result); >+ assert_true(module instanceof WebAssembly.Module); >+ }, "compileStreaming check CORS"); >+ >+ promise_test(async function() { >+ try { >+ var result = fetch(getWasmUrl('resources/incrementer.wasm'), {"mode": "no-cors"} ); >+ const module = await WebAssembly.compileStreaming(result); >+ assert_true(false); >+ } catch (e) { >+ assert_equals(e.message, "Response is not CORS-same-origin"); >+ assert_true(e instanceof Error); >+ } >+ }, "compileStreaming raise error if no-cors"); >+ >+ promise_test(async function() { >+ const module = await fetch('resources/incrementer.wasm') >+ .then(v => v.arrayBuffer()) >+ .then(v => WebAssembly.compileStreaming(new Response(v, { headers: { "Content-Type" : "application/wasm" }}))); >+ assert_true(module instanceof WebAssembly.Module); >+ }, "compileStreaming receive promise with response created from ArrayBuffer"); >+ >+ promise_test(async function() { >+ const module = await fetch('resources/incrementer.wasm') >+ .then(v => v.arrayBuffer()) >+ .then(buffer => { >+ const stream = new ReadableStream({ >+ start(controller) { >+ (async () => { >+ await Promise.resolve().then(() => controller.enqueue(buffer.slice(0, 20))); >+ await Promise.resolve().then(() => controller.enqueue(buffer.slice(20, buffer.byteLength))); >+ await Promise.resolve().then(() => controller.close()); >+ })(); >+ } >+ }); >+ return stream; >+ }) >+ .then(stream => WebAssembly.compileStreaming(new Response(stream, { headers: { "Content-Type" : "application/wasm" }}))); >+ assert_true(module instanceof WebAssembly.Module); >+ }, "compileStreaming receive response that deliver data by chunks as bufferArray"); >+</script> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_instantinate_test-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_instantinate_test-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0437fa4ddf2dbbb258e3fb9ea91bb35ced880417 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_instantinate_test-expected.txt >@@ -0,0 +1,12 @@ >+ >+PASS instantiateStreaming using resolved response >+PASS instantiateStreaming using resolved response and check instantiate >+PASS instantiateStreaming using promise response from fetch and check instantiate >+PASS instantiateStreaming raise error if wrong mime type >+PASS instantiateStreaming raise error if no mime type >+PASS instantiateStreaming raise error if 404 status >+PASS instantiateStreaming check CORS >+PASS instantiateStreaming raise error if no-cors >+PASS instantiateStreaming receive promise with response created from ArrayBuffer >+PASS instantiateStreaming receive response that deliver data by chunks as bufferArray >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_instantinate_test.html b/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_instantinate_test.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2d0f35d6cfb668235de13273e611bc1d524f3b1b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_instantinate_test.html >@@ -0,0 +1,106 @@ >+<!DOCTYPE html> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/common/get-host-info.sub.js"></script> >+<script> >+ promise_test(async function() { >+ var response = await fetch('resources/incrementer.wasm'); >+ const { instance, module } = await WebAssembly.instantiateStreaming(response); >+ assert_true(instance instanceof WebAssembly.Instance); >+ assert_true(module instanceof WebAssembly.Module); >+ }, "instantiateStreaming using resolved response"); >+ >+ promise_test(async function() { >+ var response = await fetch('resources/incrementer.wasm'); >+ const { instance } = await WebAssembly.instantiateStreaming(response); >+ assert_true(instance instanceof WebAssembly.Instance); >+ }, "instantiateStreaming using resolved response and check instantiate"); >+ >+ promise_test(async function() { >+ var result = fetch('resources/incrementer.wasm'); >+ const { instance } = await WebAssembly.instantiateStreaming(result); >+ assert_true(instance instanceof WebAssembly.Instance); >+ }, "instantiateStreaming using promise response from fetch and check instantiate"); >+ >+ promise_test(async function() { >+ try { >+ var result = fetch('resources/incrementer.wrong_mime_type.wasm'); >+ const { instance } = await WebAssembly.instantiateStreaming(result); >+ assert_true(false); >+ } catch (e) { >+ assert_true(e.message.includes('MIME type')); >+ assert_true(e instanceof Error); >+ } >+ }, "instantiateStreaming raise error if wrong mime type"); >+ >+ promise_test(async function() { >+ try { >+ var result = fetch('resources/incrementer.no_mime_type.wasm'); >+ const { instance } = await WebAssembly.instantiateStreaming(result); >+ assert_true(false); >+ } catch (e) { >+ assert_true(e.message.includes('MIME type')); >+ assert_true(e instanceof Error); >+ } >+ }, "instantiateStreaming raise error if no mime type"); >+ >+ promise_test(async function() { >+ try { >+ var result = fetch('resources/incrementer1.wasm'); >+ const { instance } = await WebAssembly.instantiateStreaming(result); >+ assert_true(false); >+ } catch (e) { >+ assert_equals(e.message, "Response has not returned OK status"); >+ assert_true(e instanceof Error); >+ } >+ }, "instantiateStreaming raise error if 404 status"); >+ >+ const getWasmUrl = fileName => { >+ var host_info = get_host_info(); >+ var url = host_info.HTTP_ORIGIN_WITH_DIFFERENT_PORT + '/wasm/'; >+ return url + fileName + "?pipe=header(Access-Control-Allow-Origin,*)"; >+ }; >+ >+ promise_test(async function() { >+ var result = fetch(getWasmUrl('resources/incrementer.wasm'), {"mode": "cors"} ); >+ const { instance } = await WebAssembly.instantiateStreaming(result); >+ assert_true(instance instanceof WebAssembly.Instance); >+ }, "instantiateStreaming check CORS"); >+ >+ promise_test(async function() { >+ try { >+ var result = fetch(getWasmUrl('resources/incrementer.wasm'), {"mode": "no-cors"} ); >+ const { instance } = await WebAssembly.instantiateStreaming(result); >+ assert_true(false); >+ } catch (e) { >+ assert_equals(e.message, "Response is not CORS-same-origin"); >+ assert_true(e instanceof Error); >+ } >+ }, "instantiateStreaming raise error if no-cors"); >+ >+ promise_test(async function() { >+ const { instance } = await fetch('resources/incrementer.wasm') >+ .then(v => v.arrayBuffer()) >+ .then(v => WebAssembly.instantiateStreaming(new Response(v, { headers: { "Content-Type" : "application/wasm" }}))); >+ assert_true(instance instanceof WebAssembly.Instance); >+ }, "instantiateStreaming receive promise with response created from ArrayBuffer"); >+ >+ promise_test(async function() { >+ const { instance } = a = await fetch('resources/incrementer.wasm') >+ .then(v => v.arrayBuffer()) >+ .then(buffer => { >+ const stream = new ReadableStream({ >+ start(controller) { >+ (async () => { >+ await Promise.resolve().then(() => controller.enqueue(buffer.slice(0, 20))); >+ await Promise.resolve().then(() => controller.enqueue(buffer.slice(20, buffer.byteLength))); >+ await Promise.resolve().then(() => controller.close()); >+ })(); >+ } >+ }); >+ return stream; >+ }) >+ .then(stream => WebAssembly.instantiateStreaming(new Response(stream, { headers: { "Content-Type" : "application/wasm" }}))); >+ assert_true(instance instanceof WebAssembly.Instance); >+ }, "instantiateStreaming receive response that deliver data by chunks as bufferArray"); >+</script> >\ No newline at end of file >diff --git a/ChangeLog b/ChangeLog >index 4b6b5a8b7225d8e3236fd0d3cc393e2ac234a772..6a5c1cd4c2d5c2f465d9573eebf41112e58e1b64 100644 >--- a/ChangeLog >+++ b/ChangeLog >@@ -1,3 +1,14 @@ >+2018-04-24 Oleksandr Skachkov <gskachkov@gmail.com> >+ >+ WebAssembly: add support for stream APIs - JavaScript API >+ https://bugs.webkit.org/show_bug.cgi?id=183442 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Add WEBASSEMBLY_STREAMING_API feature flag >+ >+ * Source/cmake/WebKitFeatures.cmake: >+ > 2018-04-25 Michael Catanzaro <mcatanzaro@igalia.com> > > [WPE] Build and link against latest WPEBackend and WPEBackend-fdo
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 183442
:
337019
|
337296
|
338599
|
338662
|
338861
|
338864
|
338865
|
338869
|
338870
|
339089
|
339090
|
339093
|
339098
|
339100
|
339146