| Index: Source/bindings/v8/V8FutureInit.cpp
|
| diff --git a/Source/bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp b/Source/bindings/v8/V8FutureInit.cpp
|
| similarity index 51%
|
| copy from Source/bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp
|
| copy to Source/bindings/v8/V8FutureInit.cpp
|
| index 66d97e217f09100524a05cd718aac2e01ef0d3f1..baa00283653c6c37fca17eefb65bfc7eed2cb54a 100644
|
| --- a/Source/bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp
|
| +++ b/Source/bindings/v8/V8FutureInit.cpp
|
| @@ -1,10 +1,10 @@
|
| /*
|
| - * Copyright (c) 2009, 2012 Google Inc. All rights reserved.
|
| - *
|
| + * Copyright (C) 2013 Google Inc. All rights reserved.
|
| + *
|
| * Redistribution and use in source and binary forms, with or without
|
| * modification, are permitted provided that the following conditions are
|
| * met:
|
| - *
|
| + *
|
| * * Redistributions of source code must retain the above copyright
|
| * notice, this list of conditions and the following disclaimer.
|
| * * Redistributions in binary form must reproduce the above
|
| @@ -14,7 +14,7 @@
|
| * * Neither the name of Google Inc. nor the names of its
|
| * contributors may be used to endorse or promote products derived from
|
| * this software without specific prior written permission.
|
| - *
|
| + *
|
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| @@ -30,48 +30,67 @@
|
|
|
| #include "config.h"
|
|
|
| -#include "V8SQLStatementErrorCallback.h"
|
| +#include "bindings/v8/V8FutureInit.h"
|
|
|
| -#include "V8SQLError.h"
|
| -#include "V8SQLTransaction.h"
|
| -#include "bindings/v8/V8Callback.h"
|
| -#include "core/dom/ScriptExecutionContext.h"
|
| -#include "wtf/Assertions.h"
|
| +// Include generated files.
|
| +#include "V8Future.h"
|
| +#include "V8FutureResolver.h"
|
| +
|
| +#include "bindings/v8/ScriptController.h"
|
| +#include "bindings/v8/V8Binding.h"
|
| +#include "core/platform/Logging.h"
|
|
|
| namespace WebCore {
|
|
|
| -bool V8SQLStatementErrorCallback::handleEvent(SQLTransaction* transaction, SQLError* error)
|
| +V8FutureInit::V8FutureInit(v8::Handle<v8::Function> callback, ScriptExecutionContext* context)
|
| + : ActiveDOMCallback(context)
|
| + , m_callback(callback)
|
| + , m_world(DOMWrapperWorld::current())
|
| +{
|
| + // FIXME: Probably NO. Make the Persistent m_callback has weak?
|
| +}
|
| +
|
| +ScriptValue V8FutureInit::call(PassRefPtr<FutureResolver> value, PassRefPtr<Future> future, ScriptExecutionContext*)
|
| {
|
| if (!canInvokeCallback())
|
| - return true;
|
| + return ScriptValue();
|
|
|
| v8::HandleScope handleScope;
|
|
|
| v8::Handle<v8::Context> v8Context = toV8Context(scriptExecutionContext(), m_world.get());
|
| if (v8Context.IsEmpty())
|
| - return true;
|
| + return ScriptValue();
|
|
|
| + // Enter the context.
|
| v8::Context::Scope scope(v8Context);
|
|
|
| - v8::Handle<v8::Value> transactionHandle = toV8(transaction, v8::Handle<v8::Object>(), v8Context->GetIsolate());
|
| - v8::Handle<v8::Value> errorHandle = toV8(error, v8::Handle<v8::Object>(), v8Context->GetIsolate());
|
| - if (transactionHandle.IsEmpty() || errorHandle.IsEmpty()) {
|
| + // FIXME: Need to New with v8Context's isolate?
|
| +
|
| + if (m_callback.isEmpty())
|
| + return ScriptValue();
|
| +
|
| + v8::Handle<v8::Function> callback = m_callback.get();
|
| +
|
| + // Call get() to disambiguate toV8 call.
|
| + v8::Handle<v8::Value> futureHandle = toV8(future.get(), v8::Handle<v8::Object>(), v8Context->GetIsolate());
|
| + if (!futureHandle->IsObject() || futureHandle.IsEmpty()) {
|
| + if (!isScriptControllerTerminating())
|
| + CRASH();
|
| + return ScriptValue();
|
| + }
|
| +
|
| + v8::Handle<v8::Value> valueHandle = toV8(value.get(), v8::Handle<v8::Object>(), v8Context->GetIsolate());
|
| + if (valueHandle.IsEmpty()) {
|
| if (!isScriptControllerTerminating())
|
| CRASH();
|
| - return true;
|
| + return ScriptValue();
|
| }
|
| + v8::Handle<v8::Value> argv[] = { valueHandle };
|
|
|
| - v8::Handle<v8::Value> argv[] = {
|
| - transactionHandle,
|
| - errorHandle
|
| - };
|
| -
|
| - bool callbackReturnValue = false;
|
| - // Step 6: If the error callback returns false, then move on to the next
|
| - // statement, if any, or onto the next overall step otherwise. Otherwise,
|
| - // the error callback did not return false, or there was no error callback.
|
| - // Jump to the last step in the overall steps.
|
| - return invokeCallback(m_callback.get(), 2, argv, callbackReturnValue, scriptExecutionContext()) || callbackReturnValue;
|
| + v8::TryCatch exceptionCatcher;
|
| + exceptionCatcher.SetVerbose(true); // ?
|
| + ScriptController::callFunctionWithInstrumentation(scriptExecutionContext(), callback, v8::Handle<v8::Function>::Cast(futureHandle), 1, argv);
|
| + return exceptionCatcher.Exception();
|
| }
|
|
|
| } // namespace WebCore
|
|
|