summaryrefslogtreecommitdiffstats
path: root/WebCore/bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp')
-rw-r--r--WebCore/bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp29
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>();