2010-07-20 Adam Barth <abarth@webkit.org>
authorabarth@webkit.org <abarth@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 20 Jul 2010 22:12:17 +0000 (22:12 +0000)
committerabarth@webkit.org <abarth@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 20 Jul 2010 22:12:17 +0000 (22:12 +0000)
        Reviewed by Darin Adler.

        Fix fast/dom/title-content-write-set.html for HTML5 tree builder
        https://bugs.webkit.org/show_bug.cgi?id=42668

        When I split parserAppendData from appendData, it was tempting to cut
        the function at dispatchModifiedEvent, but that's not quite right.  We
        still need to notify the parent that it's children have changed.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::appendDataCommon):
        (WebCore::CharacterData::parserAppendData):
        (WebCore::CharacterData::appendData):
        * dom/CharacterData.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@63779 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/dom/CharacterData.cpp
WebCore/dom/CharacterData.h

index 0d56de0..7a73a0d 100644 (file)
@@ -1,3 +1,20 @@
+2010-07-20  Adam Barth  <abarth@webkit.org>
+
+        Reviewed by Darin Adler.
+
+        Fix fast/dom/title-content-write-set.html for HTML5 tree builder
+        https://bugs.webkit.org/show_bug.cgi?id=42668
+
+        When I split parserAppendData from appendData, it was tempting to cut
+        the function at dispatchModifiedEvent, but that's not quite right.  We
+        still need to notify the parent that it's children have changed.
+
+        * dom/CharacterData.cpp:
+        (WebCore::CharacterData::appendDataCommon):
+        (WebCore::CharacterData::parserAppendData):
+        (WebCore::CharacterData::appendData):
+        * dom/CharacterData.h:
+
 2010-07-20  Chris Fleizach  <cfleizach@apple.com>
 
         Reviewed by Beth Dakin.
index 5fbb6f2..408281e 100644 (file)
@@ -59,7 +59,7 @@ String CharacterData::substringData(unsigned offset, unsigned count, ExceptionCo
     return m_data->substring(offset, count);
 }
 
-PassRefPtr<StringImpl> CharacterData::parserAppendData(const String& arg)
+PassRefPtr<StringImpl> CharacterData::appendDataCommon(const String& arg)
 {
     String newStr = m_data;
     newStr.append(arg);
@@ -76,9 +76,18 @@ PassRefPtr<StringImpl> CharacterData::parserAppendData(const String& arg)
     return oldStr.release();
 }
 
+void CharacterData::parserAppendData(const String& arg)
+{
+    appendDataCommon(arg);
+    // We don't call dispatchModifiedEvent here because we don't want the
+    // parser to dispatch DOM mutation events.
+    if (parentNode())
+        parentNode()->childrenChanged();
+}
+
 void CharacterData::appendData(const String& arg, ExceptionCode&)
 {
-    RefPtr<StringImpl> oldStr = parserAppendData(arg);
+    RefPtr<StringImpl> oldStr = appendDataCommon(arg);
     dispatchModifiedEvent(oldStr.get());
 }
 
index ecc0cf7..03f35ca 100644 (file)
@@ -43,7 +43,7 @@ public:
     StringImpl* dataImpl() { return m_data.get(); }
 
     // Like appendData, but optimized for the parser (e.g., no mutation events).
-    PassRefPtr<StringImpl> parserAppendData(const String&);
+    void parserAppendData(const String&);
 
 protected:
     CharacterData(Document* document, const String& text, ConstructionType type)
@@ -66,6 +66,7 @@ private:
     virtual bool offsetInCharacters() const;
 
     void checkCharDataOperation(unsigned offset, ExceptionCode&);
+    PassRefPtr<StringImpl> appendDataCommon(const String& arg);
 
     RefPtr<StringImpl> m_data;
 };