Chromium Code Reviews| 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/broadcastchannel/BroadcastChannel.h" | 5 #include "modules/broadcastchannel/BroadcastChannel.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/SerializedScriptValue.h" | 7 #include "bindings/core/v8/SerializedScriptValue.h" |
| 8 #include "core/dom/ExceptionCode.h" | 8 #include "core/dom/ExceptionCode.h" |
| 9 #include "core/events/EventQueue.h" | 9 #include "core/events/EventQueue.h" |
| 10 #include "core/events/MessageEvent.h" | 10 #include "core/events/MessageEvent.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 56 void BroadcastChannel::postMessage(const ScriptValue& message, ExceptionState& e xceptionState) | 56 void BroadcastChannel::postMessage(const ScriptValue& message, ExceptionState& e xceptionState) |
| 57 { | 57 { |
| 58 if (!m_binding.is_bound()) { | 58 if (!m_binding.is_bound()) { |
| 59 exceptionState.throwDOMException(InvalidStateError, "Channel is closed") ; | 59 exceptionState.throwDOMException(InvalidStateError, "Channel is closed") ; |
| 60 return; | 60 return; |
| 61 } | 61 } |
| 62 RefPtr<SerializedScriptValue> value = SerializedScriptValue::serialize(messa ge.isolate(), message.v8Value(), nullptr, nullptr, exceptionState); | 62 RefPtr<SerializedScriptValue> value = SerializedScriptValue::serialize(messa ge.isolate(), message.v8Value(), nullptr, nullptr, exceptionState); |
| 63 if (exceptionState.hadException()) | 63 if (exceptionState.hadException()) |
| 64 return; | 64 return; |
| 65 | 65 |
| 66 String data = value->toWireString(); | 66 Vector<char> data; |
|
esprehn
2016/07/23 08:53:50
you want to call reserveInitialCapacity on both of
Marijn Kruisselbrink
2016/07/23 19:14:18
Not sure what resized and copies that would avoid?
| |
| 67 m_remoteClient->OnMessage(data); | 67 value->toWireBytes(data); |
| 68 Vector<uint8_t> mojoData; | |
| 69 mojoData.appendVector(data); | |
|
dcheng
2016/07/22 02:33:03
It's sad that this results in copying the data now
Marijn Kruisselbrink
2016/07/22 03:23:12
Yeah... but reinterpret_casting a Vector didn't se
| |
| 70 m_remoteClient->OnMessage(std::move(mojoData)); | |
| 68 } | 71 } |
| 69 | 72 |
| 70 void BroadcastChannel::close() | 73 void BroadcastChannel::close() |
| 71 { | 74 { |
| 72 m_remoteClient.reset(); | 75 m_remoteClient.reset(); |
| 73 if (m_binding.is_bound()) | 76 if (m_binding.is_bound()) |
| 74 m_binding.Close(); | 77 m_binding.Close(); |
| 75 } | 78 } |
| 76 | 79 |
| 77 const AtomicString& BroadcastChannel::interfaceName() const | 80 const AtomicString& BroadcastChannel::interfaceName() const |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 88 { | 91 { |
| 89 close(); | 92 close(); |
| 90 } | 93 } |
| 91 | 94 |
| 92 DEFINE_TRACE(BroadcastChannel) | 95 DEFINE_TRACE(BroadcastChannel) |
| 93 { | 96 { |
| 94 ContextLifecycleObserver::trace(visitor); | 97 ContextLifecycleObserver::trace(visitor); |
| 95 EventTargetWithInlineData::trace(visitor); | 98 EventTargetWithInlineData::trace(visitor); |
| 96 } | 99 } |
| 97 | 100 |
| 98 void BroadcastChannel::OnMessage(const String& message) | 101 void BroadcastChannel::OnMessage(mojo::WTFArray<uint8_t> message) |
| 99 { | 102 { |
| 100 // Queue a task to dispatch the event. | 103 // Queue a task to dispatch the event. |
| 101 RefPtr<SerializedScriptValue> value = SerializedScriptValue::create(message) ; | 104 RefPtr<SerializedScriptValue> value = SerializedScriptValue::create(reinterp ret_cast<const char*>(&message.front()), message.size()); |
| 102 MessageEvent* event = MessageEvent::create(nullptr, value.release(), getExec utionContext()->getSecurityOrigin()->toString()); | 105 MessageEvent* event = MessageEvent::create(nullptr, value.release(), getExec utionContext()->getSecurityOrigin()->toString()); |
| 103 event->setTarget(this); | 106 event->setTarget(this); |
| 104 bool success = getExecutionContext()->getEventQueue()->enqueueEvent(event); | 107 bool success = getExecutionContext()->getEventQueue()->enqueueEvent(event); |
| 105 DCHECK(success); | 108 DCHECK(success); |
| 106 ALLOW_UNUSED_LOCAL(success); | 109 ALLOW_UNUSED_LOCAL(success); |
| 107 } | 110 } |
| 108 | 111 |
| 109 void BroadcastChannel::onError() | 112 void BroadcastChannel::onError() |
| 110 { | 113 { |
| 111 close(); | 114 close(); |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 129 mojom::blink::BroadcastChannelClientAssociatedPtrInfo remoteClientInfo; | 132 mojom::blink::BroadcastChannelClientAssociatedPtrInfo remoteClientInfo; |
| 130 mojo::AssociatedInterfaceRequest<mojom::blink::BroadcastChannelClient> remot eCientRequest; | 133 mojo::AssociatedInterfaceRequest<mojom::blink::BroadcastChannelClient> remot eCientRequest; |
| 131 provider.associated_group()->CreateAssociatedInterface(mojo::AssociatedGroup ::WILL_PASS_REQUEST, &remoteClientInfo, &remoteCientRequest); | 134 provider.associated_group()->CreateAssociatedInterface(mojo::AssociatedGroup ::WILL_PASS_REQUEST, &remoteClientInfo, &remoteCientRequest); |
| 132 m_remoteClient.Bind(std::move(remoteClientInfo)); | 135 m_remoteClient.Bind(std::move(remoteClientInfo)); |
| 133 m_remoteClient.set_connection_error_handler(convertToBaseCallback(WTF::bind( &BroadcastChannel::onError, wrapWeakPersistent(this)))); | 136 m_remoteClient.set_connection_error_handler(convertToBaseCallback(WTF::bind( &BroadcastChannel::onError, wrapWeakPersistent(this)))); |
| 134 | 137 |
| 135 provider->ConnectToChannel(m_origin, m_name, std::move(localClientInfo), std ::move(remoteCientRequest)); | 138 provider->ConnectToChannel(m_origin, m_name, std::move(localClientInfo), std ::move(remoteCientRequest)); |
| 136 } | 139 } |
| 137 | 140 |
| 138 } // namespace blink | 141 } // namespace blink |
| OLD | NEW |