| 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..262f72c52b0dd6dbe6472888ea1e431fb09d780b
|
| --- /dev/null
|
| +++ b/media/base/android/dialog_surface_manager.cc
|
| @@ -0,0 +1,87 @@
|
| +// 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<DialogSurface> DialogSurfaceManager::CreateSurface(
|
| + base::ProcessHandle pid,
|
| + int frame_id,
|
| + const Config& config,
|
| + const DialogSurface::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(), pid, frame_id, wrapped_callback->obj(),
|
| + config.position.x(), config.position.y(), config.size.width(),
|
| + config.size.height()));
|
| +
|
| + std::unique_ptr<DialogSurface> controller;
|
| + if (result.obj() != nullptr) {
|
| + controller.reset(new DialogSurface(result, std::move(wrapped_callback)));
|
| + }
|
| +
|
| + return controller;
|
| +}
|
| +
|
| +bool DialogSurfaceManager::RegisterDialogSurfaceManager(JNIEnv* env) {
|
| + return RegisterNativesImpl(env);
|
| +}
|
| +
|
| +} // namespace media
|
|
|