Chromium Code Reviews| 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..1965a5fe8525c32c59f30d1e0d6ca2f0b437d296 100644 |
| --- a/third_party/WebKit/Source/modules/serviceworkers/ExtendableMessageEvent.cpp |
| +++ b/third_party/WebKit/Source/modules/serviceworkers/ExtendableMessageEvent.cpp |
| @@ -21,6 +21,41 @@ 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 = false; |
|
falken
2016/02/05 09:58:18
oh, I think this should be isNull = true
nhiroki
2016/02/09 10:20:03
Good catch! Fixed.
|
| + 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; |
| @@ -28,6 +63,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 +82,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 |