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 ExtendableMessageEvent* ExtendableMessageEvent::create( | 9 ExtendableMessageEvent* ExtendableMessageEvent::create( |
10 const AtomicString& type, | 10 const AtomicString& type, |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 if (initializer.hasLastEventId()) | 110 if (initializer.hasLastEventId()) |
111 m_lastEventId = initializer.lastEventId(); | 111 m_lastEventId = initializer.lastEventId(); |
112 if (initializer.hasSource()) { | 112 if (initializer.hasSource()) { |
113 if (initializer.source().isClient()) | 113 if (initializer.source().isClient()) |
114 m_sourceAsClient = initializer.source().getAsClient(); | 114 m_sourceAsClient = initializer.source().getAsClient(); |
115 else if (initializer.source().isServiceWorker()) | 115 else if (initializer.source().isServiceWorker()) |
116 m_sourceAsServiceWorker = initializer.source().getAsServiceWorker(); | 116 m_sourceAsServiceWorker = initializer.source().getAsServiceWorker(); |
117 else if (initializer.source().isMessagePort()) | 117 else if (initializer.source().isMessagePort()) |
118 m_sourceAsMessagePort = initializer.source().getAsMessagePort(); | 118 m_sourceAsMessagePort = initializer.source().getAsMessagePort(); |
119 } | 119 } |
120 if (initializer.hasPorts()) | 120 if (initializer.hasPorts()) { |
121 m_ports = new MessagePortArray(initializer.ports()); | 121 // TODO(sof): remove the extra same-heap checks once crbug.com/655926 |
| 122 // has been resolved. |
| 123 const MessagePortArray& ports = initializer.ports(); |
| 124 m_ports = new MessagePortArray; |
| 125 m_ports->reserveInitialCapacity(ports.size()); |
| 126 for (const auto& port : ports) { |
| 127 CHECK(ThreadState::current()->isOnThreadHeap(port.get())); |
| 128 m_ports->append(port); |
| 129 } |
| 130 } |
122 } | 131 } |
123 | 132 |
124 ExtendableMessageEvent::ExtendableMessageEvent( | 133 ExtendableMessageEvent::ExtendableMessageEvent( |
125 PassRefPtr<SerializedScriptValue> data, | 134 PassRefPtr<SerializedScriptValue> data, |
126 const String& origin, | 135 const String& origin, |
127 MessagePortArray* ports, | 136 MessagePortArray* ports, |
128 WaitUntilObserver* observer) | 137 WaitUntilObserver* observer) |
129 : ExtendableEvent(EventTypeNames::message, | 138 : ExtendableEvent(EventTypeNames::message, |
130 ExtendableMessageEventInit(), | 139 ExtendableMessageEventInit(), |
131 observer), | 140 observer), |
132 m_serializedData(data), | 141 m_serializedData(data), |
133 m_origin(origin), | 142 m_origin(origin), |
134 m_lastEventId(String()), | 143 m_lastEventId(String()), |
135 m_ports(ports) { | 144 m_ports(ports) { |
136 if (m_serializedData) | 145 if (m_serializedData) |
137 m_serializedData->registerMemoryAllocatedWithCurrentScriptContext(); | 146 m_serializedData->registerMemoryAllocatedWithCurrentScriptContext(); |
| 147 |
| 148 // TODO(sof): remove the same-heap verification once crbug.com/655926 has |
| 149 // been resolved. |
| 150 if (m_ports) { |
| 151 for (const auto& port : *m_ports) { |
| 152 CHECK(ThreadState::current()->isOnThreadHeap(port.get())); |
| 153 } |
| 154 } |
138 } | 155 } |
139 | 156 |
140 } // namespace blink | 157 } // namespace blink |
OLD | NEW |