Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Jun 24, 2022. It is now read-only.
/WebKit-httpPublic archive

Commit42cced1

Browse files
author
utatane.tea@gmail.com
committed
[WebCore] Implement import.meta.url
https://bugs.webkit.org/show_bug.cgi?id=178672Reviewed by Darin Adler.Source/WebCore:This patch implements `import.meta.url` field, which holds a base urlof the currently executing module[1].In the case of embedded modules, this field becomes the URL of theembedding HTML file. In the case of imported modules, the URL becomesthe URL of the executed module script file.[1]:whatwg/html#3141* bindings/js/JSDOMWindowBase.cpp:(WebCore::JSDOMWindowBase::moduleLoaderCreateImportMetaProperties):* bindings/js/JSDOMWindowBase.h:* bindings/js/ScriptModuleLoader.cpp:(WebCore::ScriptModuleLoader::moduleURL):(WebCore::ScriptModuleLoader::evaluate):(WebCore::ScriptModuleLoader::createImportMetaProperties):* bindings/js/ScriptModuleLoader.h:LayoutTests:* js/dom/modules/import-meta-url-expected.txt: Added.* js/dom/modules/import-meta-url.html: Added.* js/dom/modules/script-tests/import-meta-url-second-level.js: Added.* js/dom/modules/script-tests/import-meta-url-top-level.js: Added.* js/dom/modules/script-tests/import-meta-url.js: Added.git-svn-id:http://svn.webkit.org/repository/webkit/trunk@224736 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent4a3a656 commit42cced1

File tree

11 files changed

+121
-9
lines changed

11 files changed

+121
-9
lines changed

‎LayoutTests/ChangeLog

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
2017-11-12 Yusuke Suzuki <utatane.tea@gmail.com>
2+
3+
[WebCore] Implement import.meta.url
4+
https://bugs.webkit.org/show_bug.cgi?id=178672
5+
6+
Reviewed by Darin Adler.
7+
8+
* js/dom/modules/import-meta-url-expected.txt: Added.
9+
* js/dom/modules/import-meta-url.html: Added.
10+
* js/dom/modules/script-tests/import-meta-url-second-level.js: Added.
11+
* js/dom/modules/script-tests/import-meta-url-top-level.js: Added.
12+
* js/dom/modules/script-tests/import-meta-url.js: Added.
13+
114
2017-11-11 Chris Dumez <cdumez@apple.com>
215

316
Re-sync Service Workers web-platform-tests from upstream
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Test import.meta.url.
2+
3+
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
4+
5+
6+
Module is not executed yet.
7+
PASS url.endsWith("js/dom/modules/import-meta-url.html") is true
8+
PASS url.endsWith("js/dom/modules/script-tests/import-meta-url-top-level.js") is true
9+
PASS url.endsWith("js/dom/modules/script-tests/import-meta-url-second-level.js") is true
10+
PASS successfullyParsed is true
11+
12+
TEST COMPLETE
13+
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<!DOCTYPE HTML>
2+
<html>
3+
<head>
4+
<scriptsrc="../../../resources/js-test-pre.js"></script>
5+
</head>
6+
<body>
7+
<script>
8+
description("Test import.meta.url.");
9+
10+
varbase=location.href.replace(/\/[^/]*$/,'');
11+
window.jsTestIsAsync=true;
12+
debug("Module is not executed yet.");
13+
</script>
14+
<scripttype="module">
15+
window.url=import.meta.url;
16+
shouldBeTrue(`url.endsWith("js/dom/modules/import-meta-url.html")`);
17+
</script>
18+
<scripttype="module"src="script-tests/import-meta-url-top-level.js"></script>
19+
<scripttype="module"src="script-tests/import-meta-url.js"></script>
20+
<scripttype="module">
21+
finishJSTest();
22+
</script>
23+
<scriptsrc="../../../resources/js-test-post.js"></script>
24+
</body>
25+
</html>
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
window.url=import.meta.url;
2+
shouldBeTrue(`url.endsWith("js/dom/modules/script-tests/import-meta-url-second-level.js")`);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
window.url=import.meta.url;
2+
shouldBeTrue(`url.endsWith("js/dom/modules/script-tests/import-meta-url-top-level.js")`);
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import"./import-meta-url-second-level.js"

‎Source/WebCore/ChangeLog

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,28 @@
1+
2017-11-12 Yusuke Suzuki <utatane.tea@gmail.com>
2+
3+
[WebCore] Implement import.meta.url
4+
https://bugs.webkit.org/show_bug.cgi?id=178672
5+
6+
Reviewed by Darin Adler.
7+
8+
This patch implements `import.meta.url` field, which holds a base url
9+
of the currently executing module[1].
10+
11+
In the case of embedded modules, this field becomes the URL of the
12+
embedding HTML file. In the case of imported modules, the URL becomes
13+
the URL of the executed module script file.
14+
15+
[1]: https://github.com/whatwg/html/pull/3141
16+
17+
* bindings/js/JSDOMWindowBase.cpp:
18+
(WebCore::JSDOMWindowBase::moduleLoaderCreateImportMetaProperties):
19+
* bindings/js/JSDOMWindowBase.h:
20+
* bindings/js/ScriptModuleLoader.cpp:
21+
(WebCore::ScriptModuleLoader::moduleURL):
22+
(WebCore::ScriptModuleLoader::evaluate):
23+
(WebCore::ScriptModuleLoader::createImportMetaProperties):
24+
* bindings/js/ScriptModuleLoader.h:
25+
126
2017-11-11 Dan Bernstein <mitz@apple.com>
227

328
[Xcode] WebCore generates unified sources during installhdrs

‎Source/WebCore/bindings/js/JSDOMWindowBase.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ const GlobalObjectMethodTable JSDOMWindowBase::s_globalObjectMethodTable = {
7272
&moduleLoaderImportModule,
7373
&moduleLoaderResolve,
7474
&moduleLoaderFetch,
75-
nullptr,//moduleLoaderCreateImportMetaProperties
75+
&moduleLoaderCreateImportMetaProperties,
7676
&moduleLoaderEvaluate,
7777
&promiseRejectionTracker,
7878
&defaultLanguage
@@ -398,6 +398,14 @@ JSC::JSInternalPromise* JSDOMWindowBase::moduleLoaderImportModule(JSC::JSGlobalO
398398
return deferred->reject(exec,jsUndefined());
399399
}
400400

401+
JSC::JSObject*JSDOMWindowBase::moduleLoaderCreateImportMetaProperties(JSC::JSGlobalObject* globalObject, JSC::ExecState* exec, JSC::JSModuleLoader* moduleLoader, JSC::JSValue moduleKey, JSC::JSModuleRecord* moduleRecord, JSC::JSValue scriptFetcher)
402+
{
403+
JSDOMWindowBase* thisObject = JSC::jsCast<JSDOMWindowBase*>(globalObject);
404+
if (RefPtr<Document> document = thisObject->wrapped().document())
405+
return document->moduleLoader()->createImportMetaProperties(globalObject, exec, moduleLoader, moduleKey, moduleRecord, scriptFetcher);
406+
returnconstructEmptyObject(exec, globalObject->nullPrototypeObjectStructure());
407+
}
408+
401409
voidJSDOMWindowBase::promiseRejectionTracker(JSGlobalObject* jsGlobalObject, ExecState* exec, JSPromise* promise, JSPromiseRejectionOperation operation)
402410
{
403411
// https://html.spec.whatwg.org/multipage/webappapis.html#the-hostpromiserejectiontracker-implementation

‎Source/WebCore/bindings/js/JSDOMWindowBase.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ class WEBCORE_EXPORT JSDOMWindowBase : public JSDOMGlobalObject {
7979
static JSC::JSInternalPromise*moduleLoaderFetch(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSModuleLoader*, JSC::JSValue, JSC::JSValue, JSC::JSValue);
8080
static JSC::JSValuemoduleLoaderEvaluate(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSModuleLoader*, JSC::JSValue, JSC::JSValue, JSC::JSValue);
8181
static JSC::JSInternalPromise*moduleLoaderImportModule(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSModuleLoader*, JSC::JSString*, JSC::JSValue,const JSC::SourceOrigin&);
82+
static JSC::JSObject*moduleLoaderCreateImportMetaProperties(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSModuleLoader*, JSC::JSValue, JSC::JSModuleRecord*, JSC::JSValue);
83+
8284
staticvoidpromiseRejectionTracker(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSPromise*, JSC::JSPromiseRejectionOperation);
8385

8486
RefPtr<DOMWindow> m_wrapped;

‎Source/WebCore/bindings/js/ScriptModuleLoader.cpp

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,15 @@ JSC::JSInternalPromise* ScriptModuleLoader::fetch(JSC::JSGlobalObject* jsGlobalO
182182
return jsPromise.promise();
183183
}
184184

185+
URLScriptModuleLoader::moduleURL(JSC::ExecState& state, JSC::JSValue moduleKeyValue)
186+
{
187+
if (moduleKeyValue.isSymbol())
188+
return m_document.url();
189+
190+
ASSERT(moduleKeyValue.isString());
191+
returnURL(URL(),asString(moduleKeyValue)->value(&state));
192+
}
193+
185194
JSC::JSValueScriptModuleLoader::evaluate(JSC::JSGlobalObject*, JSC::ExecState* exec, JSC::JSModuleLoader*, JSC::JSValue moduleKeyValue, JSC::JSValue moduleRecordValue, JSC::JSValue)
186195
{
187196
JSC::VM& vm = exec->vm();
@@ -194,14 +203,7 @@ JSC::JSValue ScriptModuleLoader::evaluate(JSC::JSGlobalObject*, JSC::ExecState*
194203
if (!moduleRecord)
195204
returnJSC::jsUndefined();
196205

197-
URL sourceURL;
198-
if (moduleKeyValue.isSymbol())
199-
sourceURL = m_document.url();
200-
elseif (moduleKeyValue.isString())
201-
sourceURL =URL(URL(),asString(moduleKeyValue)->value(exec));
202-
else
203-
returnJSC::throwTypeError(exec, scope,ASCIILiteral("Module key is not Symbol or String."));
204-
206+
URL sourceURL =moduleURL(*exec, moduleKeyValue);
205207
if (!sourceURL.isValid())
206208
returnJSC::throwTypeError(exec, scope,ASCIILiteral("Module key is an invalid URL."));
207209

@@ -257,6 +259,23 @@ JSC::JSInternalPromise* ScriptModuleLoader::importModule(JSC::JSGlobalObject* js
257259
returnJSC::importModule(exec,JSC::Identifier::fromString(&vm, result->string()), parameters,JSC::JSScriptFetcher::create(vm,WTFMove(scriptFetcher) ));
258260
}
259261

262+
JSC::JSObject*ScriptModuleLoader::createImportMetaProperties(JSC::JSGlobalObject* globalObject, JSC::ExecState* exec, JSC::JSModuleLoader*, JSC::JSValue moduleKeyValue, JSC::JSModuleRecord*, JSC::JSValue)
263+
{
264+
auto& vm = exec->vm();
265+
auto scope =DECLARE_THROW_SCOPE(vm);
266+
267+
URL sourceURL =moduleURL(*exec, moduleKeyValue);
268+
ASSERT(sourceURL.isValid());
269+
270+
auto* metaProperties =JSC::constructEmptyObject(exec, globalObject->nullPrototypeObjectStructure());
271+
RETURN_IF_EXCEPTION(scope,nullptr);
272+
273+
metaProperties->putDirect(vm,JSC::Identifier::fromString(&vm,"url"),JSC::jsString(&vm, sourceURL.string()));
274+
RETURN_IF_EXCEPTION(scope,nullptr);
275+
276+
return metaProperties;
277+
}
278+
260279
voidScriptModuleLoader::notifyFinished(CachedModuleScriptLoader& loader, RefPtr<DeferredPromise> promise)
261280
{
262281
// https://html.spec.whatwg.org/multipage/webappapis.html#fetch-a-single-module-script

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp