Chromium Code Reviews| Index: Source/WebCore/bindings/dart/DartUtilities.cpp |
| diff --git a/Source/WebCore/bindings/dart/DartUtilities.cpp b/Source/WebCore/bindings/dart/DartUtilities.cpp |
| index 12210b23928436328a770c1f314d37d4f68b1fa6..af5f59e01a7d04c6ffffae3707285edad09980e5 100644 |
| --- a/Source/WebCore/bindings/dart/DartUtilities.cpp |
| +++ b/Source/WebCore/bindings/dart/DartUtilities.cpp |
| @@ -262,7 +262,7 @@ static DartDOMData* domDataForIsolate(Dart_Isolate isolate) |
| static DartDOMData* currentDOMData() |
| { |
| - return domDataForIsolate(DartIsolate::current()->isolate()); |
| + return domDataForIsolate(Dart_CurrentIsolate()); |
| } |
| void DartUtilities::registerDOMIsolate(Dart_Isolate isolate, PassRefPtr<DartApplicationLoader> applicationLoader, ScriptExecutionContext* context) |
| @@ -382,6 +382,48 @@ PassRefPtr<ScriptCallStack> DartUtilities::createScriptCallStack() |
| return ScriptCallStack::create(wrappedCallFrames); |
| } |
| +class DartWeakCallback |
| +{ |
| +public: |
| + DartWeakCallback(void* peer, Dart_WeakPersistentHandleFinalizer weakCallback) |
| + : peer(peer) |
| + , weakCallback(weakCallback) |
| + , object(0) |
| + { |
| + } |
| + |
| + void* peer; |
|
Anton Muhin
2012/03/30 11:36:00
nit: m_peer, m_weakCallback, etc.?
|
| + Dart_WeakPersistentHandleFinalizer weakCallback; |
| + Dart_Handle object; |
| +}; |
| + |
| +static void weakCallbackWrapper(Dart_Handle object, void* peer) |
| +{ |
| + DartWeakCallback* callback = static_cast<DartWeakCallback*>(peer); |
| + DartUtilities::domDataForCurrentIsolate()->weakCallbacks()->remove(callback); |
| + (*callback->weakCallback)(object, callback->peer); |
| + delete callback; |
| +} |
| + |
| +Dart_Handle DartUtilities::createWeakPersistentHandle(Dart_Handle object, void* peer, Dart_WeakPersistentHandleFinalizer weakCallback) |
| +{ |
| + DartWeakCallback* callback = new DartWeakCallback(peer, weakCallback); |
| + callback->object = Dart_NewWeakPersistentHandle(object, callback, &weakCallbackWrapper); |
| + domDataForCurrentIsolate()->weakCallbacks()->add(callback); |
| + return callback->object; |
| +} |
| + |
| +void DartUtilities::disposeWeakPersistentHandles() |
| +{ |
| + DartWeakCallbacks* weakCallbacks = domDataForCurrentIsolate()->weakCallbacks(); |
| + for (DartWeakCallbacks::iterator it = weakCallbacks->begin(); it != weakCallbacks->end(); ++it) { |
| + DartWeakCallback* callback = *it; |
| + (*callback->weakCallback)(callback->object, callback->peer); |
| + delete callback; |
| + } |
| + weakCallbacks->clear(); |
| +} |
| + |
| const uint8_t* DartUtilities::fullSnapshot() |
| { |
| static const uint8_t snapshotBuffer[] = { |