OLD | NEW |
---|---|
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 2313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2324 for (size_t i = 0; i < length; i++) | 2324 for (size_t i = 0; i < length; i++) |
2325 dst[i] = htons(src[i]); | 2325 dst[i] = htons(src[i]); |
2326 } | 2326 } |
2327 } | 2327 } |
2328 | 2328 |
2329 SerializedScriptValue::SerializedScriptValue() | 2329 SerializedScriptValue::SerializedScriptValue() |
2330 : m_externallyAllocatedMemory(0) | 2330 : m_externallyAllocatedMemory(0) |
2331 { | 2331 { |
2332 } | 2332 } |
2333 | 2333 |
2334 inline void neuterBinding(ArrayBuffer* object) | 2334 static void neuterArrayBufferInAllWorlds(ArrayBuffer* object) |
2335 { | 2335 { |
2336 v8::Isolate* isolate = v8::Isolate::GetCurrent(); | 2336 v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
2337 Vector<DOMDataStore*>& allStores = V8PerIsolateData::from(isolate)->allStore s(); | 2337 if (isMainThread()) { |
2338 for (size_t i = 0; i < allStores.size(); i++) { | 2338 Vector<RefPtr<DOMWrapperWorld> > worlds; |
2339 v8::Handle<v8::Object> wrapper = allStores[i]->get<V8ArrayBuffer>(object , isolate); | 2339 DOMWrapperWorld::allWorldsInMainThread(worlds); |
haraken
2014/02/27 05:00:51
This CL keeps the current behavior, but I don't fu
dcarney
2014/02/27 07:20:51
the arraybuffer might only exist in one world, but
| |
2340 for (size_t i = 0; i < worlds.size(); i++) { | |
2341 v8::Handle<v8::Object> wrapper = worlds[i]->domDataStore().get<V8Arr ayBuffer>(object, isolate); | |
2342 if (!wrapper.IsEmpty()) { | |
2343 ASSERT(wrapper->IsArrayBuffer()); | |
2344 v8::Handle<v8::ArrayBuffer>::Cast(wrapper)->Neuter(); | |
2345 } | |
2346 } | |
2347 } else { | |
2348 v8::Handle<v8::Object> wrapper = DOMWrapperWorld::current(isolate)->domD ataStore().get<V8ArrayBuffer>(object, isolate); | |
2340 if (!wrapper.IsEmpty()) { | 2349 if (!wrapper.IsEmpty()) { |
2341 ASSERT(wrapper->IsArrayBuffer()); | 2350 ASSERT(wrapper->IsArrayBuffer()); |
2342 v8::Handle<v8::ArrayBuffer>::Cast(wrapper)->Neuter(); | 2351 v8::Handle<v8::ArrayBuffer>::Cast(wrapper)->Neuter(); |
2343 } | 2352 } |
2344 } | 2353 } |
2345 } | 2354 } |
2346 | 2355 |
2347 PassOwnPtr<SerializedScriptValue::ArrayBufferContentsArray> SerializedScriptValu e::transferArrayBuffers(ArrayBufferArray& arrayBuffers, ExceptionState& exceptio nState, v8::Isolate* isolate) | 2356 PassOwnPtr<SerializedScriptValue::ArrayBufferContentsArray> SerializedScriptValu e::transferArrayBuffers(ArrayBufferArray& arrayBuffers, ExceptionState& exceptio nState, v8::Isolate* isolate) |
2348 { | 2357 { |
2349 ASSERT(arrayBuffers.size()); | 2358 ASSERT(arrayBuffers.size()); |
(...skipping 12 matching lines...) Expand all Loading... | |
2362 if (visited.contains(arrayBuffers[i].get())) | 2371 if (visited.contains(arrayBuffers[i].get())) |
2363 continue; | 2372 continue; |
2364 visited.add(arrayBuffers[i].get()); | 2373 visited.add(arrayBuffers[i].get()); |
2365 | 2374 |
2366 bool result = arrayBuffers[i]->transfer(contents->at(i)); | 2375 bool result = arrayBuffers[i]->transfer(contents->at(i)); |
2367 if (!result) { | 2376 if (!result) { |
2368 exceptionState.throwDOMException(DataCloneError, "ArrayBuffer at ind ex " + String::number(i) + " could not be transferred."); | 2377 exceptionState.throwDOMException(DataCloneError, "ArrayBuffer at ind ex " + String::number(i) + " could not be transferred."); |
2369 return nullptr; | 2378 return nullptr; |
2370 } | 2379 } |
2371 | 2380 |
2372 neuterBinding(arrayBuffers[i].get()); | 2381 neuterArrayBufferInAllWorlds(arrayBuffers[i].get()); |
2373 } | 2382 } |
2374 return contents.release(); | 2383 return contents.release(); |
2375 } | 2384 } |
2376 | 2385 |
2377 SerializedScriptValue::SerializedScriptValue(v8::Handle<v8::Value> value, Messag ePortArray* messagePorts, ArrayBufferArray* arrayBuffers, ExceptionState& except ionState, v8::Isolate* isolate) | 2386 SerializedScriptValue::SerializedScriptValue(v8::Handle<v8::Value> value, Messag ePortArray* messagePorts, ArrayBufferArray* arrayBuffers, ExceptionState& except ionState, v8::Isolate* isolate) |
2378 : m_externallyAllocatedMemory(0) | 2387 : m_externallyAllocatedMemory(0) |
2379 { | 2388 { |
2380 Writer writer(isolate); | 2389 Writer writer(isolate); |
2381 Serializer::Status status; | 2390 Serializer::Status status; |
2382 String errorMessage; | 2391 String errorMessage; |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2452 // If the allocated memory was not registered before, then this class is lik ely | 2461 // If the allocated memory was not registered before, then this class is lik ely |
2453 // used in a context other then Worker's onmessage environment and the prese nce of | 2462 // used in a context other then Worker's onmessage environment and the prese nce of |
2454 // current v8 context is not guaranteed. Avoid calling v8 then. | 2463 // current v8 context is not guaranteed. Avoid calling v8 then. |
2455 if (m_externallyAllocatedMemory) { | 2464 if (m_externallyAllocatedMemory) { |
2456 ASSERT(v8::Isolate::GetCurrent()); | 2465 ASSERT(v8::Isolate::GetCurrent()); |
2457 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(-m_exte rnallyAllocatedMemory); | 2466 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(-m_exte rnallyAllocatedMemory); |
2458 } | 2467 } |
2459 } | 2468 } |
2460 | 2469 |
2461 } // namespace WebCore | 2470 } // namespace WebCore |
OLD | NEW |