blob: 217e4ee55c353eca7d62e1c68b1308af3a0dcd2a [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_PUBLIC_BROWSER_RENDER_PROCESS_HOST_CREATION_OBSERVER_H_
#define CONTENT_PUBLIC_BROWSER_RENDER_PROCESS_HOST_CREATION_OBSERVER_H_
#include "content/common/content_export.h"
namespace content {
class RenderProcessHost;
struct ChildProcessTerminationInfo;
// An observer that gets notified any time a new RenderProcessHost is created.
// This can only be used on the UI thread.
class CONTENT_EXPORT RenderProcessHostCreationObserver {
public:
RenderProcessHostCreationObserver(const RenderProcessHostCreationObserver&) =
delete;
RenderProcessHostCreationObserver& operator=(
const RenderProcessHostCreationObserver&) = delete;
virtual ~RenderProcessHostCreationObserver();
// This method is invoked when the process host is being initialized, and the
// renderer process has been requested to be launched. Note that the channel
// may or may not have been connected when this is invoked. Use this instead
// of `OnRenderProcessHostLaunched` when information needs to be sent to the
// renderer process as soon as possible before e.g. the renderer process
// commits a navigation, etc. (which can possibly be triggered before the
// OnRenderProcessLaunched signal if there is no IPC channel pausing).
// A RenderProcessHost can be reused for a different renderer process (for
// instance in the case of a renderer process crash). In this case,
// `OnRenderProcessHostCreated` will be called again for the same
// `RenderProcessHost` when initializing the new process, without having been
// destroyed (i.e. `RenderProcessHostObserver::RenderProcessHostDestroyed` is
// not called).
// TODO(crbug.com/448511116): Rename this to reflect that this is triggered
// when initializing and requesting to launch the renderer process, instead
// of when the `process_host` itself being created.
virtual void OnRenderProcessHostCreated(RenderProcessHost* process_host) {}
// This method is invoked when the renderer process for the given host was
// successfully launched. Use this instead of `OnRenderProcessHostCreated`
// when information from the launched process is needed, e.g. the PID. Similar
// to `OnRenderProcessHostCreated`, this can be triggered multiple times for
// the same host.
// TODO(crbug.com/448511116): Move this to RenderProcessHostObserver instead.
virtual void OnRenderProcessLaunched(RenderProcessHost* process_host) {}
// This method is invoked when a renderer process failed to launch
// successfully, and `OnRenderProcessHostLaunched` hasn't yet been fired for
// the `RenderProcessHost`.
virtual void OnRenderProcessHostCreationFailed(
RenderProcessHost* host,
const ChildProcessTerminationInfo& info);
protected:
RenderProcessHostCreationObserver();
};
} // namespace content
#endif // CONTENT_PUBLIC_BROWSER_RENDER_PROCESS_HOST_CREATION_OBSERVER_H_