### 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
v8::Local<v8::Value> val,
                     base::trace_event::TraceConfig* out) {
    
    
    
    
    gin_helper::Dictionary options;
    if (ConvertFromV8(isolate, val, &options)) {
      std::string category_filter, trace_options;
      if (options.Get("categoryFilter", &category_filter) &&
          options.Get("traceOptions", &trace_options)) {
        *out = base::trace_event::TraceConfig(category_filter, trace_options);
        return true;
      }
    }
    base::DictionaryValue memory_dump_config;
    if (ConvertFromV8(isolate, val, &memory_dump_config)) {
      *out = base::trace_event::TraceConfig(memory_dump_config);
      return true;
    }
    return false;
  }
};
}  
namespace {
using CompletionCallback = base::OnceCallback<void(const base::FilePath&)>;
base::Optional<base::FilePath> CreateTemporaryFileOnIO() {