Changeset 53344 in webkit
- Timestamp:
- Jan 15, 2010 1:28:47 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r53343 r53344 1 2010-01-15 Vitaly Repeshko <vitalyr@chromium.org> 2 3 Reviewed by David Levin. 4 5 [V8] Support SerializedScriptValue. 6 https://bugs.webkit.org/show_bug.cgi?id=32920 7 http://crbug.com/30620 8 9 Initial implementation of SerializedScriptValue which is used to 10 to create a serialized representation of JavaScript objects. This 11 representation is needed for structured clones and worker messages. 12 13 * WebCore.gypi: Added SerializedScriptValue.cpp. 14 * bindings/scripts/CodeGeneratorV8.pm: Removed conversion to string before using SerializedScriptValue. 15 * bindings/v8/SerializedScriptValue.cpp: Added. 16 (WebCore::): 17 (WebCore::ZigZag::encode): 18 (WebCore::ZigZag::decode): 19 (WebCore::Writer::Writer): 20 (WebCore::Writer::writeUndefined): 21 (WebCore::Writer::writeNull): 22 (WebCore::Writer::writeTrue): 23 (WebCore::Writer::writeFalse): 24 (WebCore::Writer::writeString): 25 (WebCore::Writer::writeInt32): 26 (WebCore::Writer::writeNumber): 27 (WebCore::Writer::endComposite): 28 (WebCore::Writer::data): 29 (WebCore::Writer::doWriteUint32): 30 (WebCore::Writer::append): 31 (WebCore::Writer::ensureSpace): 32 (WebCore::Writer::fillHole): 33 (WebCore::Writer::charAt): 34 (WebCore::Serializer::Serializer): 35 (WebCore::Serializer::serialize): 36 (WebCore::Serializer::StateBase::~StateBase): 37 (WebCore::Serializer::StateBase::nextState): 38 (WebCore::Serializer::StateBase::setNextState): 39 (WebCore::Serializer::StateBase::composite): 40 (WebCore::Serializer::StateBase::StateBase): 41 (WebCore::Serializer::State::composite): 42 (WebCore::Serializer::State::tag): 43 (WebCore::Serializer::State::State): 44 (WebCore::Serializer::StackCleaner::StackCleaner): 45 (WebCore::Serializer::StackCleaner::~StackCleaner): 46 (WebCore::Serializer::ArrayState::ArrayState): 47 (WebCore::Serializer::ArrayState::done): 48 (WebCore::Serializer::ArrayState::advance): 49 (WebCore::Serializer::ObjectState::ObjectState): 50 (WebCore::Serializer::ObjectState::done): 51 (WebCore::Serializer::ObjectState::advance): 52 (WebCore::Serializer::ObjectState::nextProperty): 53 (WebCore::Serializer::doSerialize): 54 (WebCore::Serializer::push): 55 (WebCore::Serializer::top): 56 (WebCore::Serializer::pop): 57 (WebCore::Serializer::checkComposite): 58 (WebCore::Reader::Reader): 59 (WebCore::Reader::isEof): 60 (WebCore::Reader::read): 61 (WebCore::Reader::readTag): 62 (WebCore::Reader::readString): 63 (WebCore::Reader::readInt32): 64 (WebCore::Reader::readNumber): 65 (WebCore::Reader::doReadUint32): 66 (WebCore::Deserializer::Deserializer): 67 (WebCore::Deserializer::deserialize): 68 (WebCore::Deserializer::doDeserialize): 69 (WebCore::Deserializer::push): 70 (WebCore::Deserializer::pop): 71 (WebCore::Deserializer::stackDepth): 72 (WebCore::Deserializer::element): 73 (WebCore::SerializedScriptValue::SerializedScriptValue): 74 (WebCore::SerializedScriptValue::deserialize): 75 * bindings/v8/SerializedScriptValue.h: 76 (WebCore::SerializedScriptValue::create): 77 (WebCore::SerializedScriptValue::createFromWire): 78 (WebCore::SerializedScriptValue::release): 79 (WebCore::SerializedScriptValue::toWireString): 80 81 Updated uses of SerializedScriptValue: 82 * bindings/v8/custom/V8DOMWindowCustom.cpp: 83 (WebCore::V8DOMWindow::postMessageCallback): 84 * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp: 85 (WebCore::V8DedicatedWorkerContext::postMessageCallback): 86 * bindings/v8/custom/V8HistoryCustom.cpp: 87 (WebCore::V8History::pushStateCallback): 88 (WebCore::V8History::replaceStateCallback): 89 * bindings/v8/custom/V8MessageEventCustom.cpp: 90 (WebCore::V8MessageEvent::initMessageEventCallback): 91 * bindings/v8/custom/V8MessagePortCustom.cpp: 92 (WebCore::V8MessagePort::postMessageCallback): 93 * bindings/v8/custom/V8WorkerCustom.cpp: 94 (WebCore::V8Worker::postMessageCallback): 95 1 96 2010-01-15 Oliver Hunt <oliver@apple.com> 2 97 -
trunk/WebCore/WebCore.gypi
r53328 r53344 796 796 'bindings/v8/ScriptValue.cpp', 797 797 'bindings/v8/ScriptValue.h', 798 'bindings/v8/SerializedScriptValue.cpp', 798 799 'bindings/v8/SerializedScriptValue.h', 799 800 'bindings/v8/specialization/V8BindingDOMWindow.h', -
trunk/WebCore/bindings/scripts/CodeGeneratorV8.pm
r53335 r53344 2565 2565 if ($type eq "SerializedScriptValue") { 2566 2566 $implIncludes{"$type.h"} = 1; 2567 return "return v8String($value->toString())";2567 return "return $value->deserialize()"; 2568 2568 } 2569 2569 -
trunk/WebCore/bindings/v8/SerializedScriptValue.h
r49219 r53344 1 1 /* 2 * Copyright (C) 2009 Google Inc. All rights reserved.2 * Copyright (C) 2009, 2010 Google Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 41 41 class SerializedScriptValue : public RefCounted<SerializedScriptValue> { 42 42 public: 43 static PassRefPtr<SerializedScriptValue> create(String string) 43 // Creates a serialized representation of the given V8 value. 44 static PassRefPtr<SerializedScriptValue> create(v8::Handle<v8::Value> value) 44 45 { 45 return adoptRef(new SerializedScriptValue( string));46 return adoptRef(new SerializedScriptValue(value)); 46 47 } 47 48 49 // Creates a serialized value with the given data obtained from a 50 // prior call to toWireString(). 51 static PassRefPtr<SerializedScriptValue> createFromWire(String data) 52 { 53 return adoptRef(new SerializedScriptValue(data, WireData)); 54 } 55 56 // Creates a serialized representation of WebCore string. 57 static PassRefPtr<SerializedScriptValue> create(String data) 58 { 59 return adoptRef(new SerializedScriptValue(data, StringValue)); 60 } 61 62 // Creates an empty serialized value. 48 63 static PassRefPtr<SerializedScriptValue> create() 49 64 { … … 53 68 PassRefPtr<SerializedScriptValue> release() 54 69 { 55 RefPtr<SerializedScriptValue> result = adoptRef(new SerializedScriptValue(m_data ));70 RefPtr<SerializedScriptValue> result = adoptRef(new SerializedScriptValue(m_data, WireData)); 56 71 m_data = String(); 57 72 return result.release(); 58 73 } 59 74 60 String toString() 61 { 62 return m_data; 63 } 75 String toWireString() const { return m_data; } 76 77 // Deserializes the value (in the current context). Returns an 78 // empty handle in case of failure. 79 v8::Local<v8::Value> deserialize(); 64 80 65 81 private: 66 SerializedScriptValue(String string)67 : m_data(string)68 {69 } 82 enum StringDataMode { 83 StringValue, 84 WireData 85 }; 70 86 71 87 SerializedScriptValue() { } 88 89 explicit SerializedScriptValue(v8::Handle<v8::Value>); 90 91 SerializedScriptValue(String data, StringDataMode mode); 92 72 93 String m_data; 73 94 }; -
trunk/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
r53271 r53344 412 412 413 413 v8::TryCatch tryCatch; 414 RefPtr<SerializedScriptValue> message = SerializedScriptValue::create( toWebCoreString(args[0]));414 RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(args[0]); 415 415 MessagePortArray portArray; 416 416 String targetOrigin; -
trunk/WebCore/bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp
r53271 r53344 47 47 INC_STATS(L"DOM.DedicatedWorkerContext.postMessage"); 48 48 DedicatedWorkerContext* workerContext = V8DedicatedWorkerContext::toNative(args.Holder()); 49 RefPtr<SerializedScriptValue> message = SerializedScriptValue::create( v8ValueToWebCoreString(args[0]));49 RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(args[0]); 50 50 MessagePortArray portArray; 51 51 if (args.Length() > 1) { -
trunk/WebCore/bindings/v8/custom/V8HistoryCustom.cpp
r53271 r53344 44 44 v8::Handle<v8::Value> V8History::pushStateCallback(const v8::Arguments& args) 45 45 { 46 RefPtr<SerializedScriptValue> historyState = SerializedScriptValue::create( toWebCoreString(args[0]));46 RefPtr<SerializedScriptValue> historyState = SerializedScriptValue::create(args[0]); 47 47 48 48 v8::TryCatch tryCatch; … … 65 65 v8::Handle<v8::Value> V8History::replaceStateCallback(const v8::Arguments& args) 66 66 { 67 RefPtr<SerializedScriptValue> historyState = SerializedScriptValue::create( toWebCoreString(args[0]));67 RefPtr<SerializedScriptValue> historyState = SerializedScriptValue::create(args[0]); 68 68 69 69 v8::TryCatch tryCatch; -
trunk/WebCore/bindings/v8/custom/V8MessageEventCustom.cpp
r53271 r53344 66 66 bool canBubbleArg = args[1]->BooleanValue(); 67 67 bool cancelableArg = args[2]->BooleanValue(); 68 RefPtr<SerializedScriptValue> dataArg = SerializedScriptValue::create( v8ValueToWebCoreString(args[3]));68 RefPtr<SerializedScriptValue> dataArg = SerializedScriptValue::create(args[3]); 69 69 String originArg = v8ValueToWebCoreString(args[4]); 70 70 String lastEventIdArg = v8ValueToWebCoreString(args[5]); -
trunk/WebCore/bindings/v8/custom/V8MessagePortCustom.cpp
r53271 r53344 79 79 INC_STATS("DOM.MessagePort.postMessage"); 80 80 MessagePort* messagePort = V8MessagePort::toNative(args.Holder()); 81 RefPtr<SerializedScriptValue> message = SerializedScriptValue::create( toWebCoreString(args[0]));81 RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(args[0]); 82 82 MessagePortArray portArray; 83 83 if (args.Length() > 1) { -
trunk/WebCore/bindings/v8/custom/V8PopStateEventCustom.cpp
r53271 r53344 45 45 bool canBubbleArg = args[1]->BooleanValue(); 46 46 bool cancelableArg = args[2]->BooleanValue(); 47 RefPtr<SerializedScriptValue> stateArg = SerializedScriptValue::create( v8ValueToWebCoreString(args[3]));47 RefPtr<SerializedScriptValue> stateArg = SerializedScriptValue::create(args[3]); 48 48 49 49 PopStateEvent* event = V8PopStateEvent::toNative(args.Holder()); … … 62 62 return v8::Null(); 63 63 64 return v8StringOrNull(state->toString());64 return state->deserialize(); 65 65 } 66 66 -
trunk/WebCore/bindings/v8/custom/V8WorkerCustom.cpp
r53271 r53344 93 93 INC_STATS("DOM.Worker.postMessage"); 94 94 Worker* worker = V8Worker::toNative(args.Holder()); 95 RefPtr<SerializedScriptValue> message = SerializedScriptValue::create( toWebCoreString(args[0]));95 RefPtr<SerializedScriptValue> message = SerializedScriptValue::create(args[0]); 96 96 MessagePortArray portArray; 97 97 if (args.Length() > 1) { -
trunk/WebKit/chromium/ChangeLog
r53321 r53344 1 2010-01-15 Vitaly Repeshko <vitalyr@chromium.org> 2 3 Reviewed by David Levin. 4 5 [V8] Support SerializedScriptValue. 6 https://bugs.webkit.org/show_bug.cgi?id=32920 7 http://crbug.com/30620 8 9 Updated uses of SerializedScriptValue: 10 * src/PlatformMessagePortChannel.cpp: 11 (WebCore::PlatformMessagePortChannel::postMessageToRemote): 12 (WebCore::PlatformMessagePortChannel::tryGetMessageFromRemote): 13 * src/WebWorkerBase.cpp: 14 (WebKit::WebWorkerBase::postMessageToWorkerObject): 15 * src/WebWorkerClientImpl.cpp: 16 (WebKit::WebWorkerClientImpl::postMessageToWorkerContext): 17 (WebKit::WebWorkerClientImpl::postMessageToWorkerObjectTask): 18 * src/WebWorkerImpl.cpp: 19 (WebKit::WebWorkerImpl::postMessageToWorkerContextTask): 20 1 21 2010-01-14 Jeremy Orlow <jorlow@chromium.org> 2 22 -
trunk/WebKit/chromium/src/PlatformMessagePortChannel.cpp
r50744 r53344 180 180 return; 181 181 182 WebString messageString = message->message()->to String();182 WebString messageString = message->message()->toWireString(); 183 183 OwnPtr<WebCore::MessagePortChannelArray> channels = message->channels(); 184 184 WebMessagePortChannelArray* webChannels = 0; … … 212 212 } 213 213 } 214 RefPtr<SerializedScriptValue> serializedMessage = SerializedScriptValue::create (message);214 RefPtr<SerializedScriptValue> serializedMessage = SerializedScriptValue::createFromWire(message); 215 215 result = MessagePortChannel::EventData::create(serializedMessage.release(), channels.release()); 216 216 } -
trunk/WebKit/chromium/src/WebWorkerBase.cpp
r52677 r53344 158 158 { 159 159 dispatchTaskToMainThread(createCallbackTask(&postMessageTask, this, 160 message->to String(), channels));160 message->toWireString(), channels)); 161 161 } 162 162 -
trunk/WebKit/chromium/src/WebWorkerClientImpl.cpp
r50751 r53344 174 174 WebWorkerBase::dispatchTaskToMainThread(createCallbackTask(&postMessageToWorkerContextTask, 175 175 this, 176 message->to String(),176 message->toWireString(), 177 177 channels)); 178 178 return; … … 185 185 webChannels[i] = webchannel; 186 186 } 187 m_webWorker->postMessageToWorkerContext(message->to String(), webChannels);187 m_webWorker->postMessageToWorkerContext(message->toWireString(), webChannels); 188 188 } 189 189 … … 357 357 MessagePort::entanglePorts(*context, channels.release()); 358 358 RefPtr<SerializedScriptValue> serializedMessage = 359 SerializedScriptValue::create (message);359 SerializedScriptValue::createFromWire(message); 360 360 thisPtr->m_worker->dispatchEvent(MessageEvent::create(ports.release(), 361 361 serializedMessage.release())); -
trunk/WebKit/chromium/src/WebWorkerImpl.cpp
r50751 r53344 89 89 MessagePort::entanglePorts(*context, channels.release()); 90 90 RefPtr<SerializedScriptValue> serializedMessage = 91 SerializedScriptValue::create (message);91 SerializedScriptValue::createFromWire(message); 92 92 workerContext->dispatchEvent(MessageEvent::create( 93 93 ports.release(), serializedMessage.release()));
Note: See TracChangeset
for help on using the changeset viewer.