std::unique_ptr<MessageRecorder::MessageProcessingToken> MessageRecorder::recordOutgoingMessage(Connection& connection, Encoder& encoder) { if (!isEnabled() || !connection.isValid()) return nullptr; WebKitMessageRecord record; record.sourceProcessType = static_cast<uint64_t>(connection.client()->localProcessType()); record.destinationProcessType = static_cast<uint64_t>(connection.client()->remoteProcessType()); record.destinationID = encoder.destinationID(); record.isSyncMessage = encoder.isSyncMessage(); record.shouldDispatchMessageWhenWaitingForSyncReply = encoder.shouldDispatchMessageWhenWaitingForSyncReply(); record.sourceProcessID = getpid(); record.destinationProcessID = connection.remoteProcessID(); record.isIncoming = false; record.messageReceiverName = MallocPtr<char>::malloc(sizeof(char) * (encoder.messageReceiverName().size() + 1)); strncpy(record.messageReceiverName.get(), encoder.messageReceiverName().data(), encoder.messageReceiverName().size()); record.messageReceiverName.get()[encoder.messageReceiverName().size()] = 0; record.messageName = MallocPtr<char>::malloc(sizeof(char) * (encoder.messageName().size() + 1)); strncpy(record.messageName.get(), encoder.messageName().data(), encoder.messageName().size()); record.messageName.get()[encoder.messageName().size()] = 0; uuid_copy(record.UUID, encoder.UUID()); return std::make_unique<MessageProcessingToken>(WTFMove(record)); }