// 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 org.chromium.sdk.JsEvaluateContext;
import org.chromium.sdk.RelayOk;
import org.chromium.sdk.RemoteValueMapping;
import org.chromium.sdk.SyncCallback;
import org.chromium.sdk.util.GenericCallback;

/**
 * A {@link RemoteValueMapping} that outlives suspend/resume cycle of debugger.
 * It represents both remote pointer table and local property caches.
 * The remote table should be explicitly deleted when the mapping is no longer used.
 * The table has a unique id.
 */
public interface PermanentRemoteValueMapping extends RemoteValueMapping {
  String getId();

  /**
   * Asynchronously deletes mapping on remote VM. No values from this {@link RemoteValueMapping}
   * must be used after this call.
   */
  RelayOk delete(GenericCallback<Void> callback, SyncCallback syncCallback);

  /**
   * Returns {@link JsEvaluateContext} that is tied with this {@link RemoteValueMapping}.
   * By default all evaluate result values will use this {@link RemoteValueMapping}.
   * (This can be overriden by {@link EvaluateToMappingExtension}).
   */
  JsEvaluateContext getEvaluateContext();
}
