void ScriptController::clearScriptObjects() { PluginObjectMap::iterator it = m_pluginObjects.begin(); for (; it != m_pluginObjects.end(); ++it) { _NPN_UnregisterObject(it->value); _NPN_ReleaseObject(it->value); } m_pluginObjects.clear(); if (m_windowScriptNPObject) { // Dispose of the underlying V8 object before releasing our reference // to it, so that if a plugin fails to release it properly we will // only leak the NPObject wrapper, not the object, its document, or // anything else they reference. disposeUnderlyingV8Object(m_isolate, m_windowScriptNPObject); _NPN_ReleaseObject(m_windowScriptNPObject); m_windowScriptNPObject = 0; } }
static void freeV8NPObject(NPObject* npObject) { V8NPObject* v8NpObject = reinterpret_cast<V8NPObject*>(npObject); disposeUnderlyingV8Object(npObject, v8::Isolate::GetCurrent()); free(v8NpObject); }