Changeset 69710 in webkit


Ignore:
Timestamp:
Oct 13, 2010 4:10:56 PM (14 years ago)
Author:
commit-queue@webkit.org
Message:

2010-10-13 James Simonsen <simonjam@chromium.org>

Reviewed by Darin Adler.

Implement onreadystatechange event handler for Documents
https://bugs.webkit.org/show_bug.cgi?id=26140

  • fast/dom/Document/readystate-expected.txt:
  • fast/dom/Document/readystate.html:

2010-10-13 James Simonsen <simonjam@chromium.org>

Reviewed by Darin Adler.

Implement onreadystatechange event handler for Documents
https://bugs.webkit.org/show_bug.cgi?id=26140

Test: fast/dom/Document/readystate.html

  • dom/Document.cpp: (WebCore::Document::setReadyState): Fire readystatechangeevent. (WebCore::Document::open): Clear event listeners.
  • dom/Document.h: Add readystatechange event.
  • dom/Document.idl: Ditto.
Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r69709 r69710  
     12010-10-13  James Simonsen  <simonjam@chromium.org>
     2
     3        Reviewed by Darin Adler.
     4
     5        Implement onreadystatechange event handler for Documents
     6        https://bugs.webkit.org/show_bug.cgi?id=26140
     7
     8        * fast/dom/Document/readystate-expected.txt:
     9        * fast/dom/Document/readystate.html:
     10
    1112010-10-13  Chris Fleizach  <cfleizach@apple.com>
    212
  • trunk/LayoutTests/fast/dom/Document/readystate-expected.txt

    r67163 r69710  
    11Tests that the document's readyState is set properly at various phases during load.
    22PASS document.readyState is "loading"
     3PASS document.onreadystatechange is null
    34PASS document.readyState is "loading"
     5PASS subdocument.readyState is "loading"
     6PASS subdocument.readyState is "complete"
     7PASS htmlDocument.readyState is "loading"
     8PASS dynamicIframe.contentDocument.readyState is "complete"
     9PASS dynamicIframe.contentDocument.onreadystatechange is null
     10PASS dynamicIframe.contentDocument.readyState is "loading"
     11PASS dynamicIframe.contentDocument.readyState is expectedDynamicStates[nextExpectedDynamicState]
     12PASS dynamicIframe.contentDocument.readyState is expectedDynamicStates[nextExpectedDynamicState]
     13PASS dynamicIframe.contentDocument.readyState is "complete"
     14PASS event.target.readyState is expectedStates[nextExpectedState]
     15PASS document.readyState is "interactive"
     16PASS readyStateChangeFired is true
    417PASS document.readyState is "interactive"
    518PASS document.readyState is "interactive"
    6 PASS document.readyState is "interactive"
     19PASS event.target.readyState is expectedStates[nextExpectedState]
     20PASS nextExpectedState is expectedStates.length
     21PASS nextExpectedDynamicState is expectedDynamicStates.length
    722PASS document.readyState is "complete"
    823PASS successfullyParsed is true
  • trunk/LayoutTests/fast/dom/Document/readystate.html

    r67163 r69710  
    55<script src="../../js/resources/js-test-pre.js"></script>
    66</head>
    7 <body onload="shouldBeEqualToString('document.readyState', 'complete');finishJSTest();">
     7<body onload="allDone()">
    88Tests that the document's readyState is set properly at various phases during load.
    99<div id="console"></div>
    10 <script defer src="data:text/javascript,shouldBeEqualToString('document.readyState', 'interactive');"></script>
     10<script defer src="data:text/javascript,shouldBeEqualToString('document.readyState', 'interactive');shouldBeTrue('readyStateChangeFired');"></script>
    1111<script src="data:text/javascript,shouldBeEqualToString('document.readyState', 'loading');"></script>
     12<iframe src="does-not-exist.html"></iframe>
    1213<script>
    1314  var jsTestIsAsync = true;
    1415
     16  shouldBe("document.onreadystatechange", "null");
    1517  shouldBeEqualToString("document.readyState", "loading");
    1618
     
    2325  }, false);
    2426
     27  var expectedStates = ["interactive", "complete"];
     28  var nextExpectedState = 0;
     29  var readyStateChangeFired = false;
     30  document.onreadystatechange = function(event) {
     31    shouldBe("event.target.readyState", "expectedStates[nextExpectedState]");
     32    ++nextExpectedState;
     33    readyStateChangeFired = true;
     34  }
     35
     36  function readyStateShouldNotChange(event) {
     37    testFailed("should not have been notified of subdocument state change to " + event.target.readyState);
     38  }
     39
     40  var subdocument = document.getElementsByTagName('iframe')[0].contentDocument;
     41  subdocument.onreadystatechange = readyStateShouldNotChange;
     42  subdocument.open();
     43  shouldBeEqualToString("subdocument.readyState", "loading");
     44  subdocument.close();
     45  shouldBeEqualToString("subdocument.readyState", "complete");
     46
     47  var htmlDocument = document.implementation.createHTMLDocument();
     48  shouldBeEqualToString("htmlDocument.readyState", "loading");
     49
     50  var expectedDynamicStates = ["interactive", "complete"];
     51  var nextExpectedDynamicState = 0;
     52  var dynamicIframe = document.createElement('iframe');
     53  dynamicIframe.setAttribute("src", "about:blank");
     54  dynamicIframe.setAttribute("onload", "parent.dynamicIframeLoaded()");
     55  subdocument.body.appendChild(dynamicIframe);
     56  function dynamicIframeLoaded() {
     57    shouldBeEqualToString("dynamicIframe.contentDocument.readyState", "complete");
     58    dynamicIframe.contentDocument.onreadystatechange = readyStateShouldNotChange;
     59    dynamicIframe.contentDocument.open();
     60    shouldBe("dynamicIframe.contentDocument.onreadystatechange", "null");
     61    shouldBeEqualToString("dynamicIframe.contentDocument.readyState", "loading");
     62    dynamicIframe.contentDocument.onreadystatechange = function() {
     63      shouldBe("dynamicIframe.contentDocument.readyState", "expectedDynamicStates[nextExpectedDynamicState]");
     64      ++nextExpectedDynamicState;
     65    }
     66    dynamicIframe.contentDocument.close();
     67    shouldBeEqualToString("dynamicIframe.contentDocument.readyState", "complete");
     68
     69    dynamicIframe.contentDocument.onreadystatechange = readyStateShouldNotChange;
     70    subdocument.open();
     71    subdocument.close();
     72  }
     73
     74  function allDone() {
     75    shouldBe("nextExpectedState", "expectedStates.length");
     76    shouldBe("nextExpectedDynamicState", "expectedDynamicStates.length");
     77    shouldBeEqualToString("document.readyState", "complete");
     78    finishJSTest();
     79  }
     80
    2581  var successfullyParsed = true;
    2682</script>
  • trunk/WebCore/ChangeLog

    r69707 r69710  
     12010-10-13  James Simonsen  <simonjam@chromium.org>
     2
     3        Reviewed by Darin Adler.
     4
     5        Implement onreadystatechange event handler for Documents
     6        https://bugs.webkit.org/show_bug.cgi?id=26140
     7
     8        Test: fast/dom/Document/readystate.html
     9
     10        * dom/Document.cpp:
     11        (WebCore::Document::setReadyState): Fire readystatechangeevent.
     12        (WebCore::Document::open): Clear event listeners.
     13        * dom/Document.h: Add readystatechange event.
     14        * dom/Document.idl: Ditto.
     15
    1162010-10-13  Chris Fleizach  <cfleizach@apple.com>
    217
  • trunk/WebCore/dom/Document.cpp

    r69432 r69710  
    985985void Document::setReadyState(ReadyState readyState)
    986986{
    987     // FIXME: Fire the readystatechange event on this Document.
     987    if (readyState == m_readyState)
     988        return;
    988989    m_readyState = readyState;
     990    dispatchEvent(Event::create(eventNames().readystatechangeEvent, false, false));
    989991}
    990992
     
    18621864    }
    18631865
     1866    removeAllEventListeners();
    18641867    implicitOpen();
    18651868
  • trunk/WebCore/dom/Document.h

    r69286 r69710  
    257257    DEFINE_ATTRIBUTE_EVENT_LISTENER(focus);
    258258    DEFINE_ATTRIBUTE_EVENT_LISTENER(load);
     259    DEFINE_ATTRIBUTE_EVENT_LISTENER(readystatechange);
    259260
    260261    // WebKit extensions
  • trunk/WebCore/dom/Document.idl

    r68345 r69710  
    279279        attribute [DontEnum] EventListener onmouseup;
    280280        attribute [DontEnum] EventListener onmousewheel;
     281        attribute [DontEnum] EventListener onreadystatechange;
    281282        attribute [DontEnum] EventListener onscroll;
    282283        attribute [DontEnum] EventListener onselect;
     
    298299        // attribute [DontEnum] EventListener onprogress;
    299300        // attribute [DontEnum] EventListener onratechange;
    300         // attribute [DontEnum] EventListener onreadystatechange;
    301301        // attribute [DontEnum] EventListener onseeked;
    302302        // attribute [DontEnum] EventListener onseeking;
Note: See TracChangeset for help on using the changeset viewer.