// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SRC_DEVELOPER_DEBUG_SHARED_ZIRCON_EXCEPTION_WATCHER_H_
#define SRC_DEVELOPER_DEBUG_SHARED_ZIRCON_EXCEPTION_WATCHER_H_

#include <lib/zx/exception.h>
#include <zircon/syscalls/exception.h>
#include <zircon/types.h>

namespace debug {

// Callbacks for exceptions from a process exception port.
class ZirconExceptionWatcher {
 public:
  virtual void OnJobException(zx::exception exception_token, zx_exception_info_t exception_info) {}

  // Process terminated is different as it is communicated through a signal instead as from an
  // exception.
  virtual void OnProcessTerminated(zx_koid_t process_koid) {}

  virtual void OnThreadStarting(zx::exception exception_token, zx_exception_info_t exception_info) {
  }

  virtual void OnThreadExiting(zx::exception exception_token, zx_exception_info_t exception_info) {}

  // New exception handling that uses the exception tokens.
  virtual void OnException(zx::exception exception_token, zx_exception_info_t exception_info) {}

  virtual ~ZirconExceptionWatcher() = default;
};

}  // namespace debug

#endif  // SRC_DEVELOPER_DEBUG_SHARED_ZIRCON_EXCEPTION_WATCHER_H_
