Index: third_party/WebKit/Source/core/html/parser/HTMLConstructionSite.cpp |
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLConstructionSite.cpp b/third_party/WebKit/Source/core/html/parser/HTMLConstructionSite.cpp |
index d0563f1986e30c8bdcf7f23aa2b795939d9e2e01..3304c74ba11a7685ee032f54d15b7060f456ccf6 100644 |
--- a/third_party/WebKit/Source/core/html/parser/HTMLConstructionSite.cpp |
+++ b/third_party/WebKit/Source/core/html/parser/HTMLConstructionSite.cpp |
@@ -184,8 +184,8 @@ void HTMLConstructionSite::executeTask(HTMLConstructionSiteTask& task) { |
} |
// This is only needed for TextDocuments where we might have text nodes |
-// approaching the default length limit (~64k) and we don't want to |
-// break a text node in the middle of a combining character. |
+// approaching the default length limit (~64k) and we don't want to break a text |
+// node in the middle of a combining character. |
static unsigned findBreakIndexBetween(const StringBuilder& string, |
unsigned currentPosition, |
unsigned proposedBreakIndex) { |
@@ -195,12 +195,14 @@ static unsigned findBreakIndexBetween(const StringBuilder& string, |
if (proposedBreakIndex == string.length()) |
return proposedBreakIndex; |
- // Latin-1 does not have breakable boundaries. If we ever moved to a differnet 8-bit encoding this could be wrong. |
+ // Latin-1 does not have breakable boundaries. If we ever moved to a different |
+ // 8-bit encoding this could be wrong. |
if (string.is8Bit()) |
return proposedBreakIndex; |
const UChar* breakSearchCharacters = string.characters16() + currentPosition; |
- // We need at least two characters look-ahead to account for UTF-16 surrogates, but can't search off the end of the buffer! |
+ // We need at least two characters look-ahead to account for UTF-16 |
+ // surrogates, but can't search off the end of the buffer! |
unsigned breakSearchLength = |
std::min(proposedBreakIndex - currentPosition + 2, |
string.length() - currentPosition); |
@@ -219,8 +221,8 @@ static unsigned findBreakIndexBetween(const StringBuilder& string, |
static String atomizeIfAllWhitespace(const String& string, |
WhitespaceMode whitespaceMode) { |
- // Strings composed entirely of whitespace are likely to be repeated. |
- // Turn them into AtomicString so we share a single string for each. |
+ // Strings composed entirely of whitespace are likely to be repeated. Turn |
+ // them into AtomicString so we share a single string for each. |
if (whitespaceMode == AllWhitespace || |
(whitespaceMode == WhitespaceUnknown && isAllWhitespace(string))) |
return AtomicString(string).getString(); |
@@ -236,12 +238,14 @@ void HTMLConstructionSite::flushPendingText(FlushMode mode) { |
return; |
PendingText pendingText; |
- // Hold onto the current pending text on the stack so that queueTask doesn't recurse infinitely. |
+ // Hold onto the current pending text on the stack so that queueTask doesn't |
+ // recurse infinitely. |
m_pendingText.swap(pendingText); |
ASSERT(m_pendingText.isEmpty()); |
- // Splitting text nodes into smaller chunks contradicts HTML5 spec, but is necessary |
- // for performance, see: https://bugs.webkit.org/show_bug.cgi?id=55898 |
+ // Splitting text nodes into smaller chunks contradicts HTML5 spec, but is |
+ // necessary for performance, see: |
+ // https://bugs.webkit.org/show_bug.cgi?id=55898 |
unsigned lengthLimit = textLengthLimitForContainer(*pendingText.parent); |
unsigned currentPosition = 0; |
@@ -294,7 +298,8 @@ void HTMLConstructionSite::attachLater(ContainerNode* parent, |
return; |
} |
- // Add as a sibling of the parent if we have reached the maximum depth allowed. |
+ // Add as a sibling of the parent if we have reached the maximum depth |
+ // allowed. |
if (m_openElements.stackDepth() > maximumHTMLParserDOMTreeDepth && |
task.parent->parentNode()) |
task.parent = task.parent->parentNode(); |
@@ -304,14 +309,14 @@ void HTMLConstructionSite::attachLater(ContainerNode* parent, |
} |
void HTMLConstructionSite::executeQueuedTasks() { |
- // This has no affect on pendingText, and we may have pendingText |
- // remaining after executing all other queued tasks. |
+ // This has no affect on pendingText, and we may have pendingText remaining |
+ // after executing all other queued tasks. |
const size_t size = m_taskQueue.size(); |
if (!size) |
return; |
- // Copy the task queue into a local variable in case executeTask |
- // re-enters the parser. |
+ // Copy the task queue into a local variable in case executeTask re-enters the |
+ // parser. |
TaskQueue queue; |
queue.swap(m_taskQueue); |
@@ -351,11 +356,11 @@ void HTMLConstructionSite::initFragmentParsing(DocumentFragment* fragment, |
} |
HTMLConstructionSite::~HTMLConstructionSite() { |
- // Depending on why we're being destroyed it might be OK |
- // to forget queued tasks, but currently we don't expect to. |
+ // Depending on why we're being destroyed it might be OK to forget queued |
+ // tasks, but currently we don't expect to. |
ASSERT(m_taskQueue.isEmpty()); |
- // Currently we assume that text will never be the last token in the |
- // document and that we'll always queue some additional task to cause it to flush. |
+ // Currently we assume that text will never be the last token in the document |
+ // and that we'll always queue some additional task to cause it to flush. |
ASSERT(m_pendingText.isEmpty()); |
} |
@@ -371,9 +376,9 @@ DEFINE_TRACE(HTMLConstructionSite) { |
} |
void HTMLConstructionSite::detach() { |
- // FIXME: We'd like to ASSERT here that we're canceling and not just discarding |
- // text that really should have made it into the DOM earlier, but there |
- // doesn't seem to be a nice way to do that. |
+ // FIXME: We'd like to ASSERT here that we're canceling and not just |
+ // discarding text that really should have made it into the DOM earlier, but |
+ // there doesn't seem to be a nice way to do that. |
m_pendingText.discard(); |
m_document = nullptr; |
m_attachmentRoot = nullptr; |
@@ -441,10 +446,12 @@ void HTMLConstructionSite::setCompatibilityModeFromDoctype( |
const String& publicId, |
const String& systemId) { |
// There are three possible compatibility modes: |
- // Quirks - quirks mode emulates WinIE and NS4. CSS parsing is also relaxed in this mode, e.g., unit types can |
- // be omitted from numbers. |
- // Limited Quirks - This mode is identical to no-quirks mode except for its treatment of line-height in the inline box model. |
- // No Quirks - no quirks apply. Web pages will obey the specifications to the letter. |
+ // Quirks - quirks mode emulates WinIE and NS4. CSS parsing is also relaxed in |
+ // this mode, e.g., unit types can be omitted from numbers. |
+ // Limited Quirks - This mode is identical to no-quirks mode except for its |
+ // treatment of line-height in the inline box model. |
+ // No Quirks - no quirks apply. Web pages will obey the specifications to the |
+ // letter. |
// Check for Quirks Mode. |
if (name != "html" || |
@@ -593,7 +600,8 @@ void HTMLConstructionSite::processEndOfFile() { |
} |
void HTMLConstructionSite::finishedParsing() { |
- // We shouldn't have any queued tasks but we might have pending text which we need to promote to tasks and execute. |
+ // We shouldn't have any queued tasks but we might have pending text which we |
+ // need to promote to tasks and execute. |
ASSERT(m_taskQueue.isEmpty()); |
flush(FlushAlways); |
m_document->finishedParsing(); |
@@ -610,11 +618,13 @@ void HTMLConstructionSite::insertDoctype(AtomicHTMLToken* token) { |
DocumentType::create(m_document, token->name(), publicId, systemId); |
attachLater(m_attachmentRoot, doctype); |
- // DOCTYPE nodes are only processed when parsing fragments w/o contextElements, which |
- // never occurs. However, if we ever chose to support such, this code is subtly wrong, |
- // because context-less fragments can determine their own quirks mode, and thus change |
- // parsing rules (like <p> inside <table>). For now we ASSERT that we never hit this code |
- // in a fragment, as changing the owning document's compatibility mode would be wrong. |
+ // DOCTYPE nodes are only processed when parsing fragments w/o |
+ // contextElements, which never occurs. However, if we ever chose to support |
+ // such, this code is subtly wrong, because context-less fragments can |
+ // determine their own quirks mode, and thus change parsing rules (like <p> |
+ // inside <table>). For now we ASSERT that we never hit this code in a |
+ // fragment, as changing the owning document's compatibility mode would be |
+ // wrong. |
ASSERT(!m_isParsingFragment); |
if (m_isParsingFragment) |
return; |
@@ -701,19 +711,20 @@ void HTMLConstructionSite::insertFormattingElement(AtomicHTMLToken* token) { |
void HTMLConstructionSite::insertScriptElement(AtomicHTMLToken* token) { |
// http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#already-started |
// http://html5.org/specs/dom-parsing.html#dom-range-createcontextualfragment |
- // For createContextualFragment, the specifications say to mark it parser-inserted and already-started and later unmark them. |
- // However, we short circuit that logic to avoid the subtree traversal to find script elements since scripts can never see |
- // those flags or effects thereof. |
+ // For createContextualFragment, the specifications say to mark it |
+ // parser-inserted and already-started and later unmark them. However, we |
+ // short circuit that logic to avoid the subtree traversal to find script |
+ // elements since scripts can never see those flags or effects thereof. |
const bool parserInserted = |
m_parserContentPolicy != AllowScriptingContentAndDoNotMarkAlreadyStarted; |
const bool alreadyStarted = m_isParsingFragment && parserInserted; |
// TODO(csharrison): This logic only works if the tokenizer/parser was not |
// blocked waiting for scripts when the element was inserted. This usually |
- // fails for instance, on second document.write if a script writes twice in |
- // a row. To fix this, the parser might have to keep track of raw string |
+ // fails for instance, on second document.write if a script writes twice in a |
+ // row. To fix this, the parser might have to keep track of raw string |
// position. |
- // TODO(csharrison): Refactor this so that the bools that are passed in are |
- // packed in a bitfield from an enum class. |
+ // TODO(csharrison): Refactor this so that the bools that are passed |
+ // in are packed in a bitfield from an enum class. |
const bool createdDuringDocumentWrite = |
ownerDocumentForCurrentNode().isInDocumentWrite(); |
HTMLScriptElement* element = |
@@ -729,8 +740,8 @@ void HTMLConstructionSite::insertForeignElement( |
AtomicHTMLToken* token, |
const AtomicString& namespaceURI) { |
ASSERT(token->type() == HTMLToken::StartTag); |
- DVLOG(1) |
- << "Not implemented."; // parseError when xmlns or xmlns:xlink are wrong. |
+ // parseError when xmlns or xmlns:xlink are wrong. |
+ DVLOG(1) << "Not implemented."; |
Element* element = createElement(token, namespaceURI); |
if (scriptingContentIsAllowed(m_parserContentPolicy) || |
@@ -752,9 +763,11 @@ void HTMLConstructionSite::insertTextNode(const String& string, |
if (isHTMLTemplateElement(*dummyTask.parent)) |
dummyTask.parent = toHTMLTemplateElement(dummyTask.parent.get())->content(); |
- // Unclear when parent != case occurs. Somehow we insert text into two separate nodes while processing the same Token. |
- // The nextChild != dummy.nextChild case occurs whenever foster parenting happened and we hit a new text node "<table>a</table>b" |
- // In either case we have to flush the pending text into the task queue before making more. |
+ // Unclear when parent != case occurs. Somehow we insert text into two |
+ // separate nodes while processing the same Token. The nextChild != |
+ // dummy.nextChild case occurs whenever foster parenting happened and we hit a |
+ // new text node "<table>a</table>b" In either case we have to flush the |
+ // pending text into the task queue before making more. |
if (!m_pendingText.isEmpty() && |
(m_pendingText.parent != dummyTask.parent || |
m_pendingText.nextChild != dummyTask.nextChild)) |
@@ -849,15 +862,16 @@ CustomElementDefinition* HTMLConstructionSite::lookUpCustomElementDefinition( |
// "create an element for a token" |
// https://html.spec.whatwg.org/#create-an-element-for-the-token |
-// TODO(dominicc): When form association is separate from creation, |
-// unify this with foreign element creation. Add a namespace parameter |
-// and check for HTML namespace to lookupCustomElementDefinition. |
+// TODO(dominicc): When form association is separate from creation, unify this |
+// with foreign element creation. Add a namespace parameter and check for HTML |
+// namespace to lookupCustomElementDefinition. |
HTMLElement* HTMLConstructionSite::createHTMLElement(AtomicHTMLToken* token) { |
// "1. Let document be intended parent's node document." |
Document& document = ownerDocumentForCurrentNode(); |
- // Only associate the element with the current form if we're creating the new element |
- // in a document with a browsing context (rather than in <template> contents). |
+ // Only associate the element with the current form if we're creating the new |
+ // element in a document with a browsing context (rather than in <template> |
+ // contents). |
// TODO(dominicc): Change form to happen after element creation when |
// implementing customized built-in elements. |
HTMLFormElement* form = document.frame() ? m_form.get() : nullptr; |
@@ -883,10 +897,9 @@ HTMLElement* HTMLConstructionSite::createHTMLElement(AtomicHTMLToken* token) { |
// "6.2 If the JavaScript execution context stack is empty, |
// then perform a microtask checkpoint." |
- // TODO(dominicc): This is the way the Blink HTML parser |
- // performs checkpoints, but note the spec is different--it |
- // talks about the JavaScript stack, not the script nesting |
- // level. |
+ // TODO(dominicc): This is the way the Blink HTML parser performs |
+ // checkpoints, but note the spec is different--it talks about the |
+ // JavaScript stack, not the script nesting level. |
if (0u == m_reentryPermit->scriptNestingLevel()) |
Microtask::performCheckpoint(V8PerIsolateData::mainThreadIsolate()); |
@@ -899,25 +912,23 @@ HTMLElement* HTMLConstructionSite::createHTMLElement(AtomicHTMLToken* token) { |
HTMLNames::xhtmlNamespaceURI); |
element = definition->createElementSync(document, elementQName); |
- // "8. Append each attribute in the given token to element." |
- // We don't use setAttributes here because the custom element |
- // constructor may have manipulated attributes. |
+ // "8. Append each attribute in the given token to element." We don't use |
+ // setAttributes here because the custom element constructor may have |
+ // manipulated attributes. |
for (const auto& attribute : token->attributes()) |
element->setAttribute(attribute.name(), attribute.value()); |
- // "9. If will execute script is true, then ..." etc. The |
- // CEReactionsScope and ThrowOnDynamicMarkupInsertionCountIncrementer |
- // destructors implement steps 9.1-3. |
+ // "9. If will execute script is true, then ..." etc. The CEReactionsScope |
+ // and ThrowOnDynamicMarkupInsertionCountIncrementer destructors implement |
+ // steps 9.1-3. |
} else { |
- // FIXME: This can't use |
- // HTMLConstructionSite::createElement because we have to |
- // pass the current form element. We should rework form |
- // association to occur after construction to allow better |
- // code sharing here. |
+ // FIXME: This can't use HTMLConstructionSite::createElement because we have |
+ // to pass the current form element. We should rework form association to |
+ // occur after construction to allow better code sharing here. |
element = HTMLElementFactory::createHTMLElement( |
token->name(), document, form, getCreateElementFlags()); |
- // Definition for the created element does not exist here and |
- // it cannot be custom or failed. |
+ // Definition for the created element does not exist here and it cannot be |
+ // custom or failed. |
DCHECK_NE(element->getCustomElementState(), CustomElementState::Custom); |
DCHECK_NE(element->getCustomElementState(), CustomElementState::Failed); |
@@ -925,8 +936,8 @@ HTMLElement* HTMLConstructionSite::createHTMLElement(AtomicHTMLToken* token) { |
setAttributes(element, token, m_parserContentPolicy); |
} |
- // TODO(dominicc): Implement steps 10-12 when customized built-in |
- // elements are implemented. |
+ // TODO(dominicc): Implement steps 10-12 when customized built-in elements are |
+ // implemented. |
return element; |
} |
@@ -997,8 +1008,9 @@ bool HTMLConstructionSite::inQuirksMode() { |
return m_inQuirksMode; |
} |
-// Adjusts |task| to match the "adjusted insertion location" determined by the foster parenting algorithm, |
-// laid out as the substeps of step 2 of https://html.spec.whatwg.org/#appropriate-place-for-inserting-a-node |
+// Adjusts |task| to match the "adjusted insertion location" determined by the |
+// foster parenting algorithm, laid out as the substeps of step 2 of |
+// https://html.spec.whatwg.org/#appropriate-place-for-inserting-a-node |
void HTMLConstructionSite::findFosterSite(HTMLConstructionSiteTask& task) { |
// 2.1 |
HTMLElementStack::ElementRecord* lastTemplate = |