• Robert Knight's avatar
    Add built-in "connect" and "close" events to PortRPC · 5ab98a3b
    Robert Knight authored
    Add two built-in events to PortRPC which are dispatched when PortRPC connects to
    a port and when it is destroyed or the containing frame is unloaded. These
    events can be used in the counterpart PortRPC to confirm that the sender has
    successfully received and connected to the port, and to get notified when the
    port goes away.
    
    Sending the "close" event in the context of a window unloading in Safari
    <= 15 requires a workaround that involves registering a handler in the
    parent frame. This handler is currently installed only in the host frame.
    
    The new "close" event is used to replace the "frameDestroyed" message
    that was used by guests to notify the sidebar when it went away. This solves
    several problems:
    
     - It centralizes the workaround for https://bugs.webkit.org/show_bug.cgi?id=231167
       in `post-rpc.js`, instead of having it spread between several
       modules.
    
     - It provides a way to tear down the guest-host connection when the
       guest goes away.
    
     - It provides a way to handle the case where a guest is unloaded before it
       has received and connected to the port, by having the host/sidebar frames
       expect the "connect" call within a timeout. This is not yet implemented.
    5ab98a3b
port-rpc-test.js 5.72 KB