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

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

Issue 45173005: Move *Tags / *Attrs arrays from .data to .data.rel.ro section (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 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
« no previous file with comments | « Source/core/html/parser/HTMLIdentifier.cpp ('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 528 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 if (item->isSpecialNode() && !item->hasTagName(addressTag) && !item->has TagName(divTag) && !item->hasTagName(pTag)) 539 if (item->isSpecialNode() && !item->hasTagName(addressTag) && !item->has TagName(divTag) && !item->hasTagName(pTag))
540 break; 540 break;
541 nodeRecord = nodeRecord->next(); 541 nodeRecord = nodeRecord->next();
542 } 542 }
543 processFakePEndTagIfPInButtonScope(); 543 processFakePEndTagIfPInButtonScope();
544 m_tree.insertHTMLElement(token); 544 m_tree.insertHTMLElement(token);
545 } 545 }
546 546
547 typedef HashMap<AtomicString, QualifiedName> PrefixedNameToQualifiedNameMap; 547 typedef HashMap<AtomicString, QualifiedName> PrefixedNameToQualifiedNameMap;
548 548
549 static void mapLoweredLocalNameToName(PrefixedNameToQualifiedNameMap* map, Quali fiedName** names, size_t length) 549 static void mapLoweredLocalNameToName(PrefixedNameToQualifiedNameMap* map, const QualifiedName* const* names, size_t length)
550 { 550 {
551 for (size_t i = 0; i < length; ++i) { 551 for (size_t i = 0; i < length; ++i) {
552 const QualifiedName& name = *names[i]; 552 const QualifiedName& name = *names[i];
553 const AtomicString& localName = name.localName(); 553 const AtomicString& localName = name.localName();
554 AtomicString loweredLocalName = localName.lower(); 554 AtomicString loweredLocalName = localName.lower();
555 if (loweredLocalName != localName) 555 if (loweredLocalName != localName)
556 map->add(loweredLocalName, name); 556 map->add(loweredLocalName, name);
557 } 557 }
558 } 558 }
559 559
560 static void adjustSVGTagNameCase(AtomicHTMLToken* token) 560 static void adjustSVGTagNameCase(AtomicHTMLToken* token)
561 { 561 {
562 static PrefixedNameToQualifiedNameMap* caseMap = 0; 562 static PrefixedNameToQualifiedNameMap* caseMap = 0;
563 if (!caseMap) { 563 if (!caseMap) {
564 caseMap = new PrefixedNameToQualifiedNameMap; 564 caseMap = new PrefixedNameToQualifiedNameMap;
565 QualifiedName** svgTags = SVGNames::getSVGTags(); 565 const QualifiedName* const* svgTags = SVGNames::getSVGTags();
566 mapLoweredLocalNameToName(caseMap, svgTags, SVGNames::SVGTagsCount); 566 mapLoweredLocalNameToName(caseMap, svgTags, SVGNames::SVGTagsCount);
567 } 567 }
568 568
569 const QualifiedName& casedName = caseMap->get(token->name()); 569 const QualifiedName& casedName = caseMap->get(token->name());
570 if (casedName.localName().isNull()) 570 if (casedName.localName().isNull())
571 return; 571 return;
572 token->setName(casedName.localName()); 572 token->setName(casedName.localName());
573 } 573 }
574 574
575 template<QualifiedName** getAttrs(), unsigned length> 575 template<const QualifiedName* const* getAttrs(), unsigned length>
576 static void adjustAttributes(AtomicHTMLToken* token) 576 static void adjustAttributes(AtomicHTMLToken* token)
577 { 577 {
578 static PrefixedNameToQualifiedNameMap* caseMap = 0; 578 static PrefixedNameToQualifiedNameMap* caseMap = 0;
579 if (!caseMap) { 579 if (!caseMap) {
580 caseMap = new PrefixedNameToQualifiedNameMap; 580 caseMap = new PrefixedNameToQualifiedNameMap;
581 QualifiedName** attrs = getAttrs(); 581 const QualifiedName* const* attrs = getAttrs();
582 mapLoweredLocalNameToName(caseMap, attrs, length); 582 mapLoweredLocalNameToName(caseMap, attrs, length);
583 } 583 }
584 584
585 for (unsigned i = 0; i < token->attributes().size(); ++i) { 585 for (unsigned i = 0; i < token->attributes().size(); ++i) {
586 Attribute& tokenAttribute = token->attributes().at(i); 586 Attribute& tokenAttribute = token->attributes().at(i);
587 const QualifiedName& casedName = caseMap->get(tokenAttribute.localName() ); 587 const QualifiedName& casedName = caseMap->get(tokenAttribute.localName() );
588 if (!casedName.localName().isNull()) 588 if (!casedName.localName().isNull())
589 tokenAttribute.parserSetName(casedName); 589 tokenAttribute.parserSetName(casedName);
590 } 590 }
591 } 591 }
592 592
593 static void adjustSVGAttributes(AtomicHTMLToken* token) 593 static void adjustSVGAttributes(AtomicHTMLToken* token)
594 { 594 {
595 adjustAttributes<SVGNames::getSVGAttrs, SVGNames::SVGAttrsCount>(token); 595 adjustAttributes<SVGNames::getSVGAttrs, SVGNames::SVGAttrsCount>(token);
596 } 596 }
597 597
598 static void adjustMathMLAttributes(AtomicHTMLToken* token) 598 static void adjustMathMLAttributes(AtomicHTMLToken* token)
599 { 599 {
600 adjustAttributes<MathMLNames::getMathMLAttrs, MathMLNames::MathMLAttrsCount> (token); 600 adjustAttributes<MathMLNames::getMathMLAttrs, MathMLNames::MathMLAttrsCount> (token);
601 } 601 }
602 602
603 static void addNamesWithPrefix(PrefixedNameToQualifiedNameMap* map, const Atomic String& prefix, QualifiedName** names, size_t length) 603 static void addNamesWithPrefix(PrefixedNameToQualifiedNameMap* map, const Atomic String& prefix, const QualifiedName* const* names, size_t length)
604 { 604 {
605 for (size_t i = 0; i < length; ++i) { 605 for (size_t i = 0; i < length; ++i) {
606 QualifiedName* name = names[i]; 606 const QualifiedName* name = names[i];
607 const AtomicString& localName = name->localName(); 607 const AtomicString& localName = name->localName();
608 AtomicString prefixColonLocalName = prefix + ':' + localName; 608 AtomicString prefixColonLocalName = prefix + ':' + localName;
609 QualifiedName nameWithPrefix(prefix, localName, name->namespaceURI()); 609 QualifiedName nameWithPrefix(prefix, localName, name->namespaceURI());
610 map->add(prefixColonLocalName, nameWithPrefix); 610 map->add(prefixColonLocalName, nameWithPrefix);
611 } 611 }
612 } 612 }
613 613
614 static void adjustForeignAttributes(AtomicHTMLToken* token) 614 static void adjustForeignAttributes(AtomicHTMLToken* token)
615 { 615 {
616 static PrefixedNameToQualifiedNameMap* map = 0; 616 static PrefixedNameToQualifiedNameMap* map = 0;
617 if (!map) { 617 if (!map) {
618 map = new PrefixedNameToQualifiedNameMap; 618 map = new PrefixedNameToQualifiedNameMap;
619 619
620 QualifiedName** attrs = XLinkNames::getXLinkAttrs(); 620 const QualifiedName* const* attrs = XLinkNames::getXLinkAttrs();
621 addNamesWithPrefix(map, xlinkAtom, attrs, XLinkNames::XLinkAttrsCount); 621 addNamesWithPrefix(map, xlinkAtom, attrs, XLinkNames::XLinkAttrsCount);
622 622
623 attrs = XMLNames::getXMLAttrs(); 623 attrs = XMLNames::getXMLAttrs();
624 addNamesWithPrefix(map, xmlAtom, attrs, XMLNames::XMLAttrsCount); 624 addNamesWithPrefix(map, xmlAtom, attrs, XMLNames::XMLAttrsCount);
625 625
626 map->add(WTF::xmlnsAtom, XMLNSNames::xmlnsAttr); 626 map->add(WTF::xmlnsAtom, XMLNSNames::xmlnsAttr);
627 map->add("xmlns:xlink", QualifiedName(xmlnsAtom, xlinkAtom, XMLNSNames:: xmlnsNamespaceURI)); 627 map->add("xmlns:xlink", QualifiedName(xmlnsAtom, xlinkAtom, XMLNSNames:: xmlnsNamespaceURI));
628 } 628 }
629 629
630 for (unsigned i = 0; i < token->attributes().size(); ++i) { 630 for (unsigned i = 0; i < token->attributes().size(); ++i) {
(...skipping 2191 matching lines...) Expand 10 before | Expand all | Expand 10 after
2822 ASSERT(m_isAttached); 2822 ASSERT(m_isAttached);
2823 // Warning, this may detach the parser. Do not do anything else after this. 2823 // Warning, this may detach the parser. Do not do anything else after this.
2824 m_tree.finishedParsing(); 2824 m_tree.finishedParsing();
2825 } 2825 }
2826 2826
2827 void HTMLTreeBuilder::parseError(AtomicHTMLToken*) 2827 void HTMLTreeBuilder::parseError(AtomicHTMLToken*)
2828 { 2828 {
2829 } 2829 }
2830 2830
2831 } // namespace WebCore 2831 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/html/parser/HTMLIdentifier.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698