Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1711)

Unified Diff: Source/modules/crypto/CryptoResultImpl.cpp

Issue 1233173002: Have ScriptPromiseResolver on the Oilpan heap always. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: tidy unit tests Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/modules/crypto/CryptoResultImpl.cpp
diff --git a/Source/modules/crypto/CryptoResultImpl.cpp b/Source/modules/crypto/CryptoResultImpl.cpp
index 2360727a13a91f34ae1e4352523c2068b1c2c2e2..c91519c6d1e0631daa5bd1d725ee9bf095cf0445 100644
--- a/Source/modules/crypto/CryptoResultImpl.cpp
+++ b/Source/modules/crypto/CryptoResultImpl.cpp
@@ -63,12 +63,12 @@ static void rejectWithTypeError(const String& errorDetails, ScriptPromiseResolve
class CryptoResultImpl::Resolver final : public ScriptPromiseResolver {
public:
- static PassRefPtrWillBeRawPtr<ScriptPromiseResolver> create(ScriptState* scriptState, CryptoResultImpl* result)
+ static Resolver* create(ScriptState* scriptState, CryptoResultImpl* result)
{
- RefPtrWillBeRawPtr<Resolver> resolver = adoptRefWillBeNoop(new Resolver(scriptState, result));
+ Resolver* resolver = new Resolver(scriptState, result);
resolver->suspendIfNeeded();
resolver->keepAliveWhilePending();
- return resolver.release();
+ return resolver;
}
void stop() override
@@ -79,11 +79,18 @@ public:
ScriptPromiseResolver::stop();
}
+ DEFINE_INLINE_VIRTUAL_TRACE()
+ {
+ visitor->trace(m_result);
+ ScriptPromiseResolver::trace(visitor);
+ }
+
private:
Resolver(ScriptState* scriptState, CryptoResultImpl* result)
: ScriptPromiseResolver(scriptState)
, m_result(result) { }
- RefPtr<CryptoResultImpl> m_result;
+
+ Member<CryptoResultImpl> m_result;
};
ExceptionCode webCryptoErrorToExceptionCode(WebCryptoErrorType errorType)
@@ -107,19 +114,38 @@ ExceptionCode webCryptoErrorToExceptionCode(WebCryptoErrorType errorType)
return 0;
}
+CryptoResultImpl::CryptoResultImpl(ScriptState* scriptState)
+ : m_cancelled(0)
+{
+ ASSERT(scriptState->contextIsValid());
+ if (scriptState->executionContext()->activeDOMObjectsAreStopped()) {
haraken 2015/07/17 01:40:36 Not related to this CL, why do we need this specia
sof 2015/07/17 09:43:26 It's due to https://codereview.chromium.org/780793
+ // If active dom objects have been stopped, avoid creating
+ // CryptoResultResolver.
+ m_resolver = nullptr;
+ } else {
+ m_resolver = Resolver::create(scriptState, this);
+ }
+}
+
CryptoResultImpl::~CryptoResultImpl()
{
ASSERT(!m_resolver);
}
+DEFINE_TRACE(CryptoResultImpl)
+{
+ visitor->trace(m_resolver);
+ CryptoResult::trace(visitor);
+}
+
void CryptoResultImpl::clearResolver()
{
m_resolver = nullptr;
}
-PassRefPtrWillBeRawPtr<CryptoResultImpl> CryptoResultImpl::create(ScriptState* scriptState)
+CryptoResultImpl* CryptoResultImpl::create(ScriptState* scriptState)
{
- return adoptRefWillBeNoop(new CryptoResultImpl(scriptState));
+ return new CryptoResultImpl(scriptState);
}
void CryptoResultImpl::completeWithError(WebCryptoErrorType errorType, const WebString& errorDetails)
@@ -203,19 +229,6 @@ void CryptoResultImpl::cancel()
releaseStore(&m_cancelled, 1);
}
-CryptoResultImpl::CryptoResultImpl(ScriptState* scriptState)
- : m_cancelled(0)
-{
- ASSERT(scriptState->contextIsValid());
- if (scriptState->executionContext()->activeDOMObjectsAreStopped()) {
- // If active dom objects have been stopped, avoid creating
- // CryptoResultResolver.
- m_resolver = nullptr;
- } else {
- m_resolver = Resolver::create(scriptState, this).get();
- }
-}
-
ScriptPromise CryptoResultImpl::promise()
{
return m_resolver ? m_resolver->promise() : ScriptPromise();

Powered by Google App Engine
This is Rietveld 408576698