From b26ee628197cfcdf1a3fddc5f73e82990dc028ab Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 14 Jun 2026 09:38:29 +0200 Subject: [PATCH] WebContent: Wait for WebDriver history traversal completion Keep WebDriver Back and Forward waiting after accepted history traversals, even when the traversal does not change the top-level entry. UI-owned session history can still complete same-document traversals asynchronously, so returning immediately let later commands race with a pending traversal and observe stale history state. The WebDriver session history test covers this path. Give that test a larger CTest timeout so sanitizer CI has enough room for the full script. --- Services/WebContent/WebDriverConnection.cpp | 4 ++-- Tests/LibWebView/CMakeLists.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Services/WebContent/WebDriverConnection.cpp b/Services/WebContent/WebDriverConnection.cpp index 5782f0f21c..802c2f9f6c 100644 --- a/Services/WebContent/WebDriverConnection.cpp +++ b/Services/WebContent/WebDriverConnection.cpp @@ -463,7 +463,7 @@ Messages::WebDriverClient::BackResponse WebDriverConnection::back() } metadata->will_replace_web_content_process = traversal_result.will_replace_web_content_process; - metadata->wait_for_navigation_completion = traversal_result.will_change_top_level_entry; + metadata->wait_for_navigation_completion = true; if (metadata->will_replace_web_content_process) async_did_start_window_replacement(current_top_level_browsing_context()->page().top_level_traversable()->window_handle()); if (metadata->sync_response_returned) @@ -495,7 +495,7 @@ Messages::WebDriverClient::ForwardResponse WebDriverConnection::forward() } metadata->will_replace_web_content_process = traversal_result.will_replace_web_content_process; - metadata->wait_for_navigation_completion = traversal_result.will_change_top_level_entry; + metadata->wait_for_navigation_completion = true; if (metadata->will_replace_web_content_process) async_did_start_window_replacement(current_top_level_browsing_context()->page().top_level_traversable()->window_handle()); if (metadata->sync_response_returned) diff --git a/Tests/LibWebView/CMakeLists.txt b/Tests/LibWebView/CMakeLists.txt index 2671708cbe..02f9797510 100644 --- a/Tests/LibWebView/CMakeLists.txt +++ b/Tests/LibWebView/CMakeLists.txt @@ -14,5 +14,5 @@ if (BUILD_TESTING AND NOT WIN32) NAME TestWebDriverSessionHistory COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test-webdriver-session-history.py $ ) - set_tests_properties(TestWebDriverSessionHistory PROPERTIES TIMEOUT 60) + set_tests_properties(TestWebDriverSessionHistory PROPERTIES TIMEOUT 120) endif()