tests: Destroy |scheme_factory_| on IO thread

This avoids a thread race between ShutdownSchemeHandler and
GetResourceHandler when running `CookieTest.AccessResource*` tests.
This commit is contained in:
Marshall Greenblatt
2025-03-12 13:40:35 -04:00
parent ff5210f825
commit 00b4581c9b

View File

@ -1248,11 +1248,7 @@ class CookieAccessSchemeHandlerFactory : public CefSchemeHandlerFactory,
} }
void Shutdown(base::OnceClosure complete_callback) { void Shutdown(base::OnceClosure complete_callback) {
if (!CefCurrentlyOn(TID_IO)) { EXPECT_IO_THREAD();
CefPostTask(TID_IO, base::BindOnce(std::move(complete_callback)));
return;
}
std::move(complete_callback).Run(); std::move(complete_callback).Run();
} }
@ -1587,6 +1583,7 @@ class CookieAccessTestHandler : public RoutingTestHandler,
CefRefPtr<CefBrowser> browser, CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame, CefRefPtr<CefFrame> frame,
CefRefPtr<CefRequest> request) override { CefRefPtr<CefRequest> request) override {
EXPECT_IO_THREAD();
if (test_backend_ == RESOURCE_HANDLER && scheme_factory_) { if (test_backend_ == RESOURCE_HANDLER && scheme_factory_) {
return scheme_factory_->Create(browser, frame, scheme_, request); return scheme_factory_->Create(browser, frame, scheme_, request);
} }
@ -1810,6 +1807,13 @@ class CookieAccessTestHandler : public RoutingTestHandler,
} }
void ShutdownSchemeHandler(base::OnceClosure complete_callback) { 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_); EXPECT_TRUE(scheme_factory_);
if (test_backend_ == SCHEME_HANDLER) { if (test_backend_ == SCHEME_HANDLER) {