static v8::Handle<v8::Value> methodMethod(const v8::Arguments& args) { if (args.Length() < 1) return throwNotEnoughArgumentsError(args.GetIsolate()); TestMediaQueryListListener* imp = V8TestMediaQueryListListener::toNative(args.Holder()); V8TRYCATCH(RefPtr<MediaQueryListListener>, listener, MediaQueryListListener::create(args[0])); imp->method(listener); return v8Undefined(); }
static v8::Handle<v8::Value> methodCallback(const v8::Arguments& args) { INC_STATS("DOM.TestMediaQueryListListener.method"); if (args.Length() < 1) return throwNotEnoughArgumentsError(args.GetIsolate()); TestMediaQueryListListener* imp = V8TestMediaQueryListListener::toNative(args.Holder()); V8TRYCATCH(RefPtr<MediaQueryListListener>, listener, MediaQueryListListener::create(MAYBE_MISSING_PARAMETER(args, 0, DefaultIsUndefined))); imp->method(listener); return v8Undefined(); }
static v8::Handle<v8::Value> constructor(const v8::Arguments& args) { if (args.Length() < 1) return throwNotEnoughArgumentsError(args.GetIsolate()); V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, type, args[0]); TestEventConstructorInit eventInit; if (args.Length() >= 2) { V8TRYCATCH(Dictionary, options, Dictionary(args[1], args.GetIsolate())); if (!fillTestEventConstructorInit(eventInit, options)) return v8Undefined(); } RefPtr<TestEventConstructor> event = TestEventConstructor::create(type, eventInit); v8::Handle<v8::Object> wrapper = args.Holder(); V8DOMWrapper::associateObjectWithWrapper(event.release(), &V8TestEventConstructor::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent); return wrapper; }
static v8::Handle<v8::Value> getDirectoryCallback(const v8::Arguments& args) { if (args.Length() < 2) return throwNotEnoughArgumentsError(args.GetIsolate()); DirectoryEntrySync* imp = V8DirectoryEntrySync::toNative(args.Holder()); ExceptionCode ec = 0; { V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<WithUndefinedOrNullCheck>, path, MAYBE_MISSING_PARAMETER(args, 0, DefaultIsUndefined)); V8TRYCATCH(Dictionary, flags, Dictionary(MAYBE_MISSING_PARAMETER(args, 1, DefaultIsUndefined), args.GetIsolate())); if (!flags.isUndefinedOrNull() && !flags.isObject()) return throwTypeError("Not an object.", args.GetIsolate()); RefPtr<DirectoryEntrySync> result = imp->getDirectory(path, flags, ec); if (UNLIKELY(ec)) goto fail; return toV8(result.release(), args.Holder(), args.GetIsolate()); } fail: return setDOMException(ec, args.GetIsolate()); }
v8::Handle<v8::Value> V8Intent::constructorCallbackCustom(const v8::Arguments& args) { if (args.Length() < 1) return throwNotEnoughArgumentsError(args.GetIsolate()); if (args.Length() == 1) { // Use the dictionary constructor. This block will return if the // argument isn't a valid Dictionary. V8TRYCATCH(Dictionary, options, Dictionary(args[0], args.GetIsolate())); ExceptionCode ec = 0; RefPtr<Intent> impl = Intent::create(ScriptState::current(), options, ec); if (ec) return setDOMException(ec, args.GetIsolate()); v8::Handle<v8::Object> wrapper = args.Holder(); V8DOMWrapper::associateObjectWithWrapper(impl.release(), &info, wrapper, args.GetIsolate()); return wrapper; } ExceptionCode ec = 0; V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, action, MAYBE_MISSING_PARAMETER(args, 0, DefaultIsUndefined)); V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, type, MAYBE_MISSING_PARAMETER(args, 1, DefaultIsUndefined)); MessagePortArray messagePortArrayTransferList; ArrayBufferArray arrayBufferArrayTransferList; if (args.Length() > 3) { if (!extractTransferables(args[3], messagePortArrayTransferList, arrayBufferArrayTransferList, args.GetIsolate())) return throwTypeError("Could not extract transferables", args.GetIsolate()); } bool dataDidThrow = false; RefPtr<SerializedScriptValue> data = SerializedScriptValue::create(args[2], &messagePortArrayTransferList, &arrayBufferArrayTransferList, dataDidThrow); if (dataDidThrow) return setDOMException(DATA_CLONE_ERR, args.GetIsolate()); RefPtr<Intent> impl = Intent::create(action, type, data, messagePortArrayTransferList, ec); if (ec) return setDOMException(ec, args.GetIsolate()); v8::Handle<v8::Object> wrapper = args.Holder(); V8DOMWrapper::associateObjectWithWrapper(impl.release(), &info, wrapper, args.GetIsolate()); return wrapper; }
v8::Handle<v8::Value> V8SpeechRecognitionError::constructorCallback(const v8::Arguments& args) { if (!args.IsConstructCall()) return throwTypeError("DOM object constructor cannot be called as a function."); if (ConstructorMode::current() == ConstructorMode::WrapExistingObject) return args.Holder(); if (args.Length() < 1) return throwNotEnoughArgumentsError(args.GetIsolate()); V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, type, args[0]); SpeechRecognitionErrorInit eventInit; if (args.Length() >= 2) { V8TRYCATCH(Dictionary, options, Dictionary(args[1], args.GetIsolate())); if (!fillSpeechRecognitionErrorInit(eventInit, options)) return v8Undefined(); } RefPtr<SpeechRecognitionError> event = SpeechRecognitionError::create(type, eventInit); v8::Handle<v8::Object> wrapper = args.Holder(); V8DOMWrapper::associateObjectWithWrapper(event.release(), &info, wrapper, args.GetIsolate()); return wrapper; }
v8::Handle<v8::Value> V8Document::evaluateMethodCustom(const v8::Arguments& args) { RefPtr<Document> document = V8Document::toNative(args.Holder()); ExceptionCode ec = 0; String expression = toWebCoreString(args[0]); RefPtr<Node> contextNode; if (V8Node::HasInstance(args[1], args.GetIsolate(), worldType(args.GetIsolate()))) contextNode = V8Node::toNative(v8::Handle<v8::Object>::Cast(args[1])); RefPtr<XPathNSResolver> resolver = toXPathNSResolver(args[2], args.GetIsolate()); if (!resolver && !args[2]->IsNull() && !args[2]->IsUndefined()) return setDOMException(TYPE_MISMATCH_ERR, args.GetIsolate()); int type = toInt32(args[3]); RefPtr<XPathResult> inResult; if (V8XPathResult::HasInstance(args[4], args.GetIsolate(), worldType(args.GetIsolate()))) inResult = V8XPathResult::toNative(v8::Handle<v8::Object>::Cast(args[4])); V8TRYCATCH(RefPtr<XPathResult>, result, document->evaluate(expression, contextNode.get(), resolver.get(), type, inResult.get(), ec)); if (ec) return setDOMException(ec, args.GetIsolate()); return toV8Fast(result.release(), args, document.get()); }
v8::Handle<v8::Value> V8WorkerContext::importScriptsCallback(const v8::Arguments& args) { INC_STATS("DOM.WorkerContext.importScripts()"); if (!args.Length()) return v8::Undefined(); Vector<String> urls; for (int i = 0; i < args.Length(); i++) { V8TRYCATCH(v8::Handle<v8::String>, scriptUrl, args[i]->ToString()); if (scriptUrl.IsEmpty()) return v8::Undefined(); urls.append(toWebCoreString(scriptUrl)); } WorkerContext* workerContext = V8WorkerContext::toNative(args.Holder()); ExceptionCode ec = 0; workerContext->importScripts(urls, ec); if (ec) return setDOMException(ec, args.GetIsolate()); return v8::Undefined(); }
v8::Handle<v8::Value> V8Blob::constructorCustom(const v8::Arguments& args) { if (!args.Length()) { RefPtr<Blob> blob = Blob::create(); return toV8(blob.get(), args.Holder(), args.GetIsolate()); } v8::Local<v8::Value> firstArg = args[0]; if (!firstArg->IsArray()) return throwTypeError("First argument of the constructor is not of type Array", args.GetIsolate()); String type; String endings = ASCIILiteral("transparent"); if (args.Length() > 1) { if (!args[1]->IsObject()) return throwTypeError("Second argument of the constructor is not of type Object", args.GetIsolate()); V8TRYCATCH(Dictionary, dictionary, Dictionary(args[1], args.GetIsolate())); V8TRYCATCH(bool, containsEndings, dictionary.get("endings", endings)); if (containsEndings) { if (endings != "transparent" && endings != "native") return throwTypeError("The endings property must be either \"transparent\" or \"native\"", args.GetIsolate()); } V8TRYCATCH(bool, containsType, dictionary.get("type", type)); UNUSED_PARAM(containsType); if (!type.containsOnlyASCII()) return throwError(v8SyntaxError, "type must consist of ASCII characters", args.GetIsolate()); type.makeLower(); } ASSERT(endings == "transparent" || endings == "native"); BlobBuilder blobBuilder; V8TRYCATCH(v8::Local<v8::Array>, blobParts, v8::Local<v8::Array>::Cast(firstArg)); uint32_t length = blobParts->Length(); for (uint32_t i = 0; i < length; ++i) { v8::Local<v8::Value> item = blobParts->Get(v8::Uint32::New(i)); ASSERT(!item.IsEmpty()); #if ENABLE(BLOB) if (V8ArrayBuffer::HasInstance(item, args.GetIsolate(), worldType(args.GetIsolate()))) { ArrayBuffer* arrayBuffer = V8ArrayBuffer::toNative(v8::Handle<v8::Object>::Cast(item)); ASSERT(arrayBuffer); blobBuilder.append(arrayBuffer); } else if (V8ArrayBufferView::HasInstance(item, args.GetIsolate(), worldType(args.GetIsolate()))) { ArrayBufferView* arrayBufferView = V8ArrayBufferView::toNative(v8::Handle<v8::Object>::Cast(item)); ASSERT(arrayBufferView); blobBuilder.append(arrayBufferView); } else #endif if (V8Blob::HasInstance(item, args.GetIsolate(), worldType(args.GetIsolate()))) { Blob* blob = V8Blob::toNative(v8::Handle<v8::Object>::Cast(item)); ASSERT(blob); blobBuilder.append(blob); } else { V8TRYCATCH(String, stringValue, toWebCoreString(item)); blobBuilder.append(stringValue, endings); } } RefPtr<Blob> blob = blobBuilder.getBlob(type); return toV8(blob.get(), args.Holder(), args.GetIsolate()); }