Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(430)

Unified Diff: content/public/android/java/src/org/chromium/content/browser/SandboxedProcessLauncher.java

Issue 12390077: Android: Support GPU process (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments and rebase Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/public/android/java/src/org/chromium/content/browser/SandboxedProcessLauncher.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/SandboxedProcessLauncher.java b/content/public/android/java/src/org/chromium/content/browser/SandboxedProcessLauncher.java
index 4ea75bdf7b623cf5889b5e20a017e3b0556f4564..ce2dae20dcfbbf19c9735ec65e1c4c1e640cec95 100644
--- a/content/public/android/java/src/org/chromium/content/browser/SandboxedProcessLauncher.java
+++ b/content/public/android/java/src/org/chromium/content/browser/SandboxedProcessLauncher.java
@@ -9,7 +9,9 @@ import android.os.RemoteException;
import android.util.Log;
import android.view.Surface;
+import java.util.Arrays;
import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -17,7 +19,6 @@ import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
import org.chromium.base.ThreadUtils;
import org.chromium.content.app.LibraryLoader;
-import org.chromium.content.common.CommandLine;
import org.chromium.content.common.ISandboxedProcessCallback;
import org.chromium.content.common.ISandboxedProcessService;
@@ -29,6 +30,10 @@ import org.chromium.content.common.ISandboxedProcessService;
public class SandboxedProcessLauncher {
private static String TAG = "SandboxedProcessLauncher";
+ private static final int CALLBACK_FOR_UNKNOWN_PROCESS = 0;
+ private static final int CALLBACK_FOR_GPU_PROCESS = 1;
+ private static final int CALLBACK_FOR_RENDERER_PROCESS = 2;
+
// The upper limit on the number of simultaneous service process instances supported.
// This must not exceed total number of SandboxedProcessServiceX classes declared in
// this package, and defined as services in the embedding application's manifest file.
@@ -206,7 +211,17 @@ public class SandboxedProcessLauncher {
nativeOnSandboxedProcessStarted(clientContext, pid);
}
};
- connection.setupConnection(commandLine, filesToBeMapped, createCallback(), onConnect);
+ int callbackType = CALLBACK_FOR_UNKNOWN_PROCESS;
+ List<String> commandLineList = Arrays.asList(commandLine);
+ if (commandLineList.contains("--type=renderer")) {
+ callbackType = CALLBACK_FOR_RENDERER_PROCESS;
+ } else if (commandLineList.contains("--type=gpu-process")) {
+ callbackType = CALLBACK_FOR_GPU_PROCESS;
+ }
+ assert callbackType != CALLBACK_FOR_UNKNOWN_PROCESS;
+
+ connection.setupConnection(
+ commandLine, filesToBeMapped, createCallback(callbackType), onConnect);
}
/**
@@ -260,7 +275,7 @@ public class SandboxedProcessLauncher {
/**
* This implementation is used to receive callbacks from the remote service.
*/
- private static ISandboxedProcessCallback createCallback() {
+ private static ISandboxedProcessCallback createCallback(final int callbackType) {
return new ISandboxedProcessCallback.Stub() {
/**
* This is called by the remote service regularly to tell us about
@@ -269,13 +284,34 @@ public class SandboxedProcessLauncher {
* NOT be running in our main thread -- so, to update the UI, we need
* to use a Handler.
*/
+ @Override
public void establishSurfacePeer(
int pid, Surface surface, int primaryID, int secondaryID) {
- // TODO(sievers): This should call into native and pass the Surface to the
- // right media player instance.
+ // Do not allow a malicious renderer to connect to a producer. This is only
+ // used from stream textures managed by the GPU process.
+ if (callbackType != CALLBACK_FOR_GPU_PROCESS) {
+ Log.e(TAG, "Illegal callback for non-GPU process.");
+ return;
+ }
+
+ nativeEstablishSurfacePeer(pid, surface, primaryID, secondaryID);
+ }
+
+ @Override
+ public Surface getViewSurface(int surfaceId) {
+ // Do not allow a malicious renderer to get to our view surface.
+ if (callbackType != CALLBACK_FOR_GPU_PROCESS) {
+ Log.e(TAG, "Illegal callback for non-GPU process.");
+ return null;
+ }
+
+ return nativeGetViewSurface(surfaceId);
}
};
};
private static native void nativeOnSandboxedProcessStarted(int clientContext, int pid);
+ private static native Surface nativeGetViewSurface(int surfaceId);
+ private static native void nativeEstablishSurfacePeer(
+ int pid, Surface surface, int primaryID, int secondaryID);
}

Powered by Google App Engine
This is Rietveld 408576698