// Copyright 2016 The Chromium 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 MEDIA_BASE_ANDROID_MEDIA_SERVER_CRASH_LISTENER_H_
#define MEDIA_BASE_ANDROID_MEDIA_SERVER_CRASH_LISTENER_H_

#include <jni.h>

#include "base/android/scoped_java_ref.h"
#include "base/bind.h"
#include "base/callback.h"
#include "base/macros.h"
#include "base/single_thread_task_runner.h"

namespace media {

// Uses a watchdog Android MediaPlayer to listen for MediaServer crashes, and
// to notify clients when crashes occur.
// NOTE: The MediaServiceThrottler is the only client of this class, and it
// manages the MediaServerCrashListener's lifetime carefully. There should not
// be more than a single instance of this class per process.
class MediaServerCrashListener {
 public:
  using OnMediaServerCrashCB = base::RepeatingCallback<void(bool)>;

  // Basic constructor. |on_server_crash_cb| will be posted to
  // |callback_task_runner| every time the watchdog MediaPlayer detects a crash.
  MediaServerCrashListener(
      OnMediaServerCrashCB on_server_crash_cb,
      scoped_refptr<base::SingleThreadTaskRunner> callback_task_runner);

  MediaServerCrashListener(const MediaServerCrashListener&) = delete;
  MediaServerCrashListener& operator=(const MediaServerCrashListener&) = delete;

  ~MediaServerCrashListener();

  // Ensure the underlying watchdog MediaPlayer is created.
  // This needs to be called to restart listening after a MediaServer crash.
  void EnsureListening();

  // Called from JNI whenever a MEDIA_ERROR_SERVER_DIED is received.
  void OnMediaServerCrashDetected(
      JNIEnv* env,
      const base::android::JavaParamRef<jobject>& obj,
      jboolean watchdog_needs_release);

  void ReleaseWatchdog();

 private:
  OnMediaServerCrashCB on_server_crash_cb_;

  // Task runner on which the |on_server_crash_cb_| will be posted.
  scoped_refptr<base::SingleThreadTaskRunner> callback_task_runner_;

  base::android::ScopedJavaGlobalRef<jobject> j_crash_listener_;
};

}  // namespace media

#endif  // MEDIA_BASE_ANDROID_MEDIA_SERVER_CRASH_LISTENER_H_
