Modified: trunk/Source/WebCore/dom/CharacterData.cpp (99127 => 99128)
--- trunk/Source/WebCore/dom/CharacterData.cpp 2011-11-03 00:55:00 UTC (rev 99127)
+++ trunk/Source/WebCore/dom/CharacterData.cpp 2011-11-03 01:28:58 UTC (rev 99128)
@@ -39,13 +39,13 @@
void CharacterData::setData(const String& data, ExceptionCode&)
{
- StringImpl* dataImpl = data.impl() ? data.impl() : StringImpl::empty();
- if (equal(m_data.get(), dataImpl))
+ const String& nonNullData = !data.isNull() ? data : emptyString();
+ if (m_data == nonNullData)
return;
unsigned oldLength = length();
- setDataAndUpdate(dataImpl, 0, oldLength, dataImpl->length());
+ setDataAndUpdate(nonNullData, 0, oldLength, nonNullData.length());
document()->textRemoved(this, 0, oldLength);
}
@@ -55,12 +55,12 @@
if (ec)
return String();
- return m_data->substring(offset, count);
+ return m_data.substring(offset, count);
}
unsigned CharacterData::parserAppendData(const UChar* data, unsigned dataLength, unsigned lengthLimit)
{
- unsigned oldLength = m_data->length();
+ unsigned oldLength = m_data.length();
unsigned end = min(dataLength, lengthLimit - oldLength);
@@ -77,9 +77,7 @@
if (!end)
return 0;
- String newStr = m_data;
- newStr.append(data, end);
- m_data = newStr.impl();
+ m_data.append(data, end);
updateRenderer(oldLength, 0);
// We don't call dispatchModifiedEvent here because we don't want the
@@ -95,7 +93,7 @@
String newStr = m_data;
newStr.append(data);
- setDataAndUpdate(newStr.impl(), m_data->length(), 0, data.length());
+ setDataAndUpdate(newStr, m_data.length(), 0, data.length());
// FIXME: Should we call textInserted here?
}
@@ -109,7 +107,7 @@
String newStr = m_data;
newStr.insert(data, offset);
- setDataAndUpdate(newStr.impl(), offset, 0, data.length());
+ setDataAndUpdate(newStr, offset, 0, data.length());
document()->textInserted(this, offset, data.length());
}
@@ -129,7 +127,7 @@
String newStr = m_data;
newStr.remove(offset, realCount);
- setDataAndUpdate(newStr.impl(), offset, count, 0);
+ setDataAndUpdate(newStr, offset, count, 0);
document()->textRemoved(this, offset, realCount);
}
@@ -150,7 +148,7 @@
newStr.remove(offset, realCount);
newStr.insert(data, offset);
- setDataAndUpdate(newStr.impl(), offset, count, data.length());
+ setDataAndUpdate(newStr, offset, count, data.length());
// update the markers for spell checking and grammar checking
document()->textRemoved(this, offset, realCount);
@@ -164,7 +162,7 @@
bool CharacterData::containsOnlyWhitespace() const
{
- return !m_data || m_data->containsOnlyWhitespace();
+ return m_data.containsOnlyWhitespace();
}
void CharacterData::setNodeValue(const String& nodeValue, ExceptionCode& ec)
@@ -172,14 +170,14 @@
setData(nodeValue, ec);
}
-void CharacterData::setDataAndUpdate(PassRefPtr<StringImpl> newData, unsigned offsetOfReplacedData, unsigned oldLength, unsigned newLength)
+void CharacterData::setDataAndUpdate(const String& newData, unsigned offsetOfReplacedData, unsigned oldLength, unsigned newLength)
{
if (document()->frame())
document()->frame()->selection()->textWillBeReplaced(this, offsetOfReplacedData, oldLength, newLength);
- RefPtr<StringImpl> oldData = m_data;
+ String oldData = m_data;
m_data = newData;
updateRenderer(offsetOfReplacedData, oldLength);
- dispatchModifiedEvent(oldData.get());
+ dispatchModifiedEvent(oldData);
}
void CharacterData::updateRenderer(unsigned offsetOfReplacedData, unsigned lengthOfReplacedData)
@@ -187,7 +185,7 @@
if ((!renderer() || !rendererIsNeeded(NodeRenderingContext(this, renderer()->style()))) && attached())
reattach();
else if (renderer())
- toRenderText(renderer())->setTextWithOffset(m_data, offsetOfReplacedData, lengthOfReplacedData);
+ toRenderText(renderer())->setTextWithOffset(m_data.impl(), offsetOfReplacedData, lengthOfReplacedData);
}
#if ENABLE(MUTATION_OBSERVERS)
@@ -232,7 +230,7 @@
}
#endif // ENABLE(MUTATION_OBSERVERS)
-void CharacterData::dispatchModifiedEvent(StringImpl* oldData)
+void CharacterData::dispatchModifiedEvent(const String& oldData)
{
#if ENABLE(MUTATION_OBSERVERS)
enqueueCharacterDataMutationRecord(this, oldData);
Modified: trunk/Source/WebCore/dom/CharacterData.h (99127 => 99128)
--- trunk/Source/WebCore/dom/CharacterData.h 2011-11-03 00:55:00 UTC (rev 99127)
+++ trunk/Source/WebCore/dom/CharacterData.h 2011-11-03 01:28:58 UTC (rev 99128)
@@ -24,6 +24,7 @@
#define CharacterData_h
#include "Node.h"
+#include <wtf/text/WTFString.h>
namespace WebCore {
@@ -31,7 +32,7 @@
public:
String data() const { return m_data; }
void setData(const String&, ExceptionCode&);
- unsigned length() const { return m_data->length(); }
+ unsigned length() const { return m_data.length(); }
String substringData(unsigned offset, unsigned count, ExceptionCode&);
void appendData(const String&, ExceptionCode&);
void insertData(unsigned offset, const String&, ExceptionCode&);
@@ -40,7 +41,7 @@
bool containsOnlyWhitespace() const;
- StringImpl* dataImpl() { return m_data.get(); }
+ StringImpl* dataImpl() { return m_data.impl(); }
// Like appendData, but optimized for the parser (e.g., no mutation events).
// Returns how much could be added before length limit was met.
@@ -49,15 +50,19 @@
protected:
CharacterData(Document* document, const String& text, ConstructionType type)
: Node(document, type)
- , m_data(text.impl() ? text.impl() : StringImpl::empty())
+ , m_data(!text.isNull() ? text : emptyString())
{
ASSERT(type == CreateComment || type == CreateText);
}
virtual bool rendererIsNeeded(const NodeRenderingContext&);
- void setDataImpl(PassRefPtr<StringImpl> impl) { m_data = impl; }
- void dispatchModifiedEvent(StringImpl* oldValue);
+ void setDataWithoutUpdate(const String& data)
+ {
+ ASSERT(!data.isNull());
+ m_data = data;
+ }
+ void dispatchModifiedEvent(const String& oldValue);
private:
virtual String nodeValue() const;
@@ -65,14 +70,13 @@
virtual bool isCharacterDataNode() const { return true; }
virtual int maxCharacterOffset() const;
virtual bool offsetInCharacters() const;
- void setDataAndUpdate(PassRefPtr<StringImpl>, unsigned offsetOfReplacedData, unsigned oldLength, unsigned newLength);
+ void setDataAndUpdate(const String&, unsigned offsetOfReplacedData, unsigned oldLength, unsigned newLength);
void updateRenderer(unsigned offsetOfReplacedData, unsigned lengthOfReplacedData);
void checkCharDataOperation(unsigned offset, ExceptionCode&);
- RefPtr<StringImpl> m_data;
+ String m_data;
};
} // namespace WebCore
#endif // CharacterData_h
-
Modified: trunk/Source/WebCore/dom/Text.cpp (99127 => 99128)
--- trunk/Source/WebCore/dom/Text.cpp 2011-11-03 00:55:00 UTC (rev 99127)
+++ trunk/Source/WebCore/dom/Text.cpp 2011-11-03 01:28:58 UTC (rev 99128)
@@ -55,11 +55,11 @@
return 0;
}
- RefPtr<StringImpl> oldStr = dataImpl();
- RefPtr<Text> newText = virtualCreate(oldStr->substring(offset));
- setDataImpl(oldStr->substring(0, offset));
+ String oldStr = data();
+ RefPtr<Text> newText = virtualCreate(oldStr.substring(offset));
+ setDataWithoutUpdate(oldStr.substring(0, offset));
- dispatchModifiedEvent(oldStr.get());
+ dispatchModifiedEvent(oldStr);
if (parentNode())
parentNode()->insertBefore(newText.get(), nextSibling(), ec);
@@ -70,7 +70,7 @@
document()->textNodeSplit(this);
if (renderer())
- toRenderText(renderer())->setTextWithOffset(dataImpl(), 0, oldStr->length());
+ toRenderText(renderer())->setTextWithOffset(dataImpl(), 0, oldStr.length());
return newText.release();
}