// 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.List;
import org.chromium.sdk.util.MethodIsBlockingException;
/**
* An object that represents a scope in JavaScript.
* TODO: consider adding object getter for both with and global scopes.
*/
public interface JsScope {
enum Type {
GLOBAL,
LOCAL,
WITH,
CLOSURE,
CATCH,
UNKNOWN
// TODO: add "block" type (corresponds to block scope in JavaScript 1.7).
}
/**
* @return type of the scope
*/
Type getType();
/**
* @return optional subtype when type is {@link Type#WITH} and null otherwise
*/
WithScope asWithScope();
/**
* @return the variables known in this scope, in lexicographical order
* @throws MethodIsBlockingException because it may need to load value from remote
*/
List<? extends JsVariable> getVariables() throws MethodIsBlockingException;
/**
* Subtype that exposes the value of the 'with' statement expression (the value might be
* already converted by ToObject).
*/
interface WithScope extends JsScope {
/**
* @throws MethodIsBlockingException because it may need to load value from remote
*/
JsValue getWithArgument() throws MethodIsBlockingException;
}
}