### Issue Details

* **Electron Version:**
  * 12, 11, 10, 9
* **Operating System:**
  * all
* **Last Known Working Electron version:**
  * NA

### Expected Behavior
The Promise returned by `contentTracing.stopTracing()` should always either resolve or reject.

### Actual Behavior
If called when a trace is not in progress, `contentTracing.stopTracing()` never resolves or rejects.

### To Reproduce
https://gist.github.com/8eb40af81ba15dbe4c50735a6ec4489d

note `'done'` is never printed.
shell/browser/api/electron_api_content_tracing.cc
gin_helper::Promise<const std::set<std::string>&> promise(isolate);
  v8::Local<v8::Promise> handle = promise.GetHandle();
  
  TracingController::GetInstance()->GetCategories(base::BindOnce(
      gin_helper::Promise<const std::set<std::string>&>::ResolvePromise,
      std::move(promise)));
  return handle;
}
v8::Local<v8::Promise> StartTracing(
    v8::Isolate* isolate,
    const base::trace_event::TraceConfig& trace_config) {
  gin_helper::Promise<void> promise(isolate);
  v8::Local<v8::Promise> handle = promise.GetHandle();
  if (!TracingController::GetInstance()->StartTracing(
          trace_config,
          base::BindOnce(gin_helper::Promise<void>::ResolvePromise,
                         std::move(promise)))) {
    
    
    
    
    return gin_helper::Promise<void>::ResolvedPromise(isolate);
  }
  return handle;
}
void OnTraceBufferUsageAvailable(