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

Unified Diff: Source/core/html/HTMLElement.cpp

Issue 406843002: Optimize hasTagName when called on an HTMLElement / SVGElement (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/html/HTMLElement.h ('k') | Source/core/html/HTMLFrameElementBase.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/HTMLElement.cpp
diff --git a/Source/core/html/HTMLElement.cpp b/Source/core/html/HTMLElement.cpp
index a185b749563cc387d0534fb16b52cfcada42e549..d5c9c754a92cbefc8fa757afb46179696f09b339 100644
--- a/Source/core/html/HTMLElement.cpp
+++ b/Source/core/html/HTMLElement.cpp
@@ -1,7 +1,7 @@
/*
* Copyright (C) 1999 Lars Knoll (knoll@kde.org)
* (C) 1999 Antti Koivisto (koivisto@kde.org)
- * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2013 Apple Inc. All rights reserved.
+ * Copyright (C) 2004-2008, 2013, 2014 Apple Inc. All rights reserved.
* Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
* Copyright (C) 2011 Motorola Mobility. All rights reserved.
*
@@ -90,29 +90,29 @@ bool HTMLElement::ieForbidsInsertHTML() const
// This is also called from editing and assumed to be the list of tags
// for which no end tag should be serialized. It's unclear if the list for
// IE compat and the list for serialization sanity are the same.
- if (hasLocalName(areaTag)
- || hasLocalName(baseTag)
- || hasLocalName(basefontTag)
- || hasLocalName(brTag)
- || hasLocalName(colTag)
- || hasLocalName(embedTag)
- || hasLocalName(frameTag)
- || hasLocalName(hrTag)
- || hasLocalName(imageTag)
- || hasLocalName(imgTag)
- || hasLocalName(inputTag)
- || hasLocalName(linkTag)
- || hasLocalName(metaTag)
- || hasLocalName(paramTag)
- || hasLocalName(sourceTag)
- || hasLocalName(wbrTag))
+ if (hasTagName(areaTag)
+ || hasTagName(baseTag)
+ || hasTagName(basefontTag)
+ || hasTagName(brTag)
+ || hasTagName(colTag)
+ || hasTagName(embedTag)
+ || hasTagName(frameTag)
+ || hasTagName(hrTag)
+ || hasTagName(imageTag)
+ || hasTagName(imgTag)
+ || hasTagName(inputTag)
+ || hasTagName(linkTag)
+ || hasTagName(metaTag)
+ || hasTagName(paramTag)
+ || hasTagName(sourceTag)
+ || hasTagName(wbrTag))
return true;
return false;
}
static inline CSSValueID unicodeBidiAttributeForDirAuto(HTMLElement* element)
{
- if (element->hasLocalName(preTag) || element->hasLocalName(textareaTag))
+ if (element->hasTagName(preTag) || element->hasTagName(textareaTag))
return CSSValueWebkitPlaintext;
// FIXME: For bdo element, dir="auto" should result in "bidi-override isolate" but we don't support having multiple values in unicode-bidi yet.
// See https://bugs.webkit.org/show_bug.cgi?id=73164.
@@ -123,7 +123,7 @@ unsigned HTMLElement::parseBorderWidthAttribute(const AtomicString& value) const
{
unsigned borderWidth = 0;
if (value.isEmpty() || !parseHTMLNonNegativeInteger(value, borderWidth))
- return hasLocalName(tableTag) ? 1 : borderWidth;
+ return hasTagName(tableTag) ? 1 : borderWidth;
return borderWidth;
}
@@ -351,16 +351,27 @@ PassRefPtrWillBeRawPtr<DocumentFragment> HTMLElement::textToFragment(const Strin
return fragment;
}
+static inline bool shouldProhibitSetInnerOuterText(const HTMLElement& element)
+{
+ return element.hasTagName(colTag)
+ || element.hasTagName(colgroupTag)
+ || element.hasTagName(framesetTag)
+ || element.hasTagName(headTag)
+ || element.hasTagName(htmlTag)
+ || element.hasTagName(tableTag)
+ || element.hasTagName(tbodyTag)
+ || element.hasTagName(tfootTag)
+ || element.hasTagName(theadTag)
+ || element.hasTagName(trTag);
+}
+
void HTMLElement::setInnerText(const String& text, ExceptionState& exceptionState)
{
if (ieForbidsInsertHTML()) {
exceptionState.throwDOMException(NoModificationAllowedError, "The '" + localName() + "' element does not support text insertion.");
return;
}
- if (hasLocalName(colTag) || hasLocalName(colgroupTag) || hasLocalName(framesetTag) ||
- hasLocalName(headTag) || hasLocalName(htmlTag) || hasLocalName(tableTag) ||
- hasLocalName(tbodyTag) || hasLocalName(tfootTag) || hasLocalName(theadTag) ||
- hasLocalName(trTag)) {
+ if (shouldProhibitSetInnerOuterText(*this)) {
exceptionState.throwDOMException(NoModificationAllowedError, "The '" + localName() + "' element does not support text insertion.");
return;
}
@@ -398,16 +409,13 @@ void HTMLElement::setInnerText(const String& text, ExceptionState& exceptionStat
replaceChildrenWithFragment(this, fragment.release(), exceptionState);
}
-void HTMLElement::setOuterText(const String &text, ExceptionState& exceptionState)
+void HTMLElement::setOuterText(const String& text, ExceptionState& exceptionState)
{
if (ieForbidsInsertHTML()) {
exceptionState.throwDOMException(NoModificationAllowedError, "The '" + localName() + "' element does not support text insertion.");
return;
}
- if (hasLocalName(colTag) || hasLocalName(colgroupTag) || hasLocalName(framesetTag) ||
- hasLocalName(headTag) || hasLocalName(htmlTag) || hasLocalName(tableTag) ||
- hasLocalName(tbodyTag) || hasLocalName(tfootTag) || hasLocalName(theadTag) ||
- hasLocalName(trTag)) {
+ if (shouldProhibitSetInnerOuterText(*this)) {
exceptionState.throwDOMException(NoModificationAllowedError, "The '" + localName() + "' element does not support text insertion.");
return;
}
@@ -627,7 +635,7 @@ HTMLFormElement* HTMLElement::findFormAncestor() const
static inline bool elementAffectsDirectionality(const Node* node)
{
- return node->isHTMLElement() && (isHTMLBDIElement(*node) || toHTMLElement(node)->hasAttribute(dirAttr));
+ return node->isHTMLElement() && (isHTMLBDIElement(toHTMLElement(*node)) || toHTMLElement(*node).hasAttribute(dirAttr));
}
static void setHasDirAutoFlagRecursively(Node* firstNode, bool flag, Node* lastNode = 0)
« no previous file with comments | « Source/core/html/HTMLElement.h ('k') | Source/core/html/HTMLFrameElementBase.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698