| Index: content/app/android/sandboxed_process_service.cc
|
| diff --git a/content/app/android/sandboxed_process_service.cc b/content/app/android/sandboxed_process_service.cc
|
| index e7118ffcc6ffd7b8982cfd94d14735ec8e217f05..2f0d5bc92324edd9dba1efa651b07c78a880d148 100644
|
| --- a/content/app/android/sandboxed_process_service.cc
|
| +++ b/content/app/android/sandboxed_process_service.cc
|
| @@ -4,14 +4,17 @@
|
|
|
| #include "content/app/android/sandboxed_process_service.h"
|
|
|
| +#include <android/native_window_jni.h>
|
| #include <cpu-features.h>
|
|
|
| #include "base/android/jni_array.h"
|
| #include "base/logging.h"
|
| #include "base/posix/global_descriptors.h"
|
| +#include "content/common/android/scoped_java_surface.h"
|
| #include "content/common/android/surface_texture_peer.h"
|
| #include "content/common/child_process.h"
|
| #include "content/common/child_thread.h"
|
| +#include "content/common/gpu/gpu_surface_lookup.h"
|
| #include "content/public/app/android_library_loader_hooks.h"
|
| #include "content/public/common/content_descriptors.h"
|
| #include "ipc/ipc_descriptors.h"
|
| @@ -21,17 +24,23 @@ using base::android::AttachCurrentThread;
|
| using base::android::CheckException;
|
| using base::android::JavaIntArrayToIntVector;
|
|
|
| +namespace content {
|
| +
|
| namespace {
|
|
|
| -class SurfaceTexturePeerSandboxedImpl : public content::SurfaceTexturePeer {
|
| +class SurfaceTexturePeerSandboxedImpl : public content::SurfaceTexturePeer,
|
| + public content::GpuSurfaceLookup {
|
| public:
|
| // |service| is the instance of
|
| // org.chromium.content.app.SandboxedProcessService.
|
| - SurfaceTexturePeerSandboxedImpl(jobject service)
|
| + explicit SurfaceTexturePeerSandboxedImpl(
|
| + const base::android::ScopedJavaLocalRef<jobject>& service)
|
| : service_(service) {
|
| + GpuSurfaceLookup::InitInstance(this);
|
| }
|
|
|
| virtual ~SurfaceTexturePeerSandboxedImpl() {
|
| + GpuSurfaceLookup::InitInstance(NULL);
|
| }
|
|
|
| virtual void EstablishSurfaceTexturePeer(
|
| @@ -41,15 +50,30 @@ class SurfaceTexturePeerSandboxedImpl : public content::SurfaceTexturePeer {
|
| int secondary_id) {
|
| JNIEnv* env = base::android::AttachCurrentThread();
|
| content::Java_SandboxedProcessService_establishSurfaceTexturePeer(
|
| - env, service_, pid,
|
| + env, service_.obj(), pid,
|
| surface_texture_bridge->j_surface_texture().obj(), primary_id,
|
| secondary_id);
|
| CheckException(env);
|
| }
|
|
|
| + virtual gfx::AcceleratedWidget AcquireNativeWidget(int surface_id) OVERRIDE {
|
| + JNIEnv* env = base::android::AttachCurrentThread();
|
| + ScopedJavaSurface surface(
|
| + content::Java_SandboxedProcessService_getViewSurface(
|
| + env, service_.obj(), surface_id));
|
| +
|
| + if (surface.j_surface().is_null())
|
| + return NULL;
|
| +
|
| + ANativeWindow* native_window = ANativeWindow_fromSurface(
|
| + env, surface.j_surface().obj());
|
| +
|
| + return native_window;
|
| + }
|
| +
|
| private:
|
| // The instance of org.chromium.content.app.SandboxedProcessService.
|
| - jobject service_;
|
| + base::android::ScopedJavaGlobalRef<jobject> service_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(SurfaceTexturePeerSandboxedImpl);
|
| };
|
| @@ -61,9 +85,11 @@ void InternalInitSandboxedProcess(const std::vector<int>& file_ids,
|
| JNIEnv* env,
|
| jclass clazz,
|
| jobject context,
|
| - jobject service,
|
| + jobject service_in,
|
| jint cpu_count,
|
| jlong cpu_features) {
|
| + base::android::ScopedJavaLocalRef<jobject> service(env, service_in);
|
| +
|
| // Set the CPU properties.
|
| android_setCpu(cpu_count, cpu_features);
|
| // Register the file descriptors.
|
| @@ -84,8 +110,6 @@ void QuitSandboxMainThreadMessageLoop() {
|
|
|
| } // namespace <anonymous>
|
|
|
| -namespace content {
|
| -
|
| void InitSandboxedProcess(JNIEnv* env,
|
| jclass clazz,
|
| jobject context,
|
|
|