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

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

Issue 2334223005: 2nd arg of document.createElement should be an object (Closed)
Patch Set: Created 4 years, 3 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 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved.
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved.
(...skipping 10 matching lines...) Expand all
21 * 21 *
22 * You should have received a copy of the GNU Library General Public License 22 * You should have received a copy of the GNU Library General Public License
23 * along with this library; see the file COPYING.LIB. If not, write to 23 * along with this library; see the file COPYING.LIB. If not, write to
24 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 24 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
25 * Boston, MA 02110-1301, USA. 25 * Boston, MA 02110-1301, USA.
26 */ 26 */
27 27
28 #include "core/dom/Document.h" 28 #include "core/dom/Document.h"
29 29
30 #include "bindings/core/v8/DOMDataStore.h" 30 #include "bindings/core/v8/DOMDataStore.h"
31 #include "bindings/core/v8/ElementCreationOptionsOrString.h"
31 #include "bindings/core/v8/ExceptionMessages.h" 32 #include "bindings/core/v8/ExceptionMessages.h"
32 #include "bindings/core/v8/ExceptionState.h" 33 #include "bindings/core/v8/ExceptionState.h"
33 #include "bindings/core/v8/ExceptionStatePlaceholder.h" 34 #include "bindings/core/v8/ExceptionStatePlaceholder.h"
34 #include "bindings/core/v8/HTMLScriptElementOrSVGScriptElement.h" 35 #include "bindings/core/v8/HTMLScriptElementOrSVGScriptElement.h"
35 #include "bindings/core/v8/Microtask.h" 36 #include "bindings/core/v8/Microtask.h"
36 #include "bindings/core/v8/ScriptController.h" 37 #include "bindings/core/v8/ScriptController.h"
37 #include "bindings/core/v8/SourceLocation.h" 38 #include "bindings/core/v8/SourceLocation.h"
38 #include "bindings/core/v8/V0CustomElementConstructorBuilder.h" 39 #include "bindings/core/v8/V0CustomElementConstructorBuilder.h"
39 #include "bindings/core/v8/V8DOMWrapper.h" 40 #include "bindings/core/v8/V8DOMWrapper.h"
40 #include "bindings/core/v8/V8PerIsolateData.h" 41 #include "bindings/core/v8/V8PerIsolateData.h"
(...skipping 25 matching lines...) Expand all
66 #include "core/dom/Attr.h" 67 #include "core/dom/Attr.h"
67 #include "core/dom/CDATASection.h" 68 #include "core/dom/CDATASection.h"
68 #include "core/dom/ClientRect.h" 69 #include "core/dom/ClientRect.h"
69 #include "core/dom/Comment.h" 70 #include "core/dom/Comment.h"
70 #include "core/dom/ContextFeatures.h" 71 #include "core/dom/ContextFeatures.h"
71 #include "core/dom/DOMImplementation.h" 72 #include "core/dom/DOMImplementation.h"
72 #include "core/dom/DocumentFragment.h" 73 #include "core/dom/DocumentFragment.h"
73 #include "core/dom/DocumentParserTiming.h" 74 #include "core/dom/DocumentParserTiming.h"
74 #include "core/dom/DocumentType.h" 75 #include "core/dom/DocumentType.h"
75 #include "core/dom/Element.h" 76 #include "core/dom/Element.h"
77 #include "core/dom/ElementCreationOptions.h"
76 #include "core/dom/ElementDataCache.h" 78 #include "core/dom/ElementDataCache.h"
77 #include "core/dom/ElementRegistrationOptions.h" 79 #include "core/dom/ElementRegistrationOptions.h"
78 #include "core/dom/ElementTraversal.h" 80 #include "core/dom/ElementTraversal.h"
79 #include "core/dom/ExceptionCode.h" 81 #include "core/dom/ExceptionCode.h"
80 #include "core/dom/ExecutionContextTask.h" 82 #include "core/dom/ExecutionContextTask.h"
81 #include "core/dom/FrameRequestCallback.h" 83 #include "core/dom/FrameRequestCallback.h"
82 #include "core/dom/IntersectionObserverController.h" 84 #include "core/dom/IntersectionObserverController.h"
83 #include "core/dom/LayoutTreeBuilderTraversal.h" 85 #include "core/dom/LayoutTreeBuilderTraversal.h"
84 #include "core/dom/MainThreadTaskRunner.h" 86 #include "core/dom/MainThreadTaskRunner.h"
85 #include "core/dom/MutationObserver.h" 87 #include "core/dom/MutationObserver.h"
(...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after
653 655
654 if (isXHTMLDocument() || isHTMLDocument()) { 656 if (isXHTMLDocument() || isHTMLDocument()) {
655 if (CustomElement::shouldCreateCustomElement(name)) 657 if (CustomElement::shouldCreateCustomElement(name))
656 return CustomElement::createCustomElementSync(*this, name, exception State); 658 return CustomElement::createCustomElementSync(*this, name, exception State);
657 return HTMLElementFactory::createHTMLElement(convertLocalName(name), *th is, 0, CreatedByCreateElement); 659 return HTMLElementFactory::createHTMLElement(convertLocalName(name), *th is, 0, CreatedByCreateElement);
658 } 660 }
659 661
660 return Element::create(QualifiedName(nullAtom, name, nullAtom), this); 662 return Element::create(QualifiedName(nullAtom, name, nullAtom), this);
661 } 663 }
662 664
663 Element* Document::createElement(const AtomicString& localName, const AtomicStri ng& typeExtension, ExceptionState& exceptionState) 665 Element* Document::createElement(const AtomicString& localName, const ElementCre ationOptionsOrString& optionsOrString, ExceptionState& exceptionState)
664 { 666 {
665 if (!isValidName(localName)) { 667 if (!isValidName(localName)) {
666 exceptionState.throwDOMException(InvalidCharacterError, "The tag name pr ovided ('" + localName + "') is not a valid name."); 668 exceptionState.throwDOMException(InvalidCharacterError, "The tag name pr ovided ('" + localName + "') is not a valid name.");
667 return nullptr; 669 return nullptr;
668 } 670 }
669 671
670 Element* element; 672 Element* element;
671 673
672 if (CustomElement::shouldCreateCustomElement(localName)) { 674 if (CustomElement::shouldCreateCustomElement(localName)) {
673 element = CustomElement::createCustomElementSync(*this, localName, excep tionState); 675 element = CustomElement::createCustomElementSync(*this, localName, excep tionState);
674 } else if (V0CustomElement::isValidName(localName) && registrationContext()) { 676 } else if (V0CustomElement::isValidName(localName) && registrationContext()) {
675 element = registrationContext()->createCustomTagElement(*this, Qualified Name(nullAtom, convertLocalName(localName), xhtmlNamespaceURI)); 677 element = registrationContext()->createCustomTagElement(*this, Qualified Name(nullAtom, convertLocalName(localName), xhtmlNamespaceURI));
676 } else { 678 } else {
677 element = createElement(localName, exceptionState); 679 element = createElement(localName, exceptionState);
678 if (exceptionState.hadException()) 680 if (exceptionState.hadException())
679 return nullptr; 681 return nullptr;
680 } 682 }
681 683
682 if (!typeExtension.isEmpty()) 684 if (optionsOrString.isString() && !optionsOrString.getAsString().isEmpty()) {
dominicc (has gone to gerrit) 2016/09/15 01:19:24 I wonder if the existing code does toString on non
Anton Obzhirov 2016/09/15 09:25:20 Will check, good point, will need to figure out ho
683 V0CustomElementRegistrationContext::setIsAttributeAndTypeExtension(eleme nt, typeExtension); 685 V0CustomElementRegistrationContext::setIsAttributeAndTypeExtension(eleme nt, AtomicString(optionsOrString.getAsString()));
686 Deprecation::countDeprecation(this, UseCounter::DocumentCreateElement2nd Arg);
687 } else if (optionsOrString.isElementCreationOptions() && !optionsOrString.ge tAsElementCreationOptions().is().isEmpty()) {
688 V0CustomElementRegistrationContext::setIsAttributeAndTypeExtension(eleme nt, AtomicString(optionsOrString.getAsElementCreationOptions().is()));
689 }
684 690
685 return element; 691 return element;
686 } 692 }
687 693
688 static inline QualifiedName createQualifiedName(const AtomicString& namespaceURI , const AtomicString& qualifiedName, ExceptionState& exceptionState) 694 static inline QualifiedName createQualifiedName(const AtomicString& namespaceURI , const AtomicString& qualifiedName, ExceptionState& exceptionState)
689 { 695 {
690 AtomicString prefix, localName; 696 AtomicString prefix, localName;
691 if (!Document::parseQualifiedName(qualifiedName, prefix, localName, exceptio nState)) 697 if (!Document::parseQualifiedName(qualifiedName, prefix, localName, exceptio nState))
692 return QualifiedName::null(); 698 return QualifiedName::null();
693 699
(...skipping 10 matching lines...) Expand all
704 { 710 {
705 QualifiedName qName(createQualifiedName(namespaceURI, qualifiedName, excepti onState)); 711 QualifiedName qName(createQualifiedName(namespaceURI, qualifiedName, excepti onState));
706 if (qName == QualifiedName::null()) 712 if (qName == QualifiedName::null())
707 return nullptr; 713 return nullptr;
708 714
709 if (CustomElement::shouldCreateCustomElement(qName)) 715 if (CustomElement::shouldCreateCustomElement(qName))
710 return CustomElement::createCustomElementSync(*this, qName, exceptionSta te); 716 return CustomElement::createCustomElementSync(*this, qName, exceptionSta te);
711 return createElement(qName, CreatedByCreateElement); 717 return createElement(qName, CreatedByCreateElement);
712 } 718 }
713 719
714 Element* Document::createElementNS(const AtomicString& namespaceURI, const Atomi cString& qualifiedName, const AtomicString& typeExtension, ExceptionState& excep tionState) 720 Element* Document::createElementNS(const AtomicString& namespaceURI, const Atomi cString& qualifiedName, const ElementCreationOptionsOrString& optionsOrString, E xceptionState& exceptionState)
715 { 721 {
716 QualifiedName qName(createQualifiedName(namespaceURI, qualifiedName, excepti onState)); 722 QualifiedName qName(createQualifiedName(namespaceURI, qualifiedName, excepti onState));
717 if (qName == QualifiedName::null()) 723 if (qName == QualifiedName::null())
718 return nullptr; 724 return nullptr;
719 725
720 Element* element; 726 Element* element;
721 if (CustomElement::shouldCreateCustomElement(qName)) 727 if (CustomElement::shouldCreateCustomElement(qName))
722 element = CustomElement::createCustomElementSync(*this, qName, exception State); 728 element = CustomElement::createCustomElementSync(*this, qName, exception State);
723 else if (V0CustomElement::isValidName(qName.localName()) && registrationCont ext()) 729 else if (V0CustomElement::isValidName(qName.localName()) && registrationCont ext())
724 element = registrationContext()->createCustomTagElement(*this, qName); 730 element = registrationContext()->createCustomTagElement(*this, qName);
725 else 731 else
726 element = createElement(qName, CreatedByCreateElement); 732 element = createElement(qName, CreatedByCreateElement);
727 733
728 if (!typeExtension.isEmpty()) 734 if (optionsOrString.isString() && !optionsOrString.getAsString().isEmpty()) {
729 V0CustomElementRegistrationContext::setIsAttributeAndTypeExtension(eleme nt, typeExtension); 735 V0CustomElementRegistrationContext::setIsAttributeAndTypeExtension(eleme nt, AtomicString(optionsOrString.getAsString()));
736 Deprecation::countDeprecation(this, UseCounter::DocumentCreateElement2nd Arg);
737 } else if (optionsOrString.isElementCreationOptions() && !optionsOrString.ge tAsElementCreationOptions().is().isEmpty()) {
738 V0CustomElementRegistrationContext::setIsAttributeAndTypeExtension(eleme nt, AtomicString(optionsOrString.getAsElementCreationOptions().is()));
739 }
730 740
731 return element; 741 return element;
732 } 742 }
733 743
734 ScriptValue Document::registerElement(ScriptState* scriptState, const AtomicStri ng& name, const ElementRegistrationOptions& options, ExceptionState& exceptionSt ate, V0CustomElement::NameSet validNames) 744 ScriptValue Document::registerElement(ScriptState* scriptState, const AtomicStri ng& name, const ElementRegistrationOptions& options, ExceptionState& exceptionSt ate, V0CustomElement::NameSet validNames)
735 { 745 {
736 HostsUsingFeatures::countMainWorldOnly(scriptState, *this, HostsUsingFeature s::Feature::DocumentRegisterElement); 746 HostsUsingFeatures::countMainWorldOnly(scriptState, *this, HostsUsingFeature s::Feature::DocumentRegisterElement);
737 747
738 if (!registrationContext()) { 748 if (!registrationContext()) {
739 exceptionState.throwDOMException(NotSupportedError, "No element registra tion context is available."); 749 exceptionState.throwDOMException(NotSupportedError, "No element registra tion context is available.");
(...skipping 5349 matching lines...) Expand 10 before | Expand all | Expand 10 after
6089 } 6099 }
6090 6100
6091 void showLiveDocumentInstances() 6101 void showLiveDocumentInstances()
6092 { 6102 {
6093 WeakDocumentSet& set = liveDocumentSet(); 6103 WeakDocumentSet& set = liveDocumentSet();
6094 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); 6104 fprintf(stderr, "There are %u documents currently alive:\n", set.size());
6095 for (Document* document : set) 6105 for (Document* document : set)
6096 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().get String().utf8().data()); 6106 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().get String().utf8().data());
6097 } 6107 }
6098 #endif 6108 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698