feat: add new render-process-gone event (#24308)

Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
This commit is contained in:
trop[bot]
2020-07-03 07:21:11 -07:00
committed by GitHub
parent b32ffe0ab2
commit c451a90cfb
4 changed files with 59 additions and 0 deletions

View File

@@ -334,6 +334,24 @@ Returns:
Emitted when the renderer process crashes or is killed.
#### Event: 'render-process-gone'
Returns:
* `event` Event
* `details` Object
* `reason` String - The reason the render process is gone. Possible values:
* `clean-exit` - Process exited with an exit code of zero
* `abnormal-exit` - Process exited with a non-zero exit code
* `killed` - Process was sent a SIGTERM or otherwise killed externally
* `crashed` - Process crashed
* `oom` - Process ran out of memory
* `launch-failure` - Process never successfully launched
* `integrity-failure` - Windows code integrity checks failed
Emitted when the renderer process unexpectedly dissapears. This is normally
because it was crashed or killed.
#### Event: 'unresponsive'
Emitted when the web page becomes unresponsive.

View File

@@ -32,6 +32,7 @@ const supportedWebViewEvents = [
'focus-change',
'close',
'crashed',
'render-process-gone',
'plugin-crashed',
'destroyed',
'page-title-updated',

View File

@@ -982,6 +982,10 @@ void WebContents::RenderViewDeleted(content::RenderViewHost* render_view_host) {
void WebContents::RenderProcessGone(base::TerminationStatus status) {
Emit("crashed", status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED);
v8::HandleScope handle_scope(isolate());
mate::Dictionary details = mate::Dictionary::CreateEmpty(isolate());
details.Set("reason", status);
Emit("render-process-gone", details);
}
void WebContents::PluginCrashed(const base::FilePath& plugin_path,

View File

@@ -55,6 +55,42 @@ namespace network {
class ResourceRequestBody;
}
namespace mate {
template <>
struct Converter<base::TerminationStatus> {
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
const base::TerminationStatus& status) {
switch (status) {
case base::TERMINATION_STATUS_NORMAL_TERMINATION:
return mate::ConvertToV8(isolate, "clean-exit");
case base::TERMINATION_STATUS_ABNORMAL_TERMINATION:
return mate::ConvertToV8(isolate, "abnormal-exit");
case base::TERMINATION_STATUS_PROCESS_WAS_KILLED:
return mate::ConvertToV8(isolate, "killed");
case base::TERMINATION_STATUS_PROCESS_CRASHED:
return mate::ConvertToV8(isolate, "crashed");
case base::TERMINATION_STATUS_STILL_RUNNING:
return mate::ConvertToV8(isolate, "still-running");
case base::TERMINATION_STATUS_LAUNCH_FAILED:
return mate::ConvertToV8(isolate, "launch-failed");
case base::TERMINATION_STATUS_OOM:
return mate::ConvertToV8(isolate, "oom");
#if defined(OS_WIN)
case base::TERMINATION_STATUS_INTEGRITY_FAILURE:
return mate::ConvertToV8(isolate, "integrity-failure");
#endif
case base::TERMINATION_STATUS_MAX_ENUM:
NOTREACHED();
return mate::ConvertToV8(isolate, "");
}
NOTREACHED();
return mate::ConvertToV8(isolate, "");
}
};
} // namespace mate
namespace electron {
class ElectronBrowserContext;