Title: [123671] trunk/Source/WebCore
- Revision
- 123671
- Author
- k...@webkit.org
- Date
- 2012-07-25 15:59:58 -0700 (Wed, 25 Jul 2012)
Log Message
Read tag names and attributes from the saved tokens in HTMLTreeBuilder::resetInsertionModeAppropriately.
https://bugs.webkit.org/show_bug.cgi?id=92240
Reviewed by Adam Barth.
This is a follow-up patch for r123577. Added ItemType enum to HTMLStackItem to handle
the context element case.
No new tests, covered by existing tests.
* html/parser/HTMLStackItem.h:
(WebCore::HTMLStackItem::create):
(WebCore::HTMLStackItem::HTMLStackItem):
* html/parser/HTMLTreeBuilder.cpp:
(WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
(WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (123670 => 123671)
--- trunk/Source/WebCore/ChangeLog 2012-07-25 22:41:16 UTC (rev 123670)
+++ trunk/Source/WebCore/ChangeLog 2012-07-25 22:59:58 UTC (rev 123671)
@@ -1,3 +1,22 @@
+2012-07-25 Kwang Yul Seo <sk...@company100.net>
+
+ Read tag names and attributes from the saved tokens in HTMLTreeBuilder::resetInsertionModeAppropriately.
+ https://bugs.webkit.org/show_bug.cgi?id=92240
+
+ Reviewed by Adam Barth.
+
+ This is a follow-up patch for r123577. Added ItemType enum to HTMLStackItem to handle
+ the context element case.
+
+ No new tests, covered by existing tests.
+
+ * html/parser/HTMLStackItem.h:
+ (WebCore::HTMLStackItem::create):
+ (WebCore::HTMLStackItem::HTMLStackItem):
+ * html/parser/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
+ (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
+
2012-07-25 Nico Weber <tha...@chromium.org>
[chromium/mac] Remove mac_bundle_resources section from WebCore.gyp
Modified: trunk/Source/WebCore/html/parser/HTMLStackItem.h (123670 => 123671)
--- trunk/Source/WebCore/html/parser/HTMLStackItem.h 2012-07-25 22:41:16 UTC (rev 123670)
+++ trunk/Source/WebCore/html/parser/HTMLStackItem.h 2012-07-25 22:59:58 UTC (rev 123671)
@@ -40,10 +40,15 @@
class HTMLStackItem : public RefCounted<HTMLStackItem> {
public:
- // DocumentFragment case.
- static PassRefPtr<HTMLStackItem> create(PassRefPtr<ContainerNode> node)
+ enum ItemType {
+ ItemForContextElement,
+ ItemForDocumentFragmentNode
+ };
+
+ // Used by document fragment node and context element.
+ static PassRefPtr<HTMLStackItem> create(PassRefPtr<ContainerNode> node, ItemType type)
{
- return adoptRef(new HTMLStackItem(node));
+ return adoptRef(new HTMLStackItem(node, type));
}
// Used by HTMLElementStack and HTMLFormattingElementList.
@@ -66,14 +71,24 @@
bool hasTagName(const QualifiedName& name) const { return m_token->name() == name.localName() && m_namespaceURI == name.namespaceURI(); }
private:
- HTMLStackItem(PassRefPtr<ContainerNode> node)
+ HTMLStackItem(PassRefPtr<ContainerNode> node, ItemType type)
: m_node(node)
- , m_isDocumentFragmentNode(true)
{
- // Create a fake token for a document fragment node. This looks ugly but required for performance
- // because we want to use m_token->name() in localName(), hasLocalName() and hasTagName() without
- // checking m_isDocumentFragmentNode flag.
- m_token = AtomicHTMLToken::create(HTMLTokenTypes::StartTag, nullAtom);
+ switch (type) {
+ case ItemForDocumentFragmentNode:
+ // Create a fake token for a document fragment node. This looks ugly but required for performance
+ // because we want to use m_token->name() in localName(), hasLocalName() and hasTagName() without
+ // checking m_isDocumentFragmentNode flag.
+ m_token = AtomicHTMLToken::create(HTMLTokenTypes::StartTag, nullAtom);
+ m_isDocumentFragmentNode = true;
+ break;
+ case ItemForContextElement:
+ // Create a fake token for a context element for the same reason as above.
+ m_token = AtomicHTMLToken::create(HTMLTokenTypes::StartTag, m_node->localName());
+ m_namespaceURI = m_node->namespaceURI();
+ m_isDocumentFragmentNode = false;
+ break;
+ }
}
HTMLStackItem(PassRefPtr<ContainerNode> node, PassRefPtr<AtomicHTMLToken> token, const AtomicString& namespaceURI = HTMLNames::xhtmlNamespaceURI)
Modified: trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp (123670 => 123671)
--- trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp 2012-07-25 22:41:16 UTC (rev 123670)
+++ trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp 2012-07-25 22:59:58 UTC (rev 123671)
@@ -381,7 +381,7 @@
// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#fragment-case
// For efficiency, we skip step 4.2 ("Let root be a new html element with no attributes")
// and instead use the DocumentFragment as a root node.
- m_tree.openElements()->pushRootNode(HTMLStackItem::create(fragment));
+ m_tree.openElements()->pushRootNode(HTMLStackItem::create(fragment, HTMLStackItem::ItemForDocumentFragmentNode));
resetInsertionModeAppropriately();
m_tree.setForm(closestFormAncestor(contextElement));
}
@@ -1632,41 +1632,41 @@
bool last = false;
HTMLElementStack::ElementRecord* nodeRecord = m_tree.openElements()->topRecord();
while (1) {
- ContainerNode* node = nodeRecord->node();
- if (node == m_tree.openElements()->rootNode()) {
+ RefPtr<HTMLStackItem> item = nodeRecord->stackItem();
+ if (item->node() == m_tree.openElements()->rootNode()) {
ASSERT(isParsingFragment());
last = true;
- node = m_fragmentContext.contextElement();
+ item = HTMLStackItem::create(m_fragmentContext.contextElement(), HTMLStackItem::ItemForContextElement);
}
- if (node->hasTagName(selectTag)) {
+ if (item->hasTagName(selectTag)) {
ASSERT(isParsingFragment());
return setInsertionMode(InSelectMode);
}
- if (node->hasTagName(tdTag) || node->hasTagName(thTag))
+ if (item->hasTagName(tdTag) || item->hasTagName(thTag))
return setInsertionMode(InCellMode);
- if (node->hasTagName(trTag))
+ if (item->hasTagName(trTag))
return setInsertionMode(InRowMode);
- if (node->hasTagName(tbodyTag) || node->hasTagName(theadTag) || node->hasTagName(tfootTag))
+ if (item->hasTagName(tbodyTag) || item->hasTagName(theadTag) || item->hasTagName(tfootTag))
return setInsertionMode(InTableBodyMode);
- if (node->hasTagName(captionTag))
+ if (item->hasTagName(captionTag))
return setInsertionMode(InCaptionMode);
- if (node->hasTagName(colgroupTag)) {
+ if (item->hasTagName(colgroupTag)) {
ASSERT(isParsingFragment());
return setInsertionMode(InColumnGroupMode);
}
- if (node->hasTagName(tableTag))
+ if (item->hasTagName(tableTag))
return setInsertionMode(InTableMode);
- if (node->hasTagName(headTag)) {
+ if (item->hasTagName(headTag)) {
ASSERT(isParsingFragment());
return setInsertionMode(InBodyMode);
}
- if (node->hasTagName(bodyTag))
+ if (item->hasTagName(bodyTag))
return setInsertionMode(InBodyMode);
- if (node->hasTagName(framesetTag)) {
+ if (item->hasTagName(framesetTag)) {
ASSERT(isParsingFragment());
return setInsertionMode(InFramesetMode);
}
- if (node->hasTagName(htmlTag)) {
+ if (item->hasTagName(htmlTag)) {
ASSERT(isParsingFragment());
return setInsertionMode(BeforeHeadMode);
}
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes