[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

commit-queue at webkit.org commit-queue at webkit.org
Wed Dec 22 16:12:46 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit b0010969fd8cd9ef4ef8441273ce53e9c4030ca0
Author: commit-queue at webkit.org <commit-queue at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Nov 19 18:19:30 2010 +0000

    2010-11-19  James Simonsen  <simonjam at chromium.org>
    
            Reviewed by Darin Fisher.
    
            [Web Timing] Add unloadEventStart
            https://bugs.webkit.org/show_bug.cgi?id=49101
    
            * fast/dom/Window/window-properties-performance-expected.txt:
            * fast/dom/script-tests/webtiming.js:
            (checkTimingBeforeLoad):
            (checkTimingWhileDeferred):
            (checkWebTimingWhileAsync):
            (checkWebTimingOnLoad):
            (checkWebTimingAfterLoad):
            * fast/dom/webtiming-document-open-expected.txt:
            * fast/dom/webtiming-expected.txt:
            * fast/dom/webtiming-navigate-within-document-expected.txt:
    2010-11-19  James Simonsen  <simonjam at chromium.org>
    
            Reviewed by Darin Fisher.
    
            [Web Timing] Add unloadEventStart
            https://bugs.webkit.org/show_bug.cgi?id=49101
    
            * loader/DocumentLoadTiming.h:
            (WebCore::DocumentLoadTiming::DocumentLoadTiming):
            * loader/FrameLoader.cpp:
            (WebCore::FrameLoader::stopLoading): Use dispatchTimedEvent().
            * page/DOMWindow.cpp:
            (WebCore::DOMWindow::dispatchLoadEvent): Use dispatchTimedEvent().
            (WebCore::DOMWindow::dispatchTimedEvent): Added.
            * page/DOMWindow.h:
            * page/Timing.cpp:
            (WebCore::Timing::unloadEventStart):
            * page/Timing.h:
            * page/Timing.idl:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@72415 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 3ba054f..f82201a 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,21 @@
+2010-11-19  James Simonsen  <simonjam at chromium.org>
+
+        Reviewed by Darin Fisher.
+
+        [Web Timing] Add unloadEventStart
+        https://bugs.webkit.org/show_bug.cgi?id=49101
+
+        * fast/dom/Window/window-properties-performance-expected.txt:
+        * fast/dom/script-tests/webtiming.js:
+        (checkTimingBeforeLoad):
+        (checkTimingWhileDeferred):
+        (checkWebTimingWhileAsync):
+        (checkWebTimingOnLoad):
+        (checkWebTimingAfterLoad):
+        * fast/dom/webtiming-document-open-expected.txt:
+        * fast/dom/webtiming-expected.txt:
+        * fast/dom/webtiming-navigate-within-document-expected.txt:
+
 2010-11-19  'Anton Muhin'  <antonm at google.com>
 
         Not reviewed, remove a suppression for svg/dom/svglist-exception-on-out-bounds-error.html
diff --git a/LayoutTests/fast/dom/Window/window-properties-performance-expected.txt b/LayoutTests/fast/dom/Window/window-properties-performance-expected.txt
index 8d2229d..e6ae84a 100644
--- a/LayoutTests/fast/dom/Window/window-properties-performance-expected.txt
+++ b/LayoutTests/fast/dom/Window/window-properties-performance-expected.txt
@@ -30,4 +30,5 @@ window.webkitPerformance.timing.requestStart [number]
 window.webkitPerformance.timing.responseEnd [number]
 window.webkitPerformance.timing.responseStart [number]
 window.webkitPerformance.timing.unloadEventEnd [number]
+window.webkitPerformance.timing.unloadEventStart [number]
 
diff --git a/LayoutTests/fast/dom/script-tests/webtiming.js b/LayoutTests/fast/dom/script-tests/webtiming.js
index 5bd58fa..29d60a5 100644
--- a/LayoutTests/fast/dom/script-tests/webtiming.js
+++ b/LayoutTests/fast/dom/script-tests/webtiming.js
@@ -19,7 +19,8 @@ function checkTimingBeforeLoad()
 {
     shouldBeGreaterThanOrEqual("timing.navigationStart", "oneHourAgoUTC");
 
-    shouldBeGreaterThanOrEqual("timing.unloadEventEnd", "timing.navigationStart");
+    shouldBeGreaterThanOrEqual("timing.unloadEventStart", "timing.navigationStart");
+    shouldBeGreaterThanOrEqual("timing.unloadEventEnd", "timing.unloadEventStart");
 
     shouldBe("timing.redirectStart", "0");
     shouldBe("timing.redirectEnd", "0");
@@ -51,7 +52,8 @@ function checkTimingWhileDeferred()
 {
     shouldBeGreaterThanOrEqual("timing.navigationStart", "oneHourAgoUTC");
 
-    shouldBeGreaterThanOrEqual("timing.unloadEventEnd", "timing.navigationStart");
+    shouldBeGreaterThanOrEqual("timing.unloadEventStart", "timing.navigationStart");
+    shouldBeGreaterThanOrEqual("timing.unloadEventEnd", "timing.unloadEventStart");
 
     shouldBe("timing.redirectStart", "0");
     shouldBe("timing.redirectEnd", "0");
@@ -84,7 +86,8 @@ function checkTimingWhileDeferred()
 function checkWebTimingOnDOMContentLoaded() {
     shouldBeGreaterThanOrEqual("timing.navigationStart", "oneHourAgoUTC");
 
-    shouldBeGreaterThanOrEqual("timing.unloadEventEnd", "timing.navigationStart");
+    shouldBeGreaterThanOrEqual("timing.unloadEventStart", "timing.navigationStart");
+    shouldBeGreaterThanOrEqual("timing.unloadEventEnd", "timing.unloadEventStart");
 
     shouldBe("timing.redirectStart", "0");
     shouldBe("timing.redirectEnd", "0");
@@ -123,7 +126,8 @@ function checkWebTimingWhileAsync()
 {
     shouldBeGreaterThanOrEqual("timing.navigationStart", "oneHourAgoUTC");
 
-    shouldBeGreaterThanOrEqual("timing.unloadEventEnd", "timing.navigationStart");
+    shouldBeGreaterThanOrEqual("timing.unloadEventStart", "timing.navigationStart");
+    shouldBeGreaterThanOrEqual("timing.unloadEventEnd", "timing.unloadEventStart");
 
     shouldBe("timing.redirectStart", "0");
     shouldBe("timing.redirectEnd", "0");
@@ -157,7 +161,8 @@ function checkWebTimingOnLoad()
 {
     shouldBeGreaterThanOrEqual("timing.navigationStart", "oneHourAgoUTC");
 
-    shouldBeGreaterThanOrEqual("timing.unloadEventEnd", "timing.navigationStart");
+    shouldBeGreaterThanOrEqual("timing.unloadEventStart", "timing.navigationStart");
+    shouldBeGreaterThanOrEqual("timing.unloadEventEnd", "timing.unloadEventStart");
 
     shouldBe("timing.redirectStart", "0");
     shouldBe("timing.redirectEnd", "0");
@@ -192,7 +197,8 @@ function checkWebTimingAfterLoad()
 {
     shouldBeGreaterThanOrEqual("timing.navigationStart", "oneHourAgoUTC");
 
-    shouldBeGreaterThanOrEqual("timing.unloadEventEnd", "timing.navigationStart");
+    shouldBeGreaterThanOrEqual("timing.unloadEventStart", "timing.navigationStart");
+    shouldBeGreaterThanOrEqual("timing.unloadEventEnd", "timing.unloadEventStart");
 
     shouldBe("timing.redirectStart", "0");
     shouldBe("timing.redirectEnd", "0");
diff --git a/LayoutTests/fast/dom/webtiming-document-open-expected.txt b/LayoutTests/fast/dom/webtiming-document-open-expected.txt
index a7d6a6a..7080cf6 100644
--- a/LayoutTests/fast/dom/webtiming-document-open-expected.txt
+++ b/LayoutTests/fast/dom/webtiming-document-open-expected.txt
@@ -22,6 +22,7 @@ PASS timing.requestStart is originalTiming.requestStart
 PASS timing.responseEnd is originalTiming.responseEnd
 PASS timing.responseStart is originalTiming.responseStart
 PASS timing.unloadEventEnd is originalTiming.unloadEventEnd
+PASS timing.unloadEventStart is originalTiming.unloadEventStart
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/LayoutTests/fast/dom/webtiming-expected.txt b/LayoutTests/fast/dom/webtiming-expected.txt
index 09c580c..67799a9 100644
--- a/LayoutTests/fast/dom/webtiming-expected.txt
+++ b/LayoutTests/fast/dom/webtiming-expected.txt
@@ -4,7 +4,8 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS timing.navigationStart is >= oneHourAgoUTC
-PASS timing.unloadEventEnd is >= timing.navigationStart
+PASS timing.unloadEventStart is >= timing.navigationStart
+PASS timing.unloadEventEnd is >= timing.unloadEventStart
 PASS timing.redirectStart is 0
 PASS timing.redirectEnd is 0
 PASS navigation.redirectCount is 0
@@ -23,7 +24,8 @@ PASS timing.domComplete is 0
 PASS timing.loadEventStart is 0
 PASS timing.loadEventEnd is 0
 PASS timing.navigationStart is >= oneHourAgoUTC
-PASS timing.unloadEventEnd is >= timing.navigationStart
+PASS timing.unloadEventStart is >= timing.navigationStart
+PASS timing.unloadEventEnd is >= timing.unloadEventStart
 PASS timing.redirectStart is 0
 PASS timing.redirectEnd is 0
 PASS navigation.redirectCount is 0
@@ -42,7 +44,8 @@ PASS timing.domComplete is 0
 PASS timing.loadEventStart is 0
 PASS timing.loadEventEnd is 0
 PASS timing.navigationStart is >= oneHourAgoUTC
-PASS timing.unloadEventEnd is >= timing.navigationStart
+PASS timing.unloadEventStart is >= timing.navigationStart
+PASS timing.unloadEventEnd is >= timing.unloadEventStart
 PASS timing.redirectStart is 0
 PASS timing.redirectEnd is 0
 PASS navigation.redirectCount is 0
@@ -61,7 +64,8 @@ PASS timing.domComplete is 0
 PASS timing.loadEventStart is 0
 PASS timing.loadEventEnd is 0
 PASS timing.navigationStart is >= oneHourAgoUTC
-PASS timing.unloadEventEnd is >= timing.navigationStart
+PASS timing.unloadEventStart is >= timing.navigationStart
+PASS timing.unloadEventEnd is >= timing.unloadEventStart
 PASS timing.redirectStart is 0
 PASS timing.redirectEnd is 0
 PASS navigation.redirectCount is 0
@@ -80,7 +84,8 @@ PASS timing.domComplete is 0
 PASS timing.loadEventStart is 0
 PASS timing.loadEventEnd is 0
 PASS timing.navigationStart is >= oneHourAgoUTC
-PASS timing.unloadEventEnd is >= timing.navigationStart
+PASS timing.unloadEventStart is >= timing.navigationStart
+PASS timing.unloadEventEnd is >= timing.unloadEventStart
 PASS timing.redirectStart is 0
 PASS timing.redirectEnd is 0
 PASS navigation.redirectCount is 0
@@ -100,7 +105,8 @@ PASS timing.domComplete is >= timing.domContentLoadedEnd
 PASS timing.loadEventStart is >= timing.responseEnd
 PASS timing.loadEventEnd is 0
 PASS timing.navigationStart is >= oneHourAgoUTC
-PASS timing.unloadEventEnd is >= timing.navigationStart
+PASS timing.unloadEventStart is >= timing.navigationStart
+PASS timing.unloadEventEnd is >= timing.unloadEventStart
 PASS timing.redirectStart is 0
 PASS timing.redirectEnd is 0
 PASS navigation.redirectCount is 0
diff --git a/LayoutTests/fast/dom/webtiming-navigate-within-document-expected.txt b/LayoutTests/fast/dom/webtiming-navigate-within-document-expected.txt
index 34cf195..d49ea0f 100644
--- a/LayoutTests/fast/dom/webtiming-navigate-within-document-expected.txt
+++ b/LayoutTests/fast/dom/webtiming-navigate-within-document-expected.txt
@@ -22,6 +22,7 @@ PASS requestStart is unchanged.
 PASS responseEnd is unchanged.
 PASS responseStart is unchanged.
 PASS unloadEventEnd is unchanged.
+PASS unloadEventStart is unchanged.
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index c364415..997d6bc 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,23 @@
+2010-11-19  James Simonsen  <simonjam at chromium.org>
+
+        Reviewed by Darin Fisher.
+
+        [Web Timing] Add unloadEventStart
+        https://bugs.webkit.org/show_bug.cgi?id=49101
+
+        * loader/DocumentLoadTiming.h:
+        (WebCore::DocumentLoadTiming::DocumentLoadTiming):
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::stopLoading): Use dispatchTimedEvent().
+        * page/DOMWindow.cpp:
+        (WebCore::DOMWindow::dispatchLoadEvent): Use dispatchTimedEvent().
+        (WebCore::DOMWindow::dispatchTimedEvent): Added.
+        * page/DOMWindow.h:
+        * page/Timing.cpp:
+        (WebCore::Timing::unloadEventStart):
+        * page/Timing.h:
+        * page/Timing.idl:
+
 2010-11-19  Martin Robinson  <mrobinson at igalia.com>
 
         Reviewed by Daniel Bates.
diff --git a/WebCore/loader/DocumentLoadTiming.h b/WebCore/loader/DocumentLoadTiming.h
index 2d4b0fa..368004b 100644
--- a/WebCore/loader/DocumentLoadTiming.h
+++ b/WebCore/loader/DocumentLoadTiming.h
@@ -31,6 +31,7 @@ namespace WebCore {
 struct DocumentLoadTiming {
     DocumentLoadTiming()
         : navigationStart(0.0)
+        , unloadEventStart(0.0)
         , unloadEventEnd(0.0)
         , redirectStart(0.0)
         , redirectEnd(0.0)
@@ -43,6 +44,7 @@ struct DocumentLoadTiming {
     }
 
     double navigationStart;
+    double unloadEventStart;
     double unloadEventEnd;
     double redirectStart;
     double redirectEnd;
diff --git a/WebCore/loader/FrameLoader.cpp b/WebCore/loader/FrameLoader.cpp
index 768c8e3..ee07615 100644
--- a/WebCore/loader/FrameLoader.cpp
+++ b/WebCore/loader/FrameLoader.cpp
@@ -381,15 +381,16 @@ void FrameLoader::stopLoading(UnloadEventPolicy unloadEventPolicy, DatabasePolic
                     if (unloadEventPolicy == UnloadEventPolicyUnloadAndPageHide)
                         m_frame->domWindow()->dispatchEvent(PageTransitionEvent::create(eventNames().pagehideEvent, m_frame->document()->inPageCache()), m_frame->document());
                     if (!m_frame->document()->inPageCache()) {
-                        m_frame->domWindow()->dispatchEvent(Event::create(eventNames().unloadEvent, false, false), m_frame->domWindow()->document());
-
+                        RefPtr<Event> unloadEvent(Event::create(eventNames().unloadEvent, false, false));
                         if (m_provisionalDocumentLoader) {
                             DocumentLoadTiming* timing = m_provisionalDocumentLoader->timing();
                             ASSERT(timing->navigationStart);
+                            ASSERT(!timing->unloadEventStart);
                             ASSERT(!timing->unloadEventEnd);
-                            timing->unloadEventEnd = currentTime();
-                            ASSERT(timing->unloadEventEnd >= timing->navigationStart);
-                        }
+                            m_frame->domWindow()->dispatchTimedEvent(unloadEvent, m_frame->domWindow()->document(), &timing->unloadEventStart, &timing->unloadEventEnd);
+                            ASSERT(timing->unloadEventStart >= timing->navigationStart);
+                        } else
+                            m_frame->domWindow()->dispatchEvent(unloadEvent, m_frame->domWindow()->document());
                     }
                 }
                 m_pageDismissalEventBeingDispatched = false;
diff --git a/WebCore/page/DOMWindow.cpp b/WebCore/page/DOMWindow.cpp
index 1cf2a3a..b5337f9 100644
--- a/WebCore/page/DOMWindow.cpp
+++ b/WebCore/page/DOMWindow.cpp
@@ -1499,11 +1499,12 @@ bool DOMWindow::removeEventListener(const AtomicString& eventType, EventListener
 
 void DOMWindow::dispatchLoadEvent()
 {
-    if (DocumentLoader* documentLoader = m_frame ? m_frame->loader()->documentLoader() : 0)
-        documentLoader->timing()->loadEventStart = currentTime();
-    dispatchEvent(Event::create(eventNames().loadEvent, false, false), document());
-    if (DocumentLoader* documentLoader = m_frame ? m_frame->loader()->documentLoader() : 0)
-        documentLoader->timing()->loadEventEnd = currentTime();
+    RefPtr<Event> loadEvent(Event::create(eventNames().loadEvent, false, false));
+    if (DocumentLoader* documentLoader = m_frame ? m_frame->loader()->documentLoader() : 0) {
+        DocumentLoadTiming* timing = documentLoader->timing();
+        dispatchTimedEvent(loadEvent, document(), &timing->loadEventStart, &timing->loadEventEnd);
+    } else
+        dispatchEvent(loadEvent, document());
 
     // For load events, send a separate load event to the enclosing frame only.
     // This is a DOM extension and is independent of bubbling/capturing rules of
@@ -1542,6 +1543,16 @@ bool DOMWindow::dispatchEvent(PassRefPtr<Event> prpEvent, PassRefPtr<EventTarget
     return result;
 }
 
+void DOMWindow::dispatchTimedEvent(PassRefPtr<Event> event, Document* target, double* startTime, double* endTime)
+{
+    ASSERT(startTime);
+    ASSERT(endTime);
+    *startTime = currentTime();
+    dispatchEvent(event, target);
+    *endTime = currentTime();
+    ASSERT(*endTime >= *startTime);
+}
+
 void DOMWindow::removeAllEventListeners()
 {
     EventTarget::removeAllEventListeners();
diff --git a/WebCore/page/DOMWindow.h b/WebCore/page/DOMWindow.h
index d87a386..cb524a0 100644
--- a/WebCore/page/DOMWindow.h
+++ b/WebCore/page/DOMWindow.h
@@ -275,6 +275,7 @@ namespace WebCore {
         using EventTarget::dispatchEvent;
         bool dispatchEvent(PassRefPtr<Event> prpEvent, PassRefPtr<EventTarget> prpTarget);
         void dispatchLoadEvent();
+        void dispatchTimedEvent(PassRefPtr<Event> event, Document* target, double* startTime, double* endTime);
 
         DEFINE_ATTRIBUTE_EVENT_LISTENER(abort);
         DEFINE_ATTRIBUTE_EVENT_LISTENER(beforeunload);
diff --git a/WebCore/page/PerformanceTiming.cpp b/WebCore/page/PerformanceTiming.cpp
index 4fc16da..82b7027 100644
--- a/WebCore/page/PerformanceTiming.cpp
+++ b/WebCore/page/PerformanceTiming.cpp
@@ -93,6 +93,15 @@ unsigned long long PerformanceTiming::navigationStart() const
     return toIntegerMilliseconds(timing->navigationStart);
 }
 
+unsigned long long PerformanceTiming::unloadEventStart() const
+{
+    DocumentLoadTiming* timing = documentLoadTiming();
+    if (!timing)
+        return 0;
+
+    return toIntegerMilliseconds(timing->unloadEventStart);
+}
+
 unsigned long long PerformanceTiming::unloadEventEnd() const
 {
     DocumentLoadTiming* timing = documentLoadTiming();
diff --git a/WebCore/page/PerformanceTiming.h b/WebCore/page/PerformanceTiming.h
index 5124e2b..3b5e8b4 100644
--- a/WebCore/page/PerformanceTiming.h
+++ b/WebCore/page/PerformanceTiming.h
@@ -52,6 +52,7 @@ public:
     void disconnectFrame();
 
     unsigned long long navigationStart() const;
+    unsigned long long unloadEventStart() const;
     unsigned long long unloadEventEnd() const;
     unsigned long long redirectStart() const;
     unsigned long long redirectEnd() const;
diff --git a/WebCore/page/PerformanceTiming.idl b/WebCore/page/PerformanceTiming.idl
index 49442b0..a13b8d7 100644
--- a/WebCore/page/PerformanceTiming.idl
+++ b/WebCore/page/PerformanceTiming.idl
@@ -33,6 +33,7 @@ module window {
     // See: http://dev.w3.org/2006/webapi/WebTiming/
     interface [Conditional=WEB_TIMING, OmitConstructor] PerformanceTiming {
         readonly attribute unsigned long long navigationStart;
+        readonly attribute unsigned long long unloadEventStart;
         readonly attribute unsigned long long unloadEventEnd;
         readonly attribute unsigned long long redirectStart;
         readonly attribute unsigned long long redirectEnd;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list