From 00b4581c9b80bf1659cbc21170e82d0ca6841b4e Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Wed, 12 Mar 2025 13:40:35 -0400 Subject: [PATCH] tests: Destroy |scheme_factory_| on IO thread This avoids a thread race between ShutdownSchemeHandler and GetResourceHandler when running `CookieTest.AccessResource*` tests. --- tests/ceftests/cookie_unittest.cc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/tests/ceftests/cookie_unittest.cc b/tests/ceftests/cookie_unittest.cc index 99bffcd7b..6ff941803 100644 --- a/tests/ceftests/cookie_unittest.cc +++ b/tests/ceftests/cookie_unittest.cc @@ -1248,11 +1248,7 @@ class CookieAccessSchemeHandlerFactory : public CefSchemeHandlerFactory, } void Shutdown(base::OnceClosure complete_callback) { - if (!CefCurrentlyOn(TID_IO)) { - CefPostTask(TID_IO, base::BindOnce(std::move(complete_callback))); - return; - } - + EXPECT_IO_THREAD(); std::move(complete_callback).Run(); } @@ -1587,6 +1583,7 @@ class CookieAccessTestHandler : public RoutingTestHandler, CefRefPtr browser, CefRefPtr frame, CefRefPtr request) override { + EXPECT_IO_THREAD(); if (test_backend_ == RESOURCE_HANDLER && scheme_factory_) { return scheme_factory_->Create(browser, frame, scheme_, request); } @@ -1810,6 +1807,13 @@ class CookieAccessTestHandler : public RoutingTestHandler, } void ShutdownSchemeHandler(base::OnceClosure complete_callback) { + if (!CefCurrentlyOn(TID_IO)) { + CefPostTask(TID_IO, base::BindOnce( + &CookieAccessTestHandler::ShutdownSchemeHandler, + this, std::move(complete_callback))); + return; + } + EXPECT_TRUE(scheme_factory_); if (test_backend_ == SCHEME_HANDLER) {