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 = 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.
| |
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 } | |
58 | |
24 const AtomicString& ExtendableMessageEvent::interfaceName() const | 59 const AtomicString& ExtendableMessageEvent::interfaceName() const |
25 { | 60 { |
26 return EventNames::ExtendableMessageEvent; | 61 return EventNames::ExtendableMessageEvent; |
27 } | 62 } |
28 | 63 |
29 DEFINE_TRACE(ExtendableMessageEvent) | 64 DEFINE_TRACE(ExtendableMessageEvent) |
30 { | 65 { |
66 visitor->trace(m_sourceAsClient); | |
67 visitor->trace(m_sourceAsServiceWorker); | |
68 visitor->trace(m_sourceAsMessagePort); | |
69 visitor->trace(m_ports); | |
31 ExtendableEvent::trace(visitor); | 70 ExtendableEvent::trace(visitor); |
32 } | 71 } |
33 | 72 |
34 ExtendableMessageEvent::ExtendableMessageEvent() | 73 ExtendableMessageEvent::ExtendableMessageEvent() |
35 { | 74 { |
36 } | 75 } |
37 | 76 |
38 ExtendableMessageEvent::ExtendableMessageEvent(const AtomicString& type, const E xtendableMessageEventInit& initializer) | 77 ExtendableMessageEvent::ExtendableMessageEvent(const AtomicString& type, const E xtendableMessageEventInit& initializer) |
39 : ExtendableMessageEvent(type, initializer, nullptr) | 78 : ExtendableMessageEvent(type, initializer, nullptr) |
40 { | 79 { |
41 } | 80 } |
42 | 81 |
43 ExtendableMessageEvent::ExtendableMessageEvent(const AtomicString& type, const E xtendableMessageEventInit& initializer, WaitUntilObserver* observer) | 82 ExtendableMessageEvent::ExtendableMessageEvent(const AtomicString& type, const E xtendableMessageEventInit& initializer, WaitUntilObserver* observer) |
44 : ExtendableEvent(type, initializer, observer) | 83 : ExtendableEvent(type, initializer, observer) |
45 { | 84 { |
46 // TODO(nhiroki): Set attributes (crbug.com/543198). | 85 if (initializer.hasData()) |
86 m_data = initializer.data(); | |
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 |