Changeset 77053 in webkit


Ignore:
Timestamp:
Jan 29, 2011 12:23:45 AM (13 years ago)
Author:
rniwa@webkit.org
Message:

2011-01-29 Sheriff Bot <webkit.review.bot@gmail.com>

Unreviewed, rolling out r77050.
http://trac.webkit.org/changeset/77050
https://bugs.webkit.org/show_bug.cgi?id=53371

Caused a crash in Chromium's test_shell_tests (Requested by
rniwa on #webkit).

  • resources/performance-test.js: Removed.
  • tiny-innerHTML.html: Removed.

2011-01-29 Sheriff Bot <webkit.review.bot@gmail.com>

Unreviewed, rolling out r77050.
http://trac.webkit.org/changeset/77050
https://bugs.webkit.org/show_bug.cgi?id=53371

Caused a crash in Chromium's test_shell_tests (Requested by
rniwa on #webkit).

  • html/parser/HTMLTreeBuilder.cpp: (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext): (WebCore::HTMLTreeBuilder::FragmentParsingContext::document): (WebCore::HTMLTreeBuilder::FragmentParsingContext::finished):
  • html/parser/HTMLTreeBuilder.h:
Location:
trunk
Files:
2 deleted
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/PerformanceTests/Parser/ChangeLog

    r77050 r77053  
     12011-01-29  Sheriff Bot  <webkit.review.bot@gmail.com>
     2
     3        Unreviewed, rolling out r77050.
     4        http://trac.webkit.org/changeset/77050
     5        https://bugs.webkit.org/show_bug.cgi?id=53371
     6
     7        Caused a crash in Chromium's test_shell_tests (Requested by
     8        rniwa on #webkit).
     9
     10        * resources/performance-test.js: Removed.
     11        * tiny-innerHTML.html: Removed.
     12
    1132011-01-28  Eric Seidel  <eric@webkit.org>
    214
  • trunk/Source/WebCore/ChangeLog

    r77050 r77053  
     12011-01-29  Sheriff Bot  <webkit.review.bot@gmail.com>
     2
     3        Unreviewed, rolling out r77050.
     4        http://trac.webkit.org/changeset/77050
     5        https://bugs.webkit.org/show_bug.cgi?id=53371
     6
     7        Caused a crash in Chromium's test_shell_tests (Requested by
     8        rniwa on #webkit).
     9
     10        * html/parser/HTMLTreeBuilder.cpp:
     11        (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext):
     12        (WebCore::HTMLTreeBuilder::FragmentParsingContext::document):
     13        (WebCore::HTMLTreeBuilder::FragmentParsingContext::finished):
     14        * html/parser/HTMLTreeBuilder.h:
     15
    1162011-01-28  Eric Seidel  <eric@webkit.org>
    217
  • trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp

    r77050 r77053  
    396396}
    397397
    398 // NOTE: HTML5 requires that we use a dummy document when parsing
    399 // document fragments.  However, creating a new Document element
    400 // for each fragment is very slow (Document() does too much work, and
    401 // innerHTML is a common call).  So we use a shared dummy document.
    402 // This sharing works because there can only ever be one fragment
    403 // parser at any time.  Fragment parsing is synchronous and done
    404 // only from the main thread.  It should be impossible for javascript
    405 // (or anything else) to ever hold a reference to the dummy document.
    406 // See https://bugs.webkit.org/show_bug.cgi?id=48719
    407 class DummyDocumentFactory {
    408     WTF_MAKE_NONCOPYABLE(DummyDocumentFactory); WTF_MAKE_FAST_ALLOCATED;
    409 public:
    410     // Use an explicit create/release here to ASSERT this sharing is safe.
    411     static HTMLDocument* createDummyDocument();
    412     static void releaseDocument(HTMLDocument*);
    413 
    414 private:
    415     static HTMLDocument* s_sharedDummyDocument;
    416     static int s_sharedDummyDocumentMutex;
    417 };
    418 
    419 HTMLDocument* DummyDocumentFactory::createDummyDocument()
    420 {
    421     if (!s_sharedDummyDocument) {
    422         s_sharedDummyDocument = HTMLDocument::create(0, KURL()).releaseRef();
    423         s_sharedDummyDocumentMutex = 0;
    424     }
    425     ASSERT(!s_sharedDummyDocumentMutex);
    426     ASSERT(!s_sharedDummyDocument->hasChildNodes());
    427     s_sharedDummyDocumentMutex++;
    428     return s_sharedDummyDocument;
    429 }
    430 
    431 void DummyDocumentFactory::releaseDocument(HTMLDocument* dummyDocument)
    432 {
    433     ASSERT(s_sharedDummyDocument == dummyDocument);
    434     s_sharedDummyDocumentMutex--;
    435     ASSERT(!s_sharedDummyDocumentMutex);
    436     dummyDocument->removeAllChildren();
    437 }
    438 
    439 HTMLDocument* DummyDocumentFactory::s_sharedDummyDocument = 0;
    440 int DummyDocumentFactory::s_sharedDummyDocumentMutex = 0;
    441 
    442398HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext()
    443399    : m_fragment(0)
     
    448404
    449405HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext(DocumentFragment* fragment, Element* contextElement, FragmentScriptingPermission scriptingPermission)
    450     : m_dummyDocumentForFragmentParsing(DummyDocumentFactory::createDummyDocument())
     406    : m_dummyDocumentForFragmentParsing(HTMLDocument::create(0, KURL(), fragment->document()->baseURI()))
    451407    , m_fragment(fragment)
    452408    , m_contextElement(contextElement)
     
    454410{
    455411    m_dummyDocumentForFragmentParsing->setCompatibilityMode(fragment->document()->compatibilityMode());
    456     // Setting the baseURL should work the same as it would have had we passed
    457     // it during HTMLDocument() construction, since the new document is empty.
    458     m_dummyDocumentForFragmentParsing->setURL(fragment->document()->baseURI());
    459412}
    460413
     
    462415{
    463416    ASSERT(m_fragment);
    464     return m_dummyDocumentForFragmentParsing;
     417    return m_dummyDocumentForFragmentParsing.get();
    465418}
    466419
     
    468421{
    469422    // Populate the DocumentFragment with the parsed content now that we're done.
    470     ContainerNode* root = m_dummyDocumentForFragmentParsing;
     423    ContainerNode* root = m_dummyDocumentForFragmentParsing.get();
    471424    if (m_contextElement)
    472425        root = m_dummyDocumentForFragmentParsing->documentElement();
    473426    m_fragment->takeAllChildrenFrom(root);
    474     ASSERT(!m_dummyDocumentForFragmentParsing->hasChildNodes());
    475     DummyDocumentFactory::releaseDocument(m_dummyDocumentForFragmentParsing);
    476     m_dummyDocumentForFragmentParsing = 0;
    477427}
    478428
  • trunk/Source/WebCore/html/parser/HTMLTreeBuilder.h

    r77050 r77053  
    221221
    222222    private:
    223         // Use a shared dummy document to avoid expensive Document creation.
    224         // Hold a raw pointer to the document since there is no need to ref it.
    225         HTMLDocument* m_dummyDocumentForFragmentParsing;
     223        RefPtr<Document> m_dummyDocumentForFragmentParsing;
    226224        DocumentFragment* m_fragment;
    227225        Element* m_contextElement;
Note: See TracChangeset for help on using the changeset viewer.