From fae54da171d3fdee238c33418c4779bccc9d5ecb Mon Sep 17 00:00:00 2001
From: Claudio Saavedra <csaavedra@igalia.com>
Date: Fri, 27 Mar 2026 22:09:02 +0200
Subject: [PATCH] [GTK3] Fix the dom bindings build
 https://bugs.webkit.org/show_bug.cgi?id=310915

Reviewed by NOBODY (OOPS!).

305877.279@webkitglib/2.52 changed the signature of
UserMessageHandler::postMessage. Fix that so that
webkit_dom_dom_window_webkit_message_handlers_post_message() continues
to work as usual.

* Source/WebCore/page/UserMessageHandler.cpp:
(WebCore::UserMessageHandler::postMessage):
* Source/WebCore/page/UserMessageHandler.h:
---
 Source/WebCore/page/UserMessageHandler.cpp | 16 +++++++++++-----
 Source/WebCore/page/UserMessageHandler.h   |  2 +-
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/Source/WebCore/page/UserMessageHandler.cpp b/Source/WebCore/page/UserMessageHandler.cpp
index a82c2d47b263..1fa69a2e145f 100644
--- a/Source/WebCore/page/UserMessageHandler.cpp
+++ b/Source/WebCore/page/UserMessageHandler.cpp
@@ -63,16 +63,20 @@ static bool passesSameOriginCheck(JSC::JSGlobalObject& globalObject, RefPtr<Loca
     return securityOrigin->isSameOriginAs(frameSecurityOrigin);
 }
 
-void UserMessageHandler::postMessage(JSC::JSGlobalObject& globalObject, JSC::JSValue value, Ref<DeferredPromise>&& promise)
+ExceptionOr<void> UserMessageHandler::postMessage(JSC::JSGlobalObject& globalObject, JSC::JSValue value, Ref<DeferredPromise>&& promise)
 {
     // Check to see if the descriptor has been removed. This can happen if the host application has
     // removed the named message handler at the WebKit2 API level.
     RefPtr descriptor = m_descriptor;
-    if (!descriptor)
-        return promise->reject(Exception { ExceptionCode::InvalidAccessError });
+    if (!descriptor) {
+        promise->reject(Exception { ExceptionCode::InvalidAccessError });
+        return Exception { ExceptionCode::InvalidAccessError };
+    }
 
-    if (!passesSameOriginCheck(globalObject, m_frame.get()))
-        return promise->reject(Exception { ExceptionCode::InvalidAccessError, "Failed same-origin check."_s });
+    if (!passesSameOriginCheck(globalObject, m_frame.get())) {
+        promise->reject(Exception { ExceptionCode::InvalidAccessError, "Failed same-origin check."_s });
+        return Exception { ExceptionCode::InvalidAccessError };
+    }
 
     descriptor->didPostMessage(*this, globalObject, value, [promise = WTF::move(promise)](JSC::JSValue result, const String& errorMessage) {
         if (errorMessage.isNull())
@@ -84,6 +88,8 @@ void UserMessageHandler::postMessage(JSC::JSGlobalObject& globalObject, JSC::JSV
         JSC::JSLockHolder lock(globalObject);
         promise->reject<IDLAny>(JSC::createError(globalObject, errorMessage));
     });
+
+    return { };
 }
 
 ExceptionOr<JSC::JSValue> UserMessageHandler::postLegacySynchronousMessage(JSC::JSGlobalObject& globalObject, JSC::JSValue value)
diff --git a/Source/WebCore/page/UserMessageHandler.h b/Source/WebCore/page/UserMessageHandler.h
index ae49b223c2d6..4f59318abb25 100644
--- a/Source/WebCore/page/UserMessageHandler.h
+++ b/Source/WebCore/page/UserMessageHandler.h
@@ -52,7 +52,7 @@ class UserMessageHandler : public RefCounted<UserMessageHandler>, public FrameDe
     void ref() const final { RefCounted::ref(); }
     void deref() const final { RefCounted::deref(); }
 
-    void postMessage(JSC::JSGlobalObject&, JSC::JSValue, Ref<DeferredPromise>&&);
+    ExceptionOr<void> postMessage(JSC::JSGlobalObject&, JSC::JSValue, Ref<DeferredPromise>&&);
     ExceptionOr<JSC::JSValue> postLegacySynchronousMessage(JSC::JSGlobalObject&, JSC::JSValue);
 
     const UserMessageHandlerDescriptor* descriptor() const { return m_descriptor.get(); }
