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

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: rebase Created 4 years, 11 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..473416bcc47b9907f826c4981805d09d6ba62fc2 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ExtendableMessageEvent.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ExtendableMessageEvent.cpp
@@ -21,6 +21,37 @@ 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
+{
+ if (m_ports) {
+ isNull = false;
+ return *m_ports;
+ }
+ isNull = false;
+ return MessagePortArray();
+}
+
+MessagePortArray ExtendableMessageEvent::ports() const
+{
+ bool unused;
+ return ports(unused);
+}
falken 2016/02/05 02:28:52 Ah, I see the ports() code came from MessageEvent.
nhiroki 2016/02/05 09:15:37 Done (Just copied the comment from MessageEvent.cp
falken 2016/02/05 09:58:18 OK with me. I also noticed the snippet is in Servi
nhiroki 2016/02/09 10:20:03 Done.
+
+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);
falken 2016/02/05 02:28:52 else NOTREACHED?
nhiroki 2016/02/05 09:15:37 I think the case actually happens when the event i
falken 2016/02/05 09:58:18 Hm, I'm not sure how the bindings works but I'm wo
nhiroki 2016/02/09 10:20:03 According to the spec, null is the expected value:
+}
+
const AtomicString& ExtendableMessageEvent::interfaceName() const
{
return EventNames::ExtendableMessageEvent;
@@ -28,6 +59,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 +78,31 @@ 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.hasData())
+ m_data = initializer.data();
+ 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