| OLD | NEW |
| 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 551 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 562 element_->HasSourceAttribute() && parser_inserted_ && | 562 element_->HasSourceAttribute() && parser_inserted_ && |
| 563 !element_->AsyncAttributeValue()) { | 563 !element_->AsyncAttributeValue()) { |
| 564 // This clause is implemented by the caller-side of prepareScript(): | 564 // This clause is implemented by the caller-side of prepareScript(): |
| 565 // - HTMLParserScriptRunner::requestParsingBlockingScript() | 565 // - HTMLParserScriptRunner::requestParsingBlockingScript() |
| 566 // - TODO(hiroshige): Investigate XMLDocumentParser::endElementNs() | 566 // - TODO(hiroshige): Investigate XMLDocumentParser::endElementNs() |
| 567 will_be_parser_executed_ = true; | 567 will_be_parser_executed_ = true; |
| 568 | 568 |
| 569 return true; | 569 return true; |
| 570 } | 570 } |
| 571 | 571 |
| 572 // 5th Clause: | |
| 573 // TODO(hiroshige): Reorder the clauses to match the spec. | |
| 574 // - "If the element does not have a src attribute, | |
| 575 // and the element has been flagged as "parser-inserted", | |
| 576 // and either the parser that created the script is an XML parser | |
| 577 // or it's an HTML parser whose script nesting level is not greater than | |
| 578 // one, | |
| 579 // and the Document of the HTML parser or XML parser that created | |
| 580 // the script element has a style sheet that is blocking scripts" | |
| 581 // The last part "... has a style sheet that is blocking scripts" | |
| 582 // is implemented in Document::isScriptExecutionReady(). | |
| 583 // Part of the condition check is done in | |
| 584 // HTMLParserScriptRunner::processScriptElementInternal(). | |
| 585 // TODO(hiroshige): Clean up the split condition check. | |
| 586 // We check that the type is "classic" here, because according to the spec | |
| 587 // a "module" script doesn't reach the 5th Clause because the 4th Clause | |
| 588 // catches all "module" scripts. | |
| 589 if (GetScriptType() == ScriptType::kClassic && | |
| 590 !element_->HasSourceAttribute() && parser_inserted_ && | |
| 591 !element_document.IsScriptExecutionReady()) { | |
| 592 // The former part of this clause is | |
| 593 // implemented by the caller-side of prepareScript(): | |
| 594 // - HTMLParserScriptRunner::requestParsingBlockingScript() | |
| 595 // - TODO(hiroshige): Investigate XMLDocumentParser::endElementNs() | |
| 596 will_be_parser_executed_ = true; | |
| 597 // "Set the element's "ready to be parser-executed" flag." | |
| 598 ready_to_be_parser_executed_ = true; | |
| 599 | |
| 600 return true; | |
| 601 } | |
| 602 | |
| 603 // 3rd Clause: | 572 // 3rd Clause: |
| 604 // - "If the script's type is "classic", | 573 // - "If the script's type is "classic", |
| 605 // and the element has a src attribute, | 574 // and the element has a src attribute, |
| 606 // and the element does not have an async attribute, | 575 // and the element does not have an async attribute, |
| 607 // and the element does not have the "non-blocking" flag set" | 576 // and the element does not have the "non-blocking" flag set" |
| 608 // - "If the script's type is "module", | 577 // - "If the script's type is "module", |
| 609 // and the element does not have an async attribute, | 578 // and the element does not have an async attribute, |
| 610 // and the element does not have the "non-blocking" flag set" | 579 // and the element does not have the "non-blocking" flag set" |
| 611 // TODO(hiroshige): Check the script's type and implement "module" case. | |
| 612 if ((GetScriptType() == ScriptType::kClassic && | 580 if ((GetScriptType() == ScriptType::kClassic && |
| 613 element_->HasSourceAttribute() && !element_->AsyncAttributeValue() && | 581 element_->HasSourceAttribute() && !element_->AsyncAttributeValue() && |
| 614 !non_blocking_) || | 582 !non_blocking_) || |
| 615 (GetScriptType() == ScriptType::kModule && | 583 (GetScriptType() == ScriptType::kModule && |
| 616 !element_->AsyncAttributeValue() && !non_blocking_)) { | 584 !element_->AsyncAttributeValue() && !non_blocking_)) { |
| 617 // "Add the element to the end of the list of scripts that will execute | 585 // "Add the element to the end of the list of scripts that will execute |
| 618 // in order as soon as possible associated with the node document of the | 586 // in order as soon as possible associated with the node document of the |
| 619 // script element at the time the prepare a script algorithm started." | 587 // script element at the time the prepare a script algorithm started." |
| 620 pending_script_ = CreatePendingScript(); | 588 pending_script_ = CreatePendingScript(); |
| 621 async_exec_type_ = ScriptRunner::kInOrder; | 589 async_exec_type_ = ScriptRunner::kInOrder; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 651 this, async_exec_type_); | 619 this, async_exec_type_); |
| 652 // Note that watchForLoad can immediately call pendingScriptFinished. | 620 // Note that watchForLoad can immediately call pendingScriptFinished. |
| 653 pending_script_->WatchForLoad(this); | 621 pending_script_->WatchForLoad(this); |
| 654 // The part "When the script is ready..." is implemented in | 622 // The part "When the script is ready..." is implemented in |
| 655 // ScriptRunner::notifyScriptReady(). | 623 // ScriptRunner::notifyScriptReady(). |
| 656 // TODO(hiroshige): Annotate it. | 624 // TODO(hiroshige): Annotate it. |
| 657 | 625 |
| 658 return true; | 626 return true; |
| 659 } | 627 } |
| 660 | 628 |
| 629 // The following clauses are executed only if the script's type is "classic" |
| 630 // and the element doesn't have a src attribute. |
| 631 DCHECK_EQ(GetScriptType(), ScriptType::kClassic); |
| 632 DCHECK(!is_external_script_); |
| 633 |
| 634 // 5th Clause: |
| 635 // - "If the element does not have a src attribute, |
| 636 // and the element has been flagged as "parser-inserted", |
| 637 // and either the parser that created the script is an XML parser |
| 638 // or it's an HTML parser whose script nesting level is not greater than |
| 639 // one, |
| 640 // and the Document of the HTML parser or XML parser that created |
| 641 // the script element has a style sheet that is blocking scripts" |
| 642 // The last part "... has a style sheet that is blocking scripts" |
| 643 // is implemented in Document::isScriptExecutionReady(). |
| 644 // Part of the condition check is done in |
| 645 // HTMLParserScriptRunner::processScriptElementInternal(). |
| 646 // TODO(hiroshige): Clean up the split condition check. |
| 647 if (!element_->HasSourceAttribute() && parser_inserted_ && |
| 648 !element_document.IsScriptExecutionReady()) { |
| 649 // The former part of this clause is |
| 650 // implemented by the caller-side of prepareScript(): |
| 651 // - HTMLParserScriptRunner::requestParsingBlockingScript() |
| 652 // - TODO(hiroshige): Investigate XMLDocumentParser::endElementNs() |
| 653 will_be_parser_executed_ = true; |
| 654 // "Set the element's "ready to be parser-executed" flag." |
| 655 ready_to_be_parser_executed_ = true; |
| 656 |
| 657 return true; |
| 658 } |
| 659 |
| 661 // 6th Clause: | 660 // 6th Clause: |
| 662 // - "Otherwise" | 661 // - "Otherwise" |
| 663 // "Immediately execute the script block, | 662 // "Immediately execute the script block, |
| 664 // even if other scripts are already executing." | 663 // even if other scripts are already executing." |
| 665 // Note: this block is also duplicated in | 664 // Note: this block is also duplicated in |
| 666 // HTMLParserScriptRunner::processScriptElementInternal(). | 665 // HTMLParserScriptRunner::processScriptElementInternal(). |
| 667 // TODO(hiroshige): Merge the duplicated code. | 666 // TODO(hiroshige): Merge the duplicated code. |
| 668 | 667 |
| 669 // This clause is executed only if the script's type is "classic" | |
| 670 // and the element doesn't have a src attribute. | |
| 671 DCHECK_EQ(GetScriptType(), ScriptType::kClassic); | |
| 672 DCHECK(!is_external_script_); | |
| 673 | |
| 674 // Reset line numbering for nested writes. | 668 // Reset line numbering for nested writes. |
| 675 TextPosition position = element_document.IsInDocumentWrite() | 669 TextPosition position = element_document.IsInDocumentWrite() |
| 676 ? TextPosition() | 670 ? TextPosition() |
| 677 : script_start_position; | 671 : script_start_position; |
| 678 KURL script_url = (!element_document.IsInDocumentWrite() && parser_inserted_) | 672 KURL script_url = (!element_document.IsInDocumentWrite() && parser_inserted_) |
| 679 ? element_document.Url() | 673 ? element_document.Url() |
| 680 : KURL(); | 674 : KURL(); |
| 681 | 675 |
| 682 if (!ExecuteScript(ClassicScript::Create( | 676 if (!ExecuteScript(ClassicScript::Create( |
| 683 ScriptSourceCode(ScriptContent(), script_url, position)))) { | 677 ScriptSourceCode(ScriptContent(), script_url, position)))) { |
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 987 // then abort these steps at this point. The script is not executed. | 981 // then abort these steps at this point. The script is not executed. |
| 988 return DeprecatedEqualIgnoringCase(event_attribute, "onload") || | 982 return DeprecatedEqualIgnoringCase(event_attribute, "onload") || |
| 989 DeprecatedEqualIgnoringCase(event_attribute, "onload()"); | 983 DeprecatedEqualIgnoringCase(event_attribute, "onload()"); |
| 990 } | 984 } |
| 991 | 985 |
| 992 String ScriptLoader::ScriptContent() const { | 986 String ScriptLoader::ScriptContent() const { |
| 993 return element_->TextFromChildren(); | 987 return element_->TextFromChildren(); |
| 994 } | 988 } |
| 995 | 989 |
| 996 } // namespace blink | 990 } // namespace blink |
| OLD | NEW |