Index: third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp |
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp b/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp |
index 36282d47cc74ac37f4730b5baa1786092f923b3c..d9424e2114ae68e32045e9f84f938a51109796e2 100644 |
--- a/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp |
+++ b/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp |
@@ -648,6 +648,22 @@ void HTMLTreeBuilder::processStartTagForInBody(AtomicHTMLToken* token) |
setInsertionMode(InFramesetMode); |
return; |
} |
+ if (RuntimeEnabledFeatures::contextMenuEnabled() && (token->name() == menuitemTag || token->name() == menuTag || token->name() == hrTag)) { |
+ if (m_tree.currentStackItem()->hasTagName(menuitemTag)) { |
+ AtomicHTMLToken endOption(HTMLToken::EndTag, menuitemTag.localName()); |
+ processEndTag(&endOption); |
+ } |
+ if (token->name() == hrTag) { |
+ processFakePEndTagIfPInButtonScope(); |
+ m_tree.insertSelfClosingHTMLElementDestroyingToken(token); |
+ m_framesetOk = false; |
+ return; |
+ } |
+ if (token->name() == menuTag) |
+ processFakePEndTagIfPInButtonScope(); |
+ m_tree.insertHTMLElement(token); |
+ return; |
+ } |
if (token->name() == addressTag |
|| token->name() == articleTag |
|| token->name() == asideTag |
@@ -809,8 +825,7 @@ void HTMLTreeBuilder::processStartTagForInBody(AtomicHTMLToken* token) |
m_framesetOk = false; |
return; |
} |
- if ((RuntimeEnabledFeatures::contextMenuEnabled() && token->name() == menuitemTag) |
- || token->name() == paramTag |
+ if (token->name() == paramTag |
|| token->name() == sourceTag |
|| token->name() == trackTag) { |
m_tree.insertSelfClosingHTMLElementDestroyingToken(token); |
@@ -1894,6 +1909,14 @@ void HTMLTreeBuilder::processEndTagForInBody(AtomicHTMLToken* token) |
processTemplateEndTag(token); |
return; |
} |
+ if (RuntimeEnabledFeatures::contextMenuEnabled() && token->name() == menuitemTag) { |
+ if (m_tree.currentStackItem()->hasTagName(menuitemTag)) { |
+ m_tree.openElements()->pop(); |
+ return; |
+ } |
+ parseError(token); |
+ return; |
+ } |
processAnyOtherEndTagForInBody(token); |
} |