Chromium Code Reviews| Index: Source/modules/crypto/CryptoKey.cpp |
| diff --git a/Source/modules/crypto/CryptoKey.cpp b/Source/modules/crypto/CryptoKey.cpp |
| index 4c2babef72784848851178bb1502133caf4cfe29..24cdec0b460a0f3c7666f857cea8f951118120a6 100644 |
| --- a/Source/modules/crypto/CryptoKey.cpp |
| +++ b/Source/modules/crypto/CryptoKey.cpp |
| @@ -32,6 +32,7 @@ |
| #include "modules/crypto/CryptoKey.h" |
| #include "bindings/core/v8/ExceptionState.h" |
| +#include "bindings/core/v8/V8Uint8Array.h" |
| #include "core/dom/ExceptionCode.h" |
| #include "platform/CryptoResult.h" |
| #include "public/platform/WebCryptoAlgorithmParams.h" |
| @@ -96,6 +97,45 @@ WebCryptoKeyUsageMask keyUsageStringToMask(const String& usageString) |
| return 0; |
| } |
| +class DictionaryBuilder : public blink::WebCryptoKeyAlgorithmDictionary { |
| +public: |
| + DictionaryBuilder(ScriptState* scriptState) |
|
haraken
2015/03/09 04:13:44
Add explicit.
|
| + : m_scriptState(scriptState) |
| + , m_dictionary(Dictionary::createEmpty(scriptState->isolate())) |
| + { |
| + } |
| + |
| + virtual void setString(const char* propertyName, const char* value) |
| + { |
| + m_dictionary.set(propertyName, value); |
| + } |
| + |
| + virtual void setUint(const char* propertyName, unsigned value) |
| + { |
| + m_dictionary.set(propertyName, value); |
| + } |
| + |
| + virtual void setAlgorithm(const char* propertyName, const blink::WebCryptoAlgorithm& algorithm) |
| + { |
| + ASSERT(algorithm.paramsType() == blink::WebCryptoAlgorithmParamsTypeNone); |
| + |
| + Dictionary algorithmValue = Dictionary::createEmpty(m_scriptState->isolate()); |
| + algorithmValue.set("name", blink::WebCryptoAlgorithm::lookupAlgorithmInfo(algorithm.id())->name); |
| + m_dictionary.set(propertyName, algorithmValue); |
| + } |
| + |
| + virtual void setUint8Array(const char* propertyName, const blink::WebVector<unsigned char>& vector) |
| + { |
| + m_dictionary.set(propertyName, toV8(DOMUint8Array::create(vector.data(), vector.size()), m_scriptState->context()->Global(), m_scriptState->isolate())); |
| + } |
| + |
| + const Dictionary& dictionary() const { return m_dictionary; } |
| + |
| +private: |
| + ScriptState* m_scriptState; |
|
haraken
2015/03/09 04:13:44
Not related to your CL, a safer way to use a Scrip
|
| + Dictionary m_dictionary; |
| +}; |
| + |
| } // namespace |
| CryptoKey::~CryptoKey() |
| @@ -117,6 +157,13 @@ bool CryptoKey::extractable() const |
| return m_key.extractable(); |
| } |
| +ScriptValue CryptoKey::algorithm(ScriptState* scriptState) |
| +{ |
| + DictionaryBuilder builder(scriptState); |
| + m_key.algorithm().writeToDictionary(&builder); |
| + return ScriptValue(scriptState, builder.dictionary().v8Value()); |
| +} |
| + |
| // FIXME: This creates a new javascript array each time. What should happen |
| // instead is return the same (immutable) array. (Javascript callers can |
| // distinguish this by doing an == test on the arrays and seeing they are |