Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: Source/bindings/v8/SerializedScriptValue.cpp

Issue 19457002: Make 'any'-typed attributes of events available in isolated worlds (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Patch for landing Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 Google 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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 2205 matching lines...) Expand 10 before | Expand all | Expand 10 after
2216 Vector<v8::Handle<v8::Value> > m_objectPool; 2216 Vector<v8::Handle<v8::Value> > m_objectPool;
2217 Vector<uint32_t> m_openCompositeReferenceStack; 2217 Vector<uint32_t> m_openCompositeReferenceStack;
2218 MessagePortArray* m_transferredMessagePorts; 2218 MessagePortArray* m_transferredMessagePorts;
2219 ArrayBufferContentsArray* m_arrayBufferContents; 2219 ArrayBufferContentsArray* m_arrayBufferContents;
2220 Vector<v8::Handle<v8::Object> > m_arrayBuffers; 2220 Vector<v8::Handle<v8::Object> > m_arrayBuffers;
2221 uint32_t m_version; 2221 uint32_t m_version;
2222 }; 2222 };
2223 2223
2224 } // namespace 2224 } // namespace
2225 2225
2226 PassRefPtr<SerializedScriptValue> SerializedScriptValue::create(v8::Handle<v8::V alue> value, MessagePortArray* messagePorts, ArrayBufferArray* arrayBuffers, boo l& didThrow)
2227 {
2228 return create(value, messagePorts, arrayBuffers, didThrow, v8::Isolate::GetC urrent());
2229 }
2230
2231 PassRefPtr<SerializedScriptValue> SerializedScriptValue::create(v8::Handle<v8::V alue> value, MessagePortArray* messagePorts, ArrayBufferArray* arrayBuffers, boo l& didThrow, v8::Isolate* isolate) 2226 PassRefPtr<SerializedScriptValue> SerializedScriptValue::create(v8::Handle<v8::V alue> value, MessagePortArray* messagePorts, ArrayBufferArray* arrayBuffers, boo l& didThrow, v8::Isolate* isolate)
2232 { 2227 {
2233 return adoptRef(new SerializedScriptValue(value, messagePorts, arrayBuffers, didThrow, isolate)); 2228 return adoptRef(new SerializedScriptValue(value, messagePorts, arrayBuffers, didThrow, isolate));
2234 } 2229 }
2235 2230
2236 PassRefPtr<SerializedScriptValue> SerializedScriptValue::create(v8::Handle<v8::V alue> value)
2237 {
2238 return create(value, v8::Isolate::GetCurrent());
2239 }
2240
2241 PassRefPtr<SerializedScriptValue> SerializedScriptValue::create(v8::Handle<v8::V alue> value, v8::Isolate* isolate) 2231 PassRefPtr<SerializedScriptValue> SerializedScriptValue::create(v8::Handle<v8::V alue> value, v8::Isolate* isolate)
2242 { 2232 {
2243 bool didThrow; 2233 bool didThrow;
2244 return adoptRef(new SerializedScriptValue(value, 0, 0, didThrow, isolate)); 2234 return adoptRef(new SerializedScriptValue(value, 0, 0, didThrow, isolate));
2245 } 2235 }
2246 2236
2237 PassRefPtr<SerializedScriptValue> SerializedScriptValue::createAndSwallowExcepti ons(v8::Handle<v8::Value> value, v8::Isolate* isolate)
2238 {
2239 bool didThrow;
2240 return adoptRef(new SerializedScriptValue(value, 0, 0, didThrow, isolate, Do NotThrowExceptions));
2241 }
2242
2247 PassRefPtr<SerializedScriptValue> SerializedScriptValue::createFromWire(const St ring& data) 2243 PassRefPtr<SerializedScriptValue> SerializedScriptValue::createFromWire(const St ring& data)
2248 { 2244 {
2249 return adoptRef(new SerializedScriptValue(data)); 2245 return adoptRef(new SerializedScriptValue(data));
2250 } 2246 }
2251 2247
2252 PassRefPtr<SerializedScriptValue> SerializedScriptValue::createFromWireBytes(con st Vector<uint8_t>& data) 2248 PassRefPtr<SerializedScriptValue> SerializedScriptValue::createFromWireBytes(con st Vector<uint8_t>& data)
2253 { 2249 {
2254 // Decode wire data from big endian to host byte order. 2250 // Decode wire data from big endian to host byte order.
2255 ASSERT(!(data.size() % sizeof(UChar))); 2251 ASSERT(!(data.size() % sizeof(UChar)));
2256 size_t length = data.size() / sizeof(UChar); 2252 size_t length = data.size() / sizeof(UChar);
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
2418 return nullptr; 2414 return nullptr;
2419 } 2415 }
2420 2416
2421 neuterBinding(arrayBuffers[i].get()); 2417 neuterBinding(arrayBuffers[i].get());
2422 for (size_t j = 0; j < neuteredViews.size(); j++) 2418 for (size_t j = 0; j < neuteredViews.size(); j++)
2423 neuterBinding(neuteredViews[j].get()); 2419 neuterBinding(neuteredViews[j].get());
2424 } 2420 }
2425 return contents.release(); 2421 return contents.release();
2426 } 2422 }
2427 2423
2428 SerializedScriptValue::SerializedScriptValue(v8::Handle<v8::Value> value, Messag ePortArray* messagePorts, ArrayBufferArray* arrayBuffers, bool& didThrow, v8::Is olate* isolate) 2424 SerializedScriptValue::SerializedScriptValue(v8::Handle<v8::Value> value, Messag ePortArray* messagePorts, ArrayBufferArray* arrayBuffers, bool& didThrow, v8::Is olate* isolate, ExceptionPolicy policy)
2429 : m_externallyAllocatedMemory(0) 2425 : m_externallyAllocatedMemory(0)
2430 { 2426 {
2431 didThrow = false; 2427 didThrow = false;
2432 Writer writer(isolate); 2428 Writer writer(isolate);
2433 Serializer::Status status; 2429 Serializer::Status status;
2434 { 2430 {
2435 v8::TryCatch tryCatch; 2431 v8::TryCatch tryCatch;
2436 Serializer serializer(writer, messagePorts, arrayBuffers, m_blobURLs, tr yCatch, isolate); 2432 Serializer serializer(writer, messagePorts, arrayBuffers, m_blobURLs, tr yCatch, isolate);
2437 status = serializer.serialize(value); 2433 status = serializer.serialize(value);
2438 if (status == Serializer::JSException) { 2434 if (status == Serializer::JSException) {
2435 didThrow = true;
2439 // If there was a JS exception thrown, re-throw it. 2436 // If there was a JS exception thrown, re-throw it.
2440 didThrow = true; 2437 if (policy == ThrowExceptions)
2441 tryCatch.ReThrow(); 2438 tryCatch.ReThrow();
2442 return; 2439 return;
2443 } 2440 }
2444 } 2441 }
2445 switch (status) { 2442 switch (status) {
2446 case Serializer::InputError: 2443 case Serializer::InputError:
2447 case Serializer::DataCloneError: 2444 case Serializer::DataCloneError:
2448 // If there was an input error, throw a new exception outside 2445 // If there was an input error, throw a new exception outside
2449 // of the TryCatch scope. 2446 // of the TryCatch scope.
2450 didThrow = true; 2447 didThrow = true;
2451 setDOMException(DataCloneError, isolate); 2448 if (policy == ThrowExceptions)
2449 setDOMException(DataCloneError, isolate);
2452 return; 2450 return;
2453 case Serializer::InvalidStateError: 2451 case Serializer::InvalidStateError:
2454 didThrow = true; 2452 didThrow = true;
2455 setDOMException(InvalidStateError, isolate); 2453 if (policy == ThrowExceptions)
2454 setDOMException(InvalidStateError, isolate);
2456 return; 2455 return;
2457 case Serializer::JSFailure: 2456 case Serializer::JSFailure:
2458 // If there was a JS failure (but no exception), there's not 2457 // If there was a JS failure (but no exception), there's not
2459 // much we can do except for unwinding the C++ stack by 2458 // much we can do except for unwinding the C++ stack by
2460 // pretending there was a JS exception. 2459 // pretending there was a JS exception.
2461 didThrow = true; 2460 didThrow = true;
2462 return; 2461 return;
2463 case Serializer::Success: 2462 case Serializer::Success:
2464 m_data = String(StringImpl::adopt(writer.data())).isolatedCopy(); 2463 m_data = String(StringImpl::adopt(writer.data())).isolatedCopy();
2465 if (arrayBuffers && arrayBuffers->size()) 2464 if (arrayBuffers && arrayBuffers->size())
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2523 v8::V8::AdjustAmountOfExternalAllocatedMemory(-m_externallyAllocatedMemo ry); 2522 v8::V8::AdjustAmountOfExternalAllocatedMemory(-m_externallyAllocatedMemo ry);
2524 } 2523 }
2525 } 2524 }
2526 2525
2527 uint32_t SerializedScriptValue::wireFormatVersion() 2526 uint32_t SerializedScriptValue::wireFormatVersion()
2528 { 2527 {
2529 return WebCore::wireFormatVersion; 2528 return WebCore::wireFormatVersion;
2530 } 2529 }
2531 2530
2532 } // namespace WebCore 2531 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698