Title: [139760] trunk/Source/WebCore
Revision
139760
Author
[email protected]
Date
2013-01-15 11:06:25 -0800 (Tue, 15 Jan 2013)

Log Message

Make AtomicMarkupTokenBase use a bare UChar* for external characters
https://bugs.webkit.org/show_bug.cgi?id=106919

Reviewed by Eric Seidel.

This allows an arbitrary backing for external characters which is necessary for the threaded HTML parser.

No new tests because no new functionality.

* html/parser/HTMLTreeBuilder.cpp:
(WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::ExternalCharacterTokenBuffer):
(WebCore::HTMLTreeBuilder::processTokenInForeignContent):
* xml/parser/MarkupTokenBase.h:
(WebCore::AtomicMarkupTokenBase::AtomicMarkupTokenBase):
(WebCore::AtomicMarkupTokenBase::characters):
(AtomicMarkupTokenBase):
(WebCore::AtomicMarkupTokenBase::charactersLength):
(WebCore::AtomicMarkupTokenBase::clearExternalCharacters):
* xml/parser/XMLTreeBuilder.cpp:
(WebCore::XMLTreeBuilder::processCharacter):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (139759 => 139760)


--- trunk/Source/WebCore/ChangeLog	2013-01-15 19:00:28 UTC (rev 139759)
+++ trunk/Source/WebCore/ChangeLog	2013-01-15 19:06:25 UTC (rev 139760)
@@ -1,3 +1,26 @@
+2013-01-15  Tony Gentilcore  <[email protected]>
+
+        Make AtomicMarkupTokenBase use a bare UChar* for external characters
+        https://bugs.webkit.org/show_bug.cgi?id=106919
+
+        Reviewed by Eric Seidel.
+
+        This allows an arbitrary backing for external characters which is necessary for the threaded HTML parser.
+
+        No new tests because no new functionality.
+
+        * html/parser/HTMLTreeBuilder.cpp:
+        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::ExternalCharacterTokenBuffer):
+        (WebCore::HTMLTreeBuilder::processTokenInForeignContent):
+        * xml/parser/MarkupTokenBase.h:
+        (WebCore::AtomicMarkupTokenBase::AtomicMarkupTokenBase):
+        (WebCore::AtomicMarkupTokenBase::characters):
+        (AtomicMarkupTokenBase):
+        (WebCore::AtomicMarkupTokenBase::charactersLength):
+        (WebCore::AtomicMarkupTokenBase::clearExternalCharacters):
+        * xml/parser/XMLTreeBuilder.cpp:
+        (WebCore::XMLTreeBuilder::processCharacter):
+
 2013-01-15  Arko Saha  <[email protected]>
 
         Microdata: propertiesCollection[name] should return undefined if item doesn't have a property named 'name'

Modified: trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp (139759 => 139760)


--- trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp	2013-01-15 19:00:28 UTC (rev 139759)
+++ trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp	2013-01-15 19:06:25 UTC (rev 139760)
@@ -149,8 +149,8 @@
     WTF_MAKE_NONCOPYABLE(ExternalCharacterTokenBuffer);
 public:
     explicit ExternalCharacterTokenBuffer(AtomicHTMLToken* token)
-        : m_current(token->characters().data())
-        , m_end(m_current + token->characters().size())
+        : m_current(token->characters())
+        , m_end(m_current + token->charactersLength())
         , m_isAll8BitData(token->isAll8BitData())
     {
         ASSERT(!isEmpty());
@@ -2854,7 +2854,7 @@
         m_tree.insertComment(token);
         return;
     case HTMLTokenTypes::Character: {
-        String characters = String(token->characters().data(), token->characters().size());
+        String characters = String(token->characters(), token->charactersLength());
         m_tree.insertTextNode(characters);
         if (m_framesetOk && !isAllWhitespaceOrReplacementCharacters(characters))
             m_framesetOk = false;

Modified: trunk/Source/WebCore/xml/parser/MarkupTokenBase.h (139759 => 139760)


--- trunk/Source/WebCore/xml/parser/MarkupTokenBase.h	2013-01-15 19:00:28 UTC (rev 139759)
+++ trunk/Source/WebCore/xml/parser/MarkupTokenBase.h	2013-01-15 19:06:25 UTC (rev 139760)
@@ -458,7 +458,8 @@
                 m_data = String(token->comment().data(), token->comment().size());
             break;
         case Token::Type::Character:
-            m_externalCharacters = &token->characters();
+            m_externalCharacters = token->characters().data();
+            m_externalCharactersLength = token->characters().size();
             m_isAll8BitData = token->isAll8BitData();
             break;
         default:
@@ -470,6 +471,7 @@
         : m_type(type)
         , m_name(name)
         , m_externalCharacters(0)
+        , m_externalCharactersLength(0)
         , m_isAll8BitData(false)
         , m_attributes(attributes)
     {
@@ -514,12 +516,18 @@
         return m_attributes;
     }
 
-    const typename Token::DataVector& characters() const
+    const UChar* characters() const
     {
         ASSERT(m_type == Token::Type::Character);
-        return *m_externalCharacters;
+        return m_externalCharacters;
     }
 
+    size_t charactersLength() const
+    {
+        ASSERT(m_type == Token::Type::Character);
+        return m_externalCharactersLength;
+    }
+
     bool isAll8BitData() const
     {
         return m_isAll8BitData;
@@ -548,6 +556,7 @@
     void clearExternalCharacters()
     {
         m_externalCharacters = 0;
+        m_externalCharactersLength = 0;
         m_isAll8BitData = false;
     }
 
@@ -575,7 +584,8 @@
     //
     // FIXME: Add a mechanism for "internalizing" the characters when the
     //        HTMLToken is destructed.
-    const typename Token::DataVector* m_externalCharacters;
+    const UChar* m_externalCharacters;
+    size_t m_externalCharactersLength;
     bool m_isAll8BitData;
 
     // For DOCTYPE

Modified: trunk/Source/WebCore/xml/parser/XMLTreeBuilder.cpp (139759 => 139760)


--- trunk/Source/WebCore/xml/parser/XMLTreeBuilder.cpp	2013-01-15 19:00:28 UTC (rev 139759)
+++ trunk/Source/WebCore/xml/parser/XMLTreeBuilder.cpp	2013-01-15 19:06:25 UTC (rev 139760)
@@ -273,7 +273,7 @@
 
 void XMLTreeBuilder::processCharacter(const AtomicXMLToken& token)
 {
-    appendToText(token.characters().data(), token.characters().size());
+    appendToText(token.characters(), token.charactersLength());
 }
 
 void XMLTreeBuilder::processCDATA(const AtomicXMLToken& token)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to