static getDocumentRequestChain(networkRecords, processedTrace) {
    /** @type {Array<LH.Artifacts.NetworkRequest>} */
    const documentRequests = [];

    // Find all the document requests by examining navigation events and their redirects
    for (const event of processedTrace.processEvents) {
      if (event.name !== 'navigationStart') continue;

      const data = event.args.data || {};
      if (!data.documentLoaderURL || !data.isLoadingMainFrame) continue;

      let networkRecord = networkRecords.find(record => record.requestId === data.navigationId);
      while (networkRecord) {
        documentRequests.push(networkRecord);
        // HTTP redirects won't have separate navStarts, so find through the redirect chain.
        networkRecord = networkRecord.redirectDestination;
      }
    }

    if (!documentRequests.length) {
      throw new Error('No navigation requests found');
    }

    return documentRequests;
  }
This method generates the document request chain including client-side and server-side redirects.

Example:
   GET /requestedUrl => 302 /firstRedirect
   GET /firstRedirect => 200 /firstRedirect, window.location = '/secondRedirect'
   GET /secondRedirect => 302 /thirdRedirect
   GET /thirdRedirect => 302 /mainDocumentUrl
   GET /mainDocumentUrl => 200 /mainDocumentUrl

Returns network records [/requestedUrl, /firstRedirect, /secondRedirect, /thirdRedirect, /mainDocumentUrl]

@param {Array<LH.Artifacts.NetworkRequest>} networkRecords
@param {LH.Artifacts.ProcessedTrace} processedTrace
@return {Array<LH.Artifacts.NetworkRequest>}