Index: Source/modules/navigatorconnect/ServicePortCollection.h |
diff --git a/Source/modules/navigatorconnect/ServicePortCollection.h b/Source/modules/navigatorconnect/ServicePortCollection.h |
index c1eb26ae205c6100a297094c97920d6b0834c2ff..e357e9ca991956c6ee492e762acb0ee817fcc11e 100644 |
--- a/Source/modules/navigatorconnect/ServicePortCollection.h |
+++ b/Source/modules/navigatorconnect/ServicePortCollection.h |
@@ -9,17 +9,22 @@ |
#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" |
+#include "wtf/WeakPtr.h" |
namespace blink { |
+class ServicePort; |
class ServicePortConnectOptions; |
class ServicePortMatchOptions; |
class MODULES_EXPORT ServicePortCollection final |
: public EventTargetWithInlineData |
, public RefCountedWillBeNoBase<ServicePortCollection> |
- , public ContextLifecycleObserver { |
+ , public ContextLifecycleObserver |
+ , public WebServicePortProviderClient { |
DEFINE_WRAPPERTYPEINFO(); |
REFCOUNTED_EVENT_TARGET(ServicePortCollection); |
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(ServicePortCollection); |
@@ -28,8 +33,22 @@ public: |
static PassRefPtrWillBeRawPtr<ServicePortCollection> create(ExecutionContext*); |
virtual ~ServicePortCollection(); |
+ // 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(); } |
+ |
+#if !ENABLE(OILPAN) |
+ WeakPtr<ServicePortCollection> weakPtr() { return m_weakFactory.createWeakPtr(); } |
+#endif |
+ |
// 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 +59,19 @@ 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; |
+ PersistentHeapVectorWillBeHeapVector<Member<ServicePort>> m_ports; |
+#if !ENABLE(OILPAN) |
+ WeakPtrFactory<ServicePortCollection> m_weakFactory; |
+#endif |
}; |
} // namespace blink |