It looks like this is very nearly ready in upstream Chromium, apparently just blocked on [this CL](https://chromium-review.googlesource.com/c/crashpad/crashpad/+/2037803), which has to do with an upload issue on Fedora.

Upstream tracking issue: https://bugs.chromium.org/p/crashpad/issues/detail?id=30

Once this CL is landed we should consider enabling Crashpad on Linux and removing our Breakpad-related code.
shell/app/electron_main.cc
uint32_t exec_path_size = 0;
  int rv = _NSGetExecutablePath(NULL, &exec_path_size);
  if (rv != -1) {
    fprintf(stderr, "_NSGetExecutablePath: get length failed\n");
    abort();
  }
  auto exec_path = std::make_unique<char[]>(exec_path_size);
  rv = _NSGetExecutablePath(exec_path.get(), &exec_path_size);
  if (rv != 0) {
    fprintf(stderr, "_NSGetExecutablePath: get path failed\n");
    abort();
  }
  sandbox::SeatbeltExecServer::CreateFromArgumentsResult seatbelt =
      sandbox::SeatbeltExecServer::CreateFromArguments(exec_path.get(), argc,
                                                       argv);
  if (seatbelt.sandbox_required) {
    if (!seatbelt.server) {
      fprintf(stderr, "Failed to create seatbelt sandbox server.\n");
      abort();
    }
    if (!seatbelt.server->InitializeSandbox()) {
      fprintf(stderr, "Failed to initialize sandbox.\n");
      abort();
    }
  }
#endif  
  return ElectronMain(argc, argv);
}
#endif