v8::Handle<v8::Object> V8SVGFEFuncAElement::wrap(SVGFEFuncAElement* impl) { v8::Handle<v8::Object> wrapper; V8Proxy* proxy = 0; if (impl->document()) { proxy = V8Proxy::retrieve(impl->document()->frame()); if (proxy && static_cast<Node*>(impl->document()) == static_cast<Node*>(impl)) proxy->windowShell()->initContextIfNeeded(); } wrapper = V8DOMWrapper::getWrapper(impl); if (!wrapper.IsEmpty()) return wrapper; v8::Handle<v8::Context> context; if (proxy) context = proxy->context(); // Enter the node's context and create the wrapper in that context. if (!context.IsEmpty()) context->Enter(); wrapper = V8DOMWrapper::instantiateV8Object(proxy, &info, impl); // Exit the node's context if it was entered. if (!context.IsEmpty()) context->Exit(); if (wrapper.IsEmpty()) return wrapper; impl->ref(); getDOMNodeMap().set(impl, v8::Persistent<v8::Object>::New(wrapper)); return wrapper; }
bool V8Proxy::handleOutOfMemory() { v8::Local<v8::Context> context = v8::Context::GetCurrent(); if (!context->HasOutOfMemoryException()) return false; // Warning, error, disable JS for this frame? Frame* frame = V8Proxy::retrieveFrame(context); V8Proxy* proxy = V8Proxy::retrieve(frame); if (proxy) { // Clean m_context, and event handlers. proxy->clearForClose(); proxy->windowShell()->destroyGlobal(); } #if PLATFORM(CHROMIUM) PlatformBridge::notifyJSOutOfMemory(frame); #endif // Disable JS. Settings* settings = frame->settings(); ASSERT(settings); settings->setJavaScriptEnabled(false); return true; }
v8::Handle<v8::Object> V8EntityReference::wrap(EntityReference* impl, bool forceNewObject) { v8::Handle<v8::Object> wrapper; V8Proxy* proxy = 0; if (impl->document()) { proxy = V8Proxy::retrieve(impl->document()->frame()); if (proxy && static_cast<Node*>(impl->document()) == static_cast<Node*>(impl)) proxy->windowShell()->initContextIfNeeded(); } if (!forceNewObject) { wrapper = V8DOMWrapper::getWrapper(impl); if (!wrapper.IsEmpty()) return wrapper; } v8::Handle<v8::Context> context; if (proxy) context = proxy->context(); // Enter the node's context and create the wrapper in that context. if (!context.IsEmpty()) context->Enter(); wrapper = V8DOMWrapper::instantiateV8Object(proxy, V8ClassIndex::ENTITYREFERENCE, impl); // Exit the node's context if it was entered. if (!context.IsEmpty()) context->Exit(); if (wrapper.IsEmpty()) return wrapper; impl->ref(); getDOMNodeMap().set(impl, v8::Persistent<v8::Object>::New(wrapper)); return wrapper; }
void ScriptCachedFrameData::restore(Frame* frame) { if (m_context.get().IsEmpty()) return; v8::HandleScope handleScope; v8::Context::Scope contextScope(m_context.get()); m_context.get()->ReattachGlobal(m_global.get()); V8Proxy* proxy = V8Proxy::retrieve(frame); if (proxy) proxy->windowShell()->setContext(m_context.get()); }
v8::Handle<v8::Object> V8SVGFontFaceElement::wrapSlow(SVGFontFaceElement* impl) { v8::Handle<v8::Object> wrapper; V8Proxy* proxy = 0; if (impl->document()) { proxy = V8Proxy::retrieve(impl->document()->frame()); if (proxy && static_cast<Node*>(impl->document()) == static_cast<Node*>(impl)) { if (proxy->windowShell()->initContextIfNeeded()) { // initContextIfNeeded may have created a wrapper for the object, retry from the start. return V8SVGFontFaceElement::wrap(impl); } } } v8::Handle<v8::Context> context; if (proxy) context = proxy->context(); // Enter the node's context and create the wrapper in that context. if (!context.IsEmpty()) context->Enter(); wrapper = V8DOMWrapper::instantiateV8Object(proxy, &info, impl); // Exit the node's context if it was entered. if (!context.IsEmpty()) context->Exit(); if (wrapper.IsEmpty()) return wrapper; impl->ref(); v8::Persistent<v8::Object> wrapperHandle = v8::Persistent<v8::Object>::New(wrapper); if (!hasDependentLifetime) wrapperHandle.MarkIndependent(); wrapperHandle.SetWrapperClassId(v8DOMSubtreeClassId); getDOMNodeMap().set(impl, wrapperHandle); return wrapper; }