Chromium Code Reviews| Index: Source/bindings/core/v8/ScriptValueSerializer.cpp |
| diff --git a/Source/bindings/core/v8/ScriptValueSerializer.cpp b/Source/bindings/core/v8/ScriptValueSerializer.cpp |
| index 38455c8c93d06ea54e9ab0d119fd143cc6da7331..d0579803007e68d00737362d02e994bbc0f59cb4 100644 |
| --- a/Source/bindings/core/v8/ScriptValueSerializer.cpp |
| +++ b/Source/bindings/core/v8/ScriptValueSerializer.cpp |
| @@ -12,8 +12,6 @@ |
| #include "bindings/core/v8/V8FileList.h" |
| #include "bindings/core/v8/V8ImageData.h" |
| #include "bindings/core/v8/V8MessagePort.h" |
| -#include "bindings/modules/v8/V8CryptoKey.h" |
| -#include "bindings/modules/v8/V8DOMFileSystem.h" |
| #include "core/dom/DOMDataView.h" |
| #include "core/fileapi/Blob.h" |
| #include "core/fileapi/File.h" |
| @@ -197,14 +195,6 @@ void Writer::writeBlob(const String& uuid, const String& type, unsigned long lon |
| doWriteUint64(size); |
| } |
| -void Writer::writeDOMFileSystem(int type, const String& name, const String& url) |
| -{ |
| - append(DOMFileSystemTag); |
| - doWriteUint32(type); |
| - doWriteWebCoreString(name); |
| - doWriteWebCoreString(url); |
| -} |
| - |
|
tasak
2014/11/14 08:07:39
Moved to ScriptValueSerializerForModules.cpp
|
| void Writer::writeBlobIndex(int blobIndex) |
| { |
| ASSERT(blobIndex >= 0); |
| @@ -242,39 +232,6 @@ void Writer::writeFileListIndex(const Vector<int>& blobIndices) |
| doWriteUint32(blobIndices[i]); |
| } |
| -bool Writer::writeCryptoKey(const WebCryptoKey& key) |
| -{ |
| - append(static_cast<uint8_t>(CryptoKeyTag)); |
| - |
| - switch (key.algorithm().paramsType()) { |
| - case WebCryptoKeyAlgorithmParamsTypeAes: |
| - doWriteAesKey(key); |
| - break; |
| - case WebCryptoKeyAlgorithmParamsTypeHmac: |
| - doWriteHmacKey(key); |
| - break; |
| - case WebCryptoKeyAlgorithmParamsTypeRsaHashed: |
| - doWriteRsaHashedKey(key); |
| - break; |
| - case WebCryptoKeyAlgorithmParamsTypeEc: |
| - doWriteEcKey(key); |
| - break; |
| - case WebCryptoKeyAlgorithmParamsTypeNone: |
| - ASSERT_NOT_REACHED(); |
| - return false; |
| - } |
| - |
| - doWriteKeyUsages(key.usages(), key.extractable()); |
| - |
| - WebVector<uint8_t> keyData; |
| - if (!Platform::current()->crypto()->serializeKeyForClone(key, keyData)) |
| - return false; |
| - |
| - doWriteUint32(keyData.size()); |
| - append(keyData.data(), keyData.size()); |
| - return true; |
| -} |
| - |
| void Writer::writeArrayBuffer(const ArrayBuffer& arrayBuffer) |
| { |
| append(ArrayBufferTag); |
| @@ -447,143 +404,6 @@ void Writer::doWriteWebCoreString(const String& string) |
| doWriteString(stringUTF8.data(), stringUTF8.length()); |
| } |
| -void Writer::doWriteHmacKey(const WebCryptoKey& key) |
| -{ |
| - ASSERT(key.algorithm().paramsType() == WebCryptoKeyAlgorithmParamsTypeHmac); |
| - |
| - append(static_cast<uint8_t>(HmacKeyTag)); |
| - ASSERT(!(key.algorithm().hmacParams()->lengthBits() % 8)); |
| - doWriteUint32(key.algorithm().hmacParams()->lengthBits() / 8); |
| - doWriteAlgorithmId(key.algorithm().hmacParams()->hash().id()); |
| -} |
| - |
| -void Writer::doWriteAesKey(const WebCryptoKey& key) |
| -{ |
| - ASSERT(key.algorithm().paramsType() == WebCryptoKeyAlgorithmParamsTypeAes); |
| - |
| - append(static_cast<uint8_t>(AesKeyTag)); |
| - doWriteAlgorithmId(key.algorithm().id()); |
| - // Converting the key length from bits to bytes is lossless and makes |
| - // it fit in 1 byte. |
| - ASSERT(!(key.algorithm().aesParams()->lengthBits() % 8)); |
| - doWriteUint32(key.algorithm().aesParams()->lengthBits() / 8); |
| -} |
| - |
| -void Writer::doWriteRsaHashedKey(const WebCryptoKey& key) |
| -{ |
| - ASSERT(key.algorithm().rsaHashedParams()); |
| - append(static_cast<uint8_t>(RsaHashedKeyTag)); |
| - |
| - doWriteAlgorithmId(key.algorithm().id()); |
| - doWriteAsymmetricKeyType(key.type()); |
| - |
| - const WebCryptoRsaHashedKeyAlgorithmParams* params = key.algorithm().rsaHashedParams(); |
| - doWriteUint32(params->modulusLengthBits()); |
| - doWriteUint32(params->publicExponent().size()); |
| - append(params->publicExponent().data(), params->publicExponent().size()); |
| - doWriteAlgorithmId(params->hash().id()); |
| -} |
| - |
| -void Writer::doWriteEcKey(const WebCryptoKey& key) |
| -{ |
| - ASSERT(key.algorithm().ecParams()); |
| - append(static_cast<uint8_t>(EcKeyTag)); |
| - |
| - doWriteAlgorithmId(key.algorithm().id()); |
| - doWriteAsymmetricKeyType(key.type()); |
| - doWriteNamedCurve(key.algorithm().ecParams()->namedCurve()); |
| -} |
| - |
| -void Writer::doWriteAlgorithmId(WebCryptoAlgorithmId id) |
| -{ |
| - switch (id) { |
| - case WebCryptoAlgorithmIdAesCbc: |
| - return doWriteUint32(AesCbcTag); |
| - case WebCryptoAlgorithmIdHmac: |
| - return doWriteUint32(HmacTag); |
| - case WebCryptoAlgorithmIdRsaSsaPkcs1v1_5: |
| - return doWriteUint32(RsaSsaPkcs1v1_5Tag); |
| - case WebCryptoAlgorithmIdSha1: |
| - return doWriteUint32(Sha1Tag); |
| - case WebCryptoAlgorithmIdSha256: |
| - return doWriteUint32(Sha256Tag); |
| - case WebCryptoAlgorithmIdSha384: |
| - return doWriteUint32(Sha384Tag); |
| - case WebCryptoAlgorithmIdSha512: |
| - return doWriteUint32(Sha512Tag); |
| - case WebCryptoAlgorithmIdAesGcm: |
| - return doWriteUint32(AesGcmTag); |
| - case WebCryptoAlgorithmIdRsaOaep: |
| - return doWriteUint32(RsaOaepTag); |
| - case WebCryptoAlgorithmIdAesCtr: |
| - return doWriteUint32(AesCtrTag); |
| - case WebCryptoAlgorithmIdAesKw: |
| - return doWriteUint32(AesKwTag); |
| - case WebCryptoAlgorithmIdRsaPss: |
| - return doWriteUint32(RsaPssTag); |
| - case WebCryptoAlgorithmIdEcdsa: |
| - return doWriteUint32(EcdsaTag); |
| - } |
| - ASSERT_NOT_REACHED(); |
| -} |
| - |
| -void Writer::doWriteAsymmetricKeyType(WebCryptoKeyType keyType) |
| -{ |
| - switch (keyType) { |
| - case WebCryptoKeyTypePublic: |
| - doWriteUint32(PublicKeyType); |
| - break; |
| - case WebCryptoKeyTypePrivate: |
| - doWriteUint32(PrivateKeyType); |
| - break; |
| - case WebCryptoKeyTypeSecret: |
| - ASSERT_NOT_REACHED(); |
| - } |
| -} |
| - |
| -void Writer::doWriteNamedCurve(WebCryptoNamedCurve namedCurve) |
| -{ |
| - switch (namedCurve) { |
| - case WebCryptoNamedCurveP256: |
| - return doWriteUint32(P256Tag); |
| - case WebCryptoNamedCurveP384: |
| - return doWriteUint32(P384Tag); |
| - case WebCryptoNamedCurveP521: |
| - return doWriteUint32(P521Tag); |
| - } |
| - ASSERT_NOT_REACHED(); |
| -} |
| - |
| -void Writer::doWriteKeyUsages(const WebCryptoKeyUsageMask usages, bool extractable) |
| -{ |
| - // Reminder to update this when adding new key usages. |
| - COMPILE_ASSERT(EndOfWebCryptoKeyUsage == (1 << 7) + 1, UpdateMe); |
| - |
| - uint32_t value = 0; |
| - |
| - if (extractable) |
| - value |= ExtractableUsage; |
| - |
| - if (usages & WebCryptoKeyUsageEncrypt) |
| - value |= EncryptUsage; |
| - if (usages & WebCryptoKeyUsageDecrypt) |
| - value |= DecryptUsage; |
| - if (usages & WebCryptoKeyUsageSign) |
| - value |= SignUsage; |
| - if (usages & WebCryptoKeyUsageVerify) |
| - value |= VerifyUsage; |
| - if (usages & WebCryptoKeyUsageDeriveKey) |
| - value |= DeriveKeyUsage; |
| - if (usages & WebCryptoKeyUsageWrapKey) |
| - value |= WrapKeyUsage; |
| - if (usages & WebCryptoKeyUsageUnwrapKey) |
| - value |= UnwrapKeyUsage; |
| - if (usages & WebCryptoKeyUsageDeriveBits) |
| - value |= DeriveBitsUsage; |
| - |
| - doWriteUint32(value); |
| -} |
| - |
| int Writer::bytesNeededToWireEncode(uint32_t value) |
| { |
| int bytes = 1; |
| @@ -868,13 +688,8 @@ Serializer::StateBase* Serializer::doSerialize(v8::Handle<v8::Value> value, Seri |
| return writeFile(value, next); |
| } else if (V8Blob::hasInstance(value, isolate())) { |
| return writeBlob(value, next); |
| - } else if (V8DOMFileSystem::hasInstance(value, isolate())) { |
| - return writeDOMFileSystem(value, next); |
| } else if (V8FileList::hasInstance(value, isolate())) { |
| return writeFileList(value, next); |
| - } else if (V8CryptoKey::hasInstance(value, isolate())) { |
| - if (!writeCryptoKey(value)) |
| - return handleError(DataCloneError, "Couldn't serialize key data", next); |
| } else if (V8ImageData::hasInstance(value, isolate())) { |
| writeImageData(value); |
| } else if (value->IsRegExp()) { |
| @@ -992,17 +807,6 @@ Serializer::StateBase* Serializer::writeBlob(v8::Handle<v8::Value> value, Serial |
| return 0; |
| } |
| -Serializer::StateBase* Serializer::writeDOMFileSystem(v8::Handle<v8::Value> value, StateBase* next) |
| -{ |
| - DOMFileSystem* fs = V8DOMFileSystem::toImpl(value.As<v8::Object>()); |
| - if (!fs) |
| - return 0; |
| - if (!fs->clonable()) |
| - return handleError(DataCloneError, "A FileSystem object could not be cloned.", next); |
| - m_writer.writeDOMFileSystem(fs->type(), fs->name(), fs->rootURL().string()); |
| - return 0; |
| -} |
| - |
| Serializer::StateBase* Serializer::writeFile(v8::Handle<v8::Value> value, Serializer::StateBase* next) |
| { |
| File* file = V8File::toImpl(value.As<v8::Object>()); |
| @@ -1047,14 +851,6 @@ Serializer::StateBase* Serializer::writeFileList(v8::Handle<v8::Value> value, Se |
| return 0; |
| } |
| -bool Serializer::writeCryptoKey(v8::Handle<v8::Value> value) |
| -{ |
| - CryptoKey* key = V8CryptoKey::toImpl(value.As<v8::Object>()); |
| - if (!key) |
| - return false; |
| - return m_writer.writeCryptoKey(key->key()); |
| -} |
| - |
| void Serializer::writeImageData(v8::Handle<v8::Value> value) |
| { |
| ImageData* imageData = V8ImageData::toImpl(value.As<v8::Object>()); |
| @@ -1190,6 +986,11 @@ bool Reader::read(v8::Handle<v8::Value>* value, CompositeCreator& creator) |
| SerializationTag tag; |
| if (!readTag(&tag)) |
| return false; |
| + return readWithTag(tag, value, creator); |
| +} |
| + |
| +bool Reader::readWithTag(SerializationTag tag, v8::Handle<v8::Value>* value, CompositeCreator& creator) |
| +{ |
| switch (tag) { |
| case ReferenceCountTag: { |
| if (!m_version) |
| @@ -1275,22 +1076,12 @@ bool Reader::read(v8::Handle<v8::Value>* value, CompositeCreator& creator) |
| return false; |
| creator.pushObjectReference(*value); |
| break; |
| - case DOMFileSystemTag: |
| - if (!readDOMFileSystem(value)) |
| - return false; |
| - creator.pushObjectReference(*value); |
| - break; |
| case FileListTag: |
| case FileListIndexTag: |
| if (!readFileList(value, tag == FileListIndexTag)) |
| return false; |
| creator.pushObjectReference(*value); |
| break; |
| - case CryptoKeyTag: |
| - if (!readCryptoKey(value)) |
| - return false; |
| - creator.pushObjectReference(*value); |
| - break; |
| case ImageDataTag: |
| if (!readImageData(value)) |
| return false; |
| @@ -1405,6 +1196,9 @@ bool Reader::read(v8::Handle<v8::Value>* value, CompositeCreator& creator) |
| return false; |
| break; |
| } |
| + case DOMFileSystemTag: |
| + case CryptoKeyTag: |
| + ASSERT_NOT_REACHED(); |
| default: |
| return false; |
| } |
| @@ -1722,22 +1516,6 @@ bool Reader::readBlob(v8::Handle<v8::Value>* value, bool isIndexed) |
| return true; |
| } |
| -bool Reader::readDOMFileSystem(v8::Handle<v8::Value>* value) |
| -{ |
| - uint32_t type; |
| - String name; |
| - String url; |
| - if (!doReadUint32(&type)) |
| - return false; |
| - if (!readWebCoreString(&name)) |
| - return false; |
| - if (!readWebCoreString(&url)) |
| - return false; |
| - DOMFileSystem* fs = DOMFileSystem::create(m_scriptState->executionContext(), name, static_cast<FileSystemType>(type), KURL(ParsedURLString, url)); |
| - *value = toV8(fs, m_scriptState->context()->Global(), isolate()); |
| - return true; |
| -} |
| - |
| bool Reader::readFile(v8::Handle<v8::Value>* value, bool isIndexed) |
| { |
| File* file = nullptr; |
| @@ -1779,61 +1557,6 @@ bool Reader::readFileList(v8::Handle<v8::Value>* value, bool isIndexed) |
| return true; |
| } |
| -bool Reader::readCryptoKey(v8::Handle<v8::Value>* value) |
| -{ |
| - uint32_t rawKeyType; |
| - if (!doReadUint32(&rawKeyType)) |
| - return false; |
| - |
| - WebCryptoKeyAlgorithm algorithm; |
| - WebCryptoKeyType type = WebCryptoKeyTypeSecret; |
| - |
| - switch (static_cast<CryptoKeySubTag>(rawKeyType)) { |
| - case AesKeyTag: |
| - if (!doReadAesKey(algorithm, type)) |
| - return false; |
| - break; |
| - case HmacKeyTag: |
| - if (!doReadHmacKey(algorithm, type)) |
| - return false; |
| - break; |
| - case RsaHashedKeyTag: |
| - if (!doReadRsaHashedKey(algorithm, type)) |
| - return false; |
| - break; |
| - case EcKeyTag: |
| - if (!doReadEcKey(algorithm, type)) |
| - return false; |
| - break; |
| - default: |
| - return false; |
| - } |
| - |
| - WebCryptoKeyUsageMask usages; |
| - bool extractable; |
| - if (!doReadKeyUsages(usages, extractable)) |
| - return false; |
| - |
| - uint32_t keyDataLength; |
| - if (!doReadUint32(&keyDataLength)) |
| - return false; |
| - |
| - if (m_position + keyDataLength > m_length) |
| - return false; |
| - |
| - const uint8_t* keyData = m_buffer + m_position; |
| - m_position += keyDataLength; |
| - |
| - WebCryptoKey key = WebCryptoKey::createNull(); |
| - if (!Platform::current()->crypto()->deserializeKeyForClone( |
| - algorithm, type, extractable, usages, keyData, keyDataLength, key)) { |
| - return false; |
| - } |
| - |
| - *value = toV8(CryptoKey::create(key), m_scriptState->context()->Global(), isolate()); |
| - return true; |
| -} |
| - |
| File* Reader::readFileHelper() |
| { |
| if (m_version < 3) |
| @@ -1924,208 +1647,6 @@ PassRefPtr<BlobDataHandle> Reader::getOrCreateBlobDataHandle(const String& uuid, |
| return BlobDataHandle::create(uuid, type, size); |
| } |
| -bool Reader::doReadHmacKey(WebCryptoKeyAlgorithm& algorithm, WebCryptoKeyType& type) |
| -{ |
| - uint32_t lengthBytes; |
| - if (!doReadUint32(&lengthBytes)) |
| - return false; |
| - WebCryptoAlgorithmId hash; |
| - if (!doReadAlgorithmId(hash)) |
| - return false; |
| - algorithm = WebCryptoKeyAlgorithm::createHmac(hash, lengthBytes * 8); |
| - type = WebCryptoKeyTypeSecret; |
| - return !algorithm.isNull(); |
| -} |
| - |
| -bool Reader::doReadAesKey(WebCryptoKeyAlgorithm& algorithm, WebCryptoKeyType& type) |
| -{ |
| - WebCryptoAlgorithmId id; |
| - if (!doReadAlgorithmId(id)) |
| - return false; |
| - uint32_t lengthBytes; |
| - if (!doReadUint32(&lengthBytes)) |
| - return false; |
| - algorithm = WebCryptoKeyAlgorithm::createAes(id, lengthBytes * 8); |
| - type = WebCryptoKeyTypeSecret; |
| - return !algorithm.isNull(); |
| -} |
| - |
| -bool Reader::doReadRsaHashedKey(WebCryptoKeyAlgorithm& algorithm, WebCryptoKeyType& type) |
| -{ |
| - WebCryptoAlgorithmId id; |
| - if (!doReadAlgorithmId(id)) |
| - return false; |
| - |
| - if (!doReadAsymmetricKeyType(type)) |
| - return false; |
| - |
| - uint32_t modulusLengthBits; |
| - if (!doReadUint32(&modulusLengthBits)) |
| - return false; |
| - |
| - uint32_t publicExponentSize; |
| - if (!doReadUint32(&publicExponentSize)) |
| - return false; |
| - |
| - if (m_position + publicExponentSize > m_length) |
| - return false; |
| - |
| - const uint8_t* publicExponent = m_buffer + m_position; |
| - m_position += publicExponentSize; |
| - |
| - WebCryptoAlgorithmId hash; |
| - if (!doReadAlgorithmId(hash)) |
| - return false; |
| - algorithm = WebCryptoKeyAlgorithm::createRsaHashed(id, modulusLengthBits, publicExponent, publicExponentSize, hash); |
| - |
| - return !algorithm.isNull(); |
| -} |
| - |
| -bool Reader::doReadEcKey(WebCryptoKeyAlgorithm& algorithm, WebCryptoKeyType& type) |
| -{ |
| - WebCryptoAlgorithmId id; |
| - if (!doReadAlgorithmId(id)) |
| - return false; |
| - |
| - if (!doReadAsymmetricKeyType(type)) |
| - return false; |
| - |
| - WebCryptoNamedCurve namedCurve; |
| - if (!doReadNamedCurve(namedCurve)) |
| - return false; |
| - |
| - algorithm = WebCryptoKeyAlgorithm::createEc(id, namedCurve); |
| - return !algorithm.isNull(); |
| -} |
| - |
| -bool Reader::doReadAlgorithmId(WebCryptoAlgorithmId& id) |
| -{ |
| - uint32_t rawId; |
| - if (!doReadUint32(&rawId)) |
| - return false; |
| - |
| - switch (static_cast<CryptoKeyAlgorithmTag>(rawId)) { |
| - case AesCbcTag: |
| - id = WebCryptoAlgorithmIdAesCbc; |
| - return true; |
| - case HmacTag: |
| - id = WebCryptoAlgorithmIdHmac; |
| - return true; |
| - case RsaSsaPkcs1v1_5Tag: |
| - id = WebCryptoAlgorithmIdRsaSsaPkcs1v1_5; |
| - return true; |
| - case Sha1Tag: |
| - id = WebCryptoAlgorithmIdSha1; |
| - return true; |
| - case Sha256Tag: |
| - id = WebCryptoAlgorithmIdSha256; |
| - return true; |
| - case Sha384Tag: |
| - id = WebCryptoAlgorithmIdSha384; |
| - return true; |
| - case Sha512Tag: |
| - id = WebCryptoAlgorithmIdSha512; |
| - return true; |
| - case AesGcmTag: |
| - id = WebCryptoAlgorithmIdAesGcm; |
| - return true; |
| - case RsaOaepTag: |
| - id = WebCryptoAlgorithmIdRsaOaep; |
| - return true; |
| - case AesCtrTag: |
| - id = WebCryptoAlgorithmIdAesCtr; |
| - return true; |
| - case AesKwTag: |
| - id = WebCryptoAlgorithmIdAesKw; |
| - return true; |
| - case RsaPssTag: |
| - id = WebCryptoAlgorithmIdRsaPss; |
| - return true; |
| - case EcdsaTag: |
| - id = WebCryptoAlgorithmIdEcdsa; |
| - return true; |
| - } |
| - |
| - return false; |
| -} |
| - |
| -bool Reader::doReadAsymmetricKeyType(WebCryptoKeyType& type) |
| -{ |
| - uint32_t rawType; |
| - if (!doReadUint32(&rawType)) |
| - return false; |
| - |
| - switch (static_cast<AssymetricCryptoKeyType>(rawType)) { |
| - case PublicKeyType: |
| - type = WebCryptoKeyTypePublic; |
| - return true; |
| - case PrivateKeyType: |
| - type = WebCryptoKeyTypePrivate; |
| - return true; |
| - } |
| - |
| - return false; |
| -} |
| - |
| -bool Reader::doReadNamedCurve(WebCryptoNamedCurve& namedCurve) |
| -{ |
| - uint32_t rawName; |
| - if (!doReadUint32(&rawName)) |
| - return false; |
| - |
| - switch (static_cast<NamedCurveTag>(rawName)) { |
| - case P256Tag: |
| - namedCurve = WebCryptoNamedCurveP256; |
| - return true; |
| - case P384Tag: |
| - namedCurve = WebCryptoNamedCurveP384; |
| - return true; |
| - case P521Tag: |
| - namedCurve = WebCryptoNamedCurveP521; |
| - return true; |
| - } |
| - |
| - return false; |
| -} |
| - |
| -bool Reader::doReadKeyUsages(WebCryptoKeyUsageMask& usages, bool& extractable) |
| -{ |
| - // Reminder to update this when adding new key usages. |
| - COMPILE_ASSERT(EndOfWebCryptoKeyUsage == (1 << 7) + 1, UpdateMe); |
| - const uint32_t allPossibleUsages = ExtractableUsage | EncryptUsage | DecryptUsage | SignUsage | VerifyUsage | DeriveKeyUsage | WrapKeyUsage | UnwrapKeyUsage | DeriveBitsUsage; |
| - |
| - uint32_t rawUsages; |
| - if (!doReadUint32(&rawUsages)) |
| - return false; |
| - |
| - // Make sure it doesn't contain an unrecognized usage value. |
| - if (rawUsages & ~allPossibleUsages) |
| - return false; |
| - |
| - usages = 0; |
| - |
| - extractable = rawUsages & ExtractableUsage; |
| - |
| - if (rawUsages & EncryptUsage) |
| - usages |= WebCryptoKeyUsageEncrypt; |
| - if (rawUsages & DecryptUsage) |
| - usages |= WebCryptoKeyUsageDecrypt; |
| - if (rawUsages & SignUsage) |
| - usages |= WebCryptoKeyUsageSign; |
| - if (rawUsages & VerifyUsage) |
| - usages |= WebCryptoKeyUsageVerify; |
| - if (rawUsages & DeriveKeyUsage) |
| - usages |= WebCryptoKeyUsageDeriveKey; |
| - if (rawUsages & WrapKeyUsage) |
| - usages |= WebCryptoKeyUsageWrapKey; |
| - if (rawUsages & UnwrapKeyUsage) |
| - usages |= WebCryptoKeyUsageUnwrapKey; |
| - if (rawUsages & DeriveBitsUsage) |
| - usages |= WebCryptoKeyUsageDeriveBits; |
| - |
| - return true; |
| -} |
| - |
| v8::Handle<v8::Value> Deserializer::deserialize() |
| { |
| v8::Isolate* isolate = m_reader.scriptState()->isolate(); |