OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2010 Google, Inc. All Rights Reserved. | 2 * Copyright (C) 2010 Google, Inc. All Rights Reserved. |
3 * Copyright (C) 2011 Apple Inc. All rights reserved. | 3 * Copyright (C) 2011 Apple Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 20 matching lines...) Expand all Loading... | |
31 #include "core/dom/Comment.h" | 31 #include "core/dom/Comment.h" |
32 #include "core/dom/DocumentFragment.h" | 32 #include "core/dom/DocumentFragment.h" |
33 #include "core/dom/DocumentType.h" | 33 #include "core/dom/DocumentType.h" |
34 #include "core/dom/Element.h" | 34 #include "core/dom/Element.h" |
35 #include "core/dom/ScriptLoader.h" | 35 #include "core/dom/ScriptLoader.h" |
36 #include "core/dom/TemplateContentDocumentFragment.h" | 36 #include "core/dom/TemplateContentDocumentFragment.h" |
37 #include "core/dom/Text.h" | 37 #include "core/dom/Text.h" |
38 #include "core/frame/LocalFrame.h" | 38 #include "core/frame/LocalFrame.h" |
39 #include "core/html/HTMLFormElement.h" | 39 #include "core/html/HTMLFormElement.h" |
40 #include "core/html/HTMLHtmlElement.h" | 40 #include "core/html/HTMLHtmlElement.h" |
41 #include "core/html/HTMLLinkElement.h" | |
41 #include "core/html/HTMLPlugInElement.h" | 42 #include "core/html/HTMLPlugInElement.h" |
42 #include "core/html/HTMLScriptElement.h" | 43 #include "core/html/HTMLScriptElement.h" |
43 #include "core/html/HTMLTemplateElement.h" | 44 #include "core/html/HTMLTemplateElement.h" |
44 #include "core/html/parser/AtomicHTMLToken.h" | 45 #include "core/html/parser/AtomicHTMLToken.h" |
45 #include "core/html/parser/HTMLParserIdioms.h" | 46 #include "core/html/parser/HTMLParserIdioms.h" |
46 #include "core/html/parser/HTMLStackItem.h" | 47 #include "core/html/parser/HTMLStackItem.h" |
47 #include "core/html/parser/HTMLToken.h" | 48 #include "core/html/parser/HTMLToken.h" |
48 #include "core/loader/FrameLoader.h" | 49 #include "core/loader/FrameLoader.h" |
49 #include "core/loader/FrameLoaderClient.h" | 50 #include "core/loader/FrameLoaderClient.h" |
50 #include "core/svg/SVGScriptElement.h" | 51 #include "core/svg/SVGScriptElement.h" |
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
619 void HTMLConstructionSite::insertHTMLElement(AtomicHTMLToken* token) | 620 void HTMLConstructionSite::insertHTMLElement(AtomicHTMLToken* token) |
620 { | 621 { |
621 RefPtrWillBeRawPtr<HTMLElement> element = createHTMLElement(token); | 622 RefPtrWillBeRawPtr<HTMLElement> element = createHTMLElement(token); |
622 attachLater(currentNode(), element); | 623 attachLater(currentNode(), element); |
623 m_openElements.push(HTMLStackItem::create(element.release(), token)); | 624 m_openElements.push(HTMLStackItem::create(element.release(), token)); |
624 } | 625 } |
625 | 626 |
626 void HTMLConstructionSite::insertSelfClosingHTMLElementDestroyingToken(AtomicHTM LToken* token) | 627 void HTMLConstructionSite::insertSelfClosingHTMLElementDestroyingToken(AtomicHTM LToken* token) |
627 { | 628 { |
628 ASSERT(token->type() == HTMLToken::StartTag); | 629 ASSERT(token->type() == HTMLToken::StartTag); |
630 | |
631 // Link tags require special processing in order to ensure that they don't e xecute script when | |
632 // they ought not to. | |
633 if (token->name() == linkTag) { | |
634 insertLinkElement(token); | |
dglazkov
2016/02/05 18:25:53
Would it be better to just split linkTag from http
| |
635 return; | |
636 } | |
637 | |
629 // Normally HTMLElementStack is responsible for calling finishParsingChildre n, | 638 // Normally HTMLElementStack is responsible for calling finishParsingChildre n, |
630 // but self-closing elements are never in the element stack so the stack | 639 // but self-closing elements are never in the element stack so the stack |
631 // doesn't get a chance to tell them that we're done parsing their children. | 640 // doesn't get a chance to tell them that we're done parsing their children. |
632 attachLater(currentNode(), createHTMLElement(token), true); | 641 attachLater(currentNode(), createHTMLElement(token), true); |
633 // FIXME: Do we want to acknowledge the token's self-closing flag? | 642 // FIXME: Do we want to acknowledge the token's self-closing flag? |
634 // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization. html#acknowledge-self-closing-flag | 643 // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization. html#acknowledge-self-closing-flag |
635 } | 644 } |
636 | 645 |
637 void HTMLConstructionSite::insertFormattingElement(AtomicHTMLToken* token) | 646 void HTMLConstructionSite::insertFormattingElement(AtomicHTMLToken* token) |
638 { | 647 { |
(...skipping 13 matching lines...) Expand all Loading... | |
652 // those flags or effects thereof. | 661 // those flags or effects thereof. |
653 const bool parserInserted = m_parserContentPolicy != AllowScriptingContentAn dDoNotMarkAlreadyStarted; | 662 const bool parserInserted = m_parserContentPolicy != AllowScriptingContentAn dDoNotMarkAlreadyStarted; |
654 const bool alreadyStarted = m_isParsingFragment && parserInserted; | 663 const bool alreadyStarted = m_isParsingFragment && parserInserted; |
655 RefPtrWillBeRawPtr<HTMLScriptElement> element = HTMLScriptElement::create(ow nerDocumentForCurrentNode(), parserInserted, alreadyStarted); | 664 RefPtrWillBeRawPtr<HTMLScriptElement> element = HTMLScriptElement::create(ow nerDocumentForCurrentNode(), parserInserted, alreadyStarted); |
656 setAttributes(element.get(), token, m_parserContentPolicy); | 665 setAttributes(element.get(), token, m_parserContentPolicy); |
657 if (scriptingContentIsAllowed(m_parserContentPolicy)) | 666 if (scriptingContentIsAllowed(m_parserContentPolicy)) |
658 attachLater(currentNode(), element); | 667 attachLater(currentNode(), element); |
659 m_openElements.push(HTMLStackItem::create(element.release(), token)); | 668 m_openElements.push(HTMLStackItem::create(element.release(), token)); |
660 } | 669 } |
661 | 670 |
671 void HTMLConstructionSite::insertLinkElement(AtomicHTMLToken* token) | |
672 { | |
673 // We use the same 'alreadyStarted' flag for link elements as we do for scri pt elements. That isn't | |
674 // in the HTML spec, or in the HTML Imports spec, but we need it for sane be havior in the latter. | |
675 // | |
676 // See 'insertScriptElement()' above for detail. | |
677 const bool parserInserted = m_parserContentPolicy != AllowScriptingContentAn dDoNotMarkAlreadyStarted; | |
kouhei (in TOK)
2016/02/08 01:30:24
I'm not sure if we should respect "AllowScriptingC
| |
678 const bool alreadyStarted = m_isParsingFragment && parserInserted; | |
679 RefPtrWillBeRawPtr<HTMLLinkElement> element = HTMLLinkElement::create(ownerD ocumentForCurrentNode(), parserInserted, alreadyStarted); | |
680 setAttributes(element.get(), token, m_parserContentPolicy); | |
681 attachLater(currentNode(), element, true); | |
682 } | |
683 | |
662 void HTMLConstructionSite::insertForeignElement(AtomicHTMLToken* token, const At omicString& namespaceURI) | 684 void HTMLConstructionSite::insertForeignElement(AtomicHTMLToken* token, const At omicString& namespaceURI) |
663 { | 685 { |
664 ASSERT(token->type() == HTMLToken::StartTag); | 686 ASSERT(token->type() == HTMLToken::StartTag); |
665 notImplemented(); // parseError when xmlns or xmlns:xlink are wrong. | 687 notImplemented(); // parseError when xmlns or xmlns:xlink are wrong. |
666 | 688 |
667 RefPtrWillBeRawPtr<Element> element = createElement(token, namespaceURI); | 689 RefPtrWillBeRawPtr<Element> element = createElement(token, namespaceURI); |
668 if (scriptingContentIsAllowed(m_parserContentPolicy) || !toScriptLoaderIfPos sible(element.get())) | 690 if (scriptingContentIsAllowed(m_parserContentPolicy) || !toScriptLoaderIfPos sible(element.get())) |
669 attachLater(currentNode(), element, token->selfClosing()); | 691 attachLater(currentNode(), element, token->selfClosing()); |
670 if (!token->selfClosing()) | 692 if (!token->selfClosing()) |
671 m_openElements.push(HTMLStackItem::create(element.release(), token, name spaceURI)); | 693 m_openElements.push(HTMLStackItem::create(element.release(), token, name spaceURI)); |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
871 queueTask(task); | 893 queueTask(task); |
872 } | 894 } |
873 | 895 |
874 DEFINE_TRACE(HTMLConstructionSite::PendingText) | 896 DEFINE_TRACE(HTMLConstructionSite::PendingText) |
875 { | 897 { |
876 visitor->trace(parent); | 898 visitor->trace(parent); |
877 visitor->trace(nextChild); | 899 visitor->trace(nextChild); |
878 } | 900 } |
879 | 901 |
880 } // namespace blink | 902 } // namespace blink |
OLD | NEW |