void convertV8ObjectToNPVariant(v8::Local<v8::Value> object, NPObject* owner, NPVariant* result) { VOID_TO_NPVARIANT(*result); // It is really the caller's responsibility to deal with the empty handle case because there could be different actions to // take in different contexts. ASSERT(!object.IsEmpty()); if (object.IsEmpty()) return; if (object->IsNumber()) DOUBLE_TO_NPVARIANT(object->NumberValue(), *result); else if (object->IsBoolean()) BOOLEAN_TO_NPVARIANT(object->BooleanValue(), *result); else if (object->IsNull()) NULL_TO_NPVARIANT(*result); else if (object->IsUndefined()) VOID_TO_NPVARIANT(*result); else if (object->IsString()) { v8::Handle<v8::String> str = object->ToString(); int length = str->Utf8Length() + 1; char* utf8Chars = reinterpret_cast<char*>(malloc(length)); str->WriteUtf8(utf8Chars, length, 0, v8::String::HINT_MANY_WRITES_EXPECTED); STRINGN_TO_NPVARIANT(utf8Chars, length-1, *result); } else if (object->IsObject()) { DOMWindow* window = V8Proxy::retrieveWindow(V8Proxy::currentContext()); NPObject* npobject = npCreateV8ScriptObject(0, v8::Handle<v8::Object>::Cast(object), window); if (npobject) _NPN_RegisterObject(npobject, owner); OBJECT_TO_NPVARIANT(npobject, *result); } }
void convertV8ObjectToNPVariant(v8::Local<v8::Value> object, NPObject* owner, NPVariant* result) { VOID_TO_NPVARIANT(*result); // It is really the caller's responsibility to deal with the empty handle case because there could be different actions to // take in different contexts. ASSERT(!object.IsEmpty()); if (object.IsEmpty()) return; if (object->IsInt32()) INT32_TO_NPVARIANT(object->NumberValue(), *result); else if (object->IsNumber()) DOUBLE_TO_NPVARIANT(object->NumberValue(), *result); else if (object->IsBoolean()) BOOLEAN_TO_NPVARIANT(object->BooleanValue(), *result); else if (object->IsNull()) NULL_TO_NPVARIANT(*result); else if (object->IsUndefined()) VOID_TO_NPVARIANT(*result); else if (object->IsString()) { v8::String::Utf8Value utf8(object); char* utf8_chars = strdup(*utf8); STRINGN_TO_NPVARIANT(utf8_chars, utf8.length(), *result); } else if (object->IsObject()) { WebCore::DOMWindow* window = WebCore::V8Proxy::retrieveWindow(WebCore::V8Proxy::currentContext()); NPObject* npobject = npCreateV8ScriptObject(0, v8::Handle<v8::Object>::Cast(object), window); if (npobject) _NPN_RegisterObject(npobject, owner); OBJECT_TO_NPVARIANT(npobject, *result); } }
static NPObject* makeStringArrayImpl(const WebVector<WebString>& data) { v8::HandleScope handleScope; v8::Handle<v8::Array> result = v8::Array::New(data.size()); for (size_t i = 0; i < data.size(); ++i) result->Set(i, data[i].data() ? v8::String::New(reinterpret_cast<const uint16_t*>((data[i].data())), data[i].length()) : v8::String::New("")); DOMWindow* window = toDOMWindow(v8::Context::GetCurrent()); return npCreateV8ScriptObject(0, result, window); }
static NPObject* makeIntArrayImpl(const WebVector<int>& data) { v8::HandleScope handleScope; v8::Handle<v8::Array> result = v8::Array::New(data.size()); for (size_t i = 0; i < data.size(); ++i) result->Set(i, v8::Number::New(data[i])); DOMWindow* window = toDOMWindow(v8::Context::GetCurrent()); return npCreateV8ScriptObject(0, result, window); }
static NPObject* makeStringArrayImpl(const WebVector<WebString>& data, v8::Isolate* isolate) { v8::HandleScope handleScope(isolate); v8::Handle<v8::Array> result = v8::Array::New(isolate, data.size()); for (size_t i = 0; i < data.size(); ++i) result->Set(i, v8String(isolate, data[i])); LocalDOMWindow* window = currentDOMWindow(isolate); return npCreateV8ScriptObject(0, result, window, isolate); }
static NPObject* createScriptObject(Frame* frame) { v8::HandleScope handleScope; v8::Handle<v8::Context> v8Context = V8Proxy::mainWorldContext(frame); if (v8Context.IsEmpty()) return createNoScriptObject(); v8::Context::Scope scope(v8Context); DOMWindow* window = frame->domWindow(); v8::Handle<v8::Value> global = toV8(window); ASSERT(global->IsObject()); return npCreateV8ScriptObject(0, v8::Handle<v8::Object>::Cast(global), window); }
static NPObject* createScriptObject(Frame* frame) { v8::HandleScope handleScope; v8::Handle<v8::Context> context = V8Proxy::GetContext(frame); if (context.IsEmpty()) return createNoScriptObject(); v8::Context::Scope scope(context); DOMWindow* window = frame->domWindow(); v8::Handle<v8::Value> global = V8Proxy::ToV8Object(V8ClassIndex::DOMWINDOW, window); ASSERT(global->IsObject()); return npCreateV8ScriptObject(0, v8::Handle<v8::Object>::Cast(global), window); }
static NPObject* makeStringArrayImpl(const WebVector<WebString>& data, v8::Isolate* isolate) { v8::HandleScope handleScope(isolate); v8::Local<v8::Array> result = v8::Array::New(isolate, data.size()); for (size_t i = 0; i < data.size(); ++i) { if (!v8CallBoolean(result->Set(isolate->GetCurrentContext(), v8::Integer::New(isolate, i), v8String(isolate, data[i])))) { result.Clear(); break; } } LocalDOMWindow* window = currentDOMWindow(isolate); return npCreateV8ScriptObject(isolate, 0, result, window); }
NPObject* ScriptController::createScriptObjectForPluginElement(HTMLPlugInElement* plugin) { // Can't create NPObjects when JavaScript is disabled. if (!canExecuteScripts()) return createNoScriptObject(); v8::HandleScope handleScope; v8::Handle<v8::Context> v8Context = V8Proxy::mainWorldContext(m_frame); if (v8Context.IsEmpty()) return createNoScriptObject(); v8::Context::Scope scope(v8Context); DOMWindow* window = m_frame->domWindow(); v8::Handle<v8::Value> v8plugin = toV8(static_cast<HTMLEmbedElement*>(plugin)); if (!v8plugin->IsObject()) return createNoScriptObject(); return npCreateV8ScriptObject(0, v8::Handle<v8::Object>::Cast(v8plugin), window); }
NPObject* ScriptController::createScriptObjectForPluginElement(HTMLPlugInElement* plugin) { // Can't create NPObjects when JavaScript is disabled. if (!isEnabled()) return createNoScriptObject(); v8::HandleScope handleScope; v8::Handle<v8::Context> context = V8Proxy::GetContext(m_frame); if (context.IsEmpty()) return createNoScriptObject(); v8::Context::Scope scope(context); DOMWindow* window = m_frame->domWindow(); v8::Handle<v8::Value> v8plugin = V8Proxy::ToV8Object(V8ClassIndex::HTMLEMBEDELEMENT, plugin); if (!v8plugin->IsObject()) return createNoScriptObject(); return npCreateV8ScriptObject(0, v8::Handle<v8::Object>::Cast(v8plugin), window); }