Changeset 52116 in webkit


Ignore:
Timestamp:
Dec 14, 2009 1:47:04 PM (14 years ago)
Author:
ap@apple.com
Message:

Reviewed by Dave Hyatt.

https://bugs.webkit.org/show_bug.cgi?id=31660
REGRESSION (r49394): Image load event fires before the document fragment is attached.

Test: fast/images/image-load-event-in-fragment.html

We cannot fire load events immediately after parsing a fragment - an element inserted via
innerHTML or equivalent should be reachable via getElementById() by the time its load event
fires.

  • dom/Document.cpp: (WebCore::Document::implicitClose): Call dispatchPendingBeforeLoadEvents() and dispatchPendingLoadEvents() individually. I'm not sure why these calls are here, just preserving existing behavior.
  • dom/XMLTokenizer.cpp: (WebCore::XMLTokenizer::write):
  • html/HTMLTokenizer.cpp: (WebCore::HTMLTokenizer::write): Load events for elements that have just been parsed cannot be dispatched yet, we should give the elements a chance to be inserted into a document first. There is no compatibility baggage for beforeload, so it seems OK to dispatch it right away.
  • loader/ImageLoader.cpp: (WebCore::ImageLoader::dispatchPendingBeforeLoadEvents): (WebCore::ImageLoader::dispatchPendingLoadEvents):
  • loader/ImageLoader.h: Separated dispatchPendingEvents() into individual functions for each event kind.
Location:
trunk
Files:
2 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r52114 r52116  
     12009-12-14  Alexey Proskuryakov  <ap@apple.com>
     2
     3        Reviewed by Dave Hyatt.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=31660
     6        REGRESSION (r49394): Image load event fires before the document fragment is attached.
     7
     8        * fast/images/image-load-event-in-fragment-expected.txt: Added.
     9        * fast/images/image-load-event-in-fragment.html: Added.
     10
    1112009-12-14  Brian Weinstein  <bweinstein@apple.com>
    212
  • trunk/WebCore/ChangeLog

    r52115 r52116  
     12009-12-14  Alexey Proskuryakov  <ap@apple.com>
     2
     3        Reviewed by Dave Hyatt.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=31660
     6        REGRESSION (r49394): Image load event fires before the document fragment is attached.
     7
     8        Test: fast/images/image-load-event-in-fragment.html
     9
     10        We cannot fire load events immediately after parsing a fragment - an element inserted via
     11        innerHTML or equivalent should be reachable via getElementById() by the time its load event
     12        fires.
     13
     14        * dom/Document.cpp: (WebCore::Document::implicitClose): Call dispatchPendingBeforeLoadEvents()
     15        and dispatchPendingLoadEvents() individually. I'm not sure why these calls are here, just
     16        preserving existing behavior.
     17
     18        * dom/XMLTokenizer.cpp: (WebCore::XMLTokenizer::write):
     19        * html/HTMLTokenizer.cpp: (WebCore::HTMLTokenizer::write):
     20        Load events for elements that have just been parsed cannot be dispatched yet, we should give
     21        the elements a chance to be inserted into a document first. There is no compatibility baggage
     22        for beforeload, so it seems OK to dispatch it right away.
     23
     24        * loader/ImageLoader.cpp:
     25        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvents):
     26        (WebCore::ImageLoader::dispatchPendingLoadEvents):
     27        * loader/ImageLoader.h:
     28        Separated dispatchPendingEvents() into individual functions for each event kind.
     29
    1302009-12-14  Jakob Petsovits  <jpetsovits@rim.com>
    231
  • trunk/WebCore/dom/Document.cpp

    r52096 r52116  
    17251725        f->animation()->resumeAnimations(this);
    17261726
    1727     ImageLoader::dispatchPendingEvents();
     1727    ImageLoader::dispatchPendingBeforeLoadEvents();
     1728    ImageLoader::dispatchPendingLoadEvents();
    17281729    dispatchWindowLoadEvent();
    17291730    dispatchWindowEvent(PageTransitionEvent::create(eventNames().pageshowEvent, false), this);
  • trunk/WebCore/dom/XMLTokenizer.cpp

    r51962 r52116  
    135135    doWrite(s.toString());
    136136   
    137     // After parsing, go ahead and dispatch image beforeload/load events.
    138     ImageLoader::dispatchPendingEvents();
     137    // After parsing, go ahead and dispatch image beforeload events.
     138    ImageLoader::dispatchPendingBeforeLoadEvents();
    139139}
    140140
  • trunk/WebCore/html/HTMLTokenizer.cpp

    r52091 r52116  
    18091809        end(); // this actually causes us to be deleted
    18101810   
    1811     // After parsing, go ahead and dispatch image beforeload/load events.
    1812     ImageLoader::dispatchPendingEvents();
     1811    // After parsing, go ahead and dispatch image beforeload events.
     1812    ImageLoader::dispatchPendingBeforeLoadEvents();
    18131813}
    18141814
  • trunk/WebCore/loader/ImageLoader.cpp

    r50748 r52116  
    232232}
    233233
    234 void ImageLoader::dispatchPendingEvents()
     234void ImageLoader::dispatchPendingBeforeLoadEvents()
    235235{
    236236    beforeLoadEventSender().dispatchPendingEvents();
     237}
     238
     239void ImageLoader::dispatchPendingLoadEvents()
     240{
    237241    loadEventSender().dispatchPendingEvents();
    238242}
  • trunk/WebCore/loader/ImageLoader.h

    r49394 r52116  
    5757    bool haveFiredLoadEvent() const { return m_firedLoad; }
    5858
    59     static void dispatchPendingEvents();
     59    static void dispatchPendingBeforeLoadEvents();
     60    static void dispatchPendingLoadEvents();
    6061
    6162protected:
Note: See TracChangeset for help on using the changeset viewer.