org.chromium.sdk/src/org/chromium/sdk/internal/tools/v8/V8Helper.java
changeset 355 8726e95bcbba
parent 276 f2f4a1259de8
equal deleted inserted replaced
354:0bceeb415e7f 355:8726e95bcbba
    17 import org.chromium.sdk.internal.FunctionAdditionalProperties;
    17 import org.chromium.sdk.internal.FunctionAdditionalProperties;
    18 import org.chromium.sdk.internal.JsDataTypeUtil;
    18 import org.chromium.sdk.internal.JsDataTypeUtil;
    19 import org.chromium.sdk.internal.PropertyHoldingValueMirror;
    19 import org.chromium.sdk.internal.PropertyHoldingValueMirror;
    20 import org.chromium.sdk.internal.PropertyReference;
    20 import org.chromium.sdk.internal.PropertyReference;
    21 import org.chromium.sdk.internal.ScopeMirror;
    21 import org.chromium.sdk.internal.ScopeMirror;
       
    22 import org.chromium.sdk.internal.ScriptImpl;
    22 import org.chromium.sdk.internal.ScriptManager;
    23 import org.chromium.sdk.internal.ScriptManager;
    23 import org.chromium.sdk.internal.SubpropertiesMirror;
    24 import org.chromium.sdk.internal.SubpropertiesMirror;
    24 import org.chromium.sdk.internal.ValueLoadException;
    25 import org.chromium.sdk.internal.ValueLoadException;
    25 import org.chromium.sdk.internal.ValueMirror;
    26 import org.chromium.sdk.internal.ValueMirror;
    26 import org.chromium.sdk.internal.protocol.CommandResponse;
    27 import org.chromium.sdk.internal.protocol.CommandResponse;
    32 import org.chromium.sdk.internal.protocol.data.PropertyObject;
    33 import org.chromium.sdk.internal.protocol.data.PropertyObject;
    33 import org.chromium.sdk.internal.protocol.data.RefWithDisplayData;
    34 import org.chromium.sdk.internal.protocol.data.RefWithDisplayData;
    34 import org.chromium.sdk.internal.protocol.data.ScriptHandle;
    35 import org.chromium.sdk.internal.protocol.data.ScriptHandle;
    35 import org.chromium.sdk.internal.protocol.data.ValueHandle;
    36 import org.chromium.sdk.internal.protocol.data.ValueHandle;
    36 import org.chromium.sdk.internal.protocolparser.JsonProtocolParseException;
    37 import org.chromium.sdk.internal.protocolparser.JsonProtocolParseException;
       
    38 import org.chromium.sdk.internal.tools.v8.request.ContextlessDebuggerMessage;
    37 import org.chromium.sdk.internal.tools.v8.request.DebuggerMessageFactory;
    39 import org.chromium.sdk.internal.tools.v8.request.DebuggerMessageFactory;
    38 import org.chromium.sdk.internal.tools.v8.request.ScriptsMessage;
    40 import org.chromium.sdk.internal.tools.v8.request.ScriptsMessage;
    39 
    41 
    40 /**
    42 /**
    41  * A helper class for performing complex V8-related operations.
    43  * A helper class for performing complex V8-related operations.
    42  */
    44  */
    43 public class V8Helper {
    45 public class V8Helper {
    44 
    46 
    45   /**
       
    46    * The debug context in which the operations are performed.
       
    47    */
       
    48   private final DebugSession debugSession;
       
    49 
       
    50   public V8Helper(DebugSession debugSession) {
    47   public V8Helper(DebugSession debugSession) {
    51     this.debugSession = debugSession;
       
    52   }
    48   }
    53 
    49 
    54   public interface ScriptLoadCallback {
    50   public interface ScriptLoadCallback {
    55     void success();
    51     void success();
    56     void failure(String message);
    52     void failure(String message);
    61    * @param callback to invoke when the script reloading has completed
    57    * @param callback to invoke when the script reloading has completed
    62    * @param syncCallback to invoke after callback whether it normally returned or threw an exception
    58    * @param syncCallback to invoke after callback whether it normally returned or threw an exception
    63    */
    59    */
    64   public static void reloadAllScriptsAsync(final DebugSession debugSession,
    60   public static void reloadAllScriptsAsync(final DebugSession debugSession,
    65       final ScriptLoadCallback callback, SyncCallback syncCallback) {
    61       final ScriptLoadCallback callback, SyncCallback syncCallback) {
       
    62     reloadScriptAsync(debugSession, null, callback, syncCallback);
       
    63   }
       
    64 
       
    65   /**
       
    66    * Loads specified scripts or all existing scripts and stores them in ScriptManager.
       
    67    * @param ids ids of requested scripts or null for all scripts
       
    68    * @param callback to invoke when the script reloading has completed
       
    69    * @param syncCallback to invoke after callback, regardless of whether it has returned normally
       
    70    *        or thrown an exception
       
    71    */
       
    72   public static void reloadScriptAsync(final DebugSession debugSession, final List<Long> ids,
       
    73       final ScriptLoadCallback callback, SyncCallback syncCallback) {
       
    74     ContextlessDebuggerMessage message = DebuggerMessageFactory.scripts(ids, true);
       
    75     if (ids == null) {
       
    76       message = DebuggerMessageFactory.scripts(ScriptsMessage.SCRIPTS_NORMAL, true);
       
    77     } else {
       
    78       message = DebuggerMessageFactory.scripts(ids, true);
       
    79     }
    66     debugSession.sendMessageAsync(
    80     debugSession.sendMessageAsync(
    67         DebuggerMessageFactory.scripts(ScriptsMessage.SCRIPTS_NORMAL, true),
    81         message,
    68         true,
    82         true,
    69         new V8CommandCallbackBase() {
    83         new V8CommandCallbackBase() {
    70           @Override
    84           @Override
    71           public void failure(String message) {
    85           public void failure(String message) {
    72             callback.failure(message);
    86             if (callback != null) {
       
    87               callback.failure(message);
       
    88             }
    73           }
    89           }
    74 
    90 
    75           @Override
    91           @Override
    76           public void success(SuccessCommandResponse successResponse) {
    92           public void success(SuccessCommandResponse successResponse) {
    77             List<ScriptHandle> body;
    93             List<ScriptHandle> body;
    81               throw new RuntimeException(e);
    97               throw new RuntimeException(e);
    82             }
    98             }
    83             ScriptManager scriptManager = debugSession.getScriptManager();
    99             ScriptManager scriptManager = debugSession.getScriptManager();
    84             for (int i = 0; i < body.size(); ++i) {
   100             for (int i = 0; i < body.size(); ++i) {
    85               ScriptHandle scriptHandle = body.get(i);
   101               ScriptHandle scriptHandle = body.get(i);
       
   102               if (ChromeDevToolSessionManager.JAVASCRIPT_VOID.equals(scriptHandle.source())) {
       
   103                 continue;
       
   104               }
    86               Long id = V8ProtocolUtil.getScriptIdFromResponse(scriptHandle);
   105               Long id = V8ProtocolUtil.getScriptIdFromResponse(scriptHandle);
    87               if (scriptManager.findById(id) == null &&
   106               ScriptImpl scriptById = scriptManager.findById(id);
    88                   !ChromeDevToolSessionManager.JAVASCRIPT_VOID.equals(scriptHandle.source())) {
   107               if (scriptById == null) {
    89                 scriptManager.addScript(scriptHandle, successResponse.getRefs());
   108                 scriptManager.addScript(scriptHandle, successResponse.getRefs());
       
   109               } else {
       
   110                 // A scrupulous refactoring note:
       
   111                 // do not call setSource in a legacy case, when ids parameter is null.
       
   112                 if (ids != null) {
       
   113                   scriptById.setSource(scriptHandle.source());
       
   114                 }
    90               }
   115               }
    91             }
   116             }
    92             callback.success();
   117             if (callback != null) {
       
   118               callback.success();
       
   119             }
    93           }
   120           }
    94         },
   121         },
    95         syncCallback);
   122         syncCallback);
    96   }
   123   }
    97 
   124