// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. package org.chromium.sdk; import java.util.Collection; import java.util.List; import org.chromium.sdk.util.MethodIsBlockingException; /** * An object that matches the execution state of the browser JavaScript VM while * suspended. It reconstructs and provides access to the current state of the * JavaScript VM. */ public interface DebugContext { /** * JavaScript debugger step actions. */ public enum StepAction { /** * Resume the JavaScript execution. */ CONTINUE, /** * Step into the current statement. */ IN, /** * Step over the current statement. */ OVER, /** * Step out of the current function. */ OUT } /** * The suspension state. */ public enum State { /** * A normal suspension (a step end or a breakpoint). */ NORMAL, /** * A suspension due to an exception. */ EXCEPTION } /** * A callback for the "continue" request. */ interface ContinueCallback { void success(); void failure(String errorMessage); } /** * @return the JavaScript VM suspension state * TODO: consider redesigning it with subtypes. */ State getState(); /** * @return the current exception state, or {@code null} if current state is * not {@code EXCEPTION} * @see #getState() */ ExceptionData getExceptionData(); /** * @return a list of call frames for the current JavaScript suspended state (from the * innermost (top) frame to the main (bottom) frame) * @throws MethodIsBlockingException if called from a callback because it may * need to load necessary scripts */ List<? extends CallFrame> getCallFrames(); /** * @return a set of the breakpoints hit on VM suspension with which this * context is associated. An empty collection if the suspension was * not related to hitting breakpoints (e.g. a step end) */ Collection<? extends Breakpoint> getBreakpointsHit(); /** * Resumes the JavaScript VM execution using a "continue" request. This * context becomes invalid until another context is supplied through the * {@link DebugEventListener#suspended(DebugContext)} event. * * @param stepAction to perform * @param stepCount steps to perform (not used if * {@code stepAction == CONTINUE}) * @param callback to invoke when the request result is ready */ RelayOk continueVm(StepAction stepAction, int stepCount, ContinueCallback callback, SyncCallback syncCallback); /** * @deprecated see {@link #continueVm(StepAction, int, ContinueCallback, SyncCallback)} */ void continueVm(StepAction stepAction, int stepCount, ContinueCallback callback); /** * @return evaluate context for evaluating expressions in global scope */ JsEvaluateContext getGlobalEvaluateContext(); /** * @return {@link JavascriptVm} instance this context was created for */ JavascriptVm getJavascriptVm(); /** * @return value mapping that all values have by default; typically unique for a particular * {@link DebugContext} */ RemoteValueMapping getDefaultRemoteValueMapping(); }