Index: chrome/android/java/src/org/chromium/chrome/browser/DevToolsServer.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/DevToolsServer.java b/chrome/android/java/src/org/chromium/chrome/browser/DevToolsServer.java |
index 7ed33f90b78d0264c2bb533af479ddd0eaccb4b2..5f84994002fba43f1ebe4474c6ca8e4e4b5b2024 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/DevToolsServer.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/DevToolsServer.java |
@@ -4,13 +4,29 @@ |
package org.chromium.chrome.browser; |
+import android.content.Context; |
+import android.content.pm.PackageManager; |
+ |
+import org.chromium.base.CalledByNative; |
+ |
/** |
* Controller for Remote Web Debugging (Developer Tools). |
*/ |
public class DevToolsServer { |
+ private static final String DEBUG_PERMISSION_SIFFIX = ".permission.DEBUG"; |
private long mNativeDevToolsServer = 0; |
+ // Defines what processes may access to the socket. |
+ public enum Security { |
+ // Use content::CanUserConnectToDevTools to authorize access to the socket. |
+ DEFAULT, |
+ |
+ // In addition to default authorization allows access to an app with android permission |
+ // named chromeAppPackageName + DEBUG_PERMISSION_SIFFIX. |
+ ALLOW_DEBUG_PERMISSION, |
+ } |
+ |
public DevToolsServer(String socketNamePrefix) { |
mNativeDevToolsServer = nativeInitRemoteDebugging(socketNamePrefix); |
} |
@@ -24,12 +40,25 @@ public class DevToolsServer { |
return nativeIsRemoteDebuggingEnabled(mNativeDevToolsServer); |
} |
+ public void setRemoteDebuggingEnabled(boolean enabled, Security security) { |
+ boolean allowDebugPermission = security == Security.ALLOW_DEBUG_PERMISSION; |
+ nativeSetRemoteDebuggingEnabled(mNativeDevToolsServer, enabled, allowDebugPermission); |
+ } |
+ |
public void setRemoteDebuggingEnabled(boolean enabled) { |
- nativeSetRemoteDebuggingEnabled(mNativeDevToolsServer, enabled); |
+ setRemoteDebuggingEnabled(enabled, Security.DEFAULT); |
} |
private native long nativeInitRemoteDebugging(String socketNamePrefix); |
private native void nativeDestroyRemoteDebugging(long devToolsServer); |
private native boolean nativeIsRemoteDebuggingEnabled(long devToolsServer); |
- private native void nativeSetRemoteDebuggingEnabled(long devToolsServer, boolean enabled); |
+ private native void nativeSetRemoteDebuggingEnabled( |
+ long devToolsServer, boolean enabled, boolean allowDebugPermission); |
+ |
+ @CalledByNative |
+ private static boolean checkDebugPermission(Context context, int pid, int uid) { |
+ String debugPermissionName = context.getPackageName() + DEBUG_PERMISSION_SIFFIX; |
+ return context.checkPermission(debugPermissionName, pid, uid) |
+ == PackageManager.PERMISSION_GRANTED; |
+ } |
} |