Source/WebCore/ChangeLog

 12013-02-12 Eric Seidel <eric@webkit.org>
 2
 3 Remove HTMLTokenTypes header (and split out AtomicHTMLToken.h from HTMLToken.h)
 4 https://bugs.webkit.org/show_bug.cgi?id=109525
 5
 6 Reviewed by Adam Barth.
 7
 8 We no longer need a separate HTMLTokenTypes class now that NEW_XML is gone.
 9 However, to remove HTMLTokenTypes, I had to split AtomicHTMLToken.h from
 10 HTMLToken.h (to fix a circular dependancy).
 11
 12 * GNUmakefile.list.am:
 13 * Target.pri:
 14 * WebCore.gypi:
 15 * WebCore.vcproj/WebCore.vcproj:
 16 * WebCore.vcxproj/WebCore.vcxproj:
 17 * WebCore.vcxproj/WebCore.vcxproj.filters:
 18 * WebCore.xcodeproj/project.pbxproj:
 19 * html/HTMLViewSourceDocument.cpp:
 20 (WebCore::HTMLViewSourceDocument::addSource):
 21 * html/parser/AtomicHTMLToken.h: Added.
 22 (WebCore):
 23 (AtomicHTMLToken):
 24 (WebCore::AtomicHTMLToken::create):
 25 (WebCore::AtomicHTMLToken::forceQuirks):
 26 (WebCore::AtomicHTMLToken::type):
 27 (WebCore::AtomicHTMLToken::name):
 28 (WebCore::AtomicHTMLToken::setName):
 29 (WebCore::AtomicHTMLToken::selfClosing):
 30 (WebCore::AtomicHTMLToken::getAttributeItem):
 31 (WebCore::AtomicHTMLToken::attributes):
 32 (WebCore::AtomicHTMLToken::characters):
 33 (WebCore::AtomicHTMLToken::charactersLength):
 34 (WebCore::AtomicHTMLToken::isAll8BitData):
 35 (WebCore::AtomicHTMLToken::comment):
 36 (WebCore::AtomicHTMLToken::publicIdentifier):
 37 (WebCore::AtomicHTMLToken::systemIdentifier):
 38 (WebCore::AtomicHTMLToken::clearExternalCharacters):
 39 (WebCore::AtomicHTMLToken::AtomicHTMLToken):
 40 (WebCore::AtomicHTMLToken::initializeAttributes):
 41 * html/parser/BackgroundHTMLParser.cpp:
 42 (WebCore::BackgroundHTMLParser::simulateTreeBuilder):
 43 * html/parser/CompactHTMLToken.cpp:
 44 (WebCore::CompactHTMLToken::CompactHTMLToken):
 45 * html/parser/CompactHTMLToken.h:
 46 (WebCore::CompactHTMLToken::type):
 47 * html/parser/HTMLConstructionSite.cpp:
 48 (WebCore::HTMLConstructionSite::insertDoctype):
 49 (WebCore::HTMLConstructionSite::insertComment):
 50 (WebCore::HTMLConstructionSite::insertCommentOnDocument):
 51 (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement):
 52 (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement):
 53 (WebCore::HTMLConstructionSite::insertForeignElement):
 54 * html/parser/HTMLDocumentParser.cpp:
 55 (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser):
 56 (WebCore::HTMLDocumentParser::constructTreeFromHTMLToken):
 57 * html/parser/HTMLDocumentParser.h:
 58 * html/parser/HTMLMetaCharsetParser.cpp:
 59 (WebCore::HTMLMetaCharsetParser::checkForMetaCharset):
 60 * html/parser/HTMLPreloadScanner.cpp:
 61 (WebCore::isStartTag):
 62 (WebCore::isStartOrEndTag):
 63 (WebCore::HTMLPreloadScanner::processToken):
 64 * html/parser/HTMLSourceTracker.cpp:
 65 (WebCore::HTMLSourceTracker::start):
 66 (WebCore::HTMLSourceTracker::sourceForToken):
 67 * html/parser/HTMLStackItem.h:
 68 (WebCore::HTMLStackItem::HTMLStackItem):
 69 * html/parser/HTMLToken.h:
 70 (WebCore::HTMLToken::clear):
 71 (WebCore::HTMLToken::isUninitialized):
 72 (WebCore::HTMLToken::type):
 73 (WebCore::HTMLToken::makeEndOfFile):
 74 (WebCore::HTMLToken::data):
 75 (WebCore::HTMLToken::name):
 76 (WebCore::HTMLToken::appendToName):
 77 (WebCore::HTMLToken::forceQuirks):
 78 (WebCore::HTMLToken::setForceQuirks):
 79 (WebCore::HTMLToken::beginDOCTYPE):
 80 (WebCore::HTMLToken::publicIdentifier):
 81 (WebCore::HTMLToken::systemIdentifier):
 82 (WebCore::HTMLToken::setPublicIdentifierToEmptyString):
 83 (WebCore::HTMLToken::setSystemIdentifierToEmptyString):
 84 (WebCore::HTMLToken::appendToPublicIdentifier):
 85 (WebCore::HTMLToken::appendToSystemIdentifier):
 86 (WebCore::HTMLToken::selfClosing):
 87 (WebCore::HTMLToken::setSelfClosing):
 88 (WebCore::HTMLToken::beginStartTag):
 89 (WebCore::HTMLToken::beginEndTag):
 90 (WebCore::HTMLToken::addNewAttribute):
 91 (WebCore::HTMLToken::appendToAttributeName):
 92 (WebCore::HTMLToken::appendToAttributeValue):
 93 (WebCore::HTMLToken::attributes):
 94 (WebCore::HTMLToken::eraseValueOfAttribute):
 95 (WebCore::HTMLToken::ensureIsCharacterToken):
 96 (WebCore::HTMLToken::characters):
 97 (WebCore::HTMLToken::appendToCharacter):
 98 (WebCore::HTMLToken::comment):
 99 (WebCore::HTMLToken::beginComment):
 100 (WebCore::HTMLToken::appendToComment):
 101 (WebCore::HTMLToken::eraseCharacters):
 102 (HTMLToken):
 103 * html/parser/HTMLTokenTypes.h: Removed.
 104 * html/parser/HTMLTokenizer.cpp:
 105 (WebCore::AtomicHTMLToken::usesName):
 106 (WebCore::AtomicHTMLToken::usesAttributes):
 107 (WebCore::HTMLTokenizer::flushBufferedEndTag):
 108 (WebCore::HTMLTokenizer::nextToken):
 109 * html/parser/HTMLTokenizer.h:
 110 (WebCore::HTMLTokenizer::saveEndTagNameIfNeeded):
 111 (WebCore::HTMLTokenizer::haveBufferedCharacterToken):
 112 * html/parser/HTMLTreeBuilder.cpp:
 113 (WebCore::HTMLTreeBuilder::processToken):
 114 (WebCore::HTMLTreeBuilder::processDoctypeToken):
 115 (WebCore::HTMLTreeBuilder::processFakeStartTag):
 116 (WebCore::HTMLTreeBuilder::processFakeEndTag):
 117 (WebCore::HTMLTreeBuilder::processFakePEndTagIfPInButtonScope):
 118 (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody):
 119 (WebCore):
 120 (WebCore::HTMLTreeBuilder::processStartTagForInBody):
 121 (WebCore::HTMLTreeBuilder::processStartTagForInTable):
 122 (WebCore::HTMLTreeBuilder::processStartTag):
 123 (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
 124 (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
 125 (WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
 126 (WebCore::HTMLTreeBuilder::processEndTagForInRow):
 127 (WebCore::HTMLTreeBuilder::processEndTagForInCell):
 128 (WebCore::HTMLTreeBuilder::processEndTagForInBody):
 129 (WebCore::HTMLTreeBuilder::processEndTagForInTable):
 130 (WebCore::HTMLTreeBuilder::processEndTag):
 131 (WebCore::HTMLTreeBuilder::processComment):
 132 (WebCore::HTMLTreeBuilder::processCharacter):
 133 (WebCore::HTMLTreeBuilder::defaultForBeforeHTML):
 134 (WebCore::HTMLTreeBuilder::defaultForBeforeHead):
 135 (WebCore::HTMLTreeBuilder::defaultForInHead):
 136 (WebCore::HTMLTreeBuilder::defaultForInHeadNoscript):
 137 (WebCore::HTMLTreeBuilder::defaultForAfterHead):
 138 (WebCore::HTMLTreeBuilder::processStartTagForInHead):
 139 (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
 140 (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):
 141 (WebCore::HTMLTreeBuilder::processScriptStartTag):
 142 (WebCore::HTMLTreeBuilder::shouldProcessTokenInForeignContent):
 143 (WebCore::HTMLTreeBuilder::processTokenInForeignContent):
 144 * html/parser/HTMLViewSourceParser.cpp:
 145 (WebCore::HTMLViewSourceParser::updateTokenizerState):
 146 * html/parser/TextDocumentParser.cpp:
 147 (WebCore::TextDocumentParser::insertFakePreElement):
 148 * html/parser/XSSAuditor.cpp:
 149 (WebCore::XSSAuditor::filterToken):
 150 (WebCore::XSSAuditor::filterScriptToken):
 151 (WebCore::XSSAuditor::filterObjectToken):
 152 (WebCore::XSSAuditor::filterParamToken):
 153 (WebCore::XSSAuditor::filterEmbedToken):
 154 (WebCore::XSSAuditor::filterAppletToken):
 155 (WebCore::XSSAuditor::filterIframeToken):
 156 (WebCore::XSSAuditor::filterMetaToken):
 157 (WebCore::XSSAuditor::filterBaseToken):
 158 (WebCore::XSSAuditor::filterFormToken):
 159
11602013-02-11 Kenneth Russell <kbr@google.com>
2161
3162 Add temporary typedef to ANGLEWebKitBridge to support incompatible API upgrade

Source/WebCore/GNUmakefile.list.am

@@webcore_sources += \
35683568 Source/WebCore/html/MonthInputType.h \
35693569 Source/WebCore/html/NumberInputType.cpp \
35703570 Source/WebCore/html/NumberInputType.h \
 3571 Source/WebCore/html/parser/AtomicHTMLToken.h \
35713572 Source/WebCore/html/parser/BackgroundHTMLInputStream.cpp \
35723573 Source/WebCore/html/parser/BackgroundHTMLInputStream.h \
35733574 Source/WebCore/html/parser/BackgroundHTMLParser.cpp \

@@webcore_sources += \
36113612 Source/WebCore/html/parser/HTMLSourceTracker.h \
36123613 Source/WebCore/html/parser/HTMLStackItem.h \
36133614 Source/WebCore/html/parser/HTMLToken.h \
3614  Source/WebCore/html/parser/HTMLTokenTypes.h \
36153615 Source/WebCore/html/parser/HTMLTokenizer.cpp \
36163616 Source/WebCore/html/parser/HTMLTokenizer.h \
36173617 Source/WebCore/html/parser/HTMLTreeBuilder.cpp \

Source/WebCore/Target.pri

@@HEADERS += \
19161916 html/TimeRanges.h \
19171917 html/TypeAhead.h \
19181918 html/ValidityState.h \
 1919 html/parser/AtomicHTMLToken.h \
19191920 html/parser/CSSPreloadScanner.h \
19201921 html/parser/CompactHTMLToken.h \
19211922 html/parser/HTMLConstructionSite.h \

@@HEADERS += \
19311932 html/parser/HTMLScriptRunner.h \
19321933 html/parser/HTMLScriptRunnerHost.h \
19331934 html/parser/HTMLToken.h \
1934  html/parser/HTMLTokenTypes.h \
19351935 html/parser/HTMLTokenizer.h \
19361936 html/parser/HTMLTreeBuilder.h \
19371937 html/parser/HTMLViewSourceParser.h \

Source/WebCore/WebCore.gypi

33563356 'html/canvas/WebGLUniformLocation.h',
33573357 'html/canvas/WebGLVertexArrayObjectOES.cpp',
33583358 'html/canvas/WebGLVertexArrayObjectOES.h',
 3359 'html/parser/AtomicHTMLToken.h',
33593360 'html/parser/BackgroundHTMLParser.cpp',
33603361 'html/parser/BackgroundHTMLParser.h',
33613362 'html/parser/BackgroundHTMLInputStream.cpp',

33983399 'html/parser/HTMLSourceTracker.h',
33993400 'html/parser/HTMLStackItem.h',
34003401 'html/parser/HTMLToken.h',
3401  'html/parser/HTMLTokenTypes.h',
34023402 'html/parser/HTMLTokenizer.cpp',
34033403 'html/parser/HTMLTokenizer.h',
34043404 'html/parser/HTMLTreeBuilder.cpp',

Source/WebCore/WebCore.vcproj/WebCore.vcproj

6480664806 Name="parser"
6480764807 >
6480864808 <File
 64809 RelativePath="..\html\parser\AtomicHTMLToken.h"
 64810 >
 64811 </File>
 64812 <File
6480964813 RelativePath="..\html\parser\BackgroundHTMLInputStream.cpp"
6481064814 >
6481164815 </File>

6498264986 >
6498364987 </File>
6498464988 <File
64985  RelativePath="..\html\parser\HTMLTokenTypes.h"
64986  >
64987  </File>
64988  <File
6498964989 RelativePath="..\html\parser\HTMLTreeBuilder.cpp"
6499064990 >
6499164991 </File>

Source/WebCore/WebCore.vcxproj/WebCore.vcxproj

79257925 <ClInclude Include="..\html\ValidityState.h" />
79267926 <ClInclude Include="..\html\VoidCallback.h" />
79277927 <ClInclude Include="..\html\WeekInputType.h" />
 7928 <ClInclude Include="..\html\parser\AtomicHTMLToken.h" />
79287929 <ClInclude Include="..\html\parser\BackgroundHTMLParser.h" />
79297930 <ClInclude Include="..\html\parser\CompactHTMLToken.h" />
79307931 <ClInclude Include="..\html\parser\CSSPreloadScanner.h" />

79487949 <ClInclude Include="..\html\parser\HTMLStackItem.h" />
79497950 <ClInclude Include="..\html\parser\HTMLToken.h" />
79507951 <ClInclude Include="..\html\parser\HTMLTokenizer.h" />
7951  <ClInclude Include="..\html\parser\HTMLTokenTypes.h" />
79527952 <ClInclude Include="..\html\parser\HTMLTreeBuilder.h" />
79537953 <ClInclude Include="..\html\parser\HTMLViewSourceParser.h" />
79547954 <ClInclude Include="..\html\parser\InputStreamPreprocessor.h" />

Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters

1253112531 <ClInclude Include="..\html\WeekInputType.h">
1253212532 <Filter>html</Filter>
1253312533 </ClInclude>
 12534 <ClInclude Include="..\html\parser\AtomicHTMLToken.h">
 12535 <Filter>html\parser</Filter>
 12536 </ClInclude>
1253412537 <ClInclude Include="..\html\parser\BackgroundHTMLParser.h">
1253512538 <Filter>html\parser</Filter>
1253612539 </ClInclude>

1259712600 <ClInclude Include="..\html\parser\HTMLTokenizer.h">
1259812601 <Filter>html\parser</Filter>
1259912602 </ClInclude>
12600  <ClInclude Include="..\html\parser\HTMLTokenTypes.h">
12601  <Filter>html\parser</Filter>
12602  </ClInclude>
1260312603 <ClInclude Include="..\html\parser\HTMLTreeBuilder.h">
1260412604 <Filter>html\parser</Filter>
1260512605 </ClInclude>

Source/WebCore/WebCore.xcodeproj/project.pbxproj

1121811218 97C0784F1165D5BE003A32EF /* SuffixTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SuffixTree.h; sourceTree = "<group>"; };
1121911219 97C1F552122855CB00EDE615 /* HTMLStackItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTMLStackItem.h; path = parser/HTMLStackItem.h; sourceTree = "<group>"; };
1122011220 97C1F552122855CB00EDE616 /* HTMLToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTMLToken.h; path = parser/HTMLToken.h; sourceTree = "<group>"; };
11221  97C1F552122855CB00EDE617 /* HTMLTokenTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTMLTokenTypes.h; path = parser/HTMLTokenTypes.h; sourceTree = "<group>"; };
 11221 97C1F552122855CB00EDE617 /* AtomicHTMLToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AtomicHTMLToken.h; path = parser/AtomicHTMLToken.h; sourceTree = "<group>"; };
1122211222 97C471D912F925BC0086354B /* ContentSecurityPolicy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ContentSecurityPolicy.cpp; sourceTree = "<group>"; };
1122311223 97C471DA12F925BD0086354B /* ContentSecurityPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContentSecurityPolicy.h; sourceTree = "<group>"; };
1122411224 97C740121603F7A10011FF2D /* FeatureObserver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FeatureObserver.cpp; sourceTree = "<group>"; };

1873818738 97C1F552122855CB00EDE616 /* HTMLToken.h */,
1873918739 977B385E122883E900B81FF8 /* HTMLTokenizer.cpp */,
1874018740 977B385F122883E900B81FF8 /* HTMLTokenizer.h */,
18741  97C1F552122855CB00EDE617 /* HTMLTokenTypes.h */,
 18741 97C1F552122855CB00EDE617 /* AtomicHTMLToken.h */,
1874218742 977B37211228721700B81FF8 /* HTMLTreeBuilder.cpp */,
1874318743 977B37221228721700B81FF8 /* HTMLTreeBuilder.h */,
1874418744 977B3860122883E900B81FF8 /* HTMLViewSourceParser.cpp */,

Source/WebCore/html/HTMLViewSourceDocument.cpp

@@void HTMLViewSourceDocument::addSource(const String& source, HTMLToken& token)
9999 createContainingTable();
100100
101101 switch (token.type()) {
102  case HTMLTokenTypes::Uninitialized:
 102 case HTMLToken::Uninitialized:
103103 ASSERT_NOT_REACHED();
104104 break;
105  case HTMLTokenTypes::DOCTYPE:
 105 case HTMLToken::DOCTYPE:
106106 processDoctypeToken(source, token);
107107 break;
108  case HTMLTokenTypes::EndOfFile:
 108 case HTMLToken::EndOfFile:
109109 if (!m_tbody->hasChildNodes())
110110 addLine(String());
111111 break;
112  case HTMLTokenTypes::StartTag:
113  case HTMLTokenTypes::EndTag:
 112 case HTMLToken::StartTag:
 113 case HTMLToken::EndTag:
114114 processTagToken(source, token);
115115 break;
116  case HTMLTokenTypes::Comment:
 116 case HTMLToken::Comment:
117117 processCommentToken(source, token);
118118 break;
119  case HTMLTokenTypes::Character:
 119 case HTMLToken::Character:
120120 processCharacterToken(source, token);
121121 break;
122122 }

Source/WebCore/html/parser/AtomicHTMLToken.h

 1/*
 2 * Copyright (C) 2013 Google, Inc. All Rights Reserved.
 3 *
 4 * Redistribution and use in source and binary forms, with or without
 5 * modification, are permitted provided that the following conditions
 6 * are met:
 7 * 1. Redistributions of source code must retain the above copyright
 8 * notice, this list of conditions and the following disclaimer.
 9 * 2. Redistributions in binary form must reproduce the above copyright
 10 * notice, this list of conditions and the following disclaimer in the
 11 * documentation and/or other materials provided with the distribution.
 12 *
 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 24 */
 25
 26#ifndef AtomicHTMLToken_h
 27#define AtomicHTMLToken_h
 28
 29#include "Attribute.h"
 30#include "CompactHTMLToken.h"
 31#include "HTMLToken.h"
 32#include <wtf/RefCounted.h>
 33#include <wtf/RefPtr.h>
 34
 35namespace WebCore {
 36
 37class AtomicHTMLToken : public RefCounted<AtomicHTMLToken> {
 38 WTF_MAKE_NONCOPYABLE(AtomicHTMLToken);
 39public:
 40 static PassRefPtr<AtomicHTMLToken> create(HTMLToken& token)
 41 {
 42 return adoptRef(new AtomicHTMLToken(token));
 43 }
 44
 45#if ENABLE(THREADED_HTML_PARSER)
 46
 47 static PassRefPtr<AtomicHTMLToken> create(const CompactHTMLToken& token)
 48 {
 49 return adoptRef(new AtomicHTMLToken(token));
 50 }
 51
 52#endif
 53
 54 static PassRefPtr<AtomicHTMLToken> create(HTMLToken::Type type, const AtomicString& name, const Vector<Attribute>& attributes = Vector<Attribute>())
 55 {
 56 return adoptRef(new AtomicHTMLToken(type, name, attributes));
 57 }
 58
 59 bool forceQuirks() const
 60 {
 61 ASSERT(m_type == HTMLToken::DOCTYPE);
 62 return m_doctypeData->m_forceQuirks;
 63 }
 64
 65 HTMLToken::Type type() const { return m_type; }
 66
 67 const AtomicString& name() const
 68 {
 69 ASSERT(usesName());
 70 return m_name;
 71 }
 72
 73 void setName(const AtomicString& name)
 74 {
 75 ASSERT(usesName());
 76 m_name = name;
 77 }
 78
 79 bool selfClosing() const
 80 {
 81 ASSERT(m_type == HTMLToken::StartTag || m_type == HTMLToken::EndTag);
 82 return m_selfClosing;
 83 }
 84
 85 Attribute* getAttributeItem(const QualifiedName& attributeName)
 86 {
 87 ASSERT(usesAttributes());
 88 return findAttributeInVector(m_attributes, attributeName);
 89 }
 90
 91 Vector<Attribute>& attributes()
 92 {
 93 ASSERT(usesAttributes());
 94 return m_attributes;
 95 }
 96
 97 const Vector<Attribute>& attributes() const
 98 {
 99 ASSERT(usesAttributes());
 100 return m_attributes;
 101 }
 102
 103 const UChar* characters() const
 104 {
 105 ASSERT(m_type == HTMLToken::Character);
 106 return m_externalCharacters;
 107 }
 108
 109 size_t charactersLength() const
 110 {
 111 ASSERT(m_type == HTMLToken::Character);
 112 return m_externalCharactersLength;
 113 }
 114
 115 bool isAll8BitData() const
 116 {
 117 return m_isAll8BitData;
 118 }
 119
 120 const String& comment() const
 121 {
 122 ASSERT(m_type == HTMLToken::Comment);
 123 return m_data;
 124 }
 125
 126 // FIXME: Distinguish between a missing public identifer and an empty one.
 127 WTF::Vector<UChar>& publicIdentifier() const
 128 {
 129 ASSERT(m_type == HTMLToken::DOCTYPE);
 130 return m_doctypeData->m_publicIdentifier;
 131 }
 132
 133 // FIXME: Distinguish between a missing system identifer and an empty one.
 134 WTF::Vector<UChar>& systemIdentifier() const
 135 {
 136 ASSERT(m_type == HTMLToken::DOCTYPE);
 137 return m_doctypeData->m_systemIdentifier;
 138 }
 139
 140 void clearExternalCharacters()
 141 {
 142 m_externalCharacters = 0;
 143 m_externalCharactersLength = 0;
 144 m_isAll8BitData = false;
 145 }
 146
 147private:
 148 explicit AtomicHTMLToken(HTMLToken& token)
 149 : m_type(token.type())
 150 {
 151 switch (m_type) {
 152 case HTMLToken::Uninitialized:
 153 ASSERT_NOT_REACHED();
 154 break;
 155 case HTMLToken::DOCTYPE:
 156 m_name = AtomicString(token.nameString());
 157 m_doctypeData = token.releaseDoctypeData();
 158 break;
 159 case HTMLToken::EndOfFile:
 160 break;
 161 case HTMLToken::StartTag:
 162 case HTMLToken::EndTag: {
 163 m_selfClosing = token.selfClosing();
 164 m_name = AtomicString(token.nameString());
 165 initializeAttributes(token.attributes());
 166 break;
 167 }
 168 case HTMLToken::Comment:
 169 if (token.isAll8BitData())
 170 m_data = String::make8BitFrom16BitSource(token.comment().data(), token.comment().size());
 171 else
 172 m_data = String(token.comment().data(), token.comment().size());
 173 break;
 174 case HTMLToken::Character:
 175 m_externalCharacters = token.characters().data();
 176 m_externalCharactersLength = token.characters().size();
 177 m_isAll8BitData = token.isAll8BitData();
 178 break;
 179 }
 180 }
 181
 182#if ENABLE(THREADED_HTML_PARSER)
 183
 184 explicit AtomicHTMLToken(const CompactHTMLToken& token)
 185 : m_type(token.type())
 186 {
 187 switch (m_type) {
 188 case HTMLToken::Uninitialized:
 189 ASSERT_NOT_REACHED();
 190 break;
 191 case HTMLToken::DOCTYPE:
 192 m_name = token.data();
 193 m_doctypeData = adoptPtr(new DoctypeData());
 194 m_doctypeData->m_hasPublicIdentifier = true;
 195 m_doctypeData->m_publicIdentifier.append(token.publicIdentifier().characters(), token.publicIdentifier().length());
 196 m_doctypeData->m_hasSystemIdentifier = true;
 197 m_doctypeData->m_systemIdentifier.append(token.systemIdentifier().characters(), token.systemIdentifier().length());
 198 m_doctypeData->m_forceQuirks = token.doctypeForcesQuirks();
 199 break;
 200 case HTMLToken::EndOfFile:
 201 break;
 202 case HTMLToken::StartTag:
 203 m_attributes.reserveInitialCapacity(token.attributes().size());
 204 for (Vector<CompactAttribute>::const_iterator it = token.attributes().begin(); it != token.attributes().end(); ++it)
 205 m_attributes.append(Attribute(QualifiedName(nullAtom, it->name(), nullAtom), it->value()));
 206 // Fall through!
 207 case HTMLToken::EndTag:
 208 m_selfClosing = token.selfClosing();
 209 m_name = AtomicString(token.data());
 210 break;
 211 case HTMLToken::Comment:
 212 m_data = token.data();
 213 break;
 214 case HTMLToken::Character:
 215 m_externalCharacters = token.data().characters();
 216 m_externalCharactersLength = token.data().length();
 217 m_isAll8BitData = token.isAll8BitData();
 218 break;
 219 }
 220 }
 221
 222#endif
 223
 224 explicit AtomicHTMLToken(HTMLToken::Type type)
 225 : m_type(type)
 226 , m_externalCharacters(0)
 227 , m_externalCharactersLength(0)
 228 , m_isAll8BitData(false)
 229 , m_selfClosing(false)
 230 {
 231 }
 232
 233 AtomicHTMLToken(HTMLToken::Type type, const AtomicString& name, const Vector<Attribute>& attributes = Vector<Attribute>())
 234 : m_type(type)
 235 , m_name(name)
 236 , m_externalCharacters(0)
 237 , m_externalCharactersLength(0)
 238 , m_isAll8BitData(false)
 239 , m_selfClosing(false)
 240 , m_attributes(attributes)
 241 {
 242 ASSERT(usesName());
 243 }
 244
 245 HTMLToken::Type m_type;
 246
 247 void initializeAttributes(const HTMLToken::AttributeList& attributes);
 248 QualifiedName nameForAttribute(const HTMLToken::Attribute&) const;
 249
 250 bool usesName() const;
 251
 252 bool usesAttributes() const;
 253
 254 // "name" for DOCTYPE, StartTag, and EndTag
 255 AtomicString m_name;
 256
 257 // "data" for Comment
 258 String m_data;
 259
 260 // "characters" for Character
 261 //
 262 // We don't want to copy the the characters out of the Token, so we
 263 // keep a pointer to its buffer instead. This buffer is owned by the
 264 // Token and causes a lifetime dependence between these objects.
 265 //
 266 // FIXME: Add a mechanism for "internalizing" the characters when the
 267 // HTMLToken is destructed.
 268 const UChar* m_externalCharacters;
 269 size_t m_externalCharactersLength;
 270 bool m_isAll8BitData;
 271
 272 // For DOCTYPE
 273 OwnPtr<DoctypeData> m_doctypeData;
 274
 275 // For StartTag and EndTag
 276 bool m_selfClosing;
 277
 278 Vector<Attribute> m_attributes;
 279};
 280
 281inline void AtomicHTMLToken::initializeAttributes(const HTMLToken::AttributeList& attributes)
 282{
 283 size_t size = attributes.size();
 284 if (!size)
 285 return;
 286
 287 m_attributes.clear();
 288 m_attributes.reserveInitialCapacity(size);
 289 for (size_t i = 0; i < size; ++i) {
 290 const HTMLToken::Attribute& attribute = attributes[i];
 291 if (attribute.m_name.isEmpty())
 292 continue;
 293
 294 // FIXME: We should be able to add the following ASSERT once we fix
 295 // https://bugs.webkit.org/show_bug.cgi?id=62971
 296 // ASSERT(attribute.m_nameRange.m_start);
 297 ASSERT(attribute.m_nameRange.m_end);
 298 ASSERT(attribute.m_valueRange.m_start);
 299 ASSERT(attribute.m_valueRange.m_end);
 300
 301 AtomicString value(attribute.m_value.data(), attribute.m_value.size());
 302 const QualifiedName& name = nameForAttribute(attribute);
 303 if (!findAttributeInVector(m_attributes, name))
 304 m_attributes.append(Attribute(name, value));
 305 }
 306}
 307
 308}
 309
 310#endif

Source/WebCore/html/parser/BackgroundHTMLParser.cpp

@@void BackgroundHTMLParser::markEndOfFile()
113113
114114bool BackgroundHTMLParser::simulateTreeBuilder(const CompactHTMLToken& token)
115115{
116  if (token.type() == HTMLTokenTypes::StartTag) {
 116 if (token.type() == HTMLToken::StartTag) {
117117 const String& tagName = token.data();
118118 if (threadSafeMatch(tagName, SVGNames::svgTag)
119119 || threadSafeMatch(tagName, MathMLNames::mathTag))

@@bool BackgroundHTMLParser::simulateTreeBuilder(const CompactHTMLToken& token)
135135 m_tokenizer->setState(HTMLTokenizer::RAWTEXTState);
136136 }
137137
138  if (token.type() == HTMLTokenTypes::EndTag) {
 138 if (token.type() == HTMLToken::EndTag) {
139139 const String& tagName = token.data();
140140 if (threadSafeMatch(tagName, SVGNames::svgTag) || threadSafeMatch(tagName, MathMLNames::mathTag))
141141 m_inForeignContent = false;

Source/WebCore/html/parser/CompactHTMLToken.cpp

@@CompactHTMLToken::CompactHTMLToken(const HTMLToken* token, const TextPosition& t
5151 , m_textPosition(textPosition)
5252{
5353 switch (m_type) {
54  case HTMLTokenTypes::Uninitialized:
 54 case HTMLToken::Uninitialized:
5555 ASSERT_NOT_REACHED();
5656 break;
57  case HTMLTokenTypes::DOCTYPE: {
 57 case HTMLToken::DOCTYPE: {
5858 m_data = String(token->name().data(), token->name().size());
5959 // There is only 1 DOCTYPE token per document, so to avoid increasing the
6060 // size of CompactHTMLToken, we just use the m_attributes vector.

@@CompactHTMLToken::CompactHTMLToken(const HTMLToken* token, const TextPosition& t
6464 m_doctypeForcesQuirks = token->forceQuirks();
6565 break;
6666 }
67  case HTMLTokenTypes::EndOfFile:
 67 case HTMLToken::EndOfFile:
6868 break;
69  case HTMLTokenTypes::StartTag:
 69 case HTMLToken::StartTag:
7070 m_attributes.reserveInitialCapacity(token->attributes().size());
7171 for (Vector<HTMLToken::Attribute>::const_iterator it = token->attributes().begin(); it != token->attributes().end(); ++it)
7272 m_attributes.append(CompactAttribute(String(it->m_name.data(), it->m_name.size()), String(it->m_value.data(), it->m_value.size())));
7373 // Fall through!
74  case HTMLTokenTypes::EndTag:
 74 case HTMLToken::EndTag:
7575 m_selfClosing = token->selfClosing();
7676 // Fall through!
77  case HTMLTokenTypes::Comment:
78  case HTMLTokenTypes::Character:
 77 case HTMLToken::Comment:
 78 case HTMLToken::Character:
7979 if (token->isAll8BitData()) {
8080 m_data = String::make8BitFrom16BitSource(token->data().data(), token->data().size());
8181 m_isAll8BitData = true;

Source/WebCore/html/parser/CompactHTMLToken.h

2828
2929#if ENABLE(THREADED_HTML_PARSER)
3030
31 #include "HTMLTokenTypes.h"
 31#include "HTMLToken.h"
3232#include <wtf/OwnPtr.h>
3333#include <wtf/PassOwnPtr.h>
3434#include <wtf/RefCounted.h>

3939
4040namespace WebCore {
4141
42 class HTMLToken;
4342class XSSInfo;
4443
4544class CompactAttribute {

@@public:
6564
6665 bool isSafeToSendToAnotherThread() const;
6766
68  HTMLTokenTypes::Type type() const { return static_cast<HTMLTokenTypes::Type>(m_type); }
 67 HTMLToken::Type type() const { return static_cast<HTMLToken::Type>(m_type); }
6968 const String& data() const { return m_data; }
7069 bool selfClosing() const { return m_selfClosing; }
7170 bool isAll8BitData() const { return m_isAll8BitData; }

Source/WebCore/html/parser/HTMLConstructionSite.cpp

2727#include "config.h"
2828#include "HTMLTreeBuilder.h"
2929
 30#include "AtomicHTMLToken.h"
3031#include "Comment.h"
3132#include "DocumentFragment.h"
3233#include "DocumentType.h"

@@void HTMLConstructionSite::finishedParsing()
340341
341342void HTMLConstructionSite::insertDoctype(AtomicHTMLToken* token)
342343{
343  ASSERT(token->type() == HTMLTokenTypes::DOCTYPE);
 344 ASSERT(token->type() == HTMLToken::DOCTYPE);
344345
345346 const String& publicId = String::adopt(token->publicIdentifier());
346347 const String& systemId = String::adopt(token->systemIdentifier());

@@void HTMLConstructionSite::insertDoctype(AtomicHTMLToken* token)
365366
366367void HTMLConstructionSite::insertComment(AtomicHTMLToken* token)
367368{
368  ASSERT(token->type() == HTMLTokenTypes::Comment);
 369 ASSERT(token->type() == HTMLToken::Comment);
369370 attachLater(currentNode(), Comment::create(ownerDocumentForCurrentNode(), token->comment()));
370371}
371372
372373void HTMLConstructionSite::insertCommentOnDocument(AtomicHTMLToken* token)
373374{
374  ASSERT(token->type() == HTMLTokenTypes::Comment);
 375 ASSERT(token->type() == HTMLToken::Comment);
375376 attachLater(m_attachmentRoot, Comment::create(m_document, token->comment()));
376377}
377378
378379void HTMLConstructionSite::insertCommentOnHTMLHtmlElement(AtomicHTMLToken* token)
379380{
380  ASSERT(token->type() == HTMLTokenTypes::Comment);
 381 ASSERT(token->type() == HTMLToken::Comment);
381382 ContainerNode* parent = m_openElements.rootNode();
382383 attachLater(parent, Comment::create(parent->document(), token->comment()));
383384}

@@void HTMLConstructionSite::insertHTMLElement(AtomicHTMLToken* token)
419420
420421void HTMLConstructionSite::insertSelfClosingHTMLElement(AtomicHTMLToken* token)
421422{
422  ASSERT(token->type() == HTMLTokenTypes::StartTag);
 423 ASSERT(token->type() == HTMLToken::StartTag);
423424 // Normally HTMLElementStack is responsible for calling finishParsingChildren,
424425 // but self-closing elements are never in the element stack so the stack
425426 // doesn't get a chance to tell them that we're done parsing their children.

@@void HTMLConstructionSite::insertScriptElement(AtomicHTMLToken* token)
455456
456457void HTMLConstructionSite::insertForeignElement(AtomicHTMLToken* token, const AtomicString& namespaceURI)
457458{
458  ASSERT(token->type() == HTMLTokenTypes::StartTag);
 459 ASSERT(token->type() == HTMLToken::StartTag);
459460 notImplemented(); // parseError when xmlns or xmlns:xlink are wrong.
460461
461462 RefPtr<Element> element = createElement(token, namespaceURI);

Source/WebCore/html/parser/HTMLDocumentParser.cpp

2626#include "config.h"
2727#include "HTMLDocumentParser.h"
2828
 29#include "AtomicHTMLToken.h"
2930#include "BackgroundHTMLParser.h"
3031#include "CompactHTMLToken.h"
3132#include "ContentSecurityPolicy.h"

@@void HTMLDocumentParser::processParsedChunkFromBackgroundParser(PassOwnPtr<Parse
348349 break;
349350 }
350351
351  if (it->type() == HTMLTokenTypes::EndOfFile) {
 352 if (it->type() == HTMLToken::EndOfFile) {
352353 ASSERT(it + 1 == tokens->end()); // The EOF is assumed to be the last token of this bunch.
353354 prepareToStopParsing();
354355 break;

@@void HTMLDocumentParser::constructTreeFromHTMLToken(HTMLToken& rawToken)
463464 // FIXME: Stop clearing the rawToken once we start running the parser off
464465 // the main thread or once we stop allowing synchronous JavaScript
465466 // execution from parseAttribute.
466  if (rawToken.type() != HTMLTokenTypes::Character)
 467 if (rawToken.type() != HTMLToken::Character)
467468 rawToken.clear();
468469
469470 m_treeBuilder->constructTree(token.get());

@@void HTMLDocumentParser::constructTreeFromHTMLToken(HTMLToken& rawToken)
475476 token->clearExternalCharacters();
476477
477478 if (!rawToken.isUninitialized()) {
478  ASSERT(rawToken.type() == HTMLTokenTypes::Character);
 479 ASSERT(rawToken.type() == HTMLToken::Character);
479480 rawToken.clear();
480481 }
481482}

Source/WebCore/html/parser/HTMLDocumentParser.h

2828
2929#include "BackgroundHTMLInputStream.h"
3030#include "CachedResourceClient.h"
 31#include "CompactHTMLToken.h"
3132#include "FragmentScriptingPermission.h"
3233#include "HTMLInputStream.h"
3334#include "HTMLParserOptions.h"

Source/WebCore/html/parser/HTMLMetaCharsetParser.cpp

@@bool HTMLMetaCharsetParser::checkForMetaCharset(const char* data, size_t length)
176176 m_input.append(SegmentedString(m_assumedCodec->decode(data, length)));
177177
178178 while (m_tokenizer->nextToken(m_input, m_token)) {
179  bool end = m_token.type() == HTMLTokenTypes::EndTag;
180  if (end || m_token.type() == HTMLTokenTypes::StartTag) {
 179 bool end = m_token.type() == HTMLToken::EndTag;
 180 if (end || m_token.type() == HTMLToken::StartTag) {
181181 AtomicString tagName(m_token.name().data(), m_token.name().size());
182182 if (!end) {
183183 m_tokenizer->updateStateFor(tagName);

Source/WebCore/html/parser/HTMLPreloadScanner.cpp

@@using namespace HTMLNames;
4545
4646static bool isStartTag(const HTMLToken& token)
4747{
48  return token.type() == HTMLTokenTypes::StartTag;
 48 return token.type() == HTMLToken::StartTag;
4949}
5050
5151static bool isStartOrEndTag(const HTMLToken& token)
5252{
53  return token.type() == HTMLTokenTypes::EndTag || isStartTag(token);
 53 return token.type() == HTMLToken::EndTag || isStartTag(token);
5454}
5555
5656class StartTagScanner {

@@void HTMLPreloadScanner::processToken(const HTMLToken& token, Vector<OwnPtr<Prel
279279{
280280 // <style> is the only place we search for urls in non-start/end-tag tokens.
281281 if (m_inStyle) {
282  if (token.type() != HTMLTokenTypes::Character)
 282 if (token.type() != HTMLToken::Character)
283283 return;
284284 return m_cssScanner.scan(token, requests);
285285 }

Source/WebCore/html/parser/HTMLSourceTracker.cpp

@@HTMLSourceTracker::HTMLSourceTracker()
3636
3737void HTMLSourceTracker::start(SegmentedString& currentInput, HTMLTokenizer* tokenizer, HTMLToken& token)
3838{
39  if (token.type() == HTMLTokenTypes::Uninitialized) {
 39 if (token.type() == HTMLToken::Uninitialized) {
4040 m_previousSource.clear();
4141 if (tokenizer->numberOfBufferedCharacters())
4242 m_previousSource = tokenizer->bufferedCharacters();

@@void HTMLSourceTracker::end(SegmentedString& currentInput, HTMLTokenizer* tokeni
5757
5858String HTMLSourceTracker::sourceForToken(const HTMLToken& token)
5959{
60  if (token.type() == HTMLTokenTypes::EndOfFile)
 60 if (token.type() == HTMLToken::EndOfFile)
6161 return String(); // Hides the null character we use to mark the end of file.
6262
6363 if (!m_cachedSourceForToken.isEmpty())

Source/WebCore/html/parser/HTMLStackItem.h

2626#ifndef HTMLStackItem_h
2727#define HTMLStackItem_h
2828
 29#include "AtomicHTMLToken.h"
2930#include "Element.h"
3031#include "HTMLNames.h"
31 #include "HTMLToken.h"
3232#include "MathMLNames.h"
3333#include "SVGNames.h"
3434

@@private:
208208 // Create a fake token for a document fragment node. This looks ugly but required for performance
209209 // because we want to use m_token->name() in localName(), hasLocalName() and hasTagName() without
210210 // checking m_isDocumentFragmentNode flag.
211  m_token = AtomicHTMLToken::create(HTMLTokenTypes::StartTag, nullAtom);
 211 m_token = AtomicHTMLToken::create(HTMLToken::StartTag, nullAtom);
212212 m_isDocumentFragmentNode = true;
213213 break;
214214 case ItemForContextElement:
215215 // Create a fake token for a context element for the same reason as above.
216  m_token = AtomicHTMLToken::create(HTMLTokenTypes::StartTag, m_node->localName());
 216 m_token = AtomicHTMLToken::create(HTMLToken::StartTag, m_node->localName());
217217 m_namespaceURI = m_node->namespaceURI();
218218 m_isDocumentFragmentNode = false;
219219 break;

Source/WebCore/html/parser/HTMLToken.h

2727#define HTMLToken_h
2828
2929#include "Attribute.h"
30 #include "CompactHTMLToken.h"
31 #include "HTMLTokenTypes.h"
 30#include "HTMLToken.h"
3231#include <wtf/RefCounted.h>
3332#include <wtf/RefPtr.h>
3433

@@class HTMLToken {
6564 WTF_MAKE_NONCOPYABLE(HTMLToken);
6665 WTF_MAKE_FAST_ALLOCATED;
6766public:
68  typedef HTMLTokenTypes Type;
 67 enum Type {
 68 Uninitialized,
 69 DOCTYPE,
 70 StartTag,
 71 EndTag,
 72 Comment,
 73 Character,
 74 EndOfFile,
 75 };
6976
7077 class Attribute {
7178 public:

@@public:
8895
8996 void clear()
9097 {
91  m_type = Type::Uninitialized;
 98 m_type = Uninitialized;
9299 m_range.m_start = 0;
93100 m_range.m_end = 0;
94101 m_baseOffset = 0;

@@public:
96103 m_orAllData = 0;
97104 }
98105
99  bool isUninitialized() { return m_type == HTMLTokenTypes::Uninitialized; }
100  HTMLTokenTypes::Type type() const { return m_type; }
 106 bool isUninitialized() { return m_type == Uninitialized; }
 107 Type type() const { return m_type; }
101108
102109 void makeEndOfFile()
103110 {
104  ASSERT(m_type == HTMLTokenTypes::Uninitialized);
105  m_type = HTMLTokenTypes::EndOfFile;
 111 ASSERT(m_type == Uninitialized);
 112 m_type = EndOfFile;
106113 }
107114
108115 /* Range and offset methods exposed for HTMLSourceTracker and HTMLViewSourceParser */

@@public:
121128
122129 const DataVector& data() const
123130 {
124  ASSERT(m_type == HTMLTokenTypes::Character || m_type == HTMLTokenTypes::Comment || m_type == HTMLTokenTypes::StartTag || m_type == HTMLTokenTypes::EndTag);
 131 ASSERT(m_type == Character || m_type == Comment || m_type == StartTag || m_type == EndTag);
125132 return m_data;
126133 }
127134

@@public:
132139
133140 const DataVector& name() const
134141 {
135  ASSERT(m_type == HTMLTokenTypes::StartTag || m_type == HTMLTokenTypes::EndTag || m_type == HTMLTokenTypes::DOCTYPE);
 142 ASSERT(m_type == StartTag || m_type == EndTag || m_type == DOCTYPE);
136143 return m_data;
137144 }
138145
139146 void appendToName(UChar character)
140147 {
141  ASSERT(m_type == HTMLTokenTypes::StartTag || m_type == HTMLTokenTypes::EndTag || m_type == HTMLTokenTypes::DOCTYPE);
 148 ASSERT(m_type == StartTag || m_type == EndTag || m_type == DOCTYPE);
142149 ASSERT(character);
143150 m_data.append(character);
144151 m_orAllData |= character;

@@public:
158165
159166 bool forceQuirks() const
160167 {
161  ASSERT(m_type == HTMLTokenTypes::DOCTYPE);
 168 ASSERT(m_type == DOCTYPE);
162169 return m_doctypeData->m_forceQuirks;
163170 }
164171
165172 void setForceQuirks()
166173 {
167  ASSERT(m_type == HTMLTokenTypes::DOCTYPE);
 174 ASSERT(m_type == DOCTYPE);
168175 m_doctypeData->m_forceQuirks = true;
169176 }
170177
171178 void beginDOCTYPE()
172179 {
173  ASSERT(m_type == HTMLTokenTypes::Uninitialized);
174  m_type = HTMLTokenTypes::DOCTYPE;
 180 ASSERT(m_type == Uninitialized);
 181 m_type = DOCTYPE;
175182 m_doctypeData = adoptPtr(new DoctypeData);
176183 }
177184

@@public:
186193 // FIXME: Distinguish between a missing public identifer and an empty one.
187194 const WTF::Vector<UChar>& publicIdentifier() const
188195 {
189  ASSERT(m_type == HTMLTokenTypes::DOCTYPE);
 196 ASSERT(m_type == DOCTYPE);
190197 return m_doctypeData->m_publicIdentifier;
191198 }
192199
193200 // FIXME: Distinguish between a missing system identifer and an empty one.
194201 const WTF::Vector<UChar>& systemIdentifier() const
195202 {
196  ASSERT(m_type == HTMLTokenTypes::DOCTYPE);
 203 ASSERT(m_type == DOCTYPE);
197204 return m_doctypeData->m_systemIdentifier;
198205 }
199206
200207 void setPublicIdentifierToEmptyString()
201208 {
202  ASSERT(m_type == HTMLTokenTypes::DOCTYPE);
 209 ASSERT(m_type == DOCTYPE);
203210 m_doctypeData->m_hasPublicIdentifier = true;
204211 m_doctypeData->m_publicIdentifier.clear();
205212 }
206213
207214 void setSystemIdentifierToEmptyString()
208215 {
209  ASSERT(m_type == HTMLTokenTypes::DOCTYPE);
 216 ASSERT(m_type == DOCTYPE);
210217 m_doctypeData->m_hasSystemIdentifier = true;
211218 m_doctypeData->m_systemIdentifier.clear();
212219 }

@@public:
214221 void appendToPublicIdentifier(UChar character)
215222 {
216223 ASSERT(character);
217  ASSERT(m_type == HTMLTokenTypes::DOCTYPE);
 224 ASSERT(m_type == DOCTYPE);
218225 ASSERT(m_doctypeData->m_hasPublicIdentifier);
219226 m_doctypeData->m_publicIdentifier.append(character);
220227 }

@@public:
222229 void appendToSystemIdentifier(UChar character)
223230 {
224231 ASSERT(character);
225  ASSERT(m_type == HTMLTokenTypes::DOCTYPE);
 232 ASSERT(m_type == DOCTYPE);
226233 ASSERT(m_doctypeData->m_hasSystemIdentifier);
227234 m_doctypeData->m_systemIdentifier.append(character);
228235 }

@@public:
236243
237244 bool selfClosing() const
238245 {
239  ASSERT(m_type == HTMLTokenTypes::StartTag || m_type == HTMLTokenTypes::EndTag);
 246 ASSERT(m_type == StartTag || m_type == EndTag);
240247 return m_selfClosing;
241248 }
242249
243250 void setSelfClosing()
244251 {
245  ASSERT(m_type == HTMLTokenTypes::StartTag || m_type == HTMLTokenTypes::EndTag);
 252 ASSERT(m_type == StartTag || m_type == EndTag);
246253 m_selfClosing = true;
247254 }
248255
249256 void beginStartTag(UChar character)
250257 {
251258 ASSERT(character);
252  ASSERT(m_type == HTMLTokenTypes::Uninitialized);
253  m_type = HTMLTokenTypes::StartTag;
 259 ASSERT(m_type == Uninitialized);
 260 m_type = StartTag;
254261 m_selfClosing = false;
255262 m_currentAttribute = 0;
256263 m_attributes.clear();

@@public:
261268
262269 void beginEndTag(LChar character)
263270 {
264  ASSERT(m_type == HTMLTokenTypes::Uninitialized);
265  m_type = HTMLTokenTypes::EndTag;
 271 ASSERT(m_type == Uninitialized);
 272 m_type = EndTag;
266273 m_selfClosing = false;
267274 m_currentAttribute = 0;
268275 m_attributes.clear();

@@public:
272279
273280 void beginEndTag(const Vector<LChar, 32>& characters)
274281 {
275  ASSERT(m_type == HTMLTokenTypes::Uninitialized);
276  m_type = HTMLTokenTypes::EndTag;
 282 ASSERT(m_type == Uninitialized);
 283 m_type = EndTag;
277284 m_selfClosing = false;
278285 m_currentAttribute = 0;
279286 m_attributes.clear();

@@public:
283290
284291 void addNewAttribute()
285292 {
286  ASSERT(m_type == HTMLTokenTypes::StartTag || m_type == HTMLTokenTypes::EndTag);
 293 ASSERT(m_type == StartTag || m_type == EndTag);
287294 m_attributes.grow(m_attributes.size() + 1);
288295 m_currentAttribute = &m_attributes.last();
289296#ifndef NDEBUG

@@public:
323330 void appendToAttributeName(UChar character)
324331 {
325332 ASSERT(character);
326  ASSERT(m_type == HTMLTokenTypes::StartTag || m_type == HTMLTokenTypes::EndTag);
 333 ASSERT(m_type == StartTag || m_type == EndTag);
327334 // FIXME: We should be able to add the following ASSERT once we fix
328335 // https://bugs.webkit.org/show_bug.cgi?id=62971
329336 // ASSERT(m_currentAttribute->m_nameRange.m_start);

@@public:
333340 void appendToAttributeValue(UChar character)
334341 {
335342 ASSERT(character);
336  ASSERT(m_type == HTMLTokenTypes::StartTag || m_type == HTMLTokenTypes::EndTag);
 343 ASSERT(m_type == StartTag || m_type == EndTag);
337344 ASSERT(m_currentAttribute->m_valueRange.m_start);
338345 m_currentAttribute->m_value.append(character);
339346 }

@@public:
341348 void appendToAttributeValue(size_t i, const String& value)
342349 {
343350 ASSERT(!value.isEmpty());
344  ASSERT(m_type == HTMLTokenTypes::StartTag || m_type == HTMLTokenTypes::EndTag);
 351 ASSERT(m_type == StartTag || m_type == EndTag);
345352 m_attributes[i].m_value.append(value.characters(), value.length());
346353 }
347354
348355 const AttributeList& attributes() const
349356 {
350  ASSERT(m_type == HTMLTokenTypes::StartTag || m_type == HTMLTokenTypes::EndTag);
 357 ASSERT(m_type == StartTag || m_type == EndTag);
351358 return m_attributes;
352359 }
353360
354361 // Used by the XSSAuditor to nuke XSS-laden attributes.
355362 void eraseValueOfAttribute(size_t i)
356363 {
357  ASSERT(m_type == HTMLTokenTypes::StartTag || m_type == HTMLTokenTypes::EndTag);
 364 ASSERT(m_type == StartTag || m_type == EndTag);
358365 m_attributes[i].m_value.clear();
359366 }
360367

@@public:
364371 // other types of tokens because we want to save a per-character branch.
365372 void ensureIsCharacterToken()
366373 {
367  ASSERT(m_type == HTMLTokenTypes::Uninitialized || m_type == HTMLTokenTypes::Character);
368  m_type = HTMLTokenTypes::Character;
 374 ASSERT(m_type == Uninitialized || m_type == Character);
 375 m_type = Character;
369376 }
370377
371378 const DataVector& characters() const
372379 {
373  ASSERT(m_type == HTMLTokenTypes::Character);
 380 ASSERT(m_type == Character);
374381 return m_data;
375382 }
376383
377384 void appendToCharacter(char character)
378385 {
379  ASSERT(m_type == HTMLTokenTypes::Character);
 386 ASSERT(m_type == Character);
380387 m_data.append(character);
381388 }
382389
383390 void appendToCharacter(UChar character)
384391 {
385  ASSERT(m_type == HTMLTokenTypes::Character);
 392 ASSERT(m_type == Character);
386393 m_data.append(character);
387394 m_orAllData |= character;
388395 }
389396
390397 void appendToCharacter(const Vector<LChar, 32>& characters)
391398 {
392  ASSERT(m_type == HTMLTokenTypes::Character);
 399 ASSERT(m_type == Character);
393400 m_data.appendVector(characters);
394401 }
395402

@@public:
397404
398405 const DataVector& comment() const
399406 {
400  ASSERT(m_type == HTMLTokenTypes::Comment);
 407 ASSERT(m_type == Comment);
401408 return m_data;
402409 }
403410
404411 void beginComment()
405412 {
406  ASSERT(m_type == HTMLTokenTypes::Uninitialized);
407  m_type = HTMLTokenTypes::Comment;
 413 ASSERT(m_type == Uninitialized);
 414 m_type = Comment;
408415 }
409416
410417 void appendToComment(UChar character)
411418 {
412419 ASSERT(character);
413  ASSERT(m_type == HTMLTokenTypes::Comment);
 420 ASSERT(m_type == Comment);
414421 m_data.append(character);
415422 m_orAllData |= character;
416423 }
417424
418425 void eraseCharacters()
419426 {
420  ASSERT(m_type == HTMLTokenTypes::Character);
 427 ASSERT(m_type == Character);
421428 m_data.clear();
422429 m_orAllData = 0;
423430 }
424431
425432private:
426  HTMLTokenTypes::Type m_type;
 433 Type m_type;
427434 Attribute::Range m_range; // Always starts at zero.
428435 int m_baseOffset;
429436 DataVector m_data;

@@private:
440447 OwnPtr<DoctypeData> m_doctypeData;
441448};
442449
443 class AtomicHTMLToken : public RefCounted<AtomicHTMLToken> {
444  WTF_MAKE_NONCOPYABLE(AtomicHTMLToken);
445 public:
446  static PassRefPtr<AtomicHTMLToken> create(HTMLToken& token)
447  {
448  return adoptRef(new AtomicHTMLToken(token));
449  }
450 
451 #if ENABLE(THREADED_HTML_PARSER)
452 
453  static PassRefPtr<AtomicHTMLToken> create(const CompactHTMLToken& token)
454  {
455  return adoptRef(new AtomicHTMLToken(token));
456  }
457 
458 #endif
459 
460  static PassRefPtr<AtomicHTMLToken> create(HTMLTokenTypes::Type type, const AtomicString& name, const Vector<Attribute>& attributes = Vector<Attribute>())
461  {
462  return adoptRef(new AtomicHTMLToken(type, name, attributes));
463  }
464 
465  bool forceQuirks() const
466  {
467  ASSERT(m_type == HTMLTokenTypes::DOCTYPE);
468  return m_doctypeData->m_forceQuirks;
469  }
470 
471  HTMLTokenTypes::Type type() const { return m_type; }
472 
473  const AtomicString& name() const
474  {
475  ASSERT(usesName());
476  return m_name;
477  }
478 
479  void setName(const AtomicString& name)
480  {
481  ASSERT(usesName());
482  m_name = name;
483  }
484 
485  bool selfClosing() const
486  {
487  ASSERT(m_type == HTMLTokenTypes::StartTag || m_type == HTMLTokenTypes::EndTag);
488  return m_selfClosing;
489  }
490 
491  Attribute* getAttributeItem(const QualifiedName& attributeName)
492  {
493  ASSERT(usesAttributes());
494  return findAttributeInVector(m_attributes, attributeName);
495  }
496 
497  Vector<Attribute>& attributes()
498  {
499  ASSERT(usesAttributes());
500  return m_attributes;
501  }
502 
503  const Vector<Attribute>& attributes() const
504  {
505  ASSERT(usesAttributes());
506  return m_attributes;
507  }
508 
509  const UChar* characters() const
510  {
511  ASSERT(m_type == HTMLTokenTypes::Character);
512  return m_externalCharacters;
513  }
514 
515  size_t charactersLength() const
516  {
517  ASSERT(m_type == HTMLTokenTypes::Character);
518  return m_externalCharactersLength;
519  }
520 
521  bool isAll8BitData() const
522  {
523  return m_isAll8BitData;
524  }
525 
526  const String& comment() const
527  {
528  ASSERT(m_type == HTMLTokenTypes::Comment);
529  return m_data;
530  }
531 
532  // FIXME: Distinguish between a missing public identifer and an empty one.
533  WTF::Vector<UChar>& publicIdentifier() const
534  {
535  ASSERT(m_type == HTMLTokenTypes::DOCTYPE);
536  return m_doctypeData->m_publicIdentifier;
537  }
538 
539  // FIXME: Distinguish between a missing system identifer and an empty one.
540  WTF::Vector<UChar>& systemIdentifier() const
541  {
542  ASSERT(m_type == HTMLTokenTypes::DOCTYPE);
543  return m_doctypeData->m_systemIdentifier;
544  }
545 
546  void clearExternalCharacters()
547  {
548  m_externalCharacters = 0;
549  m_externalCharactersLength = 0;
550  m_isAll8BitData = false;
551  }
552 
553 private:
554  explicit AtomicHTMLToken(HTMLToken& token)
555  : m_type(token.type())
556  {
557  switch (m_type) {
558  case HTMLTokenTypes::Uninitialized:
559  ASSERT_NOT_REACHED();
560  break;
561  case HTMLTokenTypes::DOCTYPE:
562  m_name = AtomicString(token.nameString());
563  m_doctypeData = token.releaseDoctypeData();
564  break;
565  case HTMLTokenTypes::EndOfFile:
566  break;
567  case HTMLTokenTypes::StartTag:
568  case HTMLTokenTypes::EndTag: {
569  m_selfClosing = token.selfClosing();
570  m_name = AtomicString(token.nameString());
571  initializeAttributes(token.attributes());
572  break;
573  }
574  case HTMLTokenTypes::Comment:
575  if (token.isAll8BitData())
576  m_data = String::make8BitFrom16BitSource(token.comment().data(), token.comment().size());
577  else
578  m_data = String(token.comment().data(), token.comment().size());
579  break;
580  case HTMLTokenTypes::Character:
581  m_externalCharacters = token.characters().data();
582  m_externalCharactersLength = token.characters().size();
583  m_isAll8BitData = token.isAll8BitData();
584  break;
585  default:
586  break;
587  }
588  }
589 
590 #if ENABLE(THREADED_HTML_PARSER)
591 
592  explicit AtomicHTMLToken(const CompactHTMLToken& token)
593  : m_type(token.type())
594  {
595  switch (m_type) {
596  case HTMLTokenTypes::Uninitialized:
597  ASSERT_NOT_REACHED();
598  break;
599  case HTMLTokenTypes::DOCTYPE:
600  m_name = token.data();
601  m_doctypeData = adoptPtr(new DoctypeData());
602  m_doctypeData->m_hasPublicIdentifier = true;
603  m_doctypeData->m_publicIdentifier.append(token.publicIdentifier().characters(), token.publicIdentifier().length());
604  m_doctypeData->m_hasSystemIdentifier = true;
605  m_doctypeData->m_systemIdentifier.append(token.systemIdentifier().characters(), token.systemIdentifier().length());
606  m_doctypeData->m_forceQuirks = token.doctypeForcesQuirks();
607  break;
608  case HTMLTokenTypes::EndOfFile:
609  break;
610  case HTMLTokenTypes::StartTag:
611  m_attributes.reserveInitialCapacity(token.attributes().size());
612  for (Vector<CompactAttribute>::const_iterator it = token.attributes().begin(); it != token.attributes().end(); ++it)
613  m_attributes.append(Attribute(QualifiedName(nullAtom, it->name(), nullAtom), it->value()));
614  // Fall through!
615  case HTMLTokenTypes::EndTag:
616  m_selfClosing = token.selfClosing();
617  m_name = AtomicString(token.data());
618  break;
619  case HTMLTokenTypes::Comment:
620  m_data = token.data();
621  break;
622  case HTMLTokenTypes::Character:
623  m_externalCharacters = token.data().characters();
624  m_externalCharactersLength = token.data().length();
625  m_isAll8BitData = token.isAll8BitData();
626  break;
627  default:
628  break;
629  }
630  }
631 
632 #endif
633 
634  explicit AtomicHTMLToken(HTMLTokenTypes::Type type)
635  : m_type(type)
636  , m_externalCharacters(0)
637  , m_externalCharactersLength(0)
638  , m_isAll8BitData(false)
639  , m_selfClosing(false)
640  {
641  }
642 
643  AtomicHTMLToken(HTMLTokenTypes::Type type, const AtomicString& name, const Vector<Attribute>& attributes = Vector<Attribute>())
644  : m_type(type)
645  , m_name(name)
646  , m_externalCharacters(0)
647  , m_externalCharactersLength(0)
648  , m_isAll8BitData(false)
649  , m_selfClosing(false)
650  , m_attributes(attributes)
651  {
652  ASSERT(usesName());
653  }
654 
655  HTMLTokenTypes::Type m_type;
656 
657  void initializeAttributes(const HTMLToken::AttributeList& attributes);
658  QualifiedName nameForAttribute(const HTMLToken::Attribute&) const;
659 
660  bool usesName() const;
661 
662  bool usesAttributes() const;
663 
664  // "name" for DOCTYPE, StartTag, and EndTag
665  AtomicString m_name;
666 
667  // "data" for Comment
668  String m_data;
669 
670  // "characters" for Character
671  //
672  // We don't want to copy the the characters out of the Token, so we
673  // keep a pointer to its buffer instead. This buffer is owned by the
674  // Token and causes a lifetime dependence between these objects.
675  //
676  // FIXME: Add a mechanism for "internalizing" the characters when the
677  // HTMLToken is destructed.
678  const UChar* m_externalCharacters;
679  size_t m_externalCharactersLength;
680  bool m_isAll8BitData;
681 
682  // For DOCTYPE
683  OwnPtr<DoctypeData> m_doctypeData;
684 
685  // For StartTag and EndTag
686  bool m_selfClosing;
687 
688  Vector<Attribute> m_attributes;
689 };
690 
691 inline void AtomicHTMLToken::initializeAttributes(const HTMLToken::AttributeList& attributes)
692 {
693  size_t size = attributes.size();
694  if (!size)
695  return;
696 
697  m_attributes.clear();
698  m_attributes.reserveInitialCapacity(size);
699  for (size_t i = 0; i < size; ++i) {
700  const HTMLToken::Attribute& attribute = attributes[i];
701  if (attribute.m_name.isEmpty())
702  continue;
703 
704  // FIXME: We should be able to add the following ASSERT once we fix
705  // https://bugs.webkit.org/show_bug.cgi?id=62971
706  // ASSERT(attribute.m_nameRange.m_start);
707  ASSERT(attribute.m_nameRange.m_end);
708  ASSERT(attribute.m_valueRange.m_start);
709  ASSERT(attribute.m_valueRange.m_end);
710 
711  AtomicString value(attribute.m_value.data(), attribute.m_value.size());
712  const QualifiedName& name = nameForAttribute(attribute);
713  if (!findAttributeInVector(m_attributes, name))
714  m_attributes.append(Attribute(name, value));
715  }
716 }
717 
718450}
719451
720452#endif

Source/WebCore/html/parser/HTMLTokenTypes.h

1 /*
2  * Copyright (C) 2013 Google, Inc. All Rights Reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 
26 #ifndef HTMLTokenTypes_h
27 #define HTMLTokenTypes_h
28 
29 namespace WebCore {
30 
31 class HTMLTokenTypes {
32 public:
33  enum Type {
34  Uninitialized,
35  DOCTYPE,
36  StartTag,
37  EndTag,
38  Comment,
39  Character,
40  EndOfFile,
41  };
42 };
43 
44 }
45 
46 #endif

Source/WebCore/html/parser/HTMLTokenizer.cpp

@@QualifiedName AtomicHTMLToken::nameForAttribute(const HTMLToken::Attribute& attr
5656
5757bool AtomicHTMLToken::usesName() const
5858{
59  return m_type == HTMLTokenTypes::StartTag || m_type == HTMLTokenTypes::EndTag || m_type == HTMLTokenTypes::DOCTYPE;
 59 return m_type == HTMLToken::StartTag || m_type == HTMLToken::EndTag || m_type == HTMLToken::DOCTYPE;
6060}
6161
6262bool AtomicHTMLToken::usesAttributes() const
6363{
64  return m_type == HTMLTokenTypes::StartTag || m_type == HTMLTokenTypes::EndTag;
 64 return m_type == HTMLToken::StartTag || m_type == HTMLToken::EndTag;
6565}
6666
6767static inline UChar toLowerCase(UChar cc)

@@inline bool HTMLTokenizer::processEntity(SegmentedString& source)
178178
179179bool HTMLTokenizer::flushBufferedEndTag(SegmentedString& source)
180180{
181  ASSERT(m_token->type() == HTMLTokenTypes::Character || m_token->type() == HTMLTokenTypes::Uninitialized);
 181 ASSERT(m_token->type() == HTMLToken::Character || m_token->type() == HTMLToken::Uninitialized);
182182 source.advanceAndUpdateLineNumber();
183  if (m_token->type() == HTMLTokenTypes::Character)
 183 if (m_token->type() == HTMLToken::Character)
184184 return true;
185185 m_token->beginEndTag(m_bufferedEndTagName);
186186 m_bufferedEndTagName.clear();

@@bool HTMLTokenizer::nextToken(SegmentedString& source, HTMLToken& token)
212212{
213213 // If we have a token in progress, then we're supposed to be called back
214214 // with the same token so we can finish it.
215  ASSERT(!m_token || m_token == &token || token.type() == HTMLTokenTypes::Uninitialized);
 215 ASSERT(!m_token || m_token == &token || token.type() == HTMLToken::Uninitialized);
216216 m_token = &token;
217217
218218 if (!m_bufferedEndTagName.isEmpty() && !isEndTagBufferingState(m_state)) {

@@bool HTMLTokenizer::nextToken(SegmentedString& source, HTMLToken& token)
238238 if (cc == '&')
239239 HTML_ADVANCE_TO(CharacterReferenceInDataState);
240240 else if (cc == '<') {
241  if (m_token->type() == HTMLTokenTypes::Character) {
 241 if (m_token->type() == HTMLToken::Character) {
242242 // We have a bunch of character tokens queued up that we
243243 // are emitting lazily here.
244244 return true;

Source/WebCore/html/parser/HTMLTokenizer.h

@@private:
253253
254254 inline void saveEndTagNameIfNeeded()
255255 {
256  ASSERT(m_token->type() != HTMLTokenTypes::Uninitialized);
257  if (m_token->type() == HTMLTokenTypes::StartTag)
 256 ASSERT(m_token->type() != HTMLToken::Uninitialized);
 257 if (m_token->type() == HTMLToken::StartTag)
258258 m_appropriateEndTagName = m_token->name();
259259 }
260260 inline bool isAppropriateEndTag();

@@private:
262262
263263 inline bool haveBufferedCharacterToken()
264264 {
265  return m_token->type() == HTMLToken::Type::Character;
 265 return m_token->type() == HTMLToken::Character;
266266 }
267267
268268 State m_state;

Source/WebCore/html/parser/HTMLTreeBuilder.cpp

2727#include "config.h"
2828#include "HTMLTreeBuilder.h"
2929
 30#include "AtomicHTMLToken.h"
3031#include "DocumentFragment.h"
3132#include "HTMLDocument.h"
3233#include "HTMLDocumentParser.h"

@@void HTMLTreeBuilder::constructTree(AtomicHTMLToken* token)
384385void HTMLTreeBuilder::processToken(AtomicHTMLToken* token)
385386{
386387 switch (token->type()) {
387  case HTMLTokenTypes::Uninitialized:
 388 case HTMLToken::Uninitialized:
388389 ASSERT_NOT_REACHED();
389390 break;
390  case HTMLTokenTypes::DOCTYPE:
 391 case HTMLToken::DOCTYPE:
391392 m_shouldSkipLeadingNewline = false;
392393 processDoctypeToken(token);
393394 break;
394  case HTMLTokenTypes::StartTag:
 395 case HTMLToken::StartTag:
395396 m_shouldSkipLeadingNewline = false;
396397 processStartTag(token);
397398 break;
398  case HTMLTokenTypes::EndTag:
 399 case HTMLToken::EndTag:
399400 m_shouldSkipLeadingNewline = false;
400401 processEndTag(token);
401402 break;
402  case HTMLTokenTypes::Comment:
 403 case HTMLToken::Comment:
403404 m_shouldSkipLeadingNewline = false;
404405 processComment(token);
405406 return;
406  case HTMLTokenTypes::Character:
 407 case HTMLToken::Character:
407408 processCharacter(token);
408409 break;
409  case HTMLTokenTypes::EndOfFile:
 410 case HTMLToken::EndOfFile:
410411 m_shouldSkipLeadingNewline = false;
411412 processEndOfFile(token);
412413 break;

@@void HTMLTreeBuilder::processToken(AtomicHTMLToken* token)
415416
416417void HTMLTreeBuilder::processDoctypeToken(AtomicHTMLToken* token)
417418{
418  ASSERT(token->type() == HTMLTokenTypes::DOCTYPE);
 419 ASSERT(token->type() == HTMLToken::DOCTYPE);
419420 if (m_insertionMode == InitialMode) {
420421 m_tree.insertDoctype(token);
421422 setInsertionMode(BeforeHTMLMode);

@@void HTMLTreeBuilder::processDoctypeToken(AtomicHTMLToken* token)
432433void HTMLTreeBuilder::processFakeStartTag(const QualifiedName& tagName, const Vector<Attribute>& attributes)
433434{
434435 // FIXME: We'll need a fancier conversion than just "localName" for SVG/MathML tags.
435  RefPtr<AtomicHTMLToken> fakeToken = AtomicHTMLToken::create(HTMLTokenTypes::StartTag, tagName.localName(), attributes);
 436 RefPtr<AtomicHTMLToken> fakeToken = AtomicHTMLToken::create(HTMLToken::StartTag, tagName.localName(), attributes);
436437 processStartTag(fakeToken.get());
437438}
438439
439440void HTMLTreeBuilder::processFakeEndTag(const AtomicString& tagName)
440441{
441  RefPtr<AtomicHTMLToken> fakeToken = AtomicHTMLToken::create(HTMLTokenTypes::EndTag, tagName);
 442 RefPtr<AtomicHTMLToken> fakeToken = AtomicHTMLToken::create(HTMLToken::EndTag, tagName);
442443 processEndTag(fakeToken.get());
443444}
444445

@@void HTMLTreeBuilder::processFakePEndTagIfPInButtonScope()
459460{
460461 if (!m_tree.openElements()->inButtonScope(pTag.localName()))
461462 return;
462  RefPtr<AtomicHTMLToken> endP = AtomicHTMLToken::create(HTMLTokenTypes::EndTag, pTag.localName());
 463 RefPtr<AtomicHTMLToken> endP = AtomicHTMLToken::create(HTMLToken::EndTag, pTag.localName());
463464 processEndTag(endP.get());
464465}
465466

@@Vector<Attribute> HTMLTreeBuilder::attributesForIsindexInput(AtomicHTMLToken* to
478479
479480void HTMLTreeBuilder::processIsindexStartTagForInBody(AtomicHTMLToken* token)
480481{
481  ASSERT(token->type() == HTMLTokenTypes::StartTag);
 482 ASSERT(token->type() == HTMLToken::StartTag);
482483 ASSERT(token->name() == isindexTag);
483484 parseError(token);
484485 if (m_tree.form())

@@static void adjustForeignAttributes(AtomicHTMLToken* token)
630631
631632void HTMLTreeBuilder::processStartTagForInBody(AtomicHTMLToken* token)
632633{
633  ASSERT(token->type() == HTMLTokenTypes::StartTag);
 634 ASSERT(token->type() == HTMLToken::StartTag);
634635 if (token->name() == htmlTag) {
635636 processHtmlStartTagForInBody(token);
636637 return;

@@void HTMLTreeBuilder::processStartTagForInBody(AtomicHTMLToken* token)
897898 }
898899 if (token->name() == optgroupTag || token->name() == optionTag) {
899900 if (m_tree.currentStackItem()->hasTagName(optionTag)) {
900  RefPtr<AtomicHTMLToken> endOption = AtomicHTMLToken::create(HTMLTokenTypes::EndTag, optionTag.localName());
 901 RefPtr<AtomicHTMLToken> endOption = AtomicHTMLToken::create(HTMLToken::EndTag, optionTag.localName());
901902 processEndTag(endOption.get());
902903 }
903904 m_tree.reconstructTheActiveFormattingElements();

@@void HTMLTreeBuilder::closeTheCell()
10211022
10221023void HTMLTreeBuilder::processStartTagForInTable(AtomicHTMLToken* token)
10231024{
1024  ASSERT(token->type() == HTMLTokenTypes::StartTag);
 1025 ASSERT(token->type() == HTMLToken::StartTag);
10251026 if (token->name() == captionTag) {
10261027 m_tree.openElements()->popUntilTableScopeMarker();
10271028 m_tree.activeFormattingElements()->appendMarker();

@@void HTMLTreeBuilder::processStartTagForInTable(AtomicHTMLToken* token)
10971098
10981099void HTMLTreeBuilder::processStartTag(AtomicHTMLToken* token)
10991100{
1100  ASSERT(token->type() == HTMLTokenTypes::StartTag);
 1101 ASSERT(token->type() == HTMLToken::StartTag);
11011102 switch (insertionMode()) {
11021103 case InitialMode:
11031104 ASSERT(insertionMode() == InitialMode);

@@void HTMLTreeBuilder::processStartTag(AtomicHTMLToken* token)
13661367 || token->name() == trTag
13671368 || isTableCellContextTag(token->name())) {
13681369 parseError(token);
1369  RefPtr<AtomicHTMLToken> endSelect = AtomicHTMLToken::create(HTMLTokenTypes::EndTag, selectTag.localName());
 1370 RefPtr<AtomicHTMLToken> endSelect = AtomicHTMLToken::create(HTMLToken::EndTag, selectTag.localName());
13701371 processEndTag(endSelect.get());
13711372 processStartTag(token);
13721373 return;

@@void HTMLTreeBuilder::processStartTag(AtomicHTMLToken* token)
13801381 }
13811382 if (token->name() == optionTag) {
13821383 if (m_tree.currentStackItem()->hasTagName(optionTag)) {
1383  RefPtr<AtomicHTMLToken> endOption = AtomicHTMLToken::create(HTMLTokenTypes::EndTag, optionTag.localName());
 1384 RefPtr<AtomicHTMLToken> endOption = AtomicHTMLToken::create(HTMLToken::EndTag, optionTag.localName());
13841385 processEndTag(endOption.get());
13851386 }
13861387 m_tree.insertHTMLElement(token);

@@void HTMLTreeBuilder::processStartTag(AtomicHTMLToken* token)
13881389 }
13891390 if (token->name() == optgroupTag) {
13901391 if (m_tree.currentStackItem()->hasTagName(optionTag)) {
1391  RefPtr<AtomicHTMLToken> endOption = AtomicHTMLToken::create(HTMLTokenTypes::EndTag, optionTag.localName());
 1392 RefPtr<AtomicHTMLToken> endOption = AtomicHTMLToken::create(HTMLToken::EndTag, optionTag.localName());
13921393 processEndTag(endOption.get());
13931394 }
13941395 if (m_tree.currentStackItem()->hasTagName(optgroupTag)) {
1395  RefPtr<AtomicHTMLToken> endOptgroup = AtomicHTMLToken::create(HTMLTokenTypes::EndTag, optgroupTag.localName());
 1396 RefPtr<AtomicHTMLToken> endOptgroup = AtomicHTMLToken::create(HTMLToken::EndTag, optgroupTag.localName());
13961397 processEndTag(endOptgroup.get());
13971398 }
13981399 m_tree.insertHTMLElement(token);

@@void HTMLTreeBuilder::processStartTag(AtomicHTMLToken* token)
14001401 }
14011402 if (token->name() == selectTag) {
14021403 parseError(token);
1403  RefPtr<AtomicHTMLToken> endSelect = AtomicHTMLToken::create(HTMLTokenTypes::EndTag, selectTag.localName());
 1404 RefPtr<AtomicHTMLToken> endSelect = AtomicHTMLToken::create(HTMLToken::EndTag, selectTag.localName());
14041405 processEndTag(endSelect.get());
14051406 return;
14061407 }

@@void HTMLTreeBuilder::processStartTag(AtomicHTMLToken* token)
14121413 ASSERT(isParsingFragment());
14131414 return;
14141415 }
1415  RefPtr<AtomicHTMLToken> endSelect = AtomicHTMLToken::create(HTMLTokenTypes::EndTag, selectTag.localName());
 1416 RefPtr<AtomicHTMLToken> endSelect = AtomicHTMLToken::create(HTMLToken::EndTag, selectTag.localName());
14161417 processEndTag(endSelect.get());
14171418 processStartTag(token);
14181419 return;

@@void HTMLTreeBuilder::processHtmlStartTagForInBody(AtomicHTMLToken* token)
14921493
14931494bool HTMLTreeBuilder::processBodyEndTagForInBody(AtomicHTMLToken* token)
14941495{
1495  ASSERT(token->type() == HTMLTokenTypes::EndTag);
 1496 ASSERT(token->type() == HTMLToken::EndTag);
14961497 ASSERT(token->name() == bodyTag);
14971498 if (!m_tree.openElements()->inScope(bodyTag.localName())) {
14981499 parseError(token);

@@bool HTMLTreeBuilder::processBodyEndTagForInBody(AtomicHTMLToken* token)
15051506
15061507void HTMLTreeBuilder::processAnyOtherEndTagForInBody(AtomicHTMLToken* token)
15071508{
1508  ASSERT(token->type() == HTMLTokenTypes::EndTag);
 1509 ASSERT(token->type() == HTMLToken::EndTag);
15091510 HTMLElementStack::ElementRecord* record = m_tree.openElements()->topRecord();
15101511 while (1) {
15111512 RefPtr<HTMLStackItem> item = record->stackItem();

@@void HTMLTreeBuilder::resetInsertionModeAppropriately()
17091710
17101711void HTMLTreeBuilder::processEndTagForInTableBody(AtomicHTMLToken* token)
17111712{
1712  ASSERT(token->type() == HTMLTokenTypes::EndTag);
 1713 ASSERT(token->type() == HTMLToken::EndTag);
17131714 if (isTableBodyContextTag(token->name())) {
17141715 if (!m_tree.openElements()->inTableScope(token->name())) {
17151716 parseError(token);

@@void HTMLTreeBuilder::processEndTagForInTableBody(AtomicHTMLToken* token)
17461747
17471748void HTMLTreeBuilder::processEndTagForInRow(AtomicHTMLToken* token)
17481749{
1749  ASSERT(token->type() == HTMLTokenTypes::EndTag);
 1750 ASSERT(token->type() == HTMLToken::EndTag);
17501751 if (token->name() == trTag) {
17511752 processTrEndTagForInRow();
17521753 return;

@@void HTMLTreeBuilder::processEndTagForInRow(AtomicHTMLToken* token)
17821783
17831784void HTMLTreeBuilder::processEndTagForInCell(AtomicHTMLToken* token)
17841785{
1785  ASSERT(token->type() == HTMLTokenTypes::EndTag);
 1786 ASSERT(token->type() == HTMLToken::EndTag);
17861787 if (isTableCellContextTag(token->name())) {
17871788 if (!m_tree.openElements()->inTableScope(token->name())) {
17881789 parseError(token);

@@void HTMLTreeBuilder::processEndTagForInCell(AtomicHTMLToken* token)
18231824
18241825void HTMLTreeBuilder::processEndTagForInBody(AtomicHTMLToken* token)
18251826{
1826  ASSERT(token->type() == HTMLTokenTypes::EndTag);
 1827 ASSERT(token->type() == HTMLToken::EndTag);
18271828 if (token->name() == bodyTag) {
18281829 processBodyEndTagForInBody(token);
18291830 return;
18301831 }
18311832 if (token->name() == htmlTag) {
1832  RefPtr<AtomicHTMLToken> endBody = AtomicHTMLToken::create(HTMLTokenTypes::EndTag, bodyTag.localName());
 1833 RefPtr<AtomicHTMLToken> endBody = AtomicHTMLToken::create(HTMLToken::EndTag, bodyTag.localName());
18331834 if (processBodyEndTagForInBody(endBody.get()))
18341835 processEndTag(token);
18351836 return;

@@bool HTMLTreeBuilder::processTableEndTagForInTable()
20032004
20042005void HTMLTreeBuilder::processEndTagForInTable(AtomicHTMLToken* token)
20052006{
2006  ASSERT(token->type() == HTMLTokenTypes::EndTag);
 2007 ASSERT(token->type() == HTMLToken::EndTag);
20072008 if (token->name() == tableTag) {
20082009 processTableEndTagForInTable();
20092010 return;

@@void HTMLTreeBuilder::processEndTagForInTable(AtomicHTMLToken* token)
20252026
20262027void HTMLTreeBuilder::processEndTag(AtomicHTMLToken* token)
20272028{
2028  ASSERT(token->type() == HTMLTokenTypes::EndTag);
 2029 ASSERT(token->type() == HTMLToken::EndTag);
20292030 switch (insertionMode()) {
20302031 case InitialMode:
20312032 ASSERT(insertionMode() == InitialMode);

@@void HTMLTreeBuilder::processEndTag(AtomicHTMLToken* token)
22462247 || isTableCellContextTag(token->name())) {
22472248 parseError(token);
22482249 if (m_tree.openElements()->inTableScope(token->name())) {
2249  RefPtr<AtomicHTMLToken> endSelect = AtomicHTMLToken::create(HTMLTokenTypes::EndTag, selectTag.localName());
 2250 RefPtr<AtomicHTMLToken> endSelect = AtomicHTMLToken::create(HTMLToken::EndTag, selectTag.localName());
22502251 processEndTag(endSelect.get());
22512252 processEndTag(token);
22522253 }

@@void HTMLTreeBuilder::processEndTag(AtomicHTMLToken* token)
23112312
23122313void HTMLTreeBuilder::processComment(AtomicHTMLToken* token)
23132314{
2314  ASSERT(token->type() == HTMLTokenTypes::Comment);
 2315 ASSERT(token->type() == HTMLToken::Comment);
23152316 if (m_insertionMode == InitialMode
23162317 || m_insertionMode == BeforeHTMLMode
23172318 || m_insertionMode == AfterAfterBodyMode

@@void HTMLTreeBuilder::processComment(AtomicHTMLToken* token)
23332334
23342335void HTMLTreeBuilder::processCharacter(AtomicHTMLToken* token)
23352336{
2336  ASSERT(token->type() == HTMLTokenTypes::Character);
 2337 ASSERT(token->type() == HTMLToken::Character);
23372338 ExternalCharacterTokenBuffer buffer(token);
23382339 processCharacterBuffer(buffer);
23392340}

@@void HTMLTreeBuilder::processCharacterBufferForInBody(ExternalCharacterTokenBuff
25222523
25232524void HTMLTreeBuilder::processEndOfFile(AtomicHTMLToken* token)
25242525{
2525  ASSERT(token->type() == HTMLTokenTypes::EndOfFile);
 2526 ASSERT(token->type() == HTMLToken::EndOfFile);
25262527 switch (insertionMode()) {
25272528 case InitialMode:
25282529 ASSERT(insertionMode() == InitialMode);

@@void HTMLTreeBuilder::defaultForInitial()
26422643
26432644void HTMLTreeBuilder::defaultForBeforeHTML()
26442645{
2645  RefPtr<AtomicHTMLToken> startHTML = AtomicHTMLToken::create(HTMLTokenTypes::StartTag, htmlTag.localName());
 2646 RefPtr<AtomicHTMLToken> startHTML = AtomicHTMLToken::create(HTMLToken::StartTag, htmlTag.localName());
26462647 m_tree.insertHTMLHtmlStartTagBeforeHTML(startHTML.get());
26472648 setInsertionMode(BeforeHeadMode);
26482649}
26492650
26502651void HTMLTreeBuilder::defaultForBeforeHead()
26512652{
2652  RefPtr<AtomicHTMLToken> startHead = AtomicHTMLToken::create(HTMLTokenTypes::StartTag, headTag.localName());
 2653 RefPtr<AtomicHTMLToken> startHead = AtomicHTMLToken::create(HTMLToken::StartTag, headTag.localName());
26532654 processStartTag(startHead.get());
26542655}
26552656
26562657void HTMLTreeBuilder::defaultForInHead()
26572658{
2658  RefPtr<AtomicHTMLToken> endHead = AtomicHTMLToken::create(HTMLTokenTypes::EndTag, headTag.localName());
 2659 RefPtr<AtomicHTMLToken> endHead = AtomicHTMLToken::create(HTMLToken::EndTag, headTag.localName());
26592660 processEndTag(endHead.get());
26602661}
26612662
26622663void HTMLTreeBuilder::defaultForInHeadNoscript()
26632664{
2664  RefPtr<AtomicHTMLToken> endNoscript = AtomicHTMLToken::create(HTMLTokenTypes::EndTag, noscriptTag.localName());
 2665 RefPtr<AtomicHTMLToken> endNoscript = AtomicHTMLToken::create(HTMLToken::EndTag, noscriptTag.localName());
26652666 processEndTag(endNoscript.get());
26662667}
26672668
26682669void HTMLTreeBuilder::defaultForAfterHead()
26692670{
2670  RefPtr<AtomicHTMLToken> startBody = AtomicHTMLToken::create(HTMLTokenTypes::StartTag, bodyTag.localName());
 2671 RefPtr<AtomicHTMLToken> startBody = AtomicHTMLToken::create(HTMLToken::StartTag, bodyTag.localName());
26712672 processStartTag(startBody.get());
26722673 m_framesetOk = true;
26732674}

@@void HTMLTreeBuilder::defaultForInTableText()
26912692
26922693bool HTMLTreeBuilder::processStartTagForInHead(AtomicHTMLToken* token)
26932694{
2694  ASSERT(token->type() == HTMLTokenTypes::StartTag);
 2695 ASSERT(token->type() == HTMLToken::StartTag);
26952696 if (token->name() == htmlTag) {
26962697 processHtmlStartTagForInBody(token);
26972698 return true;

@@bool HTMLTreeBuilder::processStartTagForInHead(AtomicHTMLToken* token)
27442745
27452746void HTMLTreeBuilder::processGenericRCDATAStartTag(AtomicHTMLToken* token)
27462747{
2747  ASSERT(token->type() == HTMLTokenTypes::StartTag);
 2748 ASSERT(token->type() == HTMLToken::StartTag);
27482749 m_tree.insertHTMLElement(token);
27492750 if (m_parser->tokenizer())
27502751 m_parser->tokenizer()->setState(HTMLTokenizer::RCDATAState);

@@void HTMLTreeBuilder::processGenericRCDATAStartTag(AtomicHTMLToken* token)
27542755
27552756void HTMLTreeBuilder::processGenericRawTextStartTag(AtomicHTMLToken* token)
27562757{
2757  ASSERT(token->type() == HTMLTokenTypes::StartTag);
 2758 ASSERT(token->type() == HTMLToken::StartTag);
27582759 m_tree.insertHTMLElement(token);
27592760 if (m_parser->tokenizer())
27602761 m_parser->tokenizer()->setState(HTMLTokenizer::RAWTEXTState);

@@void HTMLTreeBuilder::processGenericRawTextStartTag(AtomicHTMLToken* token)
27642765
27652766void HTMLTreeBuilder::processScriptStartTag(AtomicHTMLToken* token)
27662767{
2767  ASSERT(token->type() == HTMLTokenTypes::StartTag);
 2768 ASSERT(token->type() == HTMLToken::StartTag);
27682769 m_tree.insertScriptElement(token);
27692770 if (m_parser->tokenizer())
27702771 m_parser->tokenizer()->setState(HTMLTokenizer::ScriptDataState);

@@bool HTMLTreeBuilder::shouldProcessTokenInForeignContent(AtomicHTMLToken* token)
27862787 if (item->isInHTMLNamespace())
27872788 return false;
27882789 if (HTMLElementStack::isMathMLTextIntegrationPoint(item)) {
2789  if (token->type() == HTMLTokenTypes::StartTag
 2790 if (token->type() == HTMLToken::StartTag
27902791 && token->name() != MathMLNames::mglyphTag
27912792 && token->name() != MathMLNames::malignmarkTag)
27922793 return false;
2793  if (token->type() == HTMLTokenTypes::Character)
 2794 if (token->type() == HTMLToken::Character)
27942795 return false;
27952796 }
27962797 if (item->hasTagName(MathMLNames::annotation_xmlTag)
2797  && token->type() == HTMLTokenTypes::StartTag
 2798 && token->type() == HTMLToken::StartTag
27982799 && token->name() == SVGNames::svgTag)
27992800 return false;
28002801 if (HTMLElementStack::isHTMLIntegrationPoint(item)) {
2801  if (token->type() == HTMLTokenTypes::StartTag)
 2802 if (token->type() == HTMLToken::StartTag)
28022803 return false;
2803  if (token->type() == HTMLTokenTypes::Character)
 2804 if (token->type() == HTMLToken::Character)
28042805 return false;
28052806 }
2806  if (token->type() == HTMLTokenTypes::EndOfFile)
 2807 if (token->type() == HTMLToken::EndOfFile)
28072808 return false;
28082809 return true;
28092810}

@@bool HTMLTreeBuilder::shouldProcessTokenInForeignContent(AtomicHTMLToken* token)
28112812void HTMLTreeBuilder::processTokenInForeignContent(AtomicHTMLToken* token)
28122813{
28132814 switch (token->type()) {
2814  case HTMLTokenTypes::Uninitialized:
 2815 case HTMLToken::Uninitialized:
28152816 ASSERT_NOT_REACHED();
28162817 break;
2817  case HTMLTokenTypes::DOCTYPE:
 2818 case HTMLToken::DOCTYPE:
28182819 parseError(token);
28192820 break;
2820  case HTMLTokenTypes::StartTag: {
 2821 case HTMLToken::StartTag: {
28212822 if (token->name() == bTag
28222823 || token->name() == bigTag
28232824 || token->name() == blockquoteTag

@@void HTMLTreeBuilder::processTokenInForeignContent(AtomicHTMLToken* token)
28742875 m_tree.insertForeignElement(token, currentNamespace);
28752876 break;
28762877 }
2877  case HTMLTokenTypes::EndTag: {
 2878 case HTMLToken::EndTag: {
28782879 if (m_tree.currentStackItem()->namespaceURI() == SVGNames::svgNamespaceURI)
28792880 adjustSVGTagNameCase(token);
28802881

@@void HTMLTreeBuilder::processTokenInForeignContent(AtomicHTMLToken* token)
29032904 processEndTag(token);
29042905 break;
29052906 }
2906  case HTMLTokenTypes::Comment:
 2907 case HTMLToken::Comment:
29072908 m_tree.insertComment(token);
29082909 return;
2909  case HTMLTokenTypes::Character: {
 2910 case HTMLToken::Character: {
29102911 String characters = String(token->characters(), token->charactersLength());
29112912 m_tree.insertTextNode(characters);
29122913 if (m_framesetOk && !isAllWhitespaceOrReplacementCharacters(characters))
29132914 m_framesetOk = false;
29142915 break;
29152916 }
2916  case HTMLTokenTypes::EndOfFile:
 2917 case HTMLToken::EndOfFile:
29172918 ASSERT_NOT_REACHED();
29182919 break;
29192920 }

Source/WebCore/html/parser/HTMLViewSourceParser.cpp

@@String HTMLViewSourceParser::sourceForToken()
7676void HTMLViewSourceParser::updateTokenizerState()
7777{
7878 // FIXME: The tokenizer should do this work for us.
79  if (m_token.type() != HTMLTokenTypes::StartTag)
 79 if (m_token.type() != HTMLToken::StartTag)
8080 return;
8181
8282 AtomicString tagName(m_token.name().data(), m_token.name().size());

Source/WebCore/html/parser/TextDocumentParser.cpp

@@void TextDocumentParser::insertFakePreElement()
6060 // distrubing the line/column number calculations.
6161 Vector<Attribute> attributes;
6262 attributes.append(Attribute(styleAttr, "word-wrap: break-word; white-space: pre-wrap;"));
63  RefPtr<AtomicHTMLToken> fakePre = AtomicHTMLToken::create(HTMLTokenTypes::StartTag, preTag.localName(), attributes);
 63 RefPtr<AtomicHTMLToken> fakePre = AtomicHTMLToken::create(HTMLToken::StartTag, preTag.localName(), attributes);
6464 treeBuilder()->constructTree(fakePre.get());
6565
6666 // Normally we would skip the first \n after a <pre> element, but we don't

Source/WebCore/html/parser/XSSAuditor.cpp

@@PassOwnPtr<XSSInfo> XSSAuditor::filterToken(const FilterTokenRequest& request)
284284 return nullptr;
285285
286286 bool didBlockScript = false;
287  if (request.token.type() == HTMLTokenTypes::StartTag)
 287 if (request.token.type() == HTMLToken::StartTag)
288288 didBlockScript = filterStartToken(request);
289289 else if (m_scriptTagNestingLevel) {
290  if (request.token.type() == HTMLTokenTypes::Character)
 290 if (request.token.type() == HTMLToken::Character)
291291 didBlockScript = filterCharacterToken(request);
292  else if (request.token.type() == HTMLTokenTypes::EndTag)
 292 else if (request.token.type() == HTMLToken::EndTag)
293293 filterEndToken(request);
294294 }
295295

@@bool XSSAuditor::filterCharacterToken(const FilterTokenRequest& request)
356356
357357bool XSSAuditor::filterScriptToken(const FilterTokenRequest& request)
358358{
359  ASSERT(request.token.type() == HTMLTokenTypes::StartTag);
 359 ASSERT(request.token.type() == HTMLToken::StartTag);
360360 ASSERT(hasName(request.token, scriptTag));
361361
362362 m_cachedDecodedSnippet = decodedSnippetForName(request);

@@bool XSSAuditor::filterScriptToken(const FilterTokenRequest& request)
372372
373373bool XSSAuditor::filterObjectToken(const FilterTokenRequest& request)
374374{
375  ASSERT(request.token.type() == HTMLTokenTypes::StartTag);
 375 ASSERT(request.token.type() == HTMLToken::StartTag);
376376 ASSERT(hasName(request.token, objectTag));
377377
378378 bool didBlockScript = false;

@@bool XSSAuditor::filterObjectToken(const FilterTokenRequest& request)
386386
387387bool XSSAuditor::filterParamToken(const FilterTokenRequest& request)
388388{
389  ASSERT(request.token.type() == HTMLTokenTypes::StartTag);
 389 ASSERT(request.token.type() == HTMLToken::StartTag);
390390 ASSERT(hasName(request.token, paramTag));
391391
392392 size_t indexOfNameAttribute;

@@bool XSSAuditor::filterParamToken(const FilterTokenRequest& request)
404404
405405bool XSSAuditor::filterEmbedToken(const FilterTokenRequest& request)
406406{
407  ASSERT(request.token.type() == HTMLTokenTypes::StartTag);
 407 ASSERT(request.token.type() == HTMLToken::StartTag);
408408 ASSERT(hasName(request.token, embedTag));
409409
410410 bool didBlockScript = false;

@@bool XSSAuditor::filterEmbedToken(const FilterTokenRequest& request)
418418
419419bool XSSAuditor::filterAppletToken(const FilterTokenRequest& request)
420420{
421  ASSERT(request.token.type() == HTMLTokenTypes::StartTag);
 421 ASSERT(request.token.type() == HTMLToken::StartTag);
422422 ASSERT(hasName(request.token, appletTag));
423423
424424 bool didBlockScript = false;

@@bool XSSAuditor::filterAppletToken(const FilterTokenRequest& request)
431431
432432bool XSSAuditor::filterIframeToken(const FilterTokenRequest& request)
433433{
434  ASSERT(request.token.type() == HTMLTokenTypes::StartTag);
 434 ASSERT(request.token.type() == HTMLToken::StartTag);
435435 ASSERT(hasName(request.token, iframeTag));
436436
437437 bool didBlockScript = false;

@@bool XSSAuditor::filterIframeToken(const FilterTokenRequest& request)
444444
445445bool XSSAuditor::filterMetaToken(const FilterTokenRequest& request)
446446{
447  ASSERT(request.token.type() == HTMLTokenTypes::StartTag);
 447 ASSERT(request.token.type() == HTMLToken::StartTag);
448448 ASSERT(hasName(request.token, metaTag));
449449
450450 return eraseAttributeIfInjected(request, http_equivAttr);

@@bool XSSAuditor::filterMetaToken(const FilterTokenRequest& request)
452452
453453bool XSSAuditor::filterBaseToken(const FilterTokenRequest& request)
454454{
455  ASSERT(request.token.type() == HTMLTokenTypes::StartTag);
 455 ASSERT(request.token.type() == HTMLToken::StartTag);
456456 ASSERT(hasName(request.token, baseTag));
457457
458458 return eraseAttributeIfInjected(request, hrefAttr);

@@bool XSSAuditor::filterBaseToken(const FilterTokenRequest& request)
460460
461461bool XSSAuditor::filterFormToken(const FilterTokenRequest& request)
462462{
463  ASSERT(request.token.type() == HTMLTokenTypes::StartTag);
 463 ASSERT(request.token.type() == HTMLToken::StartTag);
464464 ASSERT(hasName(request.token, formTag));
465465
466466 return eraseAttributeIfInjected(request, actionAttr, blankURL().string());