Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / android / java / src / org / chromium / chrome / browser / DevToolsServer.java
index 7ed33f9..5f84994 100644 (file)
@@ -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;
+    }
 }