Index: Source/modules/navigatorconnect/ServicePortCollection.h |
diff --git a/Source/modules/navigatorconnect/ServicePortCollection.h b/Source/modules/navigatorconnect/ServicePortCollection.h |
index c8f1b7c83f5df0ae2311b3a87333368fdbe4ec22..abf550d594f6a012cdf0df6b8d613672a03ca214 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 |
haraken
2015/06/24 23:59:59
Maybe it's better to move this class to Oilpan by
Marijn Kruisselbrink
2015/06/25 01:07:26
Yes, that would be much nicer. Done.
|
: 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*); |
~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(); } |
+ |
+#if !ENABLE(OILPAN) |
+ WeakPtr<ServicePortCollection> weakPtr() { return m_weakFactory.createWeakPtr(); } |
haraken
2015/06/24 23:59:59
Then you can remove this.
Marijn Kruisselbrink
2015/06/25 01:07:26
Done
|
+#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; |
haraken
2015/06/24 23:59:59
This can be HeapVector<Member<>>.
Marijn Kruisselbrink
2015/06/25 01:07:26
Done
|
+#if !ENABLE(OILPAN) |
+ WeakPtrFactory<ServicePortCollection> m_weakFactory; |
haraken
2015/06/24 23:59:59
And you can remove this.
Marijn Kruisselbrink
2015/06/25 01:07:26
Done
|
+#endif |
}; |
} // namespace blink |