///|
fn BidiProtocol::handle_network_emit_navigation_request_sequence(
  self : BidiProtocol,
  request_id : Int,
  params : Json?,
) -> Unit {
  let map = match params {
    Some(Object(map)) => map
    _ => {
      self.send_error(
        request_id, "invalid argument", "params must be an object",
      )
      return
    }
  }
  let context_id = match map.get("context") {
    Some(String(context_id)) => context_id
    _ => {
      self.send_error(
        request_id, "invalid argument", "context must be a string",
      )
      return
    }
  }
  if !self.manager.has_session(context_id) {
    self.send_error(
      request_id,
      "no such frame",
      "Unknown context: " + context_id,
    )
    return
  }
  let url = match map.get("url") {
    Some(String(url)) => url
    _ => {
      self.send_error(request_id, "invalid argument", "url must be a string")
      return
    }
  }
  let navigation : String? = match map.get("navigation") {
    Some(String(navigation)) => Some(navigation)
    Some(Null) | None => None
    Some(_) => {
      self.send_error(
        request_id, "invalid argument", "navigation must be a string",
      )
      return
    }
  }
  let emitted = self.emit_synthetic_navigation_request_sequence_for_test(
    context_id, url, navigation,
  )
  self.send_success(
    request_id,
    Some(make_object({ "emitted": Json::number(emitted.to_double()) })),
  )
}

///|
fn BidiProtocol::emit_synthetic_navigation_request_sequence(
  self : BidiProtocol,
  context_id : String,
  url : String,
  navigation : String?,
) -> Int {
  let requests = self.build_synthetic_navigation_request_entries(
    context_id, url, navigation,
  )
  for request in requests {
    self.emit_synthetic_network_event_sequence_internal(request, true, false)
  }
  requests.length()
}

///|
fn BidiProtocol::emit_synthetic_navigation_request_sequence_for_test(
  self : BidiProtocol,
  context_id : String,
  url : String,
  navigation : String?,
) -> Int {
  let requests = self.build_synthetic_navigation_request_entries(
    context_id, url, navigation,
  )
  for request in requests {
    self.emit_synthetic_network_event_sequence_internal(request, true, true)
  }
  requests.length()
}