Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: b4925b759d58d7263d828afc861163305f079e18
      
https://github.com/WebKit/WebKit/commit/b4925b759d58d7263d828afc861163305f079e18
  Author: Ahmad Saleem <[email protected]>
  Date:   2026-10-06 (Tue, 06 Oct 2026)

  Changed paths:
    M Source/WebCore/dom/Document.cpp
    M Source/WebCore/dom/Document.h
    M Source/WebCore/dom/IdleCallbackController.cpp
    M Source/WebCore/dom/IdleCallbackController.h
    M Source/WebCore/page/DOMWindow.cpp
    M Source/WebCore/page/DOMWindow.h
    M Source/WebCore/page/LocalDOMWindow.cpp
    M Source/WebCore/page/LocalDOMWindow.h

  Log Message:
  -----------
  requestIdleCallback handles above 2^31 cannot be cancelled because C++ uses 
int for the IDL unsigned long handle
https://bugs.webkit.org/show_bug.cgi?id=326471
rdar://189266546

Reviewed by Ryosuke Niwa.

The requestIdleCallback spec declares the handle as `unsigned long`, and
IdleCallbackController stores it as `unsigned`, but the C++ plumbing in
between (DOMWindow, LocalDOMWindow, Document, IdleCallbackController)
passed it as `int`. The generated binding converts the JS argument with
convert<IDLUnsignedLong>() and then silently narrows the uint32_t to int.

Once a document has issued 2^31 handles, requestIdleCallback() returns
2147483648 to script, but cancelIdleCallback(2147483648) arrives as
INT_MIN and removeIdleCallback() bails out on its `<= 0` check, so the
callback still runs.

Use `unsigned` throughout so the handle round-trips unchanged, and drop
the now-unneeded signed check in removeIdleCallback().

No new test: this needs 2^31 requestIdleCallback() calls in a single
document, which is far beyond any test timeout.

* Source/WebCore/dom/Document.cpp:
(WebCore::Document::requestIdleCallback):
(WebCore::Document::cancelIdleCallback):
* Source/WebCore/dom/Document.h:
* Source/WebCore/dom/IdleCallbackController.cpp:
(WebCore::IdleCallbackController::queueIdleCallback):
(WebCore::IdleCallbackController::removeIdleCallback):
* Source/WebCore/dom/IdleCallbackController.h:
* Source/WebCore/page/DOMWindow.cpp:
(WebCore::DOMWindow::requestIdleCallback):
(WebCore::DOMWindow::cancelIdleCallback):
* Source/WebCore/page/DOMWindow.h:
* Source/WebCore/page/LocalDOMWindow.cpp:
(WebCore::LocalDOMWindow::requestIdleCallback):
(WebCore::LocalDOMWindow::cancelIdleCallback):
* Source/WebCore/page/LocalDOMWindow.h:

Canonical link: https://commits.webkit.org/322942@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to