V8DatabaseCustom.cpp [plain text]
#include "config.h"
#if ENABLE(DATABASE)
#include "Database.h"
#include "V8Binding.h"
#include "V8CustomBinding.h"
#include "V8CustomSQLTransactionCallback.h"
#include "V8CustomSQLTransactionErrorCallback.h"
#include "V8CustomVoidCallback.h"
#include "V8Proxy.h"
namespace WebCore {
CALLBACK_FUNC_DECL(DatabaseChangeVersion)
{
INC_STATS("DOM.Database.changeVersion()");
return v8::Undefined();
}
CALLBACK_FUNC_DECL(DatabaseTransaction)
{
INC_STATS("DOM.Database.transaction()");
if (args.Length() == 0) {
V8Proxy::throwError(V8Proxy::SyntaxError, "Transaction callback is required.");
return v8::Undefined();
}
if (!args[0]->IsObject()) {
V8Proxy::throwError(V8Proxy::TypeError, "Transaction callback must be of valid type.");
return v8::Undefined();
}
Database* database = V8DOMWrapper::convertToNativeObject<Database>(V8ClassIndex::DATABASE, args.Holder());
Frame* frame = V8Proxy::retrieveFrame();
RefPtr<V8CustomSQLTransactionCallback> callback = V8CustomSQLTransactionCallback::create(args[0], frame);
RefPtr<V8CustomSQLTransactionErrorCallback> errorCallback;
if (args.Length() > 1) {
if (!args[1]->IsObject()) {
V8Proxy::throwError(V8Proxy::TypeError, "Transaction error callback must be of valid type.");
return v8::Undefined();
}
errorCallback = V8CustomSQLTransactionErrorCallback::create(args[1], frame);
}
RefPtr<V8CustomVoidCallback> successCallback;
if (args.Length() > 2) {
if (!args[1]->IsObject()) {
V8Proxy::throwError(V8Proxy::TypeError, "Transaction success callback must be of valid type.");
return v8::Undefined();
}
successCallback = V8CustomVoidCallback::create(args[2], frame);
}
database->transaction(callback.release(), errorCallback.release(), successCallback.release());
return v8::Undefined();
}
}
#endif