Changeset 223237 in webkit for trunk/Source/JavaScriptCore/ChangeLog
- Timestamp:
- Oct 12, 2017, 6:12:48 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r223232 r223237 1 2017-10-12 Yusuke Suzuki <[email protected]> 2 3 Support integrity="" on module scripts 4 https://bugs.webkit.org/show_bug.cgi?id=177959 5 6 Reviewed by Sam Weinig. 7 8 This patch adds Subresource Integrity check for module scripts. Currently, 9 only top-level module can be verified with integrity parameter since there 10 is no way to perform integrity check onto the imported modules. 11 12 In JSC side, we add `parameters` to the entry point of the module loader 13 pipeline. This is fetching parameters and used when fetching modules. 14 15 We separately pass this parameters to the pipeline along with the script fetcher. 16 The script fetcher is only one for module graph since this is the initiator of 17 this module graph loading. On the other hand, this parameters is for each 18 module fetching. While setting "integrity" parameters to this script fetcher is 19 sufficient to pass parameters to top-level-module's fetching, it is not enough 20 for the future extension. 21 22 In the future, we will investigate a way to pass parameters to each non-top-level 23 module. At that time, this `parameters` should be per-module. This is because 24 "integrity" value should be different for each module. For example, we will accept 25 some form of syntax to add parameters to `import`. Some proposed syntax is like 26 https://discourse.wicg.io/t/specifying-nonce-or-integrity-when-importing-modules/1861 27 28 import "./xxx.js" integrity "xxxxxxx" 29 30 In this case, this `parameters` will be passed to "./xxx.js" module fetching. This 31 `parameters` should be different from the one of top-level-module's one. That's why 32 we need per-module `parameters` and why this patch adds `parameters` to the module pipeline. 33 34 On the other hand, we also want to keep script fetcher. This `per-module-graph` thing 35 is important to offer module-graph-wide information. For example, import.meta would 36 have `import.meta.scriptElement`, which is the script element fetching the module graph 37 including this. So, we keep the both, script fetcher and parameters. 38 https://github.com/tc39/proposal-import-meta 39 40 This parameters will be finally used by pipeline's fetch hook, and WebCore side 41 can use this parameters to fetch modules. 42 43 We also further clean up the module pipeline by dropping unnecessary features. 44 45 * JavaScriptCore.xcodeproj/project.pbxproj: 46 * Sources.txt: 47 * builtins/ModuleLoaderPrototype.js: 48 (requestFetch): 49 (requestInstantiate): 50 (requestSatisfy): 51 (loadModule): 52 (loadAndEvaluateModule): 53 This loadAndEvaluateModule should be implemented by just calling loadModule and 54 linkAndEvaluateModule. We can drop requestReady and requestLink. 55 56 (requestLink): Deleted. 57 (requestImportModule): Deleted. 58 * jsc.cpp: 59 (GlobalObject::moduleLoaderImportModule): 60 (GlobalObject::moduleLoaderFetch): 61 import and fetch hook takes parameters. Currently, we always pass `undefined` for 62 import hook. When dynamic `import()` is extended to accept additional parameters 63 like integrity, this parameters will be replaced with the actual value. 64 65 (functionLoadModule): 66 (runWithOptions): 67 * runtime/Completion.cpp: 68 (JSC::loadAndEvaluateModule): 69 (JSC::loadModule): 70 (JSC::importModule): 71 * runtime/Completion.h: 72 * runtime/JSGlobalObject.h: 73 * runtime/JSGlobalObjectFunctions.cpp: 74 (JSC::globalFuncImportModule): 75 * runtime/JSModuleLoader.cpp: 76 (JSC::JSModuleLoader::loadAndEvaluateModule): 77 (JSC::JSModuleLoader::loadModule): 78 (JSC::JSModuleLoader::requestImportModule): 79 (JSC::JSModuleLoader::importModule): 80 (JSC::JSModuleLoader::fetch): 81 * runtime/JSModuleLoader.h: 82 * runtime/JSScriptFetchParameters.cpp: Added. 83 (JSC::JSScriptFetchParameters::destroy): 84 * runtime/JSScriptFetchParameters.h: Added. 85 (JSC::JSScriptFetchParameters::createStructure): 86 (JSC::JSScriptFetchParameters::create): 87 (JSC::JSScriptFetchParameters::parameters const): 88 (JSC::JSScriptFetchParameters::JSScriptFetchParameters): 89 Add ScriptFetchParameters' JSCell wrapper, JSScriptFetchParameters. 90 It is used in the module pipeline. 91 92 * runtime/JSType.h: 93 * runtime/ModuleLoaderPrototype.cpp: 94 (JSC::moduleLoaderPrototypeFetch): 95 * runtime/ScriptFetchParameters.h: Added. 96 (JSC::ScriptFetchParameters::~ScriptFetchParameters): 97 Add ScriptFetchParameters. We can define our own custom ScriptFetchParameters 98 by inheriting this class. WebCore creates ModuleFetchParameters by inheriting 99 this. 100 101 * runtime/VM.cpp: 102 (JSC::VM::VM): 103 * runtime/VM.h: 104 1 105 2017-10-11 Yusuke Suzuki <[email protected]> 2 106
Note:
See TracChangeset
for help on using the changeset viewer.