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) |
{ |
} |