WebKit Bugzilla
Attachment 339093 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-20180429202118.patch (text/plain), 104.29 KB, created by
GSkachkov
on 2018-04-29 10:21:21 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
GSkachkov
Created:
2018-04-29 10:21:21 PDT
Size:
104.29 KB
patch
obsolete
>Subversion Revision: 231146 >diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog >index e736a31461c5e8f256a69a399ce518e3c5838a54..e8bd605cfbbd9e55cc05a219ca452d36b17a47a9 100644 >--- a/Source/JavaScriptCore/ChangeLog >+++ b/Source/JavaScriptCore/ChangeLog >@@ -1,3 +1,44 @@ >+2018-04-28 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. >+ >+ * 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: >+ * runtime/PromiseDeferredTimer.cpp: >+ (JSC::PromiseDeferredTimer::hasPendingPromise): >+ (JSC::PromiseDeferredTimer::hasDependancyInPendingPromise): >+ * runtime/PromiseDeferredTimer.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-28 Saam Barati <sbarati@apple.com> > > We don't model regexp effects properly >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index fc0ba270048186b77f44bf8ef52dac0e816669fc..067bb6e062b0280370e2651145ae187d4b7cfe5c 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,23 @@ >+2018-04-28 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::handleResponseOnStreamingAction): >+ (WebCore::JSDOMWindowBase::compileStreaming): >+ (WebCore::JSDOMWindowBase::instantiateStreaming): >+ * bindings/js/JSDOMWindowBase.h: >+ * bindings/js/JSRemoteDOMWindowBase.cpp: >+ * bindings/js/JSWorkerGlobalScopeBase.cpp: >+ > 2018-04-28 Sihui Liu <sihui_liu@apple.com> > > [Cocoa] Set HTTPOnly flag when converting Cookie to NSHTTPCookie >diff --git a/Source/WebCore/PAL/ChangeLog b/Source/WebCore/PAL/ChangeLog >index 2f9fb5991c075aaf043e754f339505ffd539e4ed..12494b42729fdb203ef60e2ccb6e70c46f6fc81b 100644 >--- a/Source/WebCore/PAL/ChangeLog >+++ b/Source/WebCore/PAL/ChangeLog >@@ -1,3 +1,14 @@ >+2018-04-28 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-26 Jer Noble <jer.noble@apple.com> > > WK_COCOA_TOUCH all the things. >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 2ca3cdf1450ec2dbed89c81da56218169d7e28c7..1fc7929e574cfbd3247542d947f7d61d9ee3d838 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,14 @@ >+2018-04-28 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-28 Andy Estes <aestes@apple.com> > > [iOS] Present an action sheet when long-pressing on PDF links >diff --git a/Source/WebKitLegacy/mac/ChangeLog b/Source/WebKitLegacy/mac/ChangeLog >index 56fd0cb47bf6753964f7330baea8577b140c4cb3..07886c03d4b6035b166deb5707217804d01dc9b3 100644 >--- a/Source/WebKitLegacy/mac/ChangeLog >+++ b/Source/WebKitLegacy/mac/ChangeLog >@@ -1,3 +1,14 @@ >+2018-04-28 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-27 Chris Dumez <cdumez@apple.com> > > Use WindowProxy instead of DOMWindow in our IDL >diff --git a/Source/JavaScriptCore/CMakeLists.txt b/Source/JavaScriptCore/CMakeLists.txt >index fdd5f6f16e2cb1877a7463ce18b1206a33cc4dbe..b78c037c29e4e4631434152acfbf8d9b81a47fac 100644 >--- a/Source/JavaScriptCore/CMakeLists.txt >+++ b/Source/JavaScriptCore/CMakeLists.txt >@@ -929,6 +929,8 @@ set(JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS > wasm/WasmTierUpCount.h > > wasm/js/JSWebAssemblyModule.h >+ wasm/js/WebAssemblyPrototype.h >+ > > yarr/RegularExpression.h > yarr/Yarr.h >@@ -1121,6 +1123,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 50840d826a4f8ce055531a194735df51b5167faa..17b66798a8437de3f4588bbcf0dc5260d92a578c 100644 >--- a/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig >+++ b/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig >@@ -355,6 +355,8 @@ ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN_macosx = ENABLE_VIDEO_USES_ELEMENT_FULLSCRE > > ENABLE_WEBASSEMBLY = ; > >+ENABLE_WEBASSEMBLY_STREAMING_API = ; >+ > ENABLE_WEBGL = ENABLE_WEBGL; > > ENABLE_WEBGL2 = ENABLE_WEBGL2; >@@ -381,4 +383,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_INTL_PLURAL_RULES) $(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_INTL_PLURAL_RULES) $(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 1012ff649781ef5162cb5d3eca60e4ae8be5ad14..d95cac50b5d6f567a8aeb87d5e390c8d88ff910f 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 94435d8ae573baedffb1f6ad95dd0ce0225b5e73..0ab6b125654594d778d66aa837f8ac8826ecdb1d 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, ); }; }; >diff --git a/Source/JavaScriptCore/builtins/BuiltinNames.h b/Source/JavaScriptCore/builtins/BuiltinNames.h >index a34f343da7f0c24291dad73cafefbf74b1b5779d..d583b58a15b58c31996a8bc53abad2cb664fc649 100644 >--- a/Source/JavaScriptCore/builtins/BuiltinNames.h >+++ b/Source/JavaScriptCore/builtins/BuiltinNames.h >@@ -190,6 +190,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..4e051fece50835515ff9b7f5e99c57f15492fbc0 >--- /dev/null >+++ b/Source/JavaScriptCore/builtins/WebAssemblyPrototype.js >@@ -0,0 +1,37 @@ >+/* >+ * 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) { >+ "use strict"; >+ >+ return @Promise.@resolve(argument).@then(@webAssemblyCompileStreamingInternal); >+} >+ >+function instantiateStreaming(argument) { >+ "use strict"; >+ >+ 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 95ed638316653c6c60329370463218116787f3ba..f00350eb10e47f9c8f57717f74b6047ccf05da9b 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 >@@ -939,6 +942,11 @@ 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), >+#if ENABLE(WEBASSEMBLY) >+ // 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), >+#endif > #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 759b87070b24a9e01a2a8361730d9bf232428238..353733ebc6ac2fad4dcbe618ea45db2d64779b66 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 b3e7954038c6785ef6adc44f7ec2db76ccc72255..7d520e5b22b82a895450ba8164d7ade5166480c0 100644 >--- a/Source/JavaScriptCore/runtime/Options.h >+++ b/Source/JavaScriptCore/runtime/Options.h >@@ -118,6 +118,12 @@ constexpr bool enableIntlPluralRules = true; > constexpr bool enableIntlPluralRules = 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)") \ >@@ -490,6 +496,7 @@ constexpr bool enableIntlPluralRules = 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, enableWebAssemblyStreamingApi, 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.") \ >diff --git a/Source/JavaScriptCore/runtime/PromiseDeferredTimer.cpp b/Source/JavaScriptCore/runtime/PromiseDeferredTimer.cpp >index 087804695cdf35a7494bbd589442904eb9ca7039..db851dc0e8338f4405e4c5dbfb6278ee1353aa63 100644 >--- a/Source/JavaScriptCore/runtime/PromiseDeferredTimer.cpp >+++ b/Source/JavaScriptCore/runtime/PromiseDeferredTimer.cpp >@@ -120,6 +120,21 @@ void PromiseDeferredTimer::addPendingPromise(JSPromiseDeferred* ticket, Vector<S > #endif > } > >+bool PromiseDeferredTimer::hasPendingPromise(JSPromiseDeferred* ticket) >+{ >+ ASSERT(m_vm->currentThreadIsHoldingAPILock()); >+ return m_pendingPromises.contains(ticket); >+} >+ >+bool PromiseDeferredTimer::hasDependancyInPendingPromise(JSPromiseDeferred* ticket, JSCell* dependency) >+{ >+ ASSERT(m_vm->currentThreadIsHoldingAPILock()); >+ ASSERT(m_pendingPromises.contains(ticket)); >+ >+ auto result = m_pendingPromises.get(ticket); >+ return result.contains(dependency); >+} >+ > bool PromiseDeferredTimer::cancelPendingPromise(JSPromiseDeferred* ticket) > { > ASSERT(m_vm->currentThreadIsHoldingAPILock()); >diff --git a/Source/JavaScriptCore/runtime/PromiseDeferredTimer.h b/Source/JavaScriptCore/runtime/PromiseDeferredTimer.h >index 7ef577e28467b1b4588a298eb17f45d32ebab797..cbc5052d6d667e90fa3fac3ea56435baebe3f914 100644 >--- a/Source/JavaScriptCore/runtime/PromiseDeferredTimer.h >+++ b/Source/JavaScriptCore/runtime/PromiseDeferredTimer.h >@@ -47,6 +47,8 @@ public: > void doWork() override; > > void addPendingPromise(JSPromiseDeferred*, Vector<Strong<JSCell>>&& dependencies); >+ bool hasPendingPromise(JSPromiseDeferred* ticket); >+ bool hasDependancyInPendingPromise(JSPromiseDeferred* ticket, JSCell* dependency); > // JSPromiseDeferred should handle canceling when the promise is resolved or rejected. > bool cancelPendingPromise(JSPromiseDeferred*); > >diff --git a/Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.cpp b/Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.cpp >index c7ad0e3ddca8d64449af159171afcb86a380ea69..6b8be61ea43c7a5e05b56a9822c617b39a40a705 100644 >--- a/Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.cpp >+++ b/Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.cpp >@@ -1,5 +1,6 @@ > /* > * Copyright (C) 2016-2017 Apple Inc. All rights reserved. >+ * 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 >@@ -31,6 +32,7 @@ > #include "CatchScope.h" > #include "Exception.h" > #include "FunctionPrototype.h" >+#include "JSCBuiltins.h" > #include "JSCInlines.h" > #include "JSModuleNamespaceObject.h" > #include "JSPromiseDeferred.h" >@@ -39,6 +41,7 @@ > #include "JSWebAssemblyInstance.h" > #include "JSWebAssemblyModule.h" > #include "ObjectConstructor.h" >+#include "Options.h" > #include "PromiseDeferredTimer.h" > #include "StrongInlines.h" > #include "ThrowScope.h" >@@ -80,6 +83,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 +120,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 +154,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 +223,38 @@ 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)); >+ dependencies.append(Strong<JSCell>(vm, globalObject)); >+ 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 +300,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 +374,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..5f7c56a6933faae85bc9ec215f92a0d3842a2898 100644 >--- a/Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.h >+++ b/Source/JavaScriptCore/wasm/js/WebAssemblyPrototype.h >@@ -1,5 +1,6 @@ > /* > * Copyright (C) 2016 Apple Inc. All rights reserved. >+ * 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 >@@ -39,18 +40,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 50840d826a4f8ce055531a194735df51b5167faa..17b66798a8437de3f4588bbcf0dc5260d92a578c 100644 >--- a/Source/WebCore/Configurations/FeatureDefines.xcconfig >+++ b/Source/WebCore/Configurations/FeatureDefines.xcconfig >@@ -355,6 +355,8 @@ ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN_macosx = ENABLE_VIDEO_USES_ELEMENT_FULLSCRE > > ENABLE_WEBASSEMBLY = ; > >+ENABLE_WEBASSEMBLY_STREAMING_API = ; >+ > ENABLE_WEBGL = ENABLE_WEBGL; > > ENABLE_WEBGL2 = ENABLE_WEBGL2; >@@ -381,4 +383,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_INTL_PLURAL_RULES) $(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_INTL_PLURAL_RULES) $(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 50840d826a4f8ce055531a194735df51b5167faa..17b66798a8437de3f4588bbcf0dc5260d92a578c 100644 >--- a/Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig >+++ b/Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig >@@ -355,6 +355,8 @@ ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN_macosx = ENABLE_VIDEO_USES_ELEMENT_FULLSCRE > > ENABLE_WEBASSEMBLY = ; > >+ENABLE_WEBASSEMBLY_STREAMING_API = ; >+ > ENABLE_WEBGL = ENABLE_WEBGL; > > ENABLE_WEBGL2 = ENABLE_WEBGL2; >@@ -381,4 +383,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_INTL_PLURAL_RULES) $(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_INTL_PLURAL_RULES) $(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..b49d12ef8d51aef6ddfca14c5a18d4a8be91996e 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,137 @@ JSC::JSObject* JSDOMWindowBase::moduleLoaderCreateImportMetaProperties(JSC::JSGl > return constructEmptyObject(exec, globalObject->nullPrototypeObjectStructure()); > } > >+#if ENABLE(WEBASSEMBLY) >+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; >+} >+ >+static void handleResponseOnStreamingAction(JSC::JSGlobalObject* globalObject, JSC::ExecState* exec, FetchResponse* inputResponse, JSC::JSPromiseDeferred* promise, 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); >+ >+ actionCallback(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); >+ >+ actionCallback(exec, buffer->data(), buffer->size()); >+ }, [&] (std::nullptr_t&) { >+ promise->reject(exec, createTypeError(exec, ASCIILiteral("Unexpected Response's Content-type"))); >+ }); >+} >+ >+void JSDOMWindowBase::compileStreaming(JSC::JSGlobalObject* globalObject, JSC::ExecState* exec, JSC::JSPromiseDeferred* promise, JSC::JSValue source) >+{ >+ ASSERT(source); >+ >+ VM& vm = exec->vm(); >+ >+ ASSERT(vm.promiseDeferredTimer->hasPendingPromise(promise)); >+ ASSERT(vm.promiseDeferredTimer->hasDependancyInPendingPromise(promise, globalObject)); >+ >+ if (auto inputResponse = JSFetchResponse::toWrapped(vm, source)) { >+ handleResponseOnStreamingAction(globalObject, exec, inputResponse, promise, [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)); >+ }); >+ } else >+ promise->reject(exec, createTypeError(exec, ASCIILiteral("first argument must be an Response or Promise for Response"))); >+} >+ >+void JSDOMWindowBase::instantiateStreaming(JSC::JSGlobalObject* globalObject, JSC::ExecState* exec, JSC::JSPromiseDeferred* promise, JSC::JSValue source, JSC::JSObject* importedObject) >+{ >+ ASSERT(source); >+ >+ VM& vm = exec->vm(); >+ >+ ASSERT(vm.promiseDeferredTimer->hasPendingPromise(promise)); >+ ASSERT(vm.promiseDeferredTimer->hasDependancyInPendingPromise(promise, globalObject)); >+ ASSERT(vm.promiseDeferredTimer->hasDependancyInPendingPromise(promise, importedObject)); >+ >+ if (auto inputResponse = JSFetchResponse::toWrapped(vm, source)) { >+ handleResponseOnStreamingAction(globalObject, exec, inputResponse, promise, [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); >+ }); >+ } else >+ promise->reject(exec, createTypeError(exec, ASCIILiteral("first argument must be an Response or Promise for Response"))); >+} >+#else >+static void JSDOMWindowBase::compileStreaming(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSPromiseDeferred*, JSC::JSValue) >+{ >+ ASSERT_NOT_REACHED(); >+} >+static void JSDOMWindowBase::instantiateStreaming(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSPromiseDeferred*, JSC::JSValue, JSC::JSObject*) >+{ >+ ASSERT_NOT_REACHED(); >+} >+#endif >+ > 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..b60ef47b9fa6f531871faf24b2e74366f9c409d9 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,17 @@ 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 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 50840d826a4f8ce055531a194735df51b5167faa..17b66798a8437de3f4588bbcf0dc5260d92a578c 100644 >--- a/Source/WebKit/Configurations/FeatureDefines.xcconfig >+++ b/Source/WebKit/Configurations/FeatureDefines.xcconfig >@@ -355,6 +355,8 @@ ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN_macosx = ENABLE_VIDEO_USES_ELEMENT_FULLSCRE > > ENABLE_WEBASSEMBLY = ; > >+ENABLE_WEBASSEMBLY_STREAMING_API = ; >+ > ENABLE_WEBGL = ENABLE_WEBGL; > > ENABLE_WEBGL2 = ENABLE_WEBGL2; >@@ -381,4 +383,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_INTL_PLURAL_RULES) $(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_INTL_PLURAL_RULES) $(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 50840d826a4f8ce055531a194735df51b5167faa..17b66798a8437de3f4588bbcf0dc5260d92a578c 100644 >--- a/Source/WebKitLegacy/mac/Configurations/FeatureDefines.xcconfig >+++ b/Source/WebKitLegacy/mac/Configurations/FeatureDefines.xcconfig >@@ -355,6 +355,8 @@ ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN_macosx = ENABLE_VIDEO_USES_ELEMENT_FULLSCRE > > ENABLE_WEBASSEMBLY = ; > >+ENABLE_WEBASSEMBLY_STREAMING_API = ; >+ > ENABLE_WEBGL = ENABLE_WEBGL; > > ENABLE_WEBGL2 = ENABLE_WEBGL2; >@@ -381,4 +383,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_INTL_PLURAL_RULES) $(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_INTL_PLURAL_RULES) $(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 4aed8cb00a64a36598a5b8fe149633c38526ed01..0bbbd1fe2bcc7c4cd42a0dc706356d41a5f4d057 100644 >--- a/Source/cmake/WebKitFeatures.cmake >+++ b/Source/cmake/WebKitFeatures.cmake >@@ -175,6 +175,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 OFF) > 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 5f79440757d43bbc2a53367644569ddff278741a..a3ee3e610105035f50bfa97e69b5615c1ba22ecc 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,12 @@ >+2018-04-28 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-28 Sihui Liu <sihui_liu@apple.com> > > [Cocoa] Set HTTPOnly flag when converting Cookie to NSHTTPCookie >diff --git a/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig b/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig >index 50840d826a4f8ce055531a194735df51b5167faa..17b66798a8437de3f4588bbcf0dc5260d92a578c 100644 >--- a/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig >+++ b/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig >@@ -355,6 +355,8 @@ ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN_macosx = ENABLE_VIDEO_USES_ELEMENT_FULLSCRE > > ENABLE_WEBASSEMBLY = ; > >+ENABLE_WEBASSEMBLY_STREAMING_API = ; >+ > ENABLE_WEBGL = ENABLE_WEBGL; > > ENABLE_WEBGL2 = ENABLE_WEBGL2; >@@ -381,4 +383,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_INTL_PLURAL_RULES) $(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_INTL_PLURAL_RULES) $(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 a4f312415438db70eca411c962f93e2b61e6eb25..f17581b5fbe1a7791760a5d415e1253a607d83cf 100644 >--- a/LayoutTests/imported/w3c/ChangeLog >+++ b/LayoutTests/imported/w3c/ChangeLog >@@ -1,3 +1,20 @@ >+2018-04-28 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_instantiate_test-expected.txt: Added. >+ * web-platform-tests/wasm/wasm_stream_instantiate_test.html: Added. >+ > 2018-04-27 Ryan Haddad <ryanhaddad@apple.com> > > Rebaseline imported/w3c/web-platform-tests/url/url-setters.html after r231110. >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..613636078d6413592308d507c15f8dea71853254 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_compile_test-expected.txt >@@ -0,0 +1,12 @@ >+ >+FAIL compileStreaming using resolved response promise_test: Unhandled rejection with value: object "TypeError: WebAssembly.compileStreaming is not a function. (In 'WebAssembly.compileStreaming(response)', 'WebAssembly.compileStreaming' is undefined)" >+FAIL compileStreaming using resolved response and check instantiate promise_test: Unhandled rejection with value: object "TypeError: WebAssembly.compileStreaming is not a function. (In 'WebAssembly.compileStreaming(response)', 'WebAssembly.compileStreaming' is undefined)" >+FAIL compileStreaming using promise response from fetch and check instantiate promise_test: Unhandled rejection with value: object "TypeError: WebAssembly.compileStreaming is not a function. (In 'WebAssembly.compileStreaming(result)', 'WebAssembly.compileStreaming' is undefined)" >+FAIL compileStreaming raise error if wrong mime type assert_true: expected true got false >+FAIL compileStreaming raise error if no mime type assert_true: expected true got false >+FAIL compileStreaming raise error if 404 status assert_equals: expected "Response has not returned OK status" but got "WebAssembly.compileStreaming is not a function. (In 'WebAssembly.compileStreaming(result)', 'WebAssembly.compileStreaming' is undefined)" >+FAIL compileStreaming check CORS promise_test: Unhandled rejection with value: object "TypeError: WebAssembly.compileStreaming is not a function. (In 'WebAssembly.compileStreaming(result)', 'WebAssembly.compileStreaming' is undefined)" >+FAIL compileStreaming raise error if no-cors assert_equals: expected "Response is not CORS-same-origin" but got "WebAssembly.compileStreaming is not a function. (In 'WebAssembly.compileStreaming(result)', 'WebAssembly.compileStreaming' is undefined)" >+FAIL compileStreaming receive promise with response created from ArrayBuffer promise_test: Unhandled rejection with value: object "TypeError: WebAssembly.compileStreaming is not a function. (In 'WebAssembly.compileStreaming(new Response(v, { headers: { "Content-Type" : "application/wasm" }}))', 'WebAssembly.compileStreaming' is undefined)" >+FAIL compileStreaming receive response that deliver data by chunks as bufferArray promise_test: Unhandled rejection with value: object "TypeError: WebAssembly.compileStreaming is not a function. (In 'WebAssembly.compileStreaming(new Response(stream, { headers: { "Content-Type" : "application/wasm" }}))', 'WebAssembly.compileStreaming' is undefined)" >+ >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_instantiate_test-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_instantiate_test-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4137cc491628c995bc59b4106e1f30c0b11ea360 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_instantiate_test-expected.txt >@@ -0,0 +1,12 @@ >+ >+FAIL instantiateStreaming using resolved response promise_test: Unhandled rejection with value: object "TypeError: WebAssembly.instantiateStreaming is not a function. (In 'WebAssembly.instantiateStreaming(response)', 'WebAssembly.instantiateStreaming' is undefined)" >+FAIL instantiateStreaming using resolved response and check instantiate promise_test: Unhandled rejection with value: object "TypeError: WebAssembly.instantiateStreaming is not a function. (In 'WebAssembly.instantiateStreaming(response)', 'WebAssembly.instantiateStreaming' is undefined)" >+FAIL instantiateStreaming using promise response from fetch and check instantiate promise_test: Unhandled rejection with value: object "TypeError: WebAssembly.instantiateStreaming is not a function. (In 'WebAssembly.instantiateStreaming(result)', 'WebAssembly.instantiateStreaming' is undefined)" >+FAIL instantiateStreaming raise error if wrong mime type assert_true: expected true got false >+FAIL instantiateStreaming raise error if no mime type assert_true: expected true got false >+FAIL instantiateStreaming raise error if 404 status assert_equals: expected "Response has not returned OK status" but got "WebAssembly.instantiateStreaming is not a function. (In 'WebAssembly.instantiateStreaming(result)', 'WebAssembly.instantiateStreaming' is undefined)" >+FAIL instantiateStreaming check CORS promise_test: Unhandled rejection with value: object "TypeError: WebAssembly.instantiateStreaming is not a function. (In 'WebAssembly.instantiateStreaming(result)', 'WebAssembly.instantiateStreaming' is undefined)" >+FAIL instantiateStreaming raise error if no-cors assert_equals: expected "Response is not CORS-same-origin" but got "WebAssembly.instantiateStreaming is not a function. (In 'WebAssembly.instantiateStreaming(result)', 'WebAssembly.instantiateStreaming' is undefined)" >+FAIL instantiateStreaming receive promise with response created from ArrayBuffer promise_test: Unhandled rejection with value: object "TypeError: WebAssembly.instantiateStreaming is not a function. (In 'WebAssembly.instantiateStreaming(new Response(v, { headers: { "Content-Type" : "application/wasm" }}))', 'WebAssembly.instantiateStreaming' is undefined)" >+FAIL instantiateStreaming receive response that deliver data by chunks as bufferArray promise_test: Unhandled rejection with value: object "TypeError: WebAssembly.instantiateStreaming is not a function. (In 'WebAssembly.instantiateStreaming(new Response(stream, { headers: { "Content-Type" : "application/wasm" }}))', 'WebAssembly.instantiateStreaming' is undefined)" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_instantiate_test.html b/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_instantiate_test.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2d0f35d6cfb668235de13273e611bc1d524f3b1b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wasm/wasm_stream_instantiate_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 58ba7ebe482742983bbfbd32bea7cfb4b89b6633..39195de895031d3827ab4e5fbac45b050021b4ff 100644 >--- a/ChangeLog >+++ b/ChangeLog >@@ -1,3 +1,32 @@ >+2018-04-28 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!). >+ >+ * Source/cmake/WebKitFeatures.cmake: >+ >+2018-04-28 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!). >+ >+ * Source/cmake/WebKitFeatures.cmake: >+ >+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-26 Daniel Bates <dabates@apple.com> > > ASSERTION FAILED: ASSERT(!containsImage || MIMETypeRegistry::isSupportedImageResourceMIMEType([resource MIMEType])) in -[NSPasteboard(WebExtras) _web_writePromisedRTFDFromArchive:containsImage:]
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