| 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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 if (dataPort == this) { | 78 if (dataPort == this) { |
| 79 exceptionState.throwDOMException(DataCloneError, "Port at index
" + String::number(i) + " contains the source port."); | 79 exceptionState.throwDOMException(DataCloneError, "Port at index
" + String::number(i) + " contains the source port."); |
| 80 return; | 80 return; |
| 81 } | 81 } |
| 82 } | 82 } |
| 83 channels = MessagePort::disentanglePorts(ports, exceptionState); | 83 channels = MessagePort::disentanglePorts(ports, exceptionState); |
| 84 if (exceptionState.hadException()) | 84 if (exceptionState.hadException()) |
| 85 return; | 85 return; |
| 86 } | 86 } |
| 87 | 87 |
| 88 blink::WebString messageString = message->toWireString(); | 88 WebString messageString = message->toWireString(); |
| 89 OwnPtr<blink::WebMessagePortChannelArray> webChannels = toWebMessagePortChan
nelArray(channels.release()); | 89 OwnPtr<WebMessagePortChannelArray> webChannels = toWebMessagePortChannelArra
y(channels.release()); |
| 90 m_entangledChannel->postMessage(messageString, webChannels.leakPtr()); | 90 m_entangledChannel->postMessage(messageString, webChannels.leakPtr()); |
| 91 } | 91 } |
| 92 | 92 |
| 93 // static | 93 // static |
| 94 PassOwnPtr<blink::WebMessagePortChannelArray> MessagePort::toWebMessagePortChann
elArray(PassOwnPtr<MessagePortChannelArray> channels) | 94 PassOwnPtr<WebMessagePortChannelArray> MessagePort::toWebMessagePortChannelArray
(PassOwnPtr<MessagePortChannelArray> channels) |
| 95 { | 95 { |
| 96 OwnPtr<blink::WebMessagePortChannelArray> webChannels; | 96 OwnPtr<WebMessagePortChannelArray> webChannels; |
| 97 if (channels && channels->size()) { | 97 if (channels && channels->size()) { |
| 98 webChannels = adoptPtr(new blink::WebMessagePortChannelArray(channels->s
ize())); | 98 webChannels = adoptPtr(new WebMessagePortChannelArray(channels->size()))
; |
| 99 for (size_t i = 0; i < channels->size(); ++i) | 99 for (size_t i = 0; i < channels->size(); ++i) |
| 100 (*webChannels)[i] = (*channels)[i].leakPtr(); | 100 (*webChannels)[i] = (*channels)[i].leakPtr(); |
| 101 } | 101 } |
| 102 return webChannels.release(); | 102 return webChannels.release(); |
| 103 } | 103 } |
| 104 | 104 |
| 105 // static | 105 // static |
| 106 PassOwnPtrWillBeRawPtr<MessagePortArray> MessagePort::toMessagePortArray(Executi
onContext* context, const blink::WebMessagePortChannelArray& webChannels) | 106 PassOwnPtrWillBeRawPtr<MessagePortArray> MessagePort::toMessagePortArray(Executi
onContext* context, const WebMessagePortChannelArray& webChannels) |
| 107 { | 107 { |
| 108 OwnPtrWillBeRawPtr<MessagePortArray> ports = nullptr; | 108 OwnPtrWillBeRawPtr<MessagePortArray> ports = nullptr; |
| 109 if (!webChannels.isEmpty()) { | 109 if (!webChannels.isEmpty()) { |
| 110 OwnPtr<MessagePortChannelArray> channels = adoptPtr(new MessagePortChann
elArray(webChannels.size())); | 110 OwnPtr<MessagePortChannelArray> channels = adoptPtr(new MessagePortChann
elArray(webChannels.size())); |
| 111 for (size_t i = 0; i < webChannels.size(); ++i) | 111 for (size_t i = 0; i < webChannels.size(); ++i) |
| 112 (*channels)[i] = adoptPtr(webChannels[i]); | 112 (*channels)[i] = adoptPtr(webChannels[i]); |
| 113 ports = MessagePort::entanglePorts(*context, channels.release()); | 113 ports = MessagePort::entanglePorts(*context, channels.release()); |
| 114 } | 114 } |
| 115 return ports.release(); | 115 return ports.release(); |
| 116 } | 116 } |
| 117 | 117 |
| 118 PassOwnPtr<blink::WebMessagePortChannel> MessagePort::disentangle() | 118 PassOwnPtr<WebMessagePortChannel> MessagePort::disentangle() |
| 119 { | 119 { |
| 120 ASSERT(m_entangledChannel); | 120 ASSERT(m_entangledChannel); |
| 121 m_entangledChannel->setClient(0); | 121 m_entangledChannel->setClient(0); |
| 122 return m_entangledChannel.release(); | 122 return m_entangledChannel.release(); |
| 123 } | 123 } |
| 124 | 124 |
| 125 // Invoked to notify us that there are messages available for this port. | 125 // Invoked to notify us that there are messages available for this port. |
| 126 // This code may be called from another thread, and so should not call any non-t
hreadsafe APIs (i.e. should not call into the entangled channel or access mutabl
e variables). | 126 // This code may be called from another thread, and so should not call any non-t
hreadsafe APIs (i.e. should not call into the entangled channel or access mutabl
e variables). |
| 127 void MessagePort::messageAvailable() | 127 void MessagePort::messageAvailable() |
| 128 { | 128 { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 144 messageAvailable(); | 144 messageAvailable(); |
| 145 } | 145 } |
| 146 | 146 |
| 147 void MessagePort::close() | 147 void MessagePort::close() |
| 148 { | 148 { |
| 149 if (isEntangled()) | 149 if (isEntangled()) |
| 150 m_entangledChannel->setClient(0); | 150 m_entangledChannel->setClient(0); |
| 151 m_closed = true; | 151 m_closed = true; |
| 152 } | 152 } |
| 153 | 153 |
| 154 void MessagePort::entangle(PassOwnPtr<blink::WebMessagePortChannel> remote) | 154 void MessagePort::entangle(PassOwnPtr<WebMessagePortChannel> remote) |
| 155 { | 155 { |
| 156 // Only invoked to set our initial entanglement. | 156 // Only invoked to set our initial entanglement. |
| 157 ASSERT(!m_entangledChannel); | 157 ASSERT(!m_entangledChannel); |
| 158 ASSERT(executionContext()); | 158 ASSERT(executionContext()); |
| 159 | 159 |
| 160 m_entangledChannel = remote; | 160 m_entangledChannel = remote; |
| 161 m_entangledChannel->setClient(this); | 161 m_entangledChannel->setClient(this); |
| 162 } | 162 } |
| 163 | 163 |
| 164 const AtomicString& MessagePort::interfaceName() const | 164 const AtomicString& MessagePort::interfaceName() const |
| 165 { | 165 { |
| 166 return EventTargetNames::MessagePort; | 166 return EventTargetNames::MessagePort; |
| 167 } | 167 } |
| 168 | 168 |
| 169 static bool tryGetMessageFrom(blink::WebMessagePortChannel& webChannel, RefPtr<S
erializedScriptValue>& message, OwnPtr<MessagePortChannelArray>& channels) | 169 static bool tryGetMessageFrom(WebMessagePortChannel& webChannel, RefPtr<Serializ
edScriptValue>& message, OwnPtr<MessagePortChannelArray>& channels) |
| 170 { | 170 { |
| 171 blink::WebString messageString; | 171 WebString messageString; |
| 172 blink::WebMessagePortChannelArray webChannels; | 172 WebMessagePortChannelArray webChannels; |
| 173 if (!webChannel.tryGetMessage(&messageString, webChannels)) | 173 if (!webChannel.tryGetMessage(&messageString, webChannels)) |
| 174 return false; | 174 return false; |
| 175 | 175 |
| 176 if (webChannels.size()) { | 176 if (webChannels.size()) { |
| 177 channels = adoptPtr(new MessagePortChannelArray(webChannels.size())); | 177 channels = adoptPtr(new MessagePortChannelArray(webChannels.size())); |
| 178 for (size_t i = 0; i < webChannels.size(); ++i) | 178 for (size_t i = 0; i < webChannels.size(); ++i) |
| 179 (*channels)[i] = adoptPtr(webChannels[i]); | 179 (*channels)[i] = adoptPtr(webChannels[i]); |
| 180 } | 180 } |
| 181 message = SerializedScriptValue::createFromWire(messageString); | 181 message = SerializedScriptValue::createFromWire(messageString); |
| 182 return true; | 182 return true; |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 250 OwnPtrWillBeRawPtr<MessagePortArray> portArray = adoptPtrWillBeNoop(new Mess
agePortArray(channels->size())); | 250 OwnPtrWillBeRawPtr<MessagePortArray> portArray = adoptPtrWillBeNoop(new Mess
agePortArray(channels->size())); |
| 251 for (unsigned i = 0; i < channels->size(); ++i) { | 251 for (unsigned i = 0; i < channels->size(); ++i) { |
| 252 RefPtrWillBeRawPtr<MessagePort> port = MessagePort::create(context); | 252 RefPtrWillBeRawPtr<MessagePort> port = MessagePort::create(context); |
| 253 port->entangle((*channels)[i].release()); | 253 port->entangle((*channels)[i].release()); |
| 254 (*portArray)[i] = port.release(); | 254 (*portArray)[i] = port.release(); |
| 255 } | 255 } |
| 256 return portArray.release(); | 256 return portArray.release(); |
| 257 } | 257 } |
| 258 | 258 |
| 259 } // namespace blink | 259 } // namespace blink |
| OLD | NEW |