bool SerializedScriptValueReaderForModules::read( v8::Local<v8::Value>* value, ScriptValueDeserializer& deserializer) { SerializationTag tag; if (!readTag(&tag)) return false; switch (tag) { case DOMFileSystemTag: if (!readDOMFileSystem(value)) return false; deserializer.pushObjectReference(*value); break; case CryptoKeyTag: if (!readCryptoKey(value)) return false; deserializer.pushObjectReference(*value); break; case RTCCertificateTag: if (!readRTCCertificate(value)) return false; deserializer.pushObjectReference(*value); break; default: return SerializedScriptValueReader::readWithTag(tag, value, deserializer); } return !value->IsEmpty(); }
bool SerializedScriptValueReaderForModules::read(v8::Local<v8::Value>* value, ScriptValueCompositeCreator& creator) { SerializationTag tag; if (!readTag(&tag)) return false; switch (tag) { case DOMFileSystemTag: if (!readDOMFileSystem(value)) return false; creator.pushObjectReference(*value); break; case CryptoKeyTag: if (!readCryptoKey(value)) return false; creator.pushObjectReference(*value); break; default: return SerializedScriptValueReader::readWithTag(tag, value, creator); } return !value->IsEmpty(); }
ScriptWrappable* V8ScriptValueDeserializerForModules::readDOMObject( SerializationTag tag) { // Give the core/ implementation a chance to try first. // If it didn't recognize the kind of wrapper, try the modules types. if (ScriptWrappable* wrappable = V8ScriptValueDeserializer::readDOMObject(tag)) return wrappable; switch (tag) { case CryptoKeyTag: return readCryptoKey(); case DOMFileSystemTag: { uint32_t rawType; String name; String rootURL; if (!readUint32(&rawType) || rawType > FileSystemTypeLast || !readUTF8String(&name) || !readUTF8String(&rootURL)) return nullptr; return DOMFileSystem::create(getScriptState()->getExecutionContext(), name, static_cast<FileSystemType>(rawType), KURL(ParsedURLString, rootURL)); } case RTCCertificateTag: { String pemPrivateKey; String pemCertificate; if (!readUTF8String(&pemPrivateKey) || !readUTF8String(&pemCertificate)) return nullptr; std::unique_ptr<WebRTCCertificateGenerator> certificateGenerator( Platform::current()->createRTCCertificateGenerator()); std::unique_ptr<WebRTCCertificate> certificate = certificateGenerator->fromPEM(pemPrivateKey, pemCertificate); return new RTCCertificate(std::move(certificate)); } default: break; } return nullptr; }