From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jeremy Apthorp Date: Wed, 4 Mar 2020 11:18:03 -0800 Subject: feat: add onclose to MessagePort This adds the 'onclose' event to MessagePort. This is [proposed](https://github.com/w3ctag/design-reviews/issues/269#issuecomment-407584290) in w3c and has been discussed for years without conclusion. I'd like to get this standardised, but in lieu of that, this makes MessagePort a whole bunch more useful! diff --git a/third_party/blink/renderer/core/messaging/message_port.cc b/third_party/blink/renderer/core/messaging/message_port.cc index a284d187968914b4304eb49362b2a8ccafa5e5c2..d6f8bf39c47cfc622dec5736d82ccc308d406cfa 100644 --- a/third_party/blink/renderer/core/messaging/message_port.cc +++ b/third_party/blink/renderer/core/messaging/message_port.cc @@ -162,6 +162,7 @@ void MessagePort::close() { Entangle(pipe.TakePort0()); } closed_ = true; + DispatchEvent(*Event::Create(event_type_names::kClose)); } void MessagePort::Entangle(MessagePortDescriptor port) { diff --git a/third_party/blink/renderer/core/messaging/message_port.h b/third_party/blink/renderer/core/messaging/message_port.h index c5e0fefac929d4a484488761741d42f2b002f7a1..83d7901d99ad01ba039ea1ffa3dbee2595fc31ff 100644 --- a/third_party/blink/renderer/core/messaging/message_port.h +++ b/third_party/blink/renderer/core/messaging/message_port.h @@ -120,6 +120,13 @@ class CORE_EXPORT MessagePort : public EventTargetWithInlineData, return GetAttributeEventListener(event_type_names::kMessageerror); } + void setOnclose(EventListener* listener) { + SetAttributeEventListener(event_type_names::kClose, listener); + } + EventListener* onclose() { + return GetAttributeEventListener(event_type_names::kClose); + } + // A port starts out its life entangled, and remains entangled until it is // closed or is cloned. bool IsEntangled() const { return !closed_ && !IsNeutered(); } diff --git a/third_party/blink/renderer/core/messaging/message_port.idl b/third_party/blink/renderer/core/messaging/message_port.idl index 6fab27fcdf1c333739b6ffe88b3cc4eed3301ee4..3f1f181d9b8a66997136f870f55c97c08294b6eb 100644 --- a/third_party/blink/renderer/core/messaging/message_port.idl +++ b/third_party/blink/renderer/core/messaging/message_port.idl @@ -40,4 +40,5 @@ // event handlers attribute EventHandler onmessage; attribute EventHandler onmessageerror; + attribute EventHandler onclose; };