mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 15:12:45 +00:00 
			
		
		
		
	 4f73851afc
			
		
	
	
		4f73851afc
		
	
	
	
	
		
			
			Let's stop putting generic types and AOs from the Web IDL spec into the Bindings namespace and directory in LibWeb, and instead follow our usual naming rules of 'directory = namespace = spec name'. The IDL namespace is already used by LibIDL, so Web::WebIDL seems like a good choice.
		
			
				
	
	
		
			64 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <AK/RefCounted.h>
 | |
| #include <AK/Weakable.h>
 | |
| #include <LibWeb/DOM/EventTarget.h>
 | |
| #include <LibWeb/Forward.h>
 | |
| 
 | |
| namespace Web::HTML {
 | |
| 
 | |
| #define ENUMERATE_MESSAGE_PORT_EVENT_HANDLERS(E) \
 | |
|     E(onmessage, HTML::EventNames::message)      \
 | |
|     E(onmessageerror, HTML::EventNames::messageerror)
 | |
| 
 | |
| // https://html.spec.whatwg.org/multipage/web-messaging.html#message-ports
 | |
| class MessagePort final : public DOM::EventTarget {
 | |
|     WEB_PLATFORM_OBJECT(MessagePort, DOM::EventTarget);
 | |
| 
 | |
| public:
 | |
|     static JS::NonnullGCPtr<MessagePort> create(HTML::Window&);
 | |
| 
 | |
|     virtual ~MessagePort() override;
 | |
| 
 | |
|     // https://html.spec.whatwg.org/multipage/web-messaging.html#entangle
 | |
|     void entangle_with(MessagePort&);
 | |
| 
 | |
|     // https://html.spec.whatwg.org/multipage/web-messaging.html#dom-messageport-postmessage
 | |
|     void post_message(JS::Value);
 | |
| 
 | |
|     void start();
 | |
| 
 | |
|     void close();
 | |
| 
 | |
| #undef __ENUMERATE
 | |
| #define __ENUMERATE(attribute_name, event_name)       \
 | |
|     void set_##attribute_name(WebIDL::CallbackType*); \
 | |
|     WebIDL::CallbackType* attribute_name();
 | |
|     ENUMERATE_MESSAGE_PORT_EVENT_HANDLERS(__ENUMERATE)
 | |
| #undef __ENUMERATE
 | |
| 
 | |
| private:
 | |
|     explicit MessagePort(HTML::Window&);
 | |
| 
 | |
|     virtual void visit_edges(Cell::Visitor&) override;
 | |
| 
 | |
|     bool is_entangled() const { return m_remote_port; }
 | |
|     void disentangle();
 | |
| 
 | |
|     // The HTML spec implies(!) that this is MessagePort.[[RemotePort]]
 | |
|     JS::GCPtr<MessagePort> m_remote_port;
 | |
| 
 | |
|     // https://html.spec.whatwg.org/multipage/web-messaging.html#has-been-shipped
 | |
|     bool m_has_been_shipped { false };
 | |
| 
 | |
|     // This is TransferableObject.[[Detached]]
 | |
|     bool m_detached { false };
 | |
| };
 | |
| 
 | |
| }
 |