// 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.debug.core.model; import org.chromium.debug.core.ScriptNameManipulator; import org.chromium.sdk.DebugEventListener; import org.chromium.sdk.JavascriptVm; import org.eclipse.core.runtime.CoreException; /** * Abstraction of application embedding JavaScript VM. Technically subtypes * of {@code JavascriptVm} describe embedding application themselves. * This interface simply holds reference to {@code JavascriptVm} and adapts * various subtypes of {@code JavascriptVm} to a uniform interface * suitable for {@code DebugTargetImpl}. Notably, it has polymorphous method * {@code #attach(Listener, DebugEventListener)}, which {@code JavascriptVm} * lacks. */ public interface JavascriptVmEmbedder { /** * First intermediate object that corresponds to already connected server. * This does not refer to a particular Javascript VM though: * the server may contain several VMs to choose from. */ interface ConnectionToRemote { /** * This method performs selecting a particular Javascript VM. This is * likely to be a user-assisted activity, so this method may block * indefinitely. * @return null if no VM has been chosen and we should cancel the operation */ VmConnector selectVm() throws CoreException; void disposeConnection(); } /** * Intermediate object that works as an intermediate factory * for {@code JavascriptVmEmbedder}. */ interface VmConnector { JavascriptVmEmbedder attach(Listener embedderListener, DebugEventListener debugEventListener) throws CoreException; } /** * @return not null */ JavascriptVm getJavascriptVm(); String getTargetName(); String getThreadName(); /** * @return script name manipulator that knows the schema of script names in this JavaScript VM */ ScriptNameManipulator getScriptNameManipulator(); /** * Listener that should handle embedder-specific events. * TODO(peter.rybin): clean-up this interface; maybe decrease number of * methods. */ interface Listener { /** * State of VM has been reset. All scripts might have been changed, name of * target and thread might have been changed. E.g. browser tab might have * been navigated from one url to another. */ void reset(); void closed(); } }