| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. | 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 | 177 |
| 178 if (webChannels.size()) { | 178 if (webChannels.size()) { |
| 179 channels = adoptPtr(new MessagePortChannelArray(webChannels.size())); | 179 channels = adoptPtr(new MessagePortChannelArray(webChannels.size())); |
| 180 for (size_t i = 0; i < webChannels.size(); ++i) | 180 for (size_t i = 0; i < webChannels.size(); ++i) |
| 181 (*channels)[i] = adoptPtr(webChannels[i]); | 181 (*channels)[i] = adoptPtr(webChannels[i]); |
| 182 } | 182 } |
| 183 message = SerializedScriptValueFactory::instance().createFromWire(messageStr
ing); | 183 message = SerializedScriptValueFactory::instance().createFromWire(messageStr
ing); |
| 184 return true; | 184 return true; |
| 185 } | 185 } |
| 186 | 186 |
| 187 bool MessagePort::tryGetMessage(RefPtr<SerializedScriptValue>& message, OwnPtr<M
essagePortChannelArray>& channels) |
| 188 { |
| 189 if (!m_entangledChannel) |
| 190 return false; |
| 191 return tryGetMessageFrom(*m_entangledChannel, message, channels); |
| 192 } |
| 193 |
| 187 void MessagePort::dispatchMessages() | 194 void MessagePort::dispatchMessages() |
| 188 { | 195 { |
| 189 // Because close() doesn't cancel any in flight calls to dispatchMessages()
we need to check if the port is still open before dispatch. | 196 // Because close() doesn't cancel any in flight calls to dispatchMessages()
we need to check if the port is still open before dispatch. |
| 190 if (m_closed) | 197 if (m_closed) |
| 191 return; | 198 return; |
| 192 | 199 |
| 193 // Messages for contexts that are not fully active get dispatched too, but J
SAbstractEventListener::handleEvent() doesn't call handlers for these. | 200 // Messages for contexts that are not fully active get dispatched too, but J
SAbstractEventListener::handleEvent() doesn't call handlers for these. |
| 194 // The HTML5 spec specifies that any messages sent to a document that is not
fully active should be dropped, so this behavior is OK. | 201 // The HTML5 spec specifies that any messages sent to a document that is not
fully active should be dropped, so this behavior is OK. |
| 195 if (!started()) | 202 if (!started()) |
| 196 return; | 203 return; |
| 197 | 204 |
| 198 RefPtr<SerializedScriptValue> message; | 205 RefPtr<SerializedScriptValue> message; |
| 199 OwnPtr<MessagePortChannelArray> channels; | 206 OwnPtr<MessagePortChannelArray> channels; |
| 200 while (m_entangledChannel && tryGetMessageFrom(*m_entangledChannel, message,
channels)) { | 207 while (tryGetMessage(message, channels)) { |
| 201 // close() in Worker onmessage handler should prevent next message from
dispatching. | 208 // close() in Worker onmessage handler should prevent next message from
dispatching. |
| 202 if (executionContext()->isWorkerGlobalScope() && toWorkerGlobalScope(exe
cutionContext())->isClosing()) | 209 if (executionContext()->isWorkerGlobalScope() && toWorkerGlobalScope(exe
cutionContext())->isClosing()) |
| 203 return; | 210 return; |
| 204 | 211 |
| 205 OwnPtrWillBeRawPtr<MessagePortArray> ports = MessagePort::entanglePorts(
*executionContext(), channels.release()); | 212 OwnPtrWillBeRawPtr<MessagePortArray> ports = MessagePort::entanglePorts(
*executionContext(), channels.release()); |
| 206 RefPtrWillBeRawPtr<Event> evt = MessageEvent::create(ports.release(), me
ssage.release()); | 213 RefPtrWillBeRawPtr<Event> evt = MessageEvent::create(ports.release(), me
ssage.release()); |
| 207 | 214 |
| 208 dispatchEvent(evt.release(), ASSERT_NO_EXCEPTION); | 215 dispatchEvent(evt.release(), ASSERT_NO_EXCEPTION); |
| 209 } | 216 } |
| 210 } | 217 } |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 { | 285 { |
| 279 ASSERT(executionContext()); | 286 ASSERT(executionContext()); |
| 280 if (!m_scriptStateForConversion) { | 287 if (!m_scriptStateForConversion) { |
| 281 v8::Isolate* isolate = scriptIsolate(); | 288 v8::Isolate* isolate = scriptIsolate(); |
| 282 m_scriptStateForConversion = ScriptState::create(v8::Context::New(isolat
e), DOMWrapperWorld::create(isolate)); | 289 m_scriptStateForConversion = ScriptState::create(v8::Context::New(isolat
e), DOMWrapperWorld::create(isolate)); |
| 283 } | 290 } |
| 284 return m_scriptStateForConversion->context(); | 291 return m_scriptStateForConversion->context(); |
| 285 } | 292 } |
| 286 | 293 |
| 287 } // namespace blink | 294 } // namespace blink |
| OLD | NEW |