Index: Source/modules/navigatorconnect/ServicePortCollection.h |
diff --git a/Source/modules/navigatorconnect/ServicePortCollection.h b/Source/modules/navigatorconnect/ServicePortCollection.h |
index c8f1b7c83f5df0ae2311b3a87333368fdbe4ec22..a49a417260065f65a21ce4a0304f0c69418f0e6c 100644 |
--- a/Source/modules/navigatorconnect/ServicePortCollection.h |
+++ b/Source/modules/navigatorconnect/ServicePortCollection.h |
@@ -9,27 +9,39 @@ |
#include "core/dom/ContextLifecycleObserver.h" |
#include "core/events/EventTarget.h" |
#include "modules/ModulesExport.h" |
+#include "public/platform/modules/navigator_services/WebServicePortProvider.h" |
+#include "public/platform/modules/navigator_services/WebServicePortProviderClient.h" |
#include "wtf/RefCounted.h" |
namespace blink { |
+class ServicePort; |
class ServicePortConnectOptions; |
class ServicePortMatchOptions; |
class MODULES_EXPORT ServicePortCollection final |
- : public EventTargetWithInlineData |
- , public RefCountedWillBeNoBase<ServicePortCollection> |
- , public ContextLifecycleObserver { |
+ : public RefCountedGarbageCollectedEventTargetWithInlineData<ServicePortCollection> |
+ , public ContextLifecycleObserver |
+ , public WebServicePortProviderClient { |
DEFINE_WRAPPERTYPEINFO(); |
- REFCOUNTED_EVENT_TARGET(ServicePortCollection); |
- WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(ServicePortCollection); |
+ REFCOUNTED_GARBAGE_COLLECTED_EVENT_TARGET(ServicePortCollection); |
WTF_MAKE_NONCOPYABLE(ServicePortCollection); |
public: |
- static PassRefPtrWillBeRawPtr<ServicePortCollection> create(ExecutionContext*); |
+ static ServicePortCollection* create(ExecutionContext*); |
~ServicePortCollection() override; |
+ // Adds a port to this collection to keep track of it and allow delivering |
+ // events related to it. |
+ void addPort(ServicePort*); |
+ |
+ // Called when a port is closed to signal the WebServicePortProvider as well |
+ // as remove the port from this collection. |
+ void closePort(ServicePort*); |
+ |
+ WebServicePortProvider* provider() { return m_provider.get(); } |
+ |
// ServicePortCollection.idl |
- ScriptPromise connect(ScriptState*, const String& url, const ServicePortConnectOptions&); |
+ ScriptPromise connect(ScriptState*, const String& url, const ServicePortConnectOptions&, ExceptionState&); |
ScriptPromise match(ScriptState*, const ServicePortMatchOptions&); |
ScriptPromise matchAll(ScriptState*, const ServicePortMatchOptions&); |
DEFINE_ATTRIBUTE_EVENT_LISTENER(connect); |
@@ -40,10 +52,16 @@ public: |
const AtomicString& interfaceName() const override; |
ExecutionContext* executionContext() const override; |
+ // WebServicePortProviderClient overrides. |
+ void postMessage(WebServicePortID, const WebString&, const WebMessagePortChannelArray&) override; |
+ |
DECLARE_VIRTUAL_TRACE(); |
private: |
explicit ServicePortCollection(ExecutionContext*); |
+ |
+ OwnPtr<WebServicePortProvider> m_provider; |
+ HeapVector<Member<ServicePort>> m_ports; |
}; |
} // namespace blink |