onRequestWillBeSent(data) {
    this.requestId = data.requestId;
    let url;
    try {
      // try to construct the url and fill in request
      url = new URL(data.request.url);
    } catch (e) {
      // isValid left false, all other data is blank
      return;
    }
    this.url = data.request.url;
    this.documentURL = data.documentURL;
    this.parsedURL = {
      scheme: url.protocol.split(':')[0],
      // Intentional, DevTools uses different terminology
      host: url.hostname,
      securityOrigin: url.origin,
    };
    this.isSecure = UrlUtils.isSecureScheme(this.parsedURL.scheme);

    this.rendererStartTime = data.timestamp * 1000;
    // These are expected to be overridden with better value in `_recomputeTimesWithResourceTiming`.
    this.networkRequestTime = this.rendererStartTime;
    this.responseHeadersEndTime = this.rendererStartTime;

    this.requestMethod = data.request.method;

    this.initiator = data.initiator;
    this.resourceType = data.type && RESOURCE_TYPES[data.type];
    this.priority = data.request.initialPriority;

    this.frameId = data.frameId;
    this.isLinkPreload = data.initiator.type === 'preload' || !!data.request.isLinkPreload;
    this.isValid = true;
  }
@param {LH.Crdp.Network.RequestWillBeSentEvent} data