feat_add_onclose_to_messageport.patch 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
  2. From: Jeremy Apthorp <[email protected]>
  3. Date: Wed, 4 Mar 2020 11:18:03 -0800
  4. Subject: feat: add onclose to MessagePort
  5. This adds the 'onclose' event to MessagePort. This is
  6. [proposed](https://github.com/w3ctag/design-reviews/issues/269#issuecomment-407584290)
  7. in w3c and has been discussed for years without conclusion. I'd like to
  8. get this standardised, but in lieu of that, this makes MessagePort a
  9. whole bunch more useful!
  10. diff --git a/third_party/blink/renderer/core/messaging/message_port.cc b/third_party/blink/renderer/core/messaging/message_port.cc
  11. index c5714d115210488cb531c1e54de540f429636638..6f67b21803fcdc2498ef207878d1541e04822fca 100644
  12. --- a/third_party/blink/renderer/core/messaging/message_port.cc
  13. +++ b/third_party/blink/renderer/core/messaging/message_port.cc
  14. @@ -161,6 +161,7 @@ void MessagePort::close() {
  15. Entangle(pipe.TakePort0());
  16. }
  17. closed_ = true;
  18. + DispatchEvent(*Event::Create(event_type_names::kClose));
  19. }
  20. void MessagePort::Entangle(MessagePortDescriptor port) {
  21. diff --git a/third_party/blink/renderer/core/messaging/message_port.h b/third_party/blink/renderer/core/messaging/message_port.h
  22. index 7a83dce5113dc77d3654997db09ff9bc4cfeb3e2..85987f99ee144060cee11719726eb823bf58c645 100644
  23. --- a/third_party/blink/renderer/core/messaging/message_port.h
  24. +++ b/third_party/blink/renderer/core/messaging/message_port.h
  25. @@ -120,6 +120,13 @@ class CORE_EXPORT MessagePort : public EventTargetWithInlineData,
  26. return GetAttributeEventListener(event_type_names::kMessageerror);
  27. }
  28. + void setOnclose(EventListener* listener) {
  29. + SetAttributeEventListener(event_type_names::kClose, listener);
  30. + }
  31. + EventListener* onclose() {
  32. + return GetAttributeEventListener(event_type_names::kClose);
  33. + }
  34. +
  35. // A port starts out its life entangled, and remains entangled until it is
  36. // closed or is cloned.
  37. bool IsEntangled() const { return !closed_ && !IsNeutered(); }
  38. diff --git a/third_party/blink/renderer/core/messaging/message_port.idl b/third_party/blink/renderer/core/messaging/message_port.idl
  39. index 6fab27fcdf1c333739b6ffe88b3cc4eed3301ee4..3f1f181d9b8a66997136f870f55c97c08294b6eb 100644
  40. --- a/third_party/blink/renderer/core/messaging/message_port.idl
  41. +++ b/third_party/blink/renderer/core/messaging/message_port.idl
  42. @@ -40,4 +40,5 @@
  43. // event handlers
  44. attribute EventHandler onmessage;
  45. attribute EventHandler onmessageerror;
  46. + attribute EventHandler onclose;
  47. };