// This file is generated by TypeBuilder_cpp.template.

// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "content/browser/devtools/protocol/audits.h"

#include "content/browser/devtools/protocol/protocol.h"

#include "third_party/inspector_protocol/crdtp/cbor.h"
#include "third_party/inspector_protocol/crdtp/find_by_first.h"
#include "third_party/inspector_protocol/crdtp/span.h"

namespace content {
namespace protocol {
namespace Audits {

using crdtp::DeserializerState;
using crdtp::FallthroughCallback;
using crdtp::ProtocolTypeTraits;

// ------------- Enum values from types.

const char Metainfo::domainName[] = "Audits";
const char Metainfo::commandPrefix[] = "Audits.";
const char Metainfo::version[] = "1.3";

CRDTP_BEGIN_DESERIALIZER(AffectedCookie)
    CRDTP_DESERIALIZE_FIELD("domain", m_domain),
    CRDTP_DESERIALIZE_FIELD("name", m_name),
    CRDTP_DESERIALIZE_FIELD("path", m_path),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(AffectedCookie)
    CRDTP_SERIALIZE_FIELD("name", m_name);
    CRDTP_SERIALIZE_FIELD("path", m_path);
    CRDTP_SERIALIZE_FIELD("domain", m_domain);
CRDTP_END_SERIALIZER();


CRDTP_BEGIN_DESERIALIZER(AffectedRequest)
    CRDTP_DESERIALIZE_FIELD_OPT("requestId", m_requestId),
    CRDTP_DESERIALIZE_FIELD("url", m_url),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(AffectedRequest)
    CRDTP_SERIALIZE_FIELD("requestId", m_requestId);
    CRDTP_SERIALIZE_FIELD("url", m_url);
CRDTP_END_SERIALIZER();


CRDTP_BEGIN_DESERIALIZER(AffectedFrame)
    CRDTP_DESERIALIZE_FIELD("frameId", m_frameId),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(AffectedFrame)
    CRDTP_SERIALIZE_FIELD("frameId", m_frameId);
CRDTP_END_SERIALIZER();






CRDTP_BEGIN_DESERIALIZER(CookieIssueInsight)
    CRDTP_DESERIALIZE_FIELD_OPT("tableEntryUrl", m_tableEntryUrl),
    CRDTP_DESERIALIZE_FIELD("type", m_type),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(CookieIssueInsight)
    CRDTP_SERIALIZE_FIELD("type", m_type);
    CRDTP_SERIALIZE_FIELD("tableEntryUrl", m_tableEntryUrl);
CRDTP_END_SERIALIZER();


CRDTP_BEGIN_DESERIALIZER(CookieIssueDetails)
    CRDTP_DESERIALIZE_FIELD_OPT("cookie", m_cookie),
    CRDTP_DESERIALIZE_FIELD("cookieExclusionReasons", m_cookieExclusionReasons),
    CRDTP_DESERIALIZE_FIELD_OPT("cookieUrl", m_cookieUrl),
    CRDTP_DESERIALIZE_FIELD("cookieWarningReasons", m_cookieWarningReasons),
    CRDTP_DESERIALIZE_FIELD_OPT("insight", m_insight),
    CRDTP_DESERIALIZE_FIELD("operation", m_operation),
    CRDTP_DESERIALIZE_FIELD_OPT("rawCookieLine", m_rawCookieLine),
    CRDTP_DESERIALIZE_FIELD_OPT("request", m_request),
    CRDTP_DESERIALIZE_FIELD_OPT("siteForCookies", m_siteForCookies),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(CookieIssueDetails)
    CRDTP_SERIALIZE_FIELD("cookie", m_cookie);
    CRDTP_SERIALIZE_FIELD("rawCookieLine", m_rawCookieLine);
    CRDTP_SERIALIZE_FIELD("cookieWarningReasons", m_cookieWarningReasons);
    CRDTP_SERIALIZE_FIELD("cookieExclusionReasons", m_cookieExclusionReasons);
    CRDTP_SERIALIZE_FIELD("operation", m_operation);
    CRDTP_SERIALIZE_FIELD("siteForCookies", m_siteForCookies);
    CRDTP_SERIALIZE_FIELD("cookieUrl", m_cookieUrl);
    CRDTP_SERIALIZE_FIELD("request", m_request);
    CRDTP_SERIALIZE_FIELD("insight", m_insight);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(PerformanceIssueDetails)
    CRDTP_DESERIALIZE_FIELD("performanceIssueType", m_performanceIssueType),
    CRDTP_DESERIALIZE_FIELD_OPT("sourceCodeLocation", m_sourceCodeLocation),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(PerformanceIssueDetails)
    CRDTP_SERIALIZE_FIELD("performanceIssueType", m_performanceIssueType);
    CRDTP_SERIALIZE_FIELD("sourceCodeLocation", m_sourceCodeLocation);
CRDTP_END_SERIALIZER();




CRDTP_BEGIN_DESERIALIZER(MixedContentIssueDetails)
    CRDTP_DESERIALIZE_FIELD_OPT("frame", m_frame),
    CRDTP_DESERIALIZE_FIELD("insecureURL", m_insecureURL),
    CRDTP_DESERIALIZE_FIELD("mainResourceURL", m_mainResourceURL),
    CRDTP_DESERIALIZE_FIELD_OPT("request", m_request),
    CRDTP_DESERIALIZE_FIELD("resolutionStatus", m_resolutionStatus),
    CRDTP_DESERIALIZE_FIELD_OPT("resourceType", m_resourceType),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(MixedContentIssueDetails)
    CRDTP_SERIALIZE_FIELD("resourceType", m_resourceType);
    CRDTP_SERIALIZE_FIELD("resolutionStatus", m_resolutionStatus);
    CRDTP_SERIALIZE_FIELD("insecureURL", m_insecureURL);
    CRDTP_SERIALIZE_FIELD("mainResourceURL", m_mainResourceURL);
    CRDTP_SERIALIZE_FIELD("request", m_request);
    CRDTP_SERIALIZE_FIELD("frame", m_frame);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(BlockedByResponseIssueDetails)
    CRDTP_DESERIALIZE_FIELD_OPT("blockedFrame", m_blockedFrame),
    CRDTP_DESERIALIZE_FIELD_OPT("parentFrame", m_parentFrame),
    CRDTP_DESERIALIZE_FIELD("reason", m_reason),
    CRDTP_DESERIALIZE_FIELD("request", m_request),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(BlockedByResponseIssueDetails)
    CRDTP_SERIALIZE_FIELD("request", m_request);
    CRDTP_SERIALIZE_FIELD("parentFrame", m_parentFrame);
    CRDTP_SERIALIZE_FIELD("blockedFrame", m_blockedFrame);
    CRDTP_SERIALIZE_FIELD("reason", m_reason);
CRDTP_END_SERIALIZER();




CRDTP_BEGIN_DESERIALIZER(HeavyAdIssueDetails)
    CRDTP_DESERIALIZE_FIELD("frame", m_frame),
    CRDTP_DESERIALIZE_FIELD("reason", m_reason),
    CRDTP_DESERIALIZE_FIELD("resolution", m_resolution),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(HeavyAdIssueDetails)
    CRDTP_SERIALIZE_FIELD("resolution", m_resolution);
    CRDTP_SERIALIZE_FIELD("reason", m_reason);
    CRDTP_SERIALIZE_FIELD("frame", m_frame);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(SourceCodeLocation)
    CRDTP_DESERIALIZE_FIELD("columnNumber", m_columnNumber),
    CRDTP_DESERIALIZE_FIELD("lineNumber", m_lineNumber),
    CRDTP_DESERIALIZE_FIELD_OPT("scriptId", m_scriptId),
    CRDTP_DESERIALIZE_FIELD("url", m_url),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(SourceCodeLocation)
    CRDTP_SERIALIZE_FIELD("scriptId", m_scriptId);
    CRDTP_SERIALIZE_FIELD("url", m_url);
    CRDTP_SERIALIZE_FIELD("lineNumber", m_lineNumber);
    CRDTP_SERIALIZE_FIELD("columnNumber", m_columnNumber);
CRDTP_END_SERIALIZER();


CRDTP_BEGIN_DESERIALIZER(ContentSecurityPolicyIssueDetails)
    CRDTP_DESERIALIZE_FIELD_OPT("blockedURL", m_blockedURL),
    CRDTP_DESERIALIZE_FIELD("contentSecurityPolicyViolationType", m_contentSecurityPolicyViolationType),
    CRDTP_DESERIALIZE_FIELD_OPT("frameAncestor", m_frameAncestor),
    CRDTP_DESERIALIZE_FIELD("isReportOnly", m_isReportOnly),
    CRDTP_DESERIALIZE_FIELD_OPT("sourceCodeLocation", m_sourceCodeLocation),
    CRDTP_DESERIALIZE_FIELD("violatedDirective", m_violatedDirective),
    CRDTP_DESERIALIZE_FIELD_OPT("violatingNodeId", m_violatingNodeId),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(ContentSecurityPolicyIssueDetails)
    CRDTP_SERIALIZE_FIELD("blockedURL", m_blockedURL);
    CRDTP_SERIALIZE_FIELD("violatedDirective", m_violatedDirective);
    CRDTP_SERIALIZE_FIELD("isReportOnly", m_isReportOnly);
    CRDTP_SERIALIZE_FIELD("contentSecurityPolicyViolationType", m_contentSecurityPolicyViolationType);
    CRDTP_SERIALIZE_FIELD("frameAncestor", m_frameAncestor);
    CRDTP_SERIALIZE_FIELD("sourceCodeLocation", m_sourceCodeLocation);
    CRDTP_SERIALIZE_FIELD("violatingNodeId", m_violatingNodeId);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(SharedArrayBufferIssueDetails)
    CRDTP_DESERIALIZE_FIELD("isWarning", m_isWarning),
    CRDTP_DESERIALIZE_FIELD("sourceCodeLocation", m_sourceCodeLocation),
    CRDTP_DESERIALIZE_FIELD("type", m_type),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(SharedArrayBufferIssueDetails)
    CRDTP_SERIALIZE_FIELD("sourceCodeLocation", m_sourceCodeLocation);
    CRDTP_SERIALIZE_FIELD("isWarning", m_isWarning);
    CRDTP_SERIALIZE_FIELD("type", m_type);
CRDTP_END_SERIALIZER();


CRDTP_BEGIN_DESERIALIZER(CorsIssueDetails)
    CRDTP_DESERIALIZE_FIELD_OPT("clientSecurityState", m_clientSecurityState),
    CRDTP_DESERIALIZE_FIELD("corsErrorStatus", m_corsErrorStatus),
    CRDTP_DESERIALIZE_FIELD_OPT("initiatorOrigin", m_initiatorOrigin),
    CRDTP_DESERIALIZE_FIELD("isWarning", m_isWarning),
    CRDTP_DESERIALIZE_FIELD_OPT("location", m_location),
    CRDTP_DESERIALIZE_FIELD("request", m_request),
    CRDTP_DESERIALIZE_FIELD_OPT("resourceIPAddressSpace", m_resourceIPAddressSpace),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(CorsIssueDetails)
    CRDTP_SERIALIZE_FIELD("corsErrorStatus", m_corsErrorStatus);
    CRDTP_SERIALIZE_FIELD("isWarning", m_isWarning);
    CRDTP_SERIALIZE_FIELD("request", m_request);
    CRDTP_SERIALIZE_FIELD("location", m_location);
    CRDTP_SERIALIZE_FIELD("initiatorOrigin", m_initiatorOrigin);
    CRDTP_SERIALIZE_FIELD("resourceIPAddressSpace", m_resourceIPAddressSpace);
    CRDTP_SERIALIZE_FIELD("clientSecurityState", m_clientSecurityState);
CRDTP_END_SERIALIZER();






CRDTP_BEGIN_DESERIALIZER(QuirksModeIssueDetails)
    CRDTP_DESERIALIZE_FIELD("documentNodeId", m_documentNodeId),
    CRDTP_DESERIALIZE_FIELD("frameId", m_frameId),
    CRDTP_DESERIALIZE_FIELD("isLimitedQuirksMode", m_isLimitedQuirksMode),
    CRDTP_DESERIALIZE_FIELD("loaderId", m_loaderId),
    CRDTP_DESERIALIZE_FIELD("url", m_url),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(QuirksModeIssueDetails)
    CRDTP_SERIALIZE_FIELD("isLimitedQuirksMode", m_isLimitedQuirksMode);
    CRDTP_SERIALIZE_FIELD("documentNodeId", m_documentNodeId);
    CRDTP_SERIALIZE_FIELD("url", m_url);
    CRDTP_SERIALIZE_FIELD("frameId", m_frameId);
    CRDTP_SERIALIZE_FIELD("loaderId", m_loaderId);
CRDTP_END_SERIALIZER();


CRDTP_BEGIN_DESERIALIZER(NavigatorUserAgentIssueDetails)
    CRDTP_DESERIALIZE_FIELD_OPT("location", m_location),
    CRDTP_DESERIALIZE_FIELD("url", m_url),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(NavigatorUserAgentIssueDetails)
    CRDTP_SERIALIZE_FIELD("url", m_url);
    CRDTP_SERIALIZE_FIELD("location", m_location);
CRDTP_END_SERIALIZER();


CRDTP_BEGIN_DESERIALIZER(SharedDictionaryIssueDetails)
    CRDTP_DESERIALIZE_FIELD("request", m_request),
    CRDTP_DESERIALIZE_FIELD("sharedDictionaryError", m_sharedDictionaryError),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(SharedDictionaryIssueDetails)
    CRDTP_SERIALIZE_FIELD("sharedDictionaryError", m_sharedDictionaryError);
    CRDTP_SERIALIZE_FIELD("request", m_request);
CRDTP_END_SERIALIZER();


CRDTP_BEGIN_DESERIALIZER(SRIMessageSignatureIssueDetails)
    CRDTP_DESERIALIZE_FIELD("error", m_error),
    CRDTP_DESERIALIZE_FIELD("integrityAssertions", m_integrityAssertions),
    CRDTP_DESERIALIZE_FIELD("request", m_request),
    CRDTP_DESERIALIZE_FIELD("signatureBase", m_signatureBase),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(SRIMessageSignatureIssueDetails)
    CRDTP_SERIALIZE_FIELD("error", m_error);
    CRDTP_SERIALIZE_FIELD("signatureBase", m_signatureBase);
    CRDTP_SERIALIZE_FIELD("integrityAssertions", m_integrityAssertions);
    CRDTP_SERIALIZE_FIELD("request", m_request);
CRDTP_END_SERIALIZER();


CRDTP_BEGIN_DESERIALIZER(UnencodedDigestIssueDetails)
    CRDTP_DESERIALIZE_FIELD("error", m_error),
    CRDTP_DESERIALIZE_FIELD("request", m_request),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(UnencodedDigestIssueDetails)
    CRDTP_SERIALIZE_FIELD("error", m_error);
    CRDTP_SERIALIZE_FIELD("request", m_request);
CRDTP_END_SERIALIZER();


CRDTP_BEGIN_DESERIALIZER(ConnectionAllowlistIssueDetails)
    CRDTP_DESERIALIZE_FIELD("error", m_error),
    CRDTP_DESERIALIZE_FIELD("request", m_request),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(ConnectionAllowlistIssueDetails)
    CRDTP_SERIALIZE_FIELD("error", m_error);
    CRDTP_SERIALIZE_FIELD("request", m_request);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(GenericIssueDetails)
    CRDTP_DESERIALIZE_FIELD("errorType", m_errorType),
    CRDTP_DESERIALIZE_FIELD_OPT("frameId", m_frameId),
    CRDTP_DESERIALIZE_FIELD_OPT("request", m_request),
    CRDTP_DESERIALIZE_FIELD_OPT("violatingNodeAttribute", m_violatingNodeAttribute),
    CRDTP_DESERIALIZE_FIELD_OPT("violatingNodeId", m_violatingNodeId),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(GenericIssueDetails)
    CRDTP_SERIALIZE_FIELD("errorType", m_errorType);
    CRDTP_SERIALIZE_FIELD("frameId", m_frameId);
    CRDTP_SERIALIZE_FIELD("violatingNodeId", m_violatingNodeId);
    CRDTP_SERIALIZE_FIELD("violatingNodeAttribute", m_violatingNodeAttribute);
    CRDTP_SERIALIZE_FIELD("request", m_request);
CRDTP_END_SERIALIZER();


CRDTP_BEGIN_DESERIALIZER(DeprecationIssueDetails)
    CRDTP_DESERIALIZE_FIELD_OPT("affectedFrame", m_affectedFrame),
    CRDTP_DESERIALIZE_FIELD("sourceCodeLocation", m_sourceCodeLocation),
    CRDTP_DESERIALIZE_FIELD("type", m_type),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(DeprecationIssueDetails)
    CRDTP_SERIALIZE_FIELD("affectedFrame", m_affectedFrame);
    CRDTP_SERIALIZE_FIELD("sourceCodeLocation", m_sourceCodeLocation);
    CRDTP_SERIALIZE_FIELD("type", m_type);
CRDTP_END_SERIALIZER();


CRDTP_BEGIN_DESERIALIZER(BounceTrackingIssueDetails)
    CRDTP_DESERIALIZE_FIELD("trackingSites", m_trackingSites),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(BounceTrackingIssueDetails)
    CRDTP_SERIALIZE_FIELD("trackingSites", m_trackingSites);
CRDTP_END_SERIALIZER();


CRDTP_BEGIN_DESERIALIZER(CookieDeprecationMetadataIssueDetails)
    CRDTP_DESERIALIZE_FIELD("allowedSites", m_allowedSites),
    CRDTP_DESERIALIZE_FIELD("isOptOutTopLevel", m_isOptOutTopLevel),
    CRDTP_DESERIALIZE_FIELD("operation", m_operation),
    CRDTP_DESERIALIZE_FIELD("optOutPercentage", m_optOutPercentage),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(CookieDeprecationMetadataIssueDetails)
    CRDTP_SERIALIZE_FIELD("allowedSites", m_allowedSites);
    CRDTP_SERIALIZE_FIELD("optOutPercentage", m_optOutPercentage);
    CRDTP_SERIALIZE_FIELD("isOptOutTopLevel", m_isOptOutTopLevel);
    CRDTP_SERIALIZE_FIELD("operation", m_operation);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(FederatedAuthRequestIssueDetails)
    CRDTP_DESERIALIZE_FIELD("federatedAuthRequestIssueReason", m_federatedAuthRequestIssueReason),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(FederatedAuthRequestIssueDetails)
    CRDTP_SERIALIZE_FIELD("federatedAuthRequestIssueReason", m_federatedAuthRequestIssueReason);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(FederatedAuthUserInfoRequestIssueDetails)
    CRDTP_DESERIALIZE_FIELD("federatedAuthUserInfoRequestIssueReason", m_federatedAuthUserInfoRequestIssueReason),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(FederatedAuthUserInfoRequestIssueDetails)
    CRDTP_SERIALIZE_FIELD("federatedAuthUserInfoRequestIssueReason", m_federatedAuthUserInfoRequestIssueReason);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(EmailVerificationRequestIssueDetails)
    CRDTP_DESERIALIZE_FIELD("emailVerificationRequestIssueReason", m_emailVerificationRequestIssueReason),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(EmailVerificationRequestIssueDetails)
    CRDTP_SERIALIZE_FIELD("emailVerificationRequestIssueReason", m_emailVerificationRequestIssueReason);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(ClientHintIssueDetails)
    CRDTP_DESERIALIZE_FIELD("clientHintIssueReason", m_clientHintIssueReason),
    CRDTP_DESERIALIZE_FIELD("sourceCodeLocation", m_sourceCodeLocation),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(ClientHintIssueDetails)
    CRDTP_SERIALIZE_FIELD("sourceCodeLocation", m_sourceCodeLocation);
    CRDTP_SERIALIZE_FIELD("clientHintIssueReason", m_clientHintIssueReason);
CRDTP_END_SERIALIZER();


CRDTP_BEGIN_DESERIALIZER(FailedRequestInfo)
    CRDTP_DESERIALIZE_FIELD("failureMessage", m_failureMessage),
    CRDTP_DESERIALIZE_FIELD_OPT("requestId", m_requestId),
    CRDTP_DESERIALIZE_FIELD("url", m_url),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(FailedRequestInfo)
    CRDTP_SERIALIZE_FIELD("url", m_url);
    CRDTP_SERIALIZE_FIELD("failureMessage", m_failureMessage);
    CRDTP_SERIALIZE_FIELD("requestId", m_requestId);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(PartitioningBlobURLIssueDetails)
    CRDTP_DESERIALIZE_FIELD("partitioningBlobURLInfo", m_partitioningBlobURLInfo),
    CRDTP_DESERIALIZE_FIELD("url", m_url),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(PartitioningBlobURLIssueDetails)
    CRDTP_SERIALIZE_FIELD("url", m_url);
    CRDTP_SERIALIZE_FIELD("partitioningBlobURLInfo", m_partitioningBlobURLInfo);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(ElementAccessibilityIssueDetails)
    CRDTP_DESERIALIZE_FIELD("elementAccessibilityIssueReason", m_elementAccessibilityIssueReason),
    CRDTP_DESERIALIZE_FIELD("hasDisallowedAttributes", m_hasDisallowedAttributes),
    CRDTP_DESERIALIZE_FIELD("nodeId", m_nodeId),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(ElementAccessibilityIssueDetails)
    CRDTP_SERIALIZE_FIELD("nodeId", m_nodeId);
    CRDTP_SERIALIZE_FIELD("elementAccessibilityIssueReason", m_elementAccessibilityIssueReason);
    CRDTP_SERIALIZE_FIELD("hasDisallowedAttributes", m_hasDisallowedAttributes);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(StylesheetLoadingIssueDetails)
    CRDTP_DESERIALIZE_FIELD_OPT("failedRequestInfo", m_failedRequestInfo),
    CRDTP_DESERIALIZE_FIELD("sourceCodeLocation", m_sourceCodeLocation),
    CRDTP_DESERIALIZE_FIELD("styleSheetLoadingIssueReason", m_styleSheetLoadingIssueReason),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(StylesheetLoadingIssueDetails)
    CRDTP_SERIALIZE_FIELD("sourceCodeLocation", m_sourceCodeLocation);
    CRDTP_SERIALIZE_FIELD("styleSheetLoadingIssueReason", m_styleSheetLoadingIssueReason);
    CRDTP_SERIALIZE_FIELD("failedRequestInfo", m_failedRequestInfo);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(PropertyRuleIssueDetails)
    CRDTP_DESERIALIZE_FIELD("propertyRuleIssueReason", m_propertyRuleIssueReason),
    CRDTP_DESERIALIZE_FIELD_OPT("propertyValue", m_propertyValue),
    CRDTP_DESERIALIZE_FIELD("sourceCodeLocation", m_sourceCodeLocation),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(PropertyRuleIssueDetails)
    CRDTP_SERIALIZE_FIELD("sourceCodeLocation", m_sourceCodeLocation);
    CRDTP_SERIALIZE_FIELD("propertyRuleIssueReason", m_propertyRuleIssueReason);
    CRDTP_SERIALIZE_FIELD("propertyValue", m_propertyValue);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(UserReidentificationIssueDetails)
    CRDTP_DESERIALIZE_FIELD_OPT("request", m_request),
    CRDTP_DESERIALIZE_FIELD_OPT("sourceCodeLocation", m_sourceCodeLocation),
    CRDTP_DESERIALIZE_FIELD("type", m_type),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(UserReidentificationIssueDetails)
    CRDTP_SERIALIZE_FIELD("type", m_type);
    CRDTP_SERIALIZE_FIELD("request", m_request);
    CRDTP_SERIALIZE_FIELD("sourceCodeLocation", m_sourceCodeLocation);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(PermissionElementIssueDetails)
    CRDTP_DESERIALIZE_FIELD_OPT("disableReason", m_disableReason),
    CRDTP_DESERIALIZE_FIELD_OPT("isWarning", m_isWarning),
    CRDTP_DESERIALIZE_FIELD("issueType", m_issueType),
    CRDTP_DESERIALIZE_FIELD_OPT("nodeId", m_nodeId),
    CRDTP_DESERIALIZE_FIELD_OPT("occluderNodeInfo", m_occluderNodeInfo),
    CRDTP_DESERIALIZE_FIELD_OPT("occluderParentNodeInfo", m_occluderParentNodeInfo),
    CRDTP_DESERIALIZE_FIELD_OPT("permissionName", m_permissionName),
    CRDTP_DESERIALIZE_FIELD_OPT("type", m_type),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(PermissionElementIssueDetails)
    CRDTP_SERIALIZE_FIELD("issueType", m_issueType);
    CRDTP_SERIALIZE_FIELD("type", m_type);
    CRDTP_SERIALIZE_FIELD("nodeId", m_nodeId);
    CRDTP_SERIALIZE_FIELD("isWarning", m_isWarning);
    CRDTP_SERIALIZE_FIELD("permissionName", m_permissionName);
    CRDTP_SERIALIZE_FIELD("occluderNodeInfo", m_occluderNodeInfo);
    CRDTP_SERIALIZE_FIELD("occluderParentNodeInfo", m_occluderParentNodeInfo);
    CRDTP_SERIALIZE_FIELD("disableReason", m_disableReason);
CRDTP_END_SERIALIZER();


CRDTP_BEGIN_DESERIALIZER(SelectivePermissionsInterventionIssueDetails)
    CRDTP_DESERIALIZE_FIELD("adAncestry", m_adAncestry),
    CRDTP_DESERIALIZE_FIELD("apiName", m_apiName),
    CRDTP_DESERIALIZE_FIELD_OPT("stackTrace", m_stackTrace),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(SelectivePermissionsInterventionIssueDetails)
    CRDTP_SERIALIZE_FIELD("apiName", m_apiName);
    CRDTP_SERIALIZE_FIELD("adAncestry", m_adAncestry);
    CRDTP_SERIALIZE_FIELD("stackTrace", m_stackTrace);
CRDTP_END_SERIALIZER();


CRDTP_BEGIN_DESERIALIZER(LazyLoadImageIssueDetails)
    CRDTP_DESERIALIZE_FIELD("frameId", m_frameId),
    CRDTP_DESERIALIZE_FIELD("nodeId", m_nodeId),
    CRDTP_DESERIALIZE_FIELD("url", m_url),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(LazyLoadImageIssueDetails)
    CRDTP_SERIALIZE_FIELD("nodeId", m_nodeId);
    CRDTP_SERIALIZE_FIELD("url", m_url);
    CRDTP_SERIALIZE_FIELD("frameId", m_frameId);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(InspectorIssueDetails)
    CRDTP_DESERIALIZE_FIELD_OPT("blockedByResponseIssueDetails", m_blockedByResponseIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("bounceTrackingIssueDetails", m_bounceTrackingIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("clientHintIssueDetails", m_clientHintIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("connectionAllowlistIssueDetails", m_connectionAllowlistIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("contentSecurityPolicyIssueDetails", m_contentSecurityPolicyIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("cookieDeprecationMetadataIssueDetails", m_cookieDeprecationMetadataIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("cookieIssueDetails", m_cookieIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("corsIssueDetails", m_corsIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("deprecationIssueDetails", m_deprecationIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("elementAccessibilityIssueDetails", m_elementAccessibilityIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("emailVerificationRequestIssueDetails", m_emailVerificationRequestIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("federatedAuthRequestIssueDetails", m_federatedAuthRequestIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("federatedAuthUserInfoRequestIssueDetails", m_federatedAuthUserInfoRequestIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("genericIssueDetails", m_genericIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("heavyAdIssueDetails", m_heavyAdIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("lazyLoadImageIssueDetails", m_lazyLoadImageIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("mixedContentIssueDetails", m_mixedContentIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("navigatorUserAgentIssueDetails", m_navigatorUserAgentIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("partitioningBlobURLIssueDetails", m_partitioningBlobURLIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("performanceIssueDetails", m_performanceIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("permissionElementIssueDetails", m_permissionElementIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("propertyRuleIssueDetails", m_propertyRuleIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("quirksModeIssueDetails", m_quirksModeIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("selectivePermissionsInterventionIssueDetails", m_selectivePermissionsInterventionIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("sharedArrayBufferIssueDetails", m_sharedArrayBufferIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("sharedDictionaryIssueDetails", m_sharedDictionaryIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("sriMessageSignatureIssueDetails", m_sriMessageSignatureIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("stylesheetLoadingIssueDetails", m_stylesheetLoadingIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("unencodedDigestIssueDetails", m_unencodedDigestIssueDetails),
    CRDTP_DESERIALIZE_FIELD_OPT("userReidentificationIssueDetails", m_userReidentificationIssueDetails),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(InspectorIssueDetails)
    CRDTP_SERIALIZE_FIELD("cookieIssueDetails", m_cookieIssueDetails);
    CRDTP_SERIALIZE_FIELD("mixedContentIssueDetails", m_mixedContentIssueDetails);
    CRDTP_SERIALIZE_FIELD("blockedByResponseIssueDetails", m_blockedByResponseIssueDetails);
    CRDTP_SERIALIZE_FIELD("heavyAdIssueDetails", m_heavyAdIssueDetails);
    CRDTP_SERIALIZE_FIELD("contentSecurityPolicyIssueDetails", m_contentSecurityPolicyIssueDetails);
    CRDTP_SERIALIZE_FIELD("sharedArrayBufferIssueDetails", m_sharedArrayBufferIssueDetails);
    CRDTP_SERIALIZE_FIELD("corsIssueDetails", m_corsIssueDetails);
    CRDTP_SERIALIZE_FIELD("quirksModeIssueDetails", m_quirksModeIssueDetails);
    CRDTP_SERIALIZE_FIELD("partitioningBlobURLIssueDetails", m_partitioningBlobURLIssueDetails);
    CRDTP_SERIALIZE_FIELD("navigatorUserAgentIssueDetails", m_navigatorUserAgentIssueDetails);
    CRDTP_SERIALIZE_FIELD("genericIssueDetails", m_genericIssueDetails);
    CRDTP_SERIALIZE_FIELD("deprecationIssueDetails", m_deprecationIssueDetails);
    CRDTP_SERIALIZE_FIELD("clientHintIssueDetails", m_clientHintIssueDetails);
    CRDTP_SERIALIZE_FIELD("federatedAuthRequestIssueDetails", m_federatedAuthRequestIssueDetails);
    CRDTP_SERIALIZE_FIELD("bounceTrackingIssueDetails", m_bounceTrackingIssueDetails);
    CRDTP_SERIALIZE_FIELD("cookieDeprecationMetadataIssueDetails", m_cookieDeprecationMetadataIssueDetails);
    CRDTP_SERIALIZE_FIELD("stylesheetLoadingIssueDetails", m_stylesheetLoadingIssueDetails);
    CRDTP_SERIALIZE_FIELD("propertyRuleIssueDetails", m_propertyRuleIssueDetails);
    CRDTP_SERIALIZE_FIELD("federatedAuthUserInfoRequestIssueDetails", m_federatedAuthUserInfoRequestIssueDetails);
    CRDTP_SERIALIZE_FIELD("sharedDictionaryIssueDetails", m_sharedDictionaryIssueDetails);
    CRDTP_SERIALIZE_FIELD("elementAccessibilityIssueDetails", m_elementAccessibilityIssueDetails);
    CRDTP_SERIALIZE_FIELD("sriMessageSignatureIssueDetails", m_sriMessageSignatureIssueDetails);
    CRDTP_SERIALIZE_FIELD("unencodedDigestIssueDetails", m_unencodedDigestIssueDetails);
    CRDTP_SERIALIZE_FIELD("connectionAllowlistIssueDetails", m_connectionAllowlistIssueDetails);
    CRDTP_SERIALIZE_FIELD("userReidentificationIssueDetails", m_userReidentificationIssueDetails);
    CRDTP_SERIALIZE_FIELD("permissionElementIssueDetails", m_permissionElementIssueDetails);
    CRDTP_SERIALIZE_FIELD("performanceIssueDetails", m_performanceIssueDetails);
    CRDTP_SERIALIZE_FIELD("selectivePermissionsInterventionIssueDetails", m_selectivePermissionsInterventionIssueDetails);
    CRDTP_SERIALIZE_FIELD("emailVerificationRequestIssueDetails", m_emailVerificationRequestIssueDetails);
    CRDTP_SERIALIZE_FIELD("lazyLoadImageIssueDetails", m_lazyLoadImageIssueDetails);
CRDTP_END_SERIALIZER();



CRDTP_BEGIN_DESERIALIZER(InspectorIssue)
    CRDTP_DESERIALIZE_FIELD("code", m_code),
    CRDTP_DESERIALIZE_FIELD("details", m_details),
    CRDTP_DESERIALIZE_FIELD_OPT("issueId", m_issueId),
CRDTP_END_DESERIALIZER()

CRDTP_BEGIN_SERIALIZER(InspectorIssue)
    CRDTP_SERIALIZE_FIELD("code", m_code);
    CRDTP_SERIALIZE_FIELD("details", m_details);
    CRDTP_SERIALIZE_FIELD("issueId", m_issueId);
CRDTP_END_SERIALIZER();


// ------------- Enum values from params.


// ------------- Frontend notifications.

void Frontend::IssueAdded(std::unique_ptr<protocol::Audits::InspectorIssue> issue)
{
    if (!frontend_channel_)
        return;
    crdtp::ObjectSerializer serializer;
    serializer.AddField(crdtp::MakeSpan("issue"), issue);
    frontend_channel_->SendProtocolNotification(crdtp::CreateNotification("Audits.issueAdded", serializer.Finish()));
}

void Frontend::flush()
{
    frontend_channel_->FlushProtocolNotifications();
}

void Frontend::sendRawNotification(std::unique_ptr<Serializable> notification)
{
    frontend_channel_->SendProtocolNotification(std::move(notification));
}

// --------------------- Dispatcher.

class DomainDispatcherImpl : public protocol::DomainDispatcher {
public:
    DomainDispatcherImpl(FrontendChannel* frontendChannel, Backend* backend)
        : DomainDispatcher(frontendChannel)
        , m_backend(backend) {}
    ~DomainDispatcherImpl() override { }

    using CallHandler = void (DomainDispatcherImpl::*)(crdtp::Dispatchable& dispatchable);

    bool Dispatch(crdtp::span<uint8_t> command_name, crdtp::Dispatchable& dispatchable) override;

    void disable(crdtp::Dispatchable& dispatchable);
    void enable(crdtp::Dispatchable& dispatchable);
 protected:
    Backend* m_backend;
};

namespace {
// This helper method with a static map of command methods (instance methods
// of DomainDispatcherImpl declared just above) by their name is used immediately below,
// in the DomainDispatcherImpl::Dispatch method.
DomainDispatcherImpl::CallHandler CommandByName(crdtp::span<uint8_t> command_name) {
  static auto* commands = [](){
    auto* commands = new std::vector<std::pair<crdtp::span<uint8_t>,
                              DomainDispatcherImpl::CallHandler>>{
    {
          crdtp::SpanFrom("disable"),
          &DomainDispatcherImpl::disable
    },
    {
          crdtp::SpanFrom("enable"),
          &DomainDispatcherImpl::enable
    },
    };
    return commands;
  }();
  return crdtp::FindByFirst<DomainDispatcherImpl::CallHandler>(*commands, command_name, nullptr);
}
}  // namespace

bool DomainDispatcherImpl::Dispatch(crdtp::span<uint8_t> command_name, crdtp::Dispatchable& dispatchable) {
  CallHandler handler = CommandByName(command_name);
  if (!handler) return false;

  (this->*handler)(dispatchable);
  return true;
}


namespace {


}  // namespace

void DomainDispatcherImpl::disable(crdtp::Dispatchable& dispatchable)
{
    // Prepare input parameters.

    std::unique_ptr<DomainDispatcher::WeakPtr> weak = weakPtr();
    DispatchResponse response = m_backend->Disable();
    if (response.IsFallThrough()) {
        dispatchable.DispatchFallThrough(response.Message());
        return;
    }
    if (weak->get())
        weak->get()->sendResponse(dispatchable.CallId(), response);
    return;
}

namespace {


}  // namespace

void DomainDispatcherImpl::enable(crdtp::Dispatchable& dispatchable)
{
    // Prepare input parameters.

    std::unique_ptr<DomainDispatcher::WeakPtr> weak = weakPtr();
    DispatchResponse response = m_backend->Enable();
    if (response.IsFallThrough()) {
        dispatchable.DispatchFallThrough(response.Message());
        return;
    }
    if (weak->get())
        weak->get()->sendResponse(dispatchable.CallId(), response);
    return;
}

namespace {
// This helper method (with a static map of redirects) is used from Dispatcher::wire
// immediately below.
const std::vector<std::pair<crdtp::span<uint8_t>, crdtp::span<uint8_t>>>& SortedRedirects() {
  static auto* redirects = [](){
    auto* redirects = new std::vector<std::pair<crdtp::span<uint8_t>, crdtp::span<uint8_t>>>{
    };
    return redirects;
  }();
  return *redirects;
}
}  // namespace

// static
void Dispatcher::wire(UberDispatcher* uber, Backend* backend)
{
    auto dispatcher = std::make_unique<DomainDispatcherImpl>(uber->channel(), backend);
    uber->WireBackend(crdtp::SpanFrom("Audits"), SortedRedirects(), std::move(dispatcher));
}

} // Audits
} // namespace content
} // namespace protocol
