Chromium Code Reviews| Index: media/base/android/media_server_crash_listener.cc |
| diff --git a/media/base/android/media_server_crash_listener.cc b/media/base/android/media_server_crash_listener.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..3a3e5a161a695957e40f8e0f8efd8e7aac90233c |
| --- /dev/null |
| +++ b/media/base/android/media_server_crash_listener.cc |
| @@ -0,0 +1,63 @@ |
| +// 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. |
| + |
| +#include "media/base/android/media_server_crash_listener.h" |
| + |
| +#include "base/android/context_utils.h" |
| +#include "base/android/jni_android.h" |
| +#include "base/memory/singleton.h" |
| +#include "jni/MediaServerCrashListener_jni.h" |
| + |
| +namespace media { |
| + |
| +// static |
| +MediaServerCrashListener* MediaServerCrashListener::GetInstance() { |
| + return base::Singleton< |
|
DaleCurtis
2016/11/08 22:35:41
Typically we use LazyInstance instead of a base::S
tguilbert
2016/11/11 03:50:29
Changed to have the lifetime managed by the MediaS
|
| + MediaServerCrashListener, |
| + base::LeakySingletonTraits<MediaServerCrashListener>>::get(); |
| +} |
| + |
| +// static |
| +bool MediaServerCrashListener::RegisterMediaServerCrashListener(JNIEnv* env) { |
| + return RegisterNativesImpl(env); |
| +} |
| + |
| +MediaServerCrashListener::~MediaServerCrashListener() {} |
| + |
| +void MediaServerCrashListener::SetOnServerCrashCallback( |
| + const base::Closure& on_server_crash_cb, |
| + scoped_refptr<base::SingleThreadTaskRunner> callback_thread) { |
|
DaleCurtis
2016/11/08 22:35:41
Unless you're using std::move() this should probab
tguilbert
2016/11/11 03:50:29
By value or std::move() is the latest.
https://ch
|
| + // There is currently only one client of MediaServerCrashListener. A more |
| + // robust observer/callback mechanism should be implemented if that changed. |
| + DCHECK(!on_server_crash_cb_); |
| + on_server_crash_cb_ = on_server_crash_cb; |
| + callback_task_runner_ = callback_thread; |
| +} |
| + |
| +void MediaServerCrashListener::OnMediaServerCrashDetected( |
| + JNIEnv* env, |
| + const base::android::JavaParamRef<jobject>& obj) { |
| + if (on_server_crash_cb_) |
| + callback_task_runner_->PostTask(FROM_HERE, on_server_crash_cb_); |
| +} |
| + |
| +void MediaServerCrashListener::ClearOnServerCrashCallbackForTesting() { |
| + on_server_crash_cb_.Reset(); |
| +} |
| + |
| +bool MediaServerCrashListener::StartListening() { |
| + JNIEnv* env = base::android::AttachCurrentThread(); |
| + return Java_MediaServerCrashListener_startListening(env, j_crash_listener_); |
| +} |
| + |
| +MediaServerCrashListener::MediaServerCrashListener() { |
| + JNIEnv* env = base::android::AttachCurrentThread(); |
| + CHECK(env); |
| + |
| + j_crash_listener_.Reset(Java_MediaServerCrashListener_create( |
| + env, base::android::GetApplicationContext(), |
| + reinterpret_cast<intptr_t>(this))); |
| +} |
| + |
| +} // namespace media |