1// Copyright 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5package org.chromium.chrome.browser; 6 7import android.content.Context; 8import android.content.pm.PackageManager; 9 10import org.chromium.base.CalledByNative; 11 12/** 13 * Controller for Remote Web Debugging (Developer Tools). 14 */ 15public class DevToolsServer { 16 private static final String DEBUG_PERMISSION_SIFFIX = ".permission.DEBUG"; 17 18 private long mNativeDevToolsServer = 0; 19 20 // Defines what processes may access to the socket. 21 public enum Security { 22 // Use content::CanUserConnectToDevTools to authorize access to the socket. 23 DEFAULT, 24 25 // In addition to default authorization allows access to an app with android permission 26 // named chromeAppPackageName + DEBUG_PERMISSION_SIFFIX. 27 ALLOW_DEBUG_PERMISSION, 28 } 29 30 public DevToolsServer(String socketNamePrefix) { 31 mNativeDevToolsServer = nativeInitRemoteDebugging(socketNamePrefix); 32 } 33 34 public void destroy() { 35 nativeDestroyRemoteDebugging(mNativeDevToolsServer); 36 mNativeDevToolsServer = 0; 37 } 38 39 public boolean isRemoteDebuggingEnabled() { 40 return nativeIsRemoteDebuggingEnabled(mNativeDevToolsServer); 41 } 42 43 public void setRemoteDebuggingEnabled(boolean enabled, Security security) { 44 boolean allowDebugPermission = security == Security.ALLOW_DEBUG_PERMISSION; 45 nativeSetRemoteDebuggingEnabled(mNativeDevToolsServer, enabled, allowDebugPermission); 46 } 47 48 public void setRemoteDebuggingEnabled(boolean enabled) { 49 setRemoteDebuggingEnabled(enabled, Security.DEFAULT); 50 } 51 52 private native long nativeInitRemoteDebugging(String socketNamePrefix); 53 private native void nativeDestroyRemoteDebugging(long devToolsServer); 54 private native boolean nativeIsRemoteDebuggingEnabled(long devToolsServer); 55 private native void nativeSetRemoteDebuggingEnabled( 56 long devToolsServer, boolean enabled, boolean allowDebugPermission); 57 58 @CalledByNative 59 private static boolean checkDebugPermission(Context context, int pid, int uid) { 60 String debugPermissionName = context.getPackageName() + DEBUG_PERMISSION_SIFFIX; 61 return context.checkPermission(debugPermissionName, pid, uid) 62 == PackageManager.PERMISSION_GRANTED; 63 } 64} 65