910e62b5创建于 1月15日历史提交
// 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_