OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "modules/serviceworkers/ExtendableMessageEvent.h" | 5 #include "modules/serviceworkers/ExtendableMessageEvent.h" |
6 | 6 |
7 namespace blink { | 7 namespace blink { |
8 | 8 |
9 PassRefPtrWillBeRawPtr<ExtendableMessageEvent> ExtendableMessageEvent::create() | 9 PassRefPtrWillBeRawPtr<ExtendableMessageEvent> ExtendableMessageEvent::create() |
10 { | 10 { |
11 return adoptRefWillBeNoop(new ExtendableMessageEvent); | 11 return adoptRefWillBeNoop(new ExtendableMessageEvent); |
12 } | 12 } |
13 | 13 |
14 PassRefPtrWillBeRawPtr<ExtendableMessageEvent> ExtendableMessageEvent::create(co
nst AtomicString& type, const ExtendableMessageEventInit& initializer) | 14 PassRefPtrWillBeRawPtr<ExtendableMessageEvent> ExtendableMessageEvent::create(co
nst AtomicString& type, const ExtendableMessageEventInit& initializer) |
15 { | 15 { |
16 return adoptRefWillBeNoop(new ExtendableMessageEvent(type, initializer)); | 16 return adoptRefWillBeNoop(new ExtendableMessageEvent(type, initializer)); |
17 } | 17 } |
18 | 18 |
19 PassRefPtrWillBeRawPtr<ExtendableMessageEvent> ExtendableMessageEvent::create(co
nst AtomicString& type, const ExtendableMessageEventInit& initializer, WaitUntil
Observer* observer) | 19 PassRefPtrWillBeRawPtr<ExtendableMessageEvent> ExtendableMessageEvent::create(co
nst AtomicString& type, const ExtendableMessageEventInit& initializer, WaitUntil
Observer* observer) |
20 { | 20 { |
21 return adoptRefWillBeNoop(new ExtendableMessageEvent(type, initializer, obse
rver)); | 21 return adoptRefWillBeNoop(new ExtendableMessageEvent(type, initializer, obse
rver)); |
22 } | 22 } |
23 | 23 |
| 24 PassRefPtrWillBeRawPtr<ExtendableMessageEvent> ExtendableMessageEvent::create(Pa
ssRefPtr<SerializedScriptValue> data, const String& origin, PassOwnPtrWillBeRawP
tr<MessagePortArray> ports, WaitUntilObserver* observer) |
| 25 { |
| 26 return adoptRefWillBeNoop(new ExtendableMessageEvent(data, origin, ports, ob
server)); |
| 27 } |
| 28 |
| 29 MessagePortArray ExtendableMessageEvent::ports(bool& isNull) const |
| 30 { |
| 31 // TODO(bashi): Currently we return a copied array because the binding |
| 32 // layer could modify the content of the array while executing JS callbacks. |
| 33 // Avoid copying once we can make sure that the binding layer won't |
| 34 // modify the content. |
| 35 if (m_ports) { |
| 36 isNull = false; |
| 37 return *m_ports; |
| 38 } |
| 39 isNull = true; |
| 40 return MessagePortArray(); |
| 41 } |
| 42 |
| 43 MessagePortArray ExtendableMessageEvent::ports() const |
| 44 { |
| 45 bool unused; |
| 46 return ports(unused); |
| 47 } |
| 48 |
| 49 void ExtendableMessageEvent::source(ClientOrServiceWorkerOrMessagePort& result)
const |
| 50 { |
| 51 if (m_sourceAsClient) |
| 52 result = ClientOrServiceWorkerOrMessagePort::fromClient(m_sourceAsClient
); |
| 53 else if (m_sourceAsServiceWorker) |
| 54 result = ClientOrServiceWorkerOrMessagePort::fromServiceWorker(m_sourceA
sServiceWorker); |
| 55 else if (m_sourceAsMessagePort) |
| 56 result = ClientOrServiceWorkerOrMessagePort::fromMessagePort(m_sourceAsM
essagePort); |
| 57 else |
| 58 result = ClientOrServiceWorkerOrMessagePort(); |
| 59 } |
| 60 |
24 const AtomicString& ExtendableMessageEvent::interfaceName() const | 61 const AtomicString& ExtendableMessageEvent::interfaceName() const |
25 { | 62 { |
26 return EventNames::ExtendableMessageEvent; | 63 return EventNames::ExtendableMessageEvent; |
27 } | 64 } |
28 | 65 |
29 DEFINE_TRACE(ExtendableMessageEvent) | 66 DEFINE_TRACE(ExtendableMessageEvent) |
30 { | 67 { |
| 68 visitor->trace(m_sourceAsClient); |
| 69 visitor->trace(m_sourceAsServiceWorker); |
| 70 visitor->trace(m_sourceAsMessagePort); |
| 71 visitor->trace(m_ports); |
31 ExtendableEvent::trace(visitor); | 72 ExtendableEvent::trace(visitor); |
32 } | 73 } |
33 | 74 |
34 ExtendableMessageEvent::ExtendableMessageEvent() | 75 ExtendableMessageEvent::ExtendableMessageEvent() |
35 { | 76 { |
36 } | 77 } |
37 | 78 |
38 ExtendableMessageEvent::ExtendableMessageEvent(const AtomicString& type, const E
xtendableMessageEventInit& initializer) | 79 ExtendableMessageEvent::ExtendableMessageEvent(const AtomicString& type, const E
xtendableMessageEventInit& initializer) |
39 : ExtendableMessageEvent(type, initializer, nullptr) | 80 : ExtendableMessageEvent(type, initializer, nullptr) |
40 { | 81 { |
41 } | 82 } |
42 | 83 |
43 ExtendableMessageEvent::ExtendableMessageEvent(const AtomicString& type, const E
xtendableMessageEventInit& initializer, WaitUntilObserver* observer) | 84 ExtendableMessageEvent::ExtendableMessageEvent(const AtomicString& type, const E
xtendableMessageEventInit& initializer, WaitUntilObserver* observer) |
44 : ExtendableEvent(type, initializer, observer) | 85 : ExtendableEvent(type, initializer, observer) |
45 { | 86 { |
46 // TODO(nhiroki): Set attributes (crbug.com/543198). | 87 if (initializer.hasOrigin()) |
| 88 m_origin = initializer.origin(); |
| 89 if (initializer.hasSource()) { |
| 90 if (initializer.source().isClient()) |
| 91 m_sourceAsClient = initializer.source().getAsClient(); |
| 92 else if (initializer.source().isServiceWorker()) |
| 93 m_sourceAsServiceWorker = initializer.source().getAsServiceWorker(); |
| 94 else if (initializer.source().isMessagePort()) |
| 95 m_sourceAsMessagePort = initializer.source().getAsMessagePort(); |
| 96 } |
| 97 if (initializer.hasPorts()) |
| 98 m_ports = adoptRefWillBeNoop(new MessagePortArray(initializer.ports())); |
| 99 } |
| 100 |
| 101 ExtendableMessageEvent::ExtendableMessageEvent(PassRefPtr<SerializedScriptValue>
data, const String& origin, PassOwnPtrWillBeRawPtr<MessagePortArray> ports, Wai
tUntilObserver* observer) |
| 102 : ExtendableEvent(EventTypeNames::message, ExtendableMessageEventInit(), obs
erver) |
| 103 , m_serializedData(data) |
| 104 , m_origin(origin) |
| 105 , m_lastEventId(String()) |
| 106 , m_ports(ports) |
| 107 { |
| 108 if (m_serializedData) |
| 109 m_serializedData->registerMemoryAllocatedWithCurrentScriptContext(); |
47 } | 110 } |
48 | 111 |
49 } // namespace blink | 112 } // namespace blink |
OLD | NEW |