// Copyright (c) 2011 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.wip;
import java.util.Map;
import org.chromium.sdk.JsEvaluateContext;
import org.chromium.sdk.JsObject;
import org.chromium.sdk.RelayOk;
import org.chromium.sdk.RemoteValueMapping;
import org.chromium.sdk.SyncCallback;
import org.chromium.sdk.JsEvaluateContext.EvaluateCallback;
import org.chromium.sdk.util.MethodIsBlockingException;
/**
* An extension to evaluate methods, that allows to specify {@link RemoteValueMapping}
* as an additional argument 'targetMapping'.
* The extension is available from
* {@link WipJavascriptVm#getEvaluateWithDestinationMappingExtension()}.
*/
public interface EvaluateToMappingExtension {
/**
* Synchronously evaluates an arbitrary JavaScript {@code expression} in
* the particular context.
* Previously loaded {@link JsObject}s can be addressed from the expression if listed in
* additionalContext parameter.
* The evaluation result is reported to the specified {@code evaluateCallback}.
* The method will block until the evaluation result is available.
*
* @param expression to evaluate
* @param additionalContext a name-to-object-ref-id map that adds new values to an expression
* scope; may be null
* @param targetMapping mapping the result must belong to
* @param evaluateCallback to report the evaluation result to
* @throws MethodIsBlockingException if called from a callback because it blocks
* until remote VM returns result
*/
void evaluateSync(JsEvaluateContext evaluateContext, String expression,
Map<String, String> additionalContext, RemoteValueMapping targetMapping,
EvaluateCallback evaluateCallback) throws MethodIsBlockingException;
/**
* Asynchronously evaluates an arbitrary JavaScript {@code expression} in
* the particular context.
* Previously loaded {@link JsObject}s can be addressed from the expression if listed in
* additionalContext parameter.
* The evaluation result is reported to the specified {@code evaluateCallback}.
* The method doesn't block.
*
* @param expression to evaluate
* @param additionalContext a name-to-object-ref-id map that adds new values to an expression
* scope; may be null
* @param targetMapping mapping the result must belong to
* @param evaluateCallback to report the evaluation result to
* @param syncCallback to report the end of any processing
*/
RelayOk evaluateAsync(JsEvaluateContext evaluateContext, String expression,
Map<String, String> additionalContext, RemoteValueMapping targetMapping,
EvaluateCallback evaluateCallback, SyncCallback syncCallback);
}