| Index: media/base/android/dialog_surface_manager.cc
|
| diff --git a/media/base/android/dialog_surface_manager.cc b/media/base/android/dialog_surface_manager.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3646abf488aa2b737fc2066f645fb415ddc4e323
|
| --- /dev/null
|
| +++ b/media/base/android/dialog_surface_manager.cc
|
| @@ -0,0 +1,86 @@
|
| +// 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/dialog_surface_manager.h"
|
| +
|
| +#include <algorithm>
|
| +#include <limits>
|
| +#include <memory>
|
| +#include <utility>
|
| +
|
| +#include "base/android/build_info.h"
|
| +#include "base/android/jni_android.h"
|
| +#include "base/android/jni_array.h"
|
| +#include "base/android/jni_string.h"
|
| +#include "base/logging.h"
|
| +#include "base/numerics/safe_conversions.h"
|
| +#include "base/strings/string_util.h"
|
| +#include "gpu/ipc/common/dialog_surface_lookup.h"
|
| +#include "jni/DialogSurfaceManagerWrapper_jni.h"
|
| +#include "media/base/android/dialog_surface_callback.h"
|
| +#include "media/base/bit_reader.h"
|
| +#include "media/base/decrypt_config.h"
|
| +
|
| +using base::android::AttachCurrentThread;
|
| +using base::android::ConvertJavaStringToUTF8;
|
| +using base::android::ConvertUTF8ToJavaString;
|
| +using base::android::JavaIntArrayToIntVector;
|
| +using base::android::ScopedJavaGlobalRef;
|
| +using base::android::ScopedJavaLocalRef;
|
| +
|
| +namespace media {
|
| +
|
| +static base::LazyInstance<DialogSurfaceManager>::Leaky g_surface_manager =
|
| + LAZY_INSTANCE_INITIALIZER;
|
| +
|
| +DialogSurfaceManager* DialogSurfaceManager::GetPointer() {
|
| + return g_surface_manager.Pointer();
|
| +}
|
| +
|
| +DialogSurfaceManager::DialogSurfaceManager() {
|
| + JNIEnv* env = AttachCurrentThread();
|
| + CHECK(env);
|
| +
|
| + // Get the surface manager from the browser.
|
| + // This can, in principle, be run in the gpu process if we send the window
|
| + // token from the browser. See https://codereview.chromium.org/1967553002 .
|
| + ScopedJavaLocalRef<jobject> unwrapped_manager(
|
| + gpu::DialogSurfaceLookup::GetInstance()->GetDialogSurfaceManager());
|
| +
|
| + // Wrap the manager for local access.
|
| + j_wrapped_manager_.Reset(
|
| + Java_DialogSurfaceManagerWrapper_wrap(env, unwrapped_manager.obj()));
|
| +}
|
| +
|
| +DialogSurfaceManager::~DialogSurfaceManager() {}
|
| +
|
| +std::unique_ptr<DialogSurfaceController> DialogSurfaceManager::CreateSurface(
|
| + const Config& config,
|
| + const DialogSurfaceController::Callback& callback) {
|
| + JNIEnv* env = AttachCurrentThread();
|
| + CHECK(env);
|
| +
|
| + std::unique_ptr<DialogSurfaceCallback> wrapped_callback(
|
| + new DialogSurfaceCallback(callback));
|
| +
|
| + ScopedJavaGlobalRef<jobject> result(
|
| + Java_DialogSurfaceManagerWrapper_createSurface(
|
| + env, j_wrapped_manager_.obj(), wrapped_callback->obj(),
|
| + config.position.x(), config.position.y(), config.size.width(),
|
| + config.size.height()));
|
| +
|
| + std::unique_ptr<DialogSurfaceController> controller;
|
| + if (result.obj() != nullptr) {
|
| + controller.reset(
|
| + new DialogSurfaceController(result, std::move(wrapped_callback)));
|
| + }
|
| +
|
| + return controller;
|
| +}
|
| +
|
| +bool DialogSurfaceManager::RegisterDialogSurfaceManager(JNIEnv* env) {
|
| + return RegisterNativesImpl(env);
|
| +}
|
| +
|
| +} // namespace media
|
|
|