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

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

Issue 783423003: Make ScriptPromiseResolver RefCountedWillBeRefCountedGarbageCollected. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years 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 dc0b04082cf18c07b7d5437715b08167a377a7aa..437d816bc11d15d0ba6ef0d98ca6ac9b0c215be7 100644
--- a/Source/modules/crypto/CryptoResultImpl.cpp
+++ b/Source/modules/crypto/CryptoResultImpl.cpp
@@ -62,9 +62,9 @@ static void rejectWithTypeError(const String& errorDetails, ScriptPromiseResolve
class CryptoResultImpl::Resolver final : public ScriptPromiseResolver {
public:
- static PassRefPtr<ScriptPromiseResolver> create(ScriptState* scriptState, CryptoResultImpl* result)
+ static PassRefPtrWillBeRawPtr<ScriptPromiseResolver> create(ScriptState* scriptState, CryptoResultImpl* result)
{
- RefPtr<Resolver> resolver = adoptRef(new Resolver(scriptState, result));
+ RefPtrWillBeRawPtr<Resolver> resolver = adoptRefWillBeNoop(new Resolver(scriptState, result));
resolver->suspendIfNeeded();
resolver->keepAliveWhilePending();
return resolver.release();
@@ -78,6 +78,11 @@ public:
ScriptPromiseResolver::stop();
}
+ virtual void trace(Visitor* visitor)
haraken 2014/12/16 09:43:29 Add override. The same comment for other overridd
tasak 2014/12/16 11:54:28 Done.
+ {
+ ScriptPromiseResolver::trace(visitor);
+ }
+
private:
Resolver(ScriptState* scriptState, CryptoResultImpl* result)
: ScriptPromiseResolver(scriptState)
@@ -113,41 +118,55 @@ CryptoResultImpl::~CryptoResultImpl()
void CryptoResultImpl::clearResolver()
{
+#if ENABLE(OILPAN)
+ m_resolver.clear();
+#else
m_resolver = nullptr;
+#endif
+}
+
+ScriptPromiseResolver* CryptoResultImpl::resolver()
+{
+#if ENABLE(OILPAN)
+ return m_resolver ? m_resolver.get()->get() : nullptr;
+#else
+ return m_resolver;
+#endif
}
-PassRefPtr<CryptoResultImpl> CryptoResultImpl::create(ScriptState* scriptState)
+PassRefPtrWillBeRawPtr<CryptoResultImpl> CryptoResultImpl::create(ScriptState* scriptState)
{
- return adoptRef(new CryptoResultImpl(scriptState));
+ return adoptRefWillBeNoop(new CryptoResultImpl(scriptState));
}
void CryptoResultImpl::completeWithError(WebCryptoErrorType errorType, const WebString& errorDetails)
{
- if (m_resolver) {
+ if (resolver()) {
+ ScriptPromiseResolver* scriptPromiseResolver = resolver();
ExceptionCode ec = webCryptoErrorToExceptionCode(errorType);
// Handle TypeError separately, as it cannot be created using
// DOMException.
if (ec == V8TypeError)
- rejectWithTypeError(errorDetails, m_resolver);
+ rejectWithTypeError(errorDetails, scriptPromiseResolver);
else
- m_resolver->reject(DOMException::create(ec, errorDetails));
+ scriptPromiseResolver->reject(DOMException::create(ec, errorDetails));
}
clearResolver();
}
void CryptoResultImpl::completeWithBuffer(const void* bytes, unsigned bytesSize)
{
- if (m_resolver)
- m_resolver->resolve(DOMArrayBuffer::create(bytes, bytesSize));
+ if (resolver())
+ resolver()->resolve(DOMArrayBuffer::create(bytes, bytesSize));
clearResolver();
}
void CryptoResultImpl::completeWithJson(const char* utf8Data, unsigned length)
{
- if (m_resolver) {
- ScriptPromiseResolver* resolver = m_resolver;
- ScriptState* scriptState = resolver->scriptState();
+ if (resolver()) {
+ ScriptPromiseResolver* scriptPromiseResolver = resolver();
+ ScriptState* scriptState = scriptPromiseResolver->scriptState();
ScriptState::Scope scope(scriptState);
v8::Handle<v8::String> jsonString = v8::String::NewFromUtf8(scriptState->isolate(), utf8Data, v8::String::kInternalizedString, length);
@@ -156,9 +175,9 @@ void CryptoResultImpl::completeWithJson(const char* utf8Data, unsigned length)
v8::Handle<v8::Value> jsonDictionary = v8::JSON::Parse(jsonString);
if (exceptionCatcher.HasCaught() || jsonDictionary.IsEmpty()) {
ASSERT_NOT_REACHED();
- resolver->reject(DOMException::create(OperationError, "Failed inflating JWK JSON to object"));
+ scriptPromiseResolver->reject(DOMException::create(OperationError, "Failed inflating JWK JSON to object"));
} else {
- resolver->resolve(jsonDictionary);
+ scriptPromiseResolver->resolve(jsonDictionary);
}
}
clearResolver();
@@ -166,22 +185,22 @@ void CryptoResultImpl::completeWithJson(const char* utf8Data, unsigned length)
void CryptoResultImpl::completeWithBoolean(bool b)
{
- if (m_resolver)
- m_resolver->resolve(b);
+ if (resolver())
+ resolver()->resolve(b);
clearResolver();
}
void CryptoResultImpl::completeWithKey(const WebCryptoKey& key)
{
- if (m_resolver)
- m_resolver->resolve(CryptoKey::create(key));
+ if (resolver())
+ resolver()->resolve(CryptoKey::create(key));
clearResolver();
}
void CryptoResultImpl::completeWithKeyPair(const WebCryptoKey& publicKey, const WebCryptoKey& privateKey)
{
- if (m_resolver) {
- ScriptState* scriptState = m_resolver->scriptState();
+ if (resolver()) {
+ ScriptState* scriptState = resolver()->scriptState();
ScriptState::Scope scope(scriptState);
Dictionary keyPair = Dictionary::createEmpty(scriptState->isolate());
@@ -192,7 +211,7 @@ void CryptoResultImpl::completeWithKeyPair(const WebCryptoKey& publicKey, const
keyPair.set("publicKey", publicKeyValue);
keyPair.set("privateKey", privateKeyValue);
- m_resolver->resolve(keyPair.v8Value());
+ resolver()->resolve(keyPair.v8Value());
}
clearResolver();
}
@@ -216,13 +235,21 @@ CryptoResultImpl::CryptoResultImpl(ScriptState* scriptState)
// CryptoResultResolver.
m_resolver = nullptr;
} else {
+#if ENABLE(OILPAN)
+ if (!m_resolver)
+ m_resolver = adoptPtr(new Persistent<ScriptPromiseResolver>());
+ *m_resolver = Persistent<ScriptPromiseResolver>(Resolver::create(scriptState, this));
+#else
m_resolver = Resolver::create(scriptState, this).get();
+#endif
}
}
ScriptPromise CryptoResultImpl::promise()
{
- return m_resolver ? m_resolver->promise() : ScriptPromise();
+ if (ScriptPromiseResolver* scriptPromiseResolver = resolver())
+ return scriptPromiseResolver->promise();
+ return ScriptPromise();
}
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698