// services/network/public/mojom/url_response_head.mojom.m.js is auto generated by mojom_bindings_generator.py, do not edit

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

import {mojo} from '../../../../mojo/public/js/bindings.js';

import {
  Time as mojoBase_mojom_Time,
  TimeSpec as mojoBase_mojom_TimeSpec,
  TimeTicks as mojoBase_mojom_TimeTicks,
  TimeTicksSpec as mojoBase_mojom_TimeTicksSpec
} from '../../../../mojo/public/mojom/base/time.mojom.m.js';

import {
  UnguessableToken as mojoBase_mojom_UnguessableToken,
  UnguessableTokenSpec as mojoBase_mojom_UnguessableTokenSpec
} from '../../../../mojo/public/mojom/base/unguessable_token.mojom.m.js';

import {
  Url as url_mojom_Url,
  UrlSpec as url_mojom_UrlSpec
} from '../../../../url/mojom/url.mojom.m.js';

import {
  ProxyServer as proxyResolver_mojom_ProxyServer,
  ProxyServerSpec as proxyResolver_mojom_ProxyServerSpec
} from '../../../proxy_resolver/public/mojom/proxy_resolver.mojom.m.js';

import {
  FetchResponseSource as network_mojom_FetchResponseSource,
  FetchResponseSourceSpec as network_mojom_FetchResponseSourceSpec,
  FetchResponseType as network_mojom_FetchResponseType,
  FetchResponseTypeSpec as network_mojom_FetchResponseTypeSpec
} from './fetch_api.mojom.m.js';

import {
  IPAddressSpace as network_mojom_IPAddressSpace,
  IPAddressSpaceSpec as network_mojom_IPAddressSpaceSpec
} from './ip_address_space.mojom.m.js';

import {
  IPEndPoint as network_mojom_IPEndPoint,
  IPEndPointSpec as network_mojom_IPEndPointSpec
} from './ip_endpoint.mojom.m.js';

import {
  LoadTimingInfo as network_mojom_LoadTimingInfo,
  LoadTimingInfoSpec as network_mojom_LoadTimingInfoSpec
} from './load_timing_info.mojom.m.js';

import {
  AuthChallengeInfo as network_mojom_AuthChallengeInfo,
  AuthChallengeInfoSpec as network_mojom_AuthChallengeInfoSpec,
  HttpResponseHeaders as network_mojom_HttpResponseHeaders,
  HttpResponseHeadersSpec as network_mojom_HttpResponseHeadersSpec,
  SSLInfo as network_mojom_SSLInfo,
  SSLInfoSpec as network_mojom_SSLInfoSpec
} from './network_param.mojom.m.js';

import {
  CTPolicyCompliance as network_mojom_CTPolicyCompliance,
  CTPolicyComplianceSpec as network_mojom_CTPolicyComplianceSpec,
  ConnectionInfo as network_mojom_ConnectionInfo,
  ConnectionInfoSpec as network_mojom_ConnectionInfoSpec
} from './network_types.mojom.m.js';

import {
  OriginPolicy as network_mojom_OriginPolicy,
  OriginPolicySpec as network_mojom_OriginPolicySpec
} from './origin_policy_manager.mojom.m.js';

import {
  ParsedHeaders as network_mojom_ParsedHeaders,
  ParsedHeadersSpec as network_mojom_ParsedHeadersSpec
} from './parsed_headers.mojom.m.js';



/**
 * @const { {$:!mojo.internal.MojomType}}
 */
export const URLResponseHeadSpec =
    { $: /** @type {!mojo.internal.MojomType} */ ({}) };




mojo.internal.Struct(
    URLResponseHeadSpec.$,
    'URLResponseHead',
    [
      mojo.internal.StructField(
        'requestTime', 0,
        0,
        mojoBase_mojom_TimeSpec.$,
        null,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'responseTime', 8,
        0,
        mojoBase_mojom_TimeSpec.$,
        null,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'headers', 16,
        0,
        network_mojom_HttpResponseHeadersSpec.$,
        null,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'mimeType', 24,
        0,
        mojo.internal.String,
        null,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'charset', 32,
        0,
        mojo.internal.String,
        null,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'ctPolicyCompliance', 40,
        0,
        network_mojom_CTPolicyComplianceSpec.$,
        0,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'contentLength', 48,
        0,
        mojo.internal.Int64,
        BigInt('-1'),
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'encodedDataLength', 56,
        0,
        mojo.internal.Int64,
        BigInt('-1'),
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'encodedBodyLength', 64,
        0,
        mojo.internal.Int64,
        BigInt('-1'),
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'networkAccessed', 44,
        0,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'loadTiming', 72,
        0,
        network_mojom_LoadTimingInfoSpec.$,
        null,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'emittedExtraInfo', 44,
        1,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'wasFetchedViaSpdy', 44,
        2,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'wasAlpnNegotiated', 44,
        3,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'wasAlternateProtocolAvailable', 44,
        4,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'connectionInfo', 80,
        0,
        network_mojom_ConnectionInfoSpec.$,
        0,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'alpnNegotiatedProtocol', 88,
        0,
        mojo.internal.String,
        null,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'remoteEndpoint', 96,
        0,
        network_mojom_IPEndPointSpec.$,
        null,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'clientAddressSpace', 84,
        0,
        network_mojom_IPAddressSpaceSpec.$,
        network_mojom_IPAddressSpace.kUnknown,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'responseAddressSpace', 104,
        0,
        network_mojom_IPAddressSpaceSpec.$,
        network_mojom_IPAddressSpace.kUnknown,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'isValidated', 44,
        5,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'wasFetchedViaCache', 44,
        6,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'proxyServer', 112,
        0,
        proxyResolver_mojom_ProxyServerSpec.$,
        null,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'wasFetchedViaServiceWorker', 44,
        7,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'serviceWorkerResponseSource', 108,
        0,
        network_mojom_FetchResponseSourceSpec.$,
        network_mojom_FetchResponseSource.kUnspecified,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'urlListViaServiceWorker', 120,
        0,
        mojo.internal.Array(url_mojom_UrlSpec.$, false),
        null,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'responseType', 128,
        0,
        network_mojom_FetchResponseTypeSpec.$,
        network_mojom_FetchResponseType.kDefault,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'padding', 136,
        0,
        mojo.internal.Int64,
        BigInt('0'),
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'cacheStorageCacheName', 144,
        0,
        mojo.internal.String,
        null,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'certStatus', 132,
        0,
        mojo.internal.Uint32,
        0,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'sslInfo', 152,
        0,
        network_mojom_SSLInfoSpec.$,
        null,
        true /* nullable */,
        0),
      mojo.internal.StructField(
        'corsExposedHeaderNames', 160,
        0,
        mojo.internal.Array(mojo.internal.String, false),
        null,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'didServiceWorkerNavigationPreload', 45,
        0,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'shouldReportCorbBlocking', 45,
        1,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'asyncRevalidationRequested', 45,
        2,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'didMimeSniff', 45,
        3,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'isSignedExchangeInnerResponse', 45,
        4,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'wasInPrefetchCache', 45,
        5,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'wasCookieInRequest', 45,
        6,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'interceptedByPlugin', 45,
        7,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'isLegacyTlsVersion', 46,
        0,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'hasRangeRequested', 46,
        1,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'timingAllowPassed', 46,
        2,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'authChallengeInfo', 168,
        0,
        network_mojom_AuthChallengeInfoSpec.$,
        null,
        true /* nullable */,
        0),
      mojo.internal.StructField(
        'requestStart', 176,
        0,
        mojoBase_mojom_TimeTicksSpec.$,
        null,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'responseStart', 184,
        0,
        mojoBase_mojom_TimeTicksSpec.$,
        null,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'parsedHeaders', 192,
        0,
        network_mojom_ParsedHeadersSpec.$,
        null,
        true /* nullable */,
        0),
      mojo.internal.StructField(
        'originPolicy', 200,
        0,
        network_mojom_OriginPolicySpec.$,
        null,
        true /* nullable */,
        0),
      mojo.internal.StructField(
        'recursivePrefetchToken', 208,
        0,
        mojoBase_mojom_UnguessableTokenSpec.$,
        null,
        true /* nullable */,
        0),
      mojo.internal.StructField(
        'dnsAliases', 216,
        0,
        mojo.internal.Array(mojo.internal.String, false),
        null,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'webBundleUrl', 224,
        0,
        url_mojom_UrlSpec.$,
        null,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'hasAuthorizationCoveredByWildcardOnPreflight', 46,
        3,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'requestIncludeCredentials', 46,
        4,
        mojo.internal.Bool,
        true,
        false /* nullable */,
        0),
      mojo.internal.StructField(
        'hasPartitionedCookie', 46,
        5,
        mojo.internal.Bool,
        false,
        false /* nullable */,
        0),
    ],
    [[0, 240],]);



/**
 * @record
 */
export class URLResponseHead {
  constructor() {
    /** @type { !mojoBase_mojom_Time } */
    this.requestTime;
    /** @type { !mojoBase_mojom_Time } */
    this.responseTime;
    /** @type { !network_mojom_HttpResponseHeaders } */
    this.headers;
    /** @type { !string } */
    this.mimeType;
    /** @type { !string } */
    this.charset;
    /** @type { !network_mojom_CTPolicyCompliance } */
    this.ctPolicyCompliance;
    /** @type { !boolean } */
    this.networkAccessed;
    /** @type { !boolean } */
    this.emittedExtraInfo;
    /** @type { !boolean } */
    this.wasFetchedViaSpdy;
    /** @type { !boolean } */
    this.wasAlpnNegotiated;
    /** @type { !boolean } */
    this.wasAlternateProtocolAvailable;
    /** @type { !boolean } */
    this.isValidated;
    /** @type { !boolean } */
    this.wasFetchedViaCache;
    /** @type { !boolean } */
    this.wasFetchedViaServiceWorker;
    /** @type { !boolean } */
    this.didServiceWorkerNavigationPreload;
    /** @type { !boolean } */
    this.shouldReportCorbBlocking;
    /** @type { !boolean } */
    this.asyncRevalidationRequested;
    /** @type { !boolean } */
    this.didMimeSniff;
    /** @type { !boolean } */
    this.isSignedExchangeInnerResponse;
    /** @type { !boolean } */
    this.wasInPrefetchCache;
    /** @type { !boolean } */
    this.wasCookieInRequest;
    /** @type { !boolean } */
    this.interceptedByPlugin;
    /** @type { !boolean } */
    this.isLegacyTlsVersion;
    /** @type { !boolean } */
    this.hasRangeRequested;
    /** @type { !boolean } */
    this.timingAllowPassed;
    /** @type { !boolean } */
    this.hasAuthorizationCoveredByWildcardOnPreflight;
    /** @type { !boolean } */
    this.requestIncludeCredentials;
    /** @type { !boolean } */
    this.hasPartitionedCookie;
    /** @type { !bigint } */
    this.contentLength;
    /** @type { !bigint } */
    this.encodedDataLength;
    /** @type { !bigint } */
    this.encodedBodyLength;
    /** @type { !network_mojom_LoadTimingInfo } */
    this.loadTiming;
    /** @type { !network_mojom_ConnectionInfo } */
    this.connectionInfo;
    /** @type { !network_mojom_IPAddressSpace } */
    this.clientAddressSpace;
    /** @type { !string } */
    this.alpnNegotiatedProtocol;
    /** @type { !network_mojom_IPEndPoint } */
    this.remoteEndpoint;
    /** @type { !network_mojom_IPAddressSpace } */
    this.responseAddressSpace;
    /** @type { !network_mojom_FetchResponseSource } */
    this.serviceWorkerResponseSource;
    /** @type { !proxyResolver_mojom_ProxyServer } */
    this.proxyServer;
    /** @type { !Array<!url_mojom_Url> } */
    this.urlListViaServiceWorker;
    /** @type { !network_mojom_FetchResponseType } */
    this.responseType;
    /** @type { !number } */
    this.certStatus;
    /** @type { !bigint } */
    this.padding;
    /** @type { !string } */
    this.cacheStorageCacheName;
    /** @type { (network_mojom_SSLInfo|undefined) } */
    this.sslInfo;
    /** @type { !Array<!string> } */
    this.corsExposedHeaderNames;
    /** @type { (network_mojom_AuthChallengeInfo|undefined) } */
    this.authChallengeInfo;
    /** @type { !mojoBase_mojom_TimeTicks } */
    this.requestStart;
    /** @type { !mojoBase_mojom_TimeTicks } */
    this.responseStart;
    /** @type { (network_mojom_ParsedHeaders|undefined) } */
    this.parsedHeaders;
    /** @type { (network_mojom_OriginPolicy|undefined) } */
    this.originPolicy;
    /** @type { (mojoBase_mojom_UnguessableToken|undefined) } */
    this.recursivePrefetchToken;
    /** @type { !Array<!string> } */
    this.dnsAliases;
    /** @type { !url_mojom_Url } */
    this.webBundleUrl;
  }
}

