Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 4016aa647924537a988fe198b589aceeb71add23
      
https://github.com/WebKit/WebKit/commit/4016aa647924537a988fe198b589aceeb71add23
  Author: Chris Dumez <[email protected]>
  Date:   2024-12-14 (Sat, 14 Dec 2024)

  Changed paths:
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigate-event/intercept-handler-throws-expected.txt
    M Source/WebCore/page/NavigateEvent.cpp
    M Source/WebCore/page/Navigation.cpp
    M Source/WebCore/page/Navigation.h
    M Source/WebCore/page/NavigationHistoryEntry.cpp
    M Source/WebCore/page/NavigationHistoryEntry.h
    M Source/WebCore/page/NavigationHistoryEntry.idl

  Log Message:
  -----------
  [Navigation API] NavigationHistoryEntry JS wrapper is not kept alive until 
the dispose event is fired
https://bugs.webkit.org/show_bug.cgi?id=284663

Reviewed by Ryosuke Niwa.

When a NavigationHistoryEntry object gets removed from a Navigation object, a 
`dispose` event is
dispatched on the NavigationHistoryEntry. However, NavigationHistoryEntry was 
not an ActiveDOMObject
and therefore nothing was keeping its JS wrapper alive alive as long as a 
`dispose` event could get
dispatched. This would lead to flaky crashes in the tests, when dispatching the 
event.

To address the issue, make NavigationHistoryEntry an ActiveDOMObject and 
provide an implementation
for virtualHasPendingActivity() so that its JS wrapper is kept alive as long as 
we haven't dispatched
the `dispose` event on it.

Also add a couple of missing JSLocks to address debug assertions I was seeing 
on the tests locally.

* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigate-event/intercept-handler-throws-expected.txt:
Rebaseline the test. While the output looks a bit worse, I do not believe this 
is a regression from my
change but rather a timing change on a flaky test.

* Source/WebCore/page/NavigateEvent.cpp:
(WebCore::NavigateEvent::NavigateEvent):
* Source/WebCore/page/Navigation.cpp:
(WebCore::Navigation::initializeForNewWindow):
(WebCore::Navigation::updateForActivation):
(WebCore::Navigation::createForPageswapEvent):
(WebCore::createDOMPromise):
(WebCore::Navigation::updateForNavigation):
(WebCore::Navigation::updateForReactivation):
* Source/WebCore/page/Navigation.h:
* Source/WebCore/page/NavigationHistoryEntry.cpp:
(WebCore::NavigationHistoryEntry::NavigationHistoryEntry):
(WebCore::NavigationHistoryEntry::create):
(WebCore::NavigationHistoryEntry::eventListenersDidChange):
(WebCore::NavigationHistoryEntry::virtualHasPendingActivity const):
(WebCore::NavigationHistoryEntry::dispatchDisposeEvent):
* Source/WebCore/page/NavigationHistoryEntry.h:
* Source/WebCore/page/NavigationHistoryEntry.idl:

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to