Reviewed by Maciej.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 2 Feb 2006 17:31:50 +0000 (17:31 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 2 Feb 2006 17:31:50 +0000 (17:31 +0000)
        - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=7000
          REGRESSION: Scrolling is triggering onunload in TOT

        Tests:
        - fast/events/onunload-body-property.html
        - fast/events/onunload-window-property.html

        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNode::getValueProperty): Change onunload case to use unloadEvent, not scrollEvent.
        (KJS::DOMNode::putValueProperty): Ditto.
        * khtml/ecma/kjs_window.cpp:
        (KJS::Window::getValueProperty): Ditto.
        (KJS::Window::putValueProperty): Ditto.

        Reviewed by Hyatt.

        - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=6998
          setTimeout(0) tight loop uses almost all CPU (need 10ms minimum for timeout?)

        * khtml/ecma/kjs_window.cpp: (KJS::WindowQObject::installTimeout): When converting
        the timeout number from an integer ms to a double seconds, use a 10 ms minimum.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@12532 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/khtml/ecma/kjs_dom.cpp
WebCore/khtml/ecma/kjs_window.cpp

index cb7f68fdad2fac7a364ad3043b4e76eae749efcb..1b69e31936760a0e6c9229736348e17a771388cf 100644 (file)
@@ -1,3 +1,31 @@
+2006-02-02  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=7000
+          REGRESSION: Scrolling is triggering onunload in TOT
+
+        Tests:
+        - fast/events/onunload-body-property.html
+        - fast/events/onunload-window-property.html
+
+        * khtml/ecma/kjs_dom.cpp:
+        (KJS::DOMNode::getValueProperty): Change onunload case to use unloadEvent, not scrollEvent.
+        (KJS::DOMNode::putValueProperty): Ditto.
+        * khtml/ecma/kjs_window.cpp:
+        (KJS::Window::getValueProperty): Ditto.
+        (KJS::Window::putValueProperty): Ditto.
+
+2006-02-02  Darin Adler  <darin@apple.com>
+
+        Reviewed by Hyatt.
+
+        - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=6998
+          setTimeout(0) tight loop uses almost all CPU (need 10ms minimum for timeout?)
+
+        * khtml/ecma/kjs_window.cpp: (KJS::WindowQObject::installTimeout): When converting
+        the timeout number from an integer ms to a double seconds, use a 10 ms minimum.
+
 2006-02-02  Darin Adler  <darin@apple.com>
 
         - added a FIXME about an incorrect change made to FloatRect
index d43ae617755eee9dae841aee3e3a3c5829f6f387..f9be736dee68262b46498a183b181b8c7c5ca497 100644 (file)
@@ -370,7 +370,7 @@ JSValue *DOMNode::getValueProperty(ExecState *exec, int token) const
   case OnSubmit:
     return getListener(submitEvent);
   case OnUnload:
-    return getListener(scrollEvent);
+    return getListener(unloadEvent);
   default:
     // no DOM standard, found in IE only
 
@@ -559,7 +559,7 @@ void DOMNode::putValueProperty(ExecState *exec, int token, JSValue *value, int /
     setListener(exec,submitEvent,value);
     break;
   case OnUnload:
-    setListener(exec,scrollEvent,value);
+    setListener(exec, unloadEvent, value);
     break;
   case ScrollTop: {
     RenderObject *rend = node.renderer();
index 8b5a4144058f3648675c6858fe641b97d71c7000..88274ac966a0e0fa51a39acad64cfa1664891924 100644 (file)
@@ -890,7 +890,7 @@ JSValue *Window::getValueProperty(ExecState *exec, int token) const
    case Onbeforeunload:
       return getListener(exec, beforeunloadEvent);
     case Onunload:
-     return getListener(exec,scrollEvent);
+     return getListener(exec, unloadEvent);
    }
    ASSERT(0);
    return jsUndefined();
@@ -1176,7 +1176,7 @@ void Window::put(ExecState* exec, const Identifier &propertyName, JSValue *value
       return;
     case Onunload:
       if (isSafeScript(exec))
-        setListener(exec,scrollEvent,value);
+        setListener(exec, unloadEvent, value);
       return;
     case Name:
       if (isSafeScript(exec))
@@ -1908,10 +1908,13 @@ int WindowQObject::installTimeout(ScheduledAction* a, int t, bool singleShot)
     DOMWindowTimer* timer = new DOMWindowTimer(timeoutId, this, a);
     ASSERT(!m_timeouts.get(timeoutId));
     m_timeouts.set(timeoutId, timer);
+    // Use a minimum interval of 10 ms to match other browsers.
+    // Faster timers might be "better", but they're incompatible.
+    double interval = t <= 10 ? 0.010 : t * 0.001;
     if (singleShot)
-        timer->startOneShot(t * 0.001);
+        timer->startOneShot(interval);
     else
-        timer->startRepeating(t * 0.001);
+        timer->startRepeating(interval);
     return timeoutId;
 }