| Index: Source/modules/crypto/KeyOperation.cpp
|
| diff --git a/Source/bindings/v8/ExceptionState.cpp b/Source/modules/crypto/KeyOperation.cpp
|
| similarity index 50%
|
| copy from Source/bindings/v8/ExceptionState.cpp
|
| copy to Source/modules/crypto/KeyOperation.cpp
|
| index 26ea567f9cab9fc1a6f509cbe621d65e70544171..3c98d881cf78c15c5c8a6efca6967f576afba72b 100644
|
| --- a/Source/bindings/v8/ExceptionState.cpp
|
| +++ b/Source/modules/crypto/KeyOperation.cpp
|
| @@ -29,53 +29,90 @@
|
| */
|
|
|
| #include "config.h"
|
| -#include "bindings/v8/ExceptionState.h"
|
| +#include "modules/crypto/KeyOperation.h"
|
|
|
| -#include "bindings/v8/V8ThrowException.h"
|
| +#include "bindings/v8/ExceptionState.h"
|
| +#include "V8Key.h" // NOTE: This must appear before ScriptPromiseResolver to define toV8()
|
| +#include "bindings/v8/ScriptPromiseResolver.h"
|
| #include "core/dom/ExceptionCode.h"
|
| +#include "modules/crypto/Key.h"
|
| +#include "public/platform/WebCrypto.h"
|
|
|
| namespace WebCore {
|
|
|
| -void ExceptionState::clearException()
|
| +PassRefPtr<KeyOperation> KeyOperation::create()
|
| {
|
| - m_code = 0;
|
| - m_exception.clear();
|
| + return adoptRef(new KeyOperation);
|
| }
|
|
|
| -void ExceptionState::throwDOMException(const ExceptionCode& ec, const String& message)
|
| +KeyOperation::KeyOperation()
|
| + : m_state(Initializing)
|
| + , m_impl(0)
|
| + , m_exceptionCode(0)
|
| {
|
| - ASSERT(ec);
|
| - m_code = ec;
|
| - setException(V8ThrowException::createDOMException(ec, message, m_isolate));
|
| }
|
|
|
| -void ExceptionState::setException(v8::Handle<v8::Value> exception)
|
| +KeyOperation::~KeyOperation()
|
| {
|
| - if (exception.IsEmpty()) {
|
| - clearException();
|
| - return;
|
| - }
|
| + ASSERT(!m_impl);
|
| +}
|
| +
|
| +void KeyOperation::initializationFailed()
|
| +{
|
| + ASSERT(m_state == Initializing);
|
| + ASSERT(!m_impl);
|
|
|
| - m_exception.set(m_isolate, exception);
|
| + m_exceptionCode = NotSupportedError;
|
| + m_state = Done;
|
| }
|
|
|
| -void ExceptionState::throwTypeError(const String& message)
|
| +void KeyOperation::initializationSucceeded(WebKit::WebCryptoKeyOperation* operationImpl)
|
| {
|
| - m_code = TypeError;
|
| - setException(V8ThrowException::createTypeError(message, m_isolate));
|
| + ASSERT(m_state == Initializing);
|
| + ASSERT(operationImpl);
|
| + ASSERT(!m_impl);
|
| +
|
| + m_impl = operationImpl;
|
| + m_state = InProgress;
|
| }
|
|
|
| -NonThrowExceptionState::NonThrowExceptionState()
|
| - : ExceptionState(0) { }
|
| +void KeyOperation::completeWithError()
|
| +{
|
| + ASSERT(m_state == Initializing || m_state == InProgress);
|
|
|
| -void NonThrowExceptionState::throwDOMException(const ExceptionCode& ec, const String&)
|
| + m_impl = 0;
|
| + m_state = Done;
|
| +
|
| + promiseResolver()->reject(ScriptValue::createNull());
|
| +}
|
| +
|
| +void KeyOperation::completeWithKey(const WebKit::WebCryptoKey& key)
|
| {
|
| - m_code = ec;
|
| + ASSERT(m_state == Initializing || m_state == InProgress);
|
| +
|
| + m_impl = 0;
|
| + m_state = Done;
|
| +
|
| + promiseResolver()->fulfill(Key::create(key));
|
| +}
|
| +
|
| +ScriptObject KeyOperation::returnValue(ExceptionState& es)
|
| +{
|
| + ASSERT(m_state != Initializing);
|
| +
|
| + if (m_exceptionCode) {
|
| + es.throwDOMException(m_exceptionCode);
|
| + return ScriptObject();
|
| + }
|
| +
|
| + return promiseResolver()->promise();
|
| }
|
|
|
| -void NonThrowExceptionState::throwTypeError(const String&)
|
| +ScriptPromiseResolver* KeyOperation::promiseResolver()
|
| {
|
| - m_code = TypeError;
|
| + if (!m_promiseResolver)
|
| + m_promiseResolver = ScriptPromiseResolver::create();
|
| + return m_promiseResolver.get();
|
| }
|
|
|
| } // namespace WebCore
|
|
|