1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_PUBLIC_BROWSER_BROWSER_CHILD_PROCESS_OBSERVER_H_ 6 #define CONTENT_PUBLIC_BROWSER_BROWSER_CHILD_PROCESS_OBSERVER_H_ 7 8 #include "content/common/content_export.h" 9 10 namespace content { 11 12 struct ChildProcessData; 13 struct ChildProcessTerminationInfo; 14 15 // An observer API implemented by classes which are interested in browser child 16 // process events. Note that render processes cannot be observed through this 17 // interface; use RenderProcessHostObserver instead. 18 class CONTENT_EXPORT BrowserChildProcessObserver { 19 public: 20 // Called when a child process host has connected to a child process. 21 // Note that |data.handle| may be invalid, if the child process connects to 22 // the pipe before the process launcher's reply arrives. BrowserChildProcessHostConnected(const ChildProcessData & data)23 virtual void BrowserChildProcessHostConnected(const ChildProcessData& data) {} 24 25 // Called when a child process has successfully launched and has connected to 26 // it child process host. The |data.handle| is guaranteed to be valid. BrowserChildProcessLaunchedAndConnected(const ChildProcessData & data)27 virtual void BrowserChildProcessLaunchedAndConnected( 28 const ChildProcessData& data) {} 29 30 // Called after a ChildProcessHost is disconnected from the child process. BrowserChildProcessHostDisconnected(const ChildProcessData & data)31 virtual void BrowserChildProcessHostDisconnected( 32 const ChildProcessData& data) {} 33 34 // Called when a child process disappears unexpectedly as a result of a crash. BrowserChildProcessCrashed(const ChildProcessData & data,const ChildProcessTerminationInfo & info)35 virtual void BrowserChildProcessCrashed( 36 const ChildProcessData& data, 37 const ChildProcessTerminationInfo& info) {} 38 39 // Called when a child process disappears unexpectedly as a result of being 40 // killed. BrowserChildProcessKilled(const ChildProcessData & data,const ChildProcessTerminationInfo & info)41 virtual void BrowserChildProcessKilled( 42 const ChildProcessData& data, 43 const ChildProcessTerminationInfo& info) {} 44 45 // Note for Android. There is no way to reliably distinguish between Crash 46 // and Kill. Arbitrarily choose all abnormal terminations on Android to call 47 // BrowserChildProcessKilled, which means BrowserChildProcessCrashed will 48 // never be called on Android. 49 50 protected: 51 // The observer can be destroyed on any thread. ~BrowserChildProcessObserver()52 virtual ~BrowserChildProcessObserver() {} 53 54 static void Add(BrowserChildProcessObserver* observer); 55 static void Remove(BrowserChildProcessObserver* observer); 56 }; 57 58 } // namespace content 59 60 #endif // CONTENT_PUBLIC_BROWSER_BROWSER_CHILD_PROCESS_OBSERVER_H_ 61