| Index: Source/modules/crypto/CryptoResultImpl.cpp
|
| diff --git a/Source/modules/crypto/CryptoResultImpl.cpp b/Source/modules/crypto/CryptoResultImpl.cpp
|
| index e2d4f9edc5497be693b8a6d4db6f7190f9b56955..92891da37bba93b6a8a6f57a12f095382a0551bc 100644
|
| --- a/Source/modules/crypto/CryptoResultImpl.cpp
|
| +++ b/Source/modules/crypto/CryptoResultImpl.cpp
|
| @@ -47,27 +47,30 @@
|
|
|
| namespace WebCore {
|
|
|
| -namespace {
|
| -
|
| -class WeakResolver : public ScriptPromiseResolverWithContext {
|
| +class CryptoResultImpl::WeakResolver : public ScriptPromiseResolverWithContext {
|
| public:
|
| - static WeakPtr<ScriptPromiseResolverWithContext> create(ScriptState* scriptState)
|
| + static WeakPtr<ScriptPromiseResolverWithContext> create(ScriptState* scriptState, CryptoResultImpl* result)
|
| {
|
| - RefPtr<WeakResolver> p = adoptRef(new WeakResolver(scriptState));
|
| + RefPtr<WeakResolver> p = adoptRef(new WeakResolver(scriptState, result));
|
| p->suspendIfNeeded();
|
| p->keepAliveWhilePending();
|
| return p->m_weakPtrFactory.createWeakPtr();
|
| }
|
|
|
| + virtual ~WeakResolver()
|
| + {
|
| + m_result->cancel();
|
| + }
|
| +
|
| private:
|
| - explicit WeakResolver(ScriptState* scriptState)
|
| + WeakResolver(ScriptState* scriptState, CryptoResultImpl* result)
|
| : ScriptPromiseResolverWithContext(scriptState)
|
| - , m_weakPtrFactory(this) { }
|
| + , m_weakPtrFactory(this)
|
| + , m_result(result) { }
|
| WeakPtrFactory<ScriptPromiseResolverWithContext> m_weakPtrFactory;
|
| + RefPtr<CryptoResultImpl> m_result;
|
| };
|
|
|
| -} // namespace
|
| -
|
| ExceptionCode webCryptoErrorToExceptionCode(blink::WebCryptoErrorType errorType)
|
| {
|
| switch (errorType) {
|
| @@ -155,8 +158,19 @@ void CryptoResultImpl::completeWithKeyPair(const blink::WebCryptoKey& publicKey,
|
| m_resolver->resolve(KeyPair::create(publicKey, privateKey));
|
| }
|
|
|
| +bool CryptoResultImpl::cancelled() const
|
| +{
|
| + return acquireLoad(&m_cancelled);
|
| +}
|
| +
|
| +void CryptoResultImpl::cancel()
|
| +{
|
| + releaseStore(&m_cancelled, 1);
|
| +}
|
| +
|
| CryptoResultImpl::CryptoResultImpl(ScriptState* scriptState)
|
| - : m_resolver(WeakResolver::create(scriptState))
|
| + : m_resolver(WeakResolver::create(scriptState, this))
|
| + , m_cancelled(0)
|
| {
|
| }
|
|
|
|
|