diff options
Diffstat (limited to 'WebCore/bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp')
-rw-r--r-- | WebCore/bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/WebCore/bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp b/WebCore/bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp index 0fd182c..e8c2b68 100644 --- a/WebCore/bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp +++ b/WebCore/bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp @@ -33,7 +33,12 @@ #if ENABLE(INDEXED_DATABASE) #include "V8IndexedDatabaseRequest.h" +#include "IDBDatabaseError.h" +#include "IDBDatabaseRequest.h" #include "V8Binding.h" +#include "V8CustomIDBCallbacks.h" +#include "V8IDBDatabaseError.h" +#include "V8IDBDatabaseRequest.h" #include "V8Proxy.h" namespace WebCore { @@ -45,12 +50,32 @@ v8::Handle<v8::Value> V8IndexedDatabaseRequest::openCallback(const v8::Arguments return throwError(V8Proxy::TypeError); V8Parameter<> name = args[0]; V8Parameter<> description = args[1]; + bool modifyDatabase = true; - if (args.Length() > 2) + if (args.Length() > 2 && !args[2]->IsUndefined() && !args[2]->IsNull()) modifyDatabase = args[2]->BooleanValue(); + v8::Local<v8::Value> onError; + v8::Local<v8::Value> onSuccess; + if (args.Length() > 3 && !args[3]->IsUndefined() && !args[3]->IsNull()) { + if (!args[3]->IsObject()) + return throwError("onerror callback was not the proper type"); + onError = args[3]; + } + if (args.Length() > 4 && !args[4]->IsUndefined() && !args[4]->IsNull()) { + if (!args[4]->IsObject()) + return throwError("onsuccess callback was not the proper type"); + onSuccess = args[4]; + } + if (!onError->IsObject() && !onSuccess->IsObject()) + return throwError("Neither the onerror nor the onsuccess callbacks were set."); + + Frame* frame = V8Proxy::retrieveFrameForCurrentContext(); + RefPtr<V8CustomIDBCallbacks<IDBDatabase, IDBDatabaseRequest> > callbacks = + V8CustomIDBCallbacks<IDBDatabase, IDBDatabaseRequest>::create(onSuccess, onError, frame->document()); + ExceptionCode ec = 0; - imp->open(name, description, modifyDatabase, ec); + imp->open(name, description, modifyDatabase, callbacks, ec); if (ec) return throwError(ec); return v8::Handle<v8::Value>(); |