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

Side by Side Diff: Source/core/html/parser/HTMLTreeBuilder.cpp

Issue 137783012: MakeQualifiedNames should generate lazily created arrays for attributes and tags. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Patch for landing. Created 6 years, 11 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
« no previous file with comments | « Source/build/scripts/templates/MakeQualifiedNames.h.tmpl ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 551 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 if (loweredLocalName != localName) 562 if (loweredLocalName != localName)
563 map->add(loweredLocalName, name); 563 map->add(loweredLocalName, name);
564 } 564 }
565 } 565 }
566 566
567 static void adjustSVGTagNameCase(AtomicHTMLToken* token) 567 static void adjustSVGTagNameCase(AtomicHTMLToken* token)
568 { 568 {
569 static PrefixedNameToQualifiedNameMap* caseMap = 0; 569 static PrefixedNameToQualifiedNameMap* caseMap = 0;
570 if (!caseMap) { 570 if (!caseMap) {
571 caseMap = new PrefixedNameToQualifiedNameMap; 571 caseMap = new PrefixedNameToQualifiedNameMap;
572 const QualifiedName* const* svgTags = SVGNames::getSVGTags(); 572 OwnPtr<const QualifiedName*[]> svgTags = SVGNames::getSVGTags();
573 mapLoweredLocalNameToName(caseMap, svgTags, SVGNames::SVGTagsCount); 573 mapLoweredLocalNameToName(caseMap, svgTags.get(), SVGNames::SVGTagsCount );
574 } 574 }
575 575
576 const QualifiedName& casedName = caseMap->get(token->name()); 576 const QualifiedName& casedName = caseMap->get(token->name());
577 if (casedName.localName().isNull()) 577 if (casedName.localName().isNull())
578 return; 578 return;
579 token->setName(casedName.localName()); 579 token->setName(casedName.localName());
580 } 580 }
581 581
582 template<const QualifiedName* const* getAttrs(), unsigned length> 582 template<PassOwnPtr<const QualifiedName*[]> getAttrs(), unsigned length>
583 static void adjustAttributes(AtomicHTMLToken* token) 583 static void adjustAttributes(AtomicHTMLToken* token)
584 { 584 {
585 static PrefixedNameToQualifiedNameMap* caseMap = 0; 585 static PrefixedNameToQualifiedNameMap* caseMap = 0;
586 if (!caseMap) { 586 if (!caseMap) {
587 caseMap = new PrefixedNameToQualifiedNameMap; 587 caseMap = new PrefixedNameToQualifiedNameMap;
588 const QualifiedName* const* attrs = getAttrs(); 588 OwnPtr<const QualifiedName*[]> attrs = getAttrs();
589 mapLoweredLocalNameToName(caseMap, attrs, length); 589 mapLoweredLocalNameToName(caseMap, attrs.get(), length);
590 } 590 }
591 591
592 for (unsigned i = 0; i < token->attributes().size(); ++i) { 592 for (unsigned i = 0; i < token->attributes().size(); ++i) {
593 Attribute& tokenAttribute = token->attributes().at(i); 593 Attribute& tokenAttribute = token->attributes().at(i);
594 const QualifiedName& casedName = caseMap->get(tokenAttribute.localName() ); 594 const QualifiedName& casedName = caseMap->get(tokenAttribute.localName() );
595 if (!casedName.localName().isNull()) 595 if (!casedName.localName().isNull())
596 tokenAttribute.parserSetName(casedName); 596 tokenAttribute.parserSetName(casedName);
597 } 597 }
598 } 598 }
599 599
(...skipping 17 matching lines...) Expand all
617 map->add(prefixColonLocalName, nameWithPrefix); 617 map->add(prefixColonLocalName, nameWithPrefix);
618 } 618 }
619 } 619 }
620 620
621 static void adjustForeignAttributes(AtomicHTMLToken* token) 621 static void adjustForeignAttributes(AtomicHTMLToken* token)
622 { 622 {
623 static PrefixedNameToQualifiedNameMap* map = 0; 623 static PrefixedNameToQualifiedNameMap* map = 0;
624 if (!map) { 624 if (!map) {
625 map = new PrefixedNameToQualifiedNameMap; 625 map = new PrefixedNameToQualifiedNameMap;
626 626
627 const QualifiedName* const* attrs = XLinkNames::getXLinkAttrs(); 627 OwnPtr<const QualifiedName*[]> attrs = XLinkNames::getXLinkAttrs();
628 addNamesWithPrefix(map, xlinkAtom, attrs, XLinkNames::XLinkAttrsCount); 628 addNamesWithPrefix(map, xlinkAtom, attrs.get(), XLinkNames::XLinkAttrsCo unt);
629 629
630 attrs = XMLNames::getXMLAttrs(); 630 OwnPtr<const QualifiedName*[]> xmlAttrs = XMLNames::getXMLAttrs();
631 addNamesWithPrefix(map, xmlAtom, attrs, XMLNames::XMLAttrsCount); 631 addNamesWithPrefix(map, xmlAtom, xmlAttrs.get(), XMLNames::XMLAttrsCount );
632 632
633 map->add(WTF::xmlnsAtom, XMLNSNames::xmlnsAttr); 633 map->add(WTF::xmlnsAtom, XMLNSNames::xmlnsAttr);
634 map->add("xmlns:xlink", QualifiedName(xmlnsAtom, xlinkAtom, XMLNSNames:: xmlnsNamespaceURI)); 634 map->add("xmlns:xlink", QualifiedName(xmlnsAtom, xlinkAtom, XMLNSNames:: xmlnsNamespaceURI));
635 } 635 }
636 636
637 for (unsigned i = 0; i < token->attributes().size(); ++i) { 637 for (unsigned i = 0; i < token->attributes().size(); ++i) {
638 Attribute& tokenAttribute = token->attributes().at(i); 638 Attribute& tokenAttribute = token->attributes().at(i);
639 const QualifiedName& name = map->get(tokenAttribute.localName()); 639 const QualifiedName& name = map->get(tokenAttribute.localName());
640 if (!name.localName().isNull()) 640 if (!name.localName().isNull())
641 tokenAttribute.parserSetName(name); 641 tokenAttribute.parserSetName(name);
(...skipping 2203 matching lines...) Expand 10 before | Expand all | Expand 10 after
2845 ASSERT(m_isAttached); 2845 ASSERT(m_isAttached);
2846 // Warning, this may detach the parser. Do not do anything else after this. 2846 // Warning, this may detach the parser. Do not do anything else after this.
2847 m_tree.finishedParsing(); 2847 m_tree.finishedParsing();
2848 } 2848 }
2849 2849
2850 void HTMLTreeBuilder::parseError(AtomicHTMLToken*) 2850 void HTMLTreeBuilder::parseError(AtomicHTMLToken*)
2851 { 2851 {
2852 } 2852 }
2853 2853
2854 } // namespace WebCore 2854 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/build/scripts/templates/MakeQualifiedNames.h.tmpl ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698