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 |