/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package flash.tools.debugger; import java.io.File; import java.io.IOException; /** * Miscellaneous callbacks from the DJAPI to the debugger which is using it. * * @author mmorearty */ public interface IDebuggerCallbacks { /** * Tells the debugger to recompute the values which will be returned by * getHttpExe() and getPlayerExe(). * * This does NOT need to be called before the first call to either of * those functions. The intent of this function is to allow the debugger * to cache any expensive calculations, but still allow for the possibility * of recalculating the values from time to time (e.g. when a new launch * is going to happen). */ public void recomputeExeLocations(); /** * Returns the executable of the browser to launch for http: URLs, or * <code>null</code> if not known. */ public File getHttpExe(); /** * Returns the parameters to pass to the browser or null if non-existent. * If this is present, URL is assumed to already exist in this array. */ public String[] getBrowserParameters(String uri); /** * Returns the executable for the standalone Flash player, or <code>null</code> * if not known. */ public File getPlayerExe(); /** * Returns a name such as "firefox" or "Web browser", the name of the * browser, useful for error messages. Never returns <code>null</code>. */ public String getHttpExeName(); /** * Returns a name such as "SAFlashPlayer.exe" or "gflashplayer" or "Flash * player", the name of the standalone player, useful for error messages. * Never returns <code>null</code>. */ public String getPlayerExeName(); /** * Launches a debug target. The arguments are the same as those of * Runtime.exec(). */ public Process launchDebugTarget(String[] cmd) throws IOException; /** * Terminates a debug target process. */ public void terminateDebugTarget(Process process) throws IOException; /** * Launches a debug target using the launcher instance<code>ILauncher.launch(cmd)</code>. * */ public Process launchDebugTarget(String[] cmd, ILauncher launcher) throws IOException; /** * Terminates a debug target process by invoking <code>ILauncher.terminate(process)</code> */ public void terminateDebugTarget(Process process, ILauncher launcher) throws IOException; /** * Query the Windows registry. * * @param key * The registry key, in a format suitable for the REG.EXE * program. You must use full key names such as * HKEY_LOCAL_MACHINE rather the shorter abbreviations such as * HKLM. * @param value * The value within that key, or null for the unnamed ("empty") * value * @return the value stored at the location, or null if key or value was not * found * @throws IOException * indicates the registry query failed -- warning, this can * really happen! Some implementations of this function don't * work on Windows 2000. So, this function should not be counted * on too heavily -- you should have a backup plan. */ public String queryWindowsRegistry(String key, String value) throws IOException; /** * Same as queryWindowsRegistry, but allows specific access to the 32-bit * or 64-bit part of the registry. */ public String queryWindowsRegistry(String key, String value, int registryBitMode) throws IOException; /** * Returns the version number of an application. For example, Firefox 3.5.4 * would return new int[] { 3, 5 }. * <p> * As of this writing, the only thing this is used for is to determine, on * Windows, whether the user is running IE 8; if he is, we need to pass the * "-noframemerging" command-line argument. It is generally okay to just * return <code>null</code> from this function; a robust implementation is * not required. * * @param application * the application whose version number is desired. On Windows, * this will typically be a path to a .exe file. On Mac, it may * point to a .app directory such as "/Applications/Safari.app", * or it may point to the underlying binary, such as * "/Applications/Safari.app/Contents/MacOS/Safari". * @return an array of two integers if the version can be determined, or * null if it cannot be determined. The first integer is the major * version number, and the second integer is the minor version * number. More detailed information cannot be provided, because * this function needs to be cross- platform, and the format of * version information tends to vary widely from one platform to * another. * @throws IOException * e.g. for file not found, etc. */ public int[] getAppVersion(File application) throws IOException; }