Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(800)

Unified Diff: third_party/WebKit/Source/modules/serviceworkers/ExtendableMessageEvent.cpp

Issue 1658073002: ServiceWorker: Implement attributes of ExtendableMessageEvent (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: templatize duplicate code Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/serviceworkers/ExtendableMessageEvent.cpp
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ExtendableMessageEvent.cpp b/third_party/WebKit/Source/modules/serviceworkers/ExtendableMessageEvent.cpp
index af432454b2338853b614dddda8163e90533ee65f..1e6750b122fcf179b8d859fcb1a2bb74d3ab4f7a 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ExtendableMessageEvent.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ExtendableMessageEvent.cpp
@@ -21,6 +21,43 @@ PassRefPtrWillBeRawPtr<ExtendableMessageEvent> ExtendableMessageEvent::create(co
return adoptRefWillBeNoop(new ExtendableMessageEvent(type, initializer, observer));
}
+PassRefPtrWillBeRawPtr<ExtendableMessageEvent> ExtendableMessageEvent::create(PassRefPtr<SerializedScriptValue> data, const String& origin, PassOwnPtrWillBeRawPtr<MessagePortArray> ports, WaitUntilObserver* observer)
+{
+ return adoptRefWillBeNoop(new ExtendableMessageEvent(data, origin, ports, observer));
+}
+
+MessagePortArray ExtendableMessageEvent::ports(bool& isNull) const
+{
+ // TODO(bashi): Currently we return a copied array because the binding
+ // layer could modify the content of the array while executing JS callbacks.
+ // Avoid copying once we can make sure that the binding layer won't
+ // modify the content.
+ 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);
+ else
+ result = ClientOrServiceWorkerOrMessagePort();
+}
+
const AtomicString& ExtendableMessageEvent::interfaceName() const
{
return EventNames::ExtendableMessageEvent;
@@ -28,6 +65,10 @@ const AtomicString& ExtendableMessageEvent::interfaceName() const
DEFINE_TRACE(ExtendableMessageEvent)
{
+ visitor->trace(m_sourceAsClient);
+ visitor->trace(m_sourceAsServiceWorker);
+ visitor->trace(m_sourceAsMessagePort);
+ visitor->trace(m_ports);
ExtendableEvent::trace(visitor);
}
@@ -43,7 +84,29 @@ ExtendableMessageEvent::ExtendableMessageEvent(const AtomicString& type, const E
ExtendableMessageEvent::ExtendableMessageEvent(const AtomicString& type, const ExtendableMessageEventInit& initializer, WaitUntilObserver* observer)
: ExtendableEvent(type, initializer, observer)
{
- // TODO(nhiroki): Set attributes (crbug.com/543198).
+ if (initializer.hasOrigin())
+ m_origin = initializer.origin();
+ 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 = adoptRefWillBeNoop(new MessagePortArray(initializer.ports()));
+}
+
+ExtendableMessageEvent::ExtendableMessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, PassOwnPtrWillBeRawPtr<MessagePortArray> ports, WaitUntilObserver* observer)
+ : ExtendableEvent(EventTypeNames::message, ExtendableMessageEventInit(), observer)
+ , m_serializedData(data)
+ , m_origin(origin)
+ , m_lastEventId(String())
+ , m_ports(ports)
+{
+ if (m_serializedData)
+ m_serializedData->registerMemoryAllocatedWithCurrentScriptContext();
}
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698