static async compute_(data, context) {
    const processedTrace = await ProcessedTrace.request(data.trace, context);
    const networkRecords = await NetworkRecords.request(data.devtoolsLog, context);

    const mainFrameId = processedTrace.mainFrameInfo.frameId;

    /** @type {string|undefined} */
    let requestedUrl;
    /** @type {string|undefined} */
    let mainDocumentUrl;
    for (const event of data.devtoolsLog) {
      if (event.method === 'Page.frameNavigated' && event.params.frame.id === mainFrameId) {
        const {url} = event.params.frame;
        // Only set requestedUrl on the first main frame navigation.
        if (!requestedUrl) requestedUrl = url;
        mainDocumentUrl = url;
      }
    }
    if (!requestedUrl || !mainDocumentUrl) throw new Error('No main frame navigations found');

    const initialRequest =
      Lantern.Core.NetworkAnalyzer.findResourceForUrl(networkRecords, requestedUrl);
    if (initialRequest?.redirects?.length) requestedUrl = initialRequest.redirects[0].url;

    return {requestedUrl, mainDocumentUrl};
  }
@param {{trace: LH.Trace, devtoolsLog: LH.DevtoolsLog}} data
@param {LH.Artifacts.ComputedContext} context
@return {Promise<{requestedUrl: string, mainDocumentUrl: string}>}