Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(113)

Side by Side Diff: third_party/WebKit/Source/core/dom/ScriptLoader.cpp

Issue 2842923002: Support Inline module script (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights
6 * reserved. 6 * reserved.
7 * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org> 7 * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org>
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 // TODO(hiroshige): Make them merged or consistent. 474 // TODO(hiroshige): Make them merged or consistent.
475 475
476 // 22.2. "Switch on the script's type:" 476 // 22.2. "Switch on the script's type:"
477 switch (GetScriptType()) { 477 switch (GetScriptType()) {
478 // - "classic": 478 // - "classic":
479 case ScriptType::kClassic: 479 case ScriptType::kClassic:
480 // TODO(hiroshige): Clarify how Step 22.2 is implemented for "classic". 480 // TODO(hiroshige): Clarify how Step 22.2 is implemented for "classic".
481 break; 481 break;
482 482
483 // - "module": 483 // - "module":
484 case ScriptType::kModule: 484 case ScriptType::kModule: {
485 // TODO(hiroshige): Implement inline module scripts. 485 // Dup of FetchScript() logic.
486 element_document.AddConsoleMessage(ConsoleMessage::Create( 486
487 kJSMessageSource, kErrorMessageLevel, 487 // 15. "Let CORS setting be the current state of the element's
488 "Inline module script is not yet supported", 488 // crossorigin content attribute."
489 SourceLocation::Create(element_document.Url().GetString(), 489 CrossOriginAttributeValue cross_origin =
490 script_start_position.line_.OneBasedInt(), 490 GetCrossOriginAttributeValue(element_->CrossOriginAttributeValue());
491 script_start_position.column_.OneBasedInt(), 491
492 nullptr))); 492 // 16. "Let module script credentials mode be determined by switching
493 return false; 493 // on CORS setting:"
494 WebURLRequest::FetchCredentialsMode credentials_mode =
495 WebURLRequest::kFetchCredentialsModeOmit;
496 switch (cross_origin) {
497 case kCrossOriginAttributeNotSet:
498 credentials_mode = WebURLRequest::kFetchCredentialsModeOmit;
499 break;
500 case kCrossOriginAttributeAnonymous:
501 credentials_mode = WebURLRequest::kFetchCredentialsModeSameOrigin;
502 break;
503 case kCrossOriginAttributeUseCredentials:
504 credentials_mode = WebURLRequest::kFetchCredentialsModeInclude;
505 break;
506 }
507 // 17. "If the script element has a nonce attribute,
508 // then let cryptographic nonce be that attribute's value.
509 // Otherwise, let cryptographic nonce be the empty string."
510 String nonce;
511 if (element_->IsNonceableElement())
512 nonce = element_->nonce();
513
514 // 19. "Let parser state be "parser-inserted"
515 // if the script element has been flagged as "parser-inserted",
516 // and "not parser-inserted" otherwise."
517 ParserDisposition parser_state =
518 IsParserInserted() ? kParserInserted : kNotParserInserted;
519
520 // End of dup.
521 KURL script_url =
522 (!element_document.IsInDocumentWrite() && parser_inserted_)
523 ? element_document.Url()
524 : KURL();
525
526 // 1. Let base URL be the script element's node document's document
527 // base URL.
528 KURL base_url = element_document.BaseURL();
529
530 // 2. Let script be the result of creating a module script using
531 // source text, settings, base URL, cryptographic nonce, parser state,
532 // and module script credentials mode.
533 Modulator* modulator = Modulator::From(
534 ToScriptStateForMainWorld(element_document.GetFrame()));
535 ScriptModule record = modulator->CompileModule(
536 ScriptContent(), base_url, kSharableCrossOrigin);
537 // 3. If this returns null, set the script's script to null and abort
538 // these substeps; the script is ready.
539 if (record.IsNull()) {
540 return false;
541 }
542
543 ModuleScript* script = ModuleScript::Create(
544 modulator, record, base_url, nonce, parser_state, credentials_mode);
545
546 // 4. Fetch the descendants of script (using an empty ancestor list).
547 // When this asynchronously completes, set the script's script to
548 // the result. At that time, the script is ready.
549 DCHECK(!module_tree_client_);
550 module_tree_client_ = ModulePendingScriptTreeClient::Create();
551 modulator->FetchDescendantsForInlineScript(script, module_tree_client_);
hiroshige 2017/04/26 04:54:59 [not specced] This CL jumps to Step 5. of https://
552 }
494 } 553 }
495 } 554 }
496 555
497 // [Intervention] 556 // [Intervention]
498 // Since the asynchronous, low priority fetch for doc.written blocked 557 // Since the asynchronous, low priority fetch for doc.written blocked
499 // script is not for execution, return early from here. Watch for its 558 // script is not for execution, return early from here. Watch for its
500 // completion to be able to remove it from the memory cache. 559 // completion to be able to remove it from the memory cache.
501 if (GetScriptType() == ScriptType::kClassic && 560 if (GetScriptType() == ScriptType::kClassic &&
502 document_write_intervention_ == 561 document_write_intervention_ ==
503 DocumentWriteIntervention::kFetchDocWrittenScriptDeferIdle) { 562 DocumentWriteIntervention::kFetchDocWrittenScriptDeferIdle) {
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
972 // then abort these steps at this point. The script is not executed. 1031 // then abort these steps at this point. The script is not executed.
973 return DeprecatedEqualIgnoringCase(event_attribute, "onload") || 1032 return DeprecatedEqualIgnoringCase(event_attribute, "onload") ||
974 DeprecatedEqualIgnoringCase(event_attribute, "onload()"); 1033 DeprecatedEqualIgnoringCase(event_attribute, "onload()");
975 } 1034 }
976 1035
977 String ScriptLoader::ScriptContent() const { 1036 String ScriptLoader::ScriptContent() const {
978 return element_->TextFromChildren(); 1037 return element_->TextFromChildren();
979 } 1038 }
980 1039
981 } // namespace blink 1040 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698