Index: Source/modules/serviceworkers/ExtendableMessageEvent.cpp |
diff --git a/Source/modules/serviceworkers/ExtendableMessageEvent.cpp b/Source/modules/serviceworkers/ExtendableMessageEvent.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9830676c13b7a6dd8d9aa8528f9afb3768dbece2 |
--- /dev/null |
+++ b/Source/modules/serviceworkers/ExtendableMessageEvent.cpp |
@@ -0,0 +1,109 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "config.h" |
+#include "modules/serviceworkers/ExtendableMessageEvent.h" |
+ |
+#include "modules/serviceworkers/WaitUntilObserver.h" |
+ |
+namespace blink { |
+ |
+ExtendableMessageEvent::ExtendableMessageEvent() |
+{ |
+} |
+ |
+ExtendableMessageEvent::ExtendableMessageEvent(const AtomicString& type, const ExtendableMessageEventInit& initializer) |
+ : ExtendableEvent(type, initializer) |
+{ |
+ if (initializer.hasData()) |
+ m_data = initializer.data(); |
+ if (initializer.hasOrigin()) |
+ m_origin = initializer.origin(); |
+ if (initializer.hasLastEventId()) |
+ m_lastEventId = initializer.lastEventId(); |
+ if (initializer.hasSource()) { |
+ if (initializer.source().isClient()) |
+ m_sourceAsClient = initializer.source().getAsClient(); |
+ else if (initializer.source().isServiceWorker()) |
+ m_sourceAsServiceWorker = initializer.source().getAsServiceWorker(); |
+ else if (initializer.source().isMessagePort()) |
+ m_sourceAsMessagePort = initializer.source().getAsMessagePort(); |
+ } |
+ if (initializer.hasPorts()) |
+ m_ports = adoptPtrWillBeNoop(new MessagePortArray(initializer.ports())); |
+} |
+ |
+ExtendableMessageEvent::ExtendableMessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, ServiceWorkerClient* source, PassOwnPtrWillBeRawPtr<MessagePortArray> ports, WaitUntilObserver* observer) |
+ : m_serializedData(data) |
+ , m_origin(origin) |
+ , m_lastEventId(lastEventId) |
+ , m_sourceAsClient(source) |
+ , m_ports(ports) |
+{ |
+ m_observer = observer; |
+ setType(EventTypeNames::message); |
+ if (m_serializedData) |
+ m_serializedData->registerMemoryAllocatedWithCurrentScriptContext(); |
+} |
+ |
+ExtendableMessageEvent::ExtendableMessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, PassRefPtrWillBeRawPtr<ServiceWorker> source, PassOwnPtrWillBeRawPtr<MessagePortArray> ports, WaitUntilObserver* observer) |
+ : m_serializedData(data) |
+ , m_origin(origin) |
+ , m_lastEventId(lastEventId) |
+ , m_sourceAsServiceWorker(source) |
+ , m_ports(ports) |
+{ |
+ m_observer = observer; |
+ setType(EventTypeNames::message); |
+ if (m_serializedData) |
+ m_serializedData->registerMemoryAllocatedWithCurrentScriptContext(); |
+} |
+ |
+ExtendableMessageEvent::~ExtendableMessageEvent() |
+{ |
+} |
+ |
+MessagePortArray ExtendableMessageEvent::ports(bool& isNull) const |
+{ |
+ if (m_ports) { |
+ isNull = false; |
+ return *m_ports; |
+ } |
+ isNull = true; |
+ return MessagePortArray(); |
+} |
+ |
+MessagePortArray ExtendableMessageEvent::ports() const |
+{ |
+ bool unused; |
+ return ports(unused); |
+} |
+ |
+void ExtendableMessageEvent::source(ClientOrServiceWorkerOrMessagePort& result) const |
+{ |
+ if (m_sourceAsClient) |
+ result = ClientOrServiceWorkerOrMessagePort::fromClient(m_sourceAsClient); |
+ else if (m_sourceAsServiceWorker) |
+ result = ClientOrServiceWorkerOrMessagePort::fromServiceWorker(m_sourceAsServiceWorker); |
+ else if (m_sourceAsMessagePort) |
+ result = ClientOrServiceWorkerOrMessagePort::fromMessagePort(m_sourceAsMessagePort); |
+} |
+ |
+const AtomicString& ExtendableMessageEvent::interfaceName() const |
+{ |
+ return EventNames::ExtendableMessageEvent; |
+} |
+ |
+DEFINE_TRACE(ExtendableMessageEvent) |
+{ |
+ visitor->trace(m_sourceAsClient); |
+ visitor->trace(m_sourceAsServiceWorker); |
+ visitor->trace(m_sourceAsMessagePort); |
+#if ENABLE(OILPAN) |
+ visitor->trace(m_ports); |
+#endif |
+ Event::trace(visitor); |
+} |
+ |
+} // namespace blink |