// 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; /** * An object that represents a variable in a browser JavaScript VM call frame. */ public interface JsVariable { /** * A callback to use while setting a variable value. */ interface SetValueCallback { void success(); void failure(String errorMessage); } /** * @return whether it is possible to read this variable */ boolean isReadable(); /** * Returns the value of this variable. * * @return a [probably compound] JsValue corresponding to this variable. * {@code null} if there was an error reading the value data * or the property has accessor descriptor * @see #isReadable() * @throws UnsupportedOperationException if this variable is not readable */ JsValue getValue() throws UnsupportedOperationException; /** * Returns variable name. If the variable is an object property, in some implementations * (namely V8 Standalone protocol) the numeric property name may be decorated * with square brackets. * @return the name of this variable * TODO: do not decorate property name with square brackets, * http://code.google.com/p/chromedevtools/issues/detail?id=77 */ String getName(); /** * @return whether it is possible to modify this variable */ boolean isMutable(); /** * Sets a new value for this variable. * * @param newValue to set * @param callback to report the operation result to * @see #isMutable() * @throws UnsupportedOperationException if this variable is not mutable */ void setValue(String newValue, SetValueCallback callback) throws UnsupportedOperationException; /** * @return the fully qualified name of this variable relative to the context * of its call frame */ String getFullyQualifiedName(); /** * Returns object property data if variable is an object property and its descriptor * is available. */ JsObjectProperty asObjectProperty(); }