Index: Source/bindings/core/v8/V8PerIsolateData.cpp |
diff --git a/Source/bindings/core/v8/V8PerIsolateData.cpp b/Source/bindings/core/v8/V8PerIsolateData.cpp |
index 081c0e6b780d87f6f0e25fbc684c77e2d044244b..a1bd8584735efd5763fef1a1ca04355e10248ab8 100644 |
--- a/Source/bindings/core/v8/V8PerIsolateData.cpp |
+++ b/Source/bindings/core/v8/V8PerIsolateData.cpp |
@@ -118,16 +118,25 @@ v8::Persistent<v8::Value>& V8PerIsolateData::ensureLiveRoot() |
return m_liveRoot.getUnsafe(); |
} |
-void V8PerIsolateData::dispose(v8::Isolate* isolate) |
+void V8PerIsolateData::willBeDestroyed(v8::Isolate* isolate) |
+{ |
+ V8PerIsolateData* data = from(isolate); |
+ |
+ // Clear any data that may have handles into the heap, |
+ // prior to calling ThreadState::detach(). |
+ data->m_idbPendingTransactionMonitor.clear(); |
+} |
+ |
+void V8PerIsolateData::destroy(v8::Isolate* isolate) |
{ |
#if ENABLE(ASSERT) |
if (blink::Platform::current()->currentThread()) |
isolate->RemoveCallCompletedCallback(&assertV8RecursionScope); |
#endif |
- void* data = isolate->GetData(gin::kEmbedderBlink); |
+ V8PerIsolateData* data = from(isolate); |
// FIXME: Remove once all v8::Isolate::GetCurrent() calls are gone. |
isolate->Exit(); |
- delete static_cast<V8PerIsolateData*>(data); |
+ delete data; |
} |
V8PerIsolateData::DOMTemplateMap& V8PerIsolateData::currentDOMTemplateMap() |
@@ -231,4 +240,11 @@ v8::Handle<v8::FunctionTemplate> V8PerIsolateData::toStringTemplate() |
return m_toStringTemplate.newLocal(isolate()); |
} |
+IDBPendingTransactionMonitor* V8PerIsolateData::ensureIDBPendingTransactionMonitor() |
+{ |
+ if (!m_idbPendingTransactionMonitor) |
+ m_idbPendingTransactionMonitor = adoptPtr(new IDBPendingTransactionMonitor()); |
+ return m_idbPendingTransactionMonitor.get(); |
+} |
+ |
} // namespace blink |