bool _NPN_EvaluateHelper(NPP npp, bool popupsAllowed, NPObject* npObject, NPString* npScript, NPVariant* result) { VOID_TO_NPVARIANT(*result); if (!npObject) return false; if (npObject->_class != npScriptObjectClass) return false; v8::HandleScope handleScope; v8::Handle<v8::Context> context = toV8Context(npp, npObject); if (context.IsEmpty()) return false; V8Proxy* proxy = toV8Proxy(npObject); ASSERT(proxy); v8::Context::Scope scope(context); WebCore::String filename; if (!popupsAllowed) filename = "npscript"; WebCore::String script = WebCore::String::fromUTF8(npScript->UTF8Characters, npScript->UTF8Length); v8::Local<v8::Value> v8result = proxy->evaluate(WebCore::ScriptSourceCode(script, WebCore::KURL(WebCore::ParsedURLString, filename)), 0); if (v8result.IsEmpty()) return false; convertV8ObjectToNPVariant(v8result, npObject, result); return true; }
bool _NPN_EvaluateHelper(NPP npp, bool popupsAllowed, NPObject* npObject, NPString* npScript, NPVariant* result) { VOID_TO_NPVARIANT(*result); if (!npObject) return false; if (npObject->_class != npScriptObjectClass) return false; v8::HandleScope handleScope; v8::Handle<v8::Context> context = toV8Context(npp, npObject); if (context.IsEmpty()) return false; V8Proxy* proxy = toV8Proxy(npObject); ASSERT(proxy); v8::Context::Scope scope(context); ExceptionCatcher exceptionCatcher; String filename; if (!popupsAllowed) filename = "npscript"; // Set popupsAllowed flag to the current execution frame, so WebKit can get // right gesture status for popups initiated from plugins. Frame* frame = proxy->frame(); ASSERT(frame); bool oldAllowPopups = frame->script()->allowPopupsFromPlugin(); frame->script()->setAllowPopupsFromPlugin(popupsAllowed); String script = String::fromUTF8(npScript->UTF8Characters, npScript->UTF8Length); v8::Local<v8::Value> v8result = proxy->evaluate(ScriptSourceCode(script, KURL(ParsedURLString, filename)), 0); // Restore the old flag. frame->script()->setAllowPopupsFromPlugin(oldAllowPopups); if (v8result.IsEmpty()) return false; convertV8ObjectToNPVariant(v8result, npObject, result); return true; }