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

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

Issue 2477713003: Custom Elements: Check Definition in createElement, Create Customized Built-in Elements Sync (Closed)
Patch Set: createElement - sync Created 4 years, 1 month 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 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All
7 * rights reserved. 7 * rights reserved.
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved.
9 * (http://www.torchmobile.com/) 9 * (http://www.torchmobile.com/)
10 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. 10 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
(...skipping 26 matching lines...) Expand all
37 #include "bindings/core/v8/Microtask.h" 37 #include "bindings/core/v8/Microtask.h"
38 #include "bindings/core/v8/ScriptController.h" 38 #include "bindings/core/v8/ScriptController.h"
39 #include "bindings/core/v8/SourceLocation.h" 39 #include "bindings/core/v8/SourceLocation.h"
40 #include "bindings/core/v8/StringOrDictionary.h" 40 #include "bindings/core/v8/StringOrDictionary.h"
41 #include "bindings/core/v8/V0CustomElementConstructorBuilder.h" 41 #include "bindings/core/v8/V0CustomElementConstructorBuilder.h"
42 #include "bindings/core/v8/V8DOMWrapper.h" 42 #include "bindings/core/v8/V8DOMWrapper.h"
43 #include "bindings/core/v8/V8ElementCreationOptions.h" 43 #include "bindings/core/v8/V8ElementCreationOptions.h"
44 #include "bindings/core/v8/V8PerIsolateData.h" 44 #include "bindings/core/v8/V8PerIsolateData.h"
45 #include "bindings/core/v8/WindowProxy.h" 45 #include "bindings/core/v8/WindowProxy.h"
46 #include "core/HTMLElementFactory.h" 46 #include "core/HTMLElementFactory.h"
47 #include "core/HTMLElementTypeHelpers.h"
47 #include "core/HTMLNames.h" 48 #include "core/HTMLNames.h"
48 #include "core/SVGElementFactory.h" 49 #include "core/SVGElementFactory.h"
49 #include "core/SVGNames.h" 50 #include "core/SVGNames.h"
50 #include "core/XMLNSNames.h" 51 #include "core/XMLNSNames.h"
51 #include "core/XMLNames.h" 52 #include "core/XMLNames.h"
52 #include "core/animation/CompositorPendingAnimations.h" 53 #include "core/animation/CompositorPendingAnimations.h"
53 #include "core/animation/DocumentAnimations.h" 54 #include "core/animation/DocumentAnimations.h"
54 #include "core/animation/DocumentTimeline.h" 55 #include "core/animation/DocumentTimeline.h"
55 #include "core/css/CSSFontSelector.h" 56 #include "core/css/CSSFontSelector.h"
56 #include "core/css/CSSStyleDeclaration.h" 57 #include "core/css/CSSStyleDeclaration.h"
(...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 706
706 return toCoreString(dict.v8Value()->ToString()); 707 return toCoreString(dict.v8Value()->ToString());
707 } 708 }
708 709
709 return emptyString(); 710 return emptyString();
710 } 711 }
711 712
712 Element* Document::createElement(const AtomicString& localName, 713 Element* Document::createElement(const AtomicString& localName,
713 const StringOrDictionary& stringOrOptions, 714 const StringOrDictionary& stringOrOptions,
714 ExceptionState& exceptionState) { 715 ExceptionState& exceptionState) {
716 const AtomicString& is =
717 getTypeExtension(this, stringOrOptions, exceptionState).isEmpty()
718 ? AtomicString()
719 : AtomicString(
720 getTypeExtension(this, stringOrOptions, exceptionState));
721
715 if (!isValidName(localName)) { 722 if (!isValidName(localName)) {
716 exceptionState.throwDOMException( 723 exceptionState.throwDOMException(
717 InvalidCharacterError, 724 InvalidCharacterError,
718 "The tag name provided ('" + localName + "') is not a valid name."); 725 "The tag name provided ('" + localName + "') is not a valid name.");
719 return nullptr; 726 return nullptr;
720 } 727 }
721 728
722 Element* element; 729 Element* element;
723 730
724 if (CustomElement::shouldCreateCustomElement(convertLocalName(localName))) { 731 int builtin = 0;
dominicc (has gone to gerrit) 2016/11/07 01:59:00 Use bool, not int, for true/false values. C++ 'hel
725 element = CustomElement::createCustomElementSync( 732 if (RuntimeEnabledFeatures::customElementsBuiltinEnabled() &&
726 *this, convertLocalName(localName)); 733 stringOrOptions.isDictionary()) {
734 builtin = 1;
735 }
736
737 if (CustomElement::shouldCreateCustomElement(convertLocalName(localName)) ||
dominicc (has gone to gerrit) 2016/11/07 01:58:59 The createElement spec case-converts names sometim
738 builtin) {
739 return CustomElement::createCustomElementSync(
740 *this, convertLocalName(localName), is);
727 } else if (V0CustomElement::isValidName(localName) && registrationContext()) { 741 } else if (V0CustomElement::isValidName(localName) && registrationContext()) {
728 element = registrationContext()->createCustomTagElement( 742 element = registrationContext()->createCustomTagElement(
729 *this, QualifiedName(nullAtom, convertLocalName(localName), 743 *this, QualifiedName(nullAtom, convertLocalName(localName),
730 xhtmlNamespaceURI)); 744 xhtmlNamespaceURI));
731 } else { 745 } else {
732 element = createElement(localName, exceptionState); 746 element = createElement(localName, exceptionState);
733 if (exceptionState.hadException()) 747 if (exceptionState.hadException())
734 return nullptr; 748 return nullptr;
735 } 749 }
736 750
737 String typeExtention = 751 if (!is.isEmpty()) {
738 getTypeExtension(this, stringOrOptions, exceptionState); 752 V0CustomElementRegistrationContext::setIsAttributeAndTypeExtension(element,
739 if (!typeExtention.isEmpty()) { 753 is);
740 V0CustomElementRegistrationContext::setIsAttributeAndTypeExtension(
741 element, AtomicString(typeExtention));
742 } 754 }
743 755
744 return element; 756 return element;
745 } 757 }
746 758
747 static inline QualifiedName createQualifiedName( 759 static inline QualifiedName createQualifiedName(
748 const AtomicString& namespaceURI, 760 const AtomicString& namespaceURI,
749 const AtomicString& qualifiedName, 761 const AtomicString& qualifiedName,
750 ExceptionState& exceptionState) { 762 ExceptionState& exceptionState) {
751 AtomicString prefix, localName; 763 AtomicString prefix, localName;
(...skipping 5725 matching lines...) Expand 10 before | Expand all | Expand 10 after
6477 } 6489 }
6478 6490
6479 void showLiveDocumentInstances() { 6491 void showLiveDocumentInstances() {
6480 WeakDocumentSet& set = liveDocumentSet(); 6492 WeakDocumentSet& set = liveDocumentSet();
6481 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); 6493 fprintf(stderr, "There are %u documents currently alive:\n", set.size());
6482 for (Document* document : set) 6494 for (Document* document : set)
6483 fprintf(stderr, "- Document %p URL: %s\n", document, 6495 fprintf(stderr, "- Document %p URL: %s\n", document,
6484 document->url().getString().utf8().data()); 6496 document->url().getString().utf8().data());
6485 } 6497 }
6486 #endif 6498 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698