Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(130)

Unified Diff: plugins/org.chromium.sdk/src/org/chromium/sdk/internal/v8native/value/JsScopeImpl.java

Issue 11662019: Support variable changing in SDK interface and v8 native (Closed) Base URL: https://chromedevtools.googlecode.com/svn/trunk
Patch Set: merge Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: plugins/org.chromium.sdk/src/org/chromium/sdk/internal/v8native/value/JsScopeImpl.java
diff --git a/plugins/org.chromium.sdk/src/org/chromium/sdk/internal/v8native/value/JsScopeImpl.java b/plugins/org.chromium.sdk/src/org/chromium/sdk/internal/v8native/value/JsScopeImpl.java
index 3d6474cc9d6fede44066b9778ea2a679b97ac6a5..b57b7e5dc0acc0c5c71804a30ab5245f5d92d019 100644
--- a/plugins/org.chromium.sdk/src/org/chromium/sdk/internal/v8native/value/JsScopeImpl.java
+++ b/plugins/org.chromium.sdk/src/org/chromium/sdk/internal/v8native/value/JsScopeImpl.java
@@ -15,12 +15,23 @@ import org.chromium.sdk.JsObject;
import org.chromium.sdk.JsScope;
import org.chromium.sdk.JsValue;
import org.chromium.sdk.JsVariable;
+import org.chromium.sdk.RelayOk;
+import org.chromium.sdk.SyncCallback;
+import org.chromium.sdk.internal.protocolparser.JsonProtocolParseException;
import org.chromium.sdk.internal.v8native.CallFrameImpl;
import org.chromium.sdk.internal.v8native.InternalContext;
+import org.chromium.sdk.internal.v8native.InternalContext.ContextDismissedCheckedException;
+import org.chromium.sdk.internal.v8native.JsEvaluateContextImpl;
+import org.chromium.sdk.internal.v8native.V8CommandCallbackBase;
import org.chromium.sdk.internal.v8native.protocol.V8ProtocolUtil;
+import org.chromium.sdk.internal.v8native.protocol.input.FailedCommandResponse;
import org.chromium.sdk.internal.v8native.protocol.input.ScopeRef;
+import org.chromium.sdk.internal.v8native.protocol.input.SetVariableValueBody;
+import org.chromium.sdk.internal.v8native.protocol.input.SuccessCommandResponse;
import org.chromium.sdk.internal.v8native.protocol.input.data.ObjectValueHandle;
-import org.chromium.sdk.internal.v8native.protocol.output.DebuggerMessageFactory;
+import org.chromium.sdk.internal.v8native.protocol.input.data.ValueHandle;
+import org.chromium.sdk.internal.v8native.protocol.output.ScopeMessage;
+import org.chromium.sdk.internal.v8native.protocol.output.SetVariableValueMessage;
import org.chromium.sdk.util.AsyncFuture;
import org.chromium.sdk.util.AsyncFuture.SyncOperation;
import org.chromium.sdk.util.MethodIsBlockingException;
@@ -39,8 +50,8 @@ public abstract class JsScopeImpl<D extends JsScopeImpl.DataBase> implements JsS
@Override InternalContext getInternalContext() {
return callFrameImpl.getInternalContext();
}
- @Override DebuggerMessageFactory.ScopeHostParameter getFactoryParameter() {
- return DebuggerMessageFactory.ScopeHostParameter.forFrame(callFrameImpl.getIdentifier());
+ @Override ScopeMessage.Host getProtocolParameter() {
+ return ScopeMessage.Host.createFrame(callFrameImpl.getIdentifier());
}
};
}
@@ -50,15 +61,15 @@ public abstract class JsScopeImpl<D extends JsScopeImpl.DataBase> implements JsS
@Override InternalContext getInternalContext() {
return jsFunctionImpl.getInternalContext();
}
- @Override DebuggerMessageFactory.ScopeHostParameter getFactoryParameter() {
- return DebuggerMessageFactory.ScopeHostParameter.forFunction(jsFunctionImpl.getRef());
+ @Override ScopeMessage.Host getProtocolParameter() {
+ return ScopeMessage.Host.createFunction(jsFunctionImpl.getRef());
}
};
}
abstract InternalContext getInternalContext();
- abstract DebuggerMessageFactory.ScopeHostParameter getFactoryParameter();
+ abstract ScopeMessage.Host getProtocolParameter();
}
private final Host host;
@@ -87,6 +98,14 @@ public abstract class JsScopeImpl<D extends JsScopeImpl.DataBase> implements JsS
return type;
}
+ protected int getScopeIndex() {
+ return scopeIndex;
+ }
+
+ protected Host getScopeHost() {
+ return host;
+ }
+
protected D getDeferredData() throws MethodIsBlockingException {
AsyncFuture<D> future = deferredDataRef.get();
ValueLoaderImpl valueLoader = host.getInternalContext().getValueLoader();
@@ -115,7 +134,8 @@ public abstract class JsScopeImpl<D extends JsScopeImpl.DataBase> implements JsS
protected ObjectValueHandle loadScopeObject(ValueLoaderImpl valueLoader)
throws MethodIsBlockingException {
- return valueLoader.loadScopeFields(scopeIndex, host.getFactoryParameter());
+ ScopeMessage.Ref ref = new ScopeMessage.Ref(scopeIndex, host.getProtocolParameter());
+ return valueLoader.loadScopeFields(ref);
}
public static Type convertType(int typeCode) {
@@ -170,11 +190,17 @@ public abstract class JsScopeImpl<D extends JsScopeImpl.DataBase> implements JsS
List<ValueMirror> propertyMirrors = valueLoader.getOrLoadValueFromRefs(propertyRefs);
+ ScopeMessage.Ref scopeRef =
+ new ScopeMessage.Ref(getScopeIndex(), getScopeHost().getProtocolParameter());
+ JsVariableBase.Host variableHost =
+ new VariableHost(getScopeHost().getInternalContext(), scopeRef);
+
List<JsVariable> properties = new ArrayList<JsVariable>(propertyMirrors.size());
for (int i = 0; i < propertyMirrors.size(); i++) {
// This name should be string. We are making it string as a fall-back strategy.
String varNameStr = propertyRefs.get(i).getName().toString();
- properties.add(new JsVariableBase.Impl(valueLoader, propertyMirrors.get(i), varNameStr));
+ properties.add(new JsVariableBase.Impl(variableHost, valueLoader, propertyMirrors.get(i),
+ varNameStr));
}
return properties;
}
@@ -191,6 +217,56 @@ public abstract class JsScopeImpl<D extends JsScopeImpl.DataBase> implements JsS
return cacheState != newCacheState;
}
}
+
+ static class VariableHost extends JsVariableBase.Host {
+ private final ScopeMessage.Ref scopeRef;
+
+ VariableHost(InternalContext internalContext, ScopeMessage.Ref scopeRef) {
+ super(internalContext);
+ this.scopeRef = scopeRef;
+ }
+
+ @Override boolean isMutable() {
+ return true;
+ }
+
+ @Override
+ RelayOk setValue(String variableName, JsValueBase jsValueBase,
+ final JsEvaluateContextImpl.CallbackInternal callback, SyncCallback syncCallback) {
+ // TODO: check for host.
+ SetVariableValueMessage message = new SetVariableValueMessage(scopeRef, variableName,
+ jsValueBase.getJsonParam(getInternalContext()));
+
+ V8CommandCallbackBase innerCallback = new V8CommandCallbackBase() {
+ @Override
+ public void success(SuccessCommandResponse successResponse) {
+ SetVariableValueBody body;
+ try {
+ body = successResponse.body().asSetVariableValueBody();
+ } catch (JsonProtocolParseException e) {
+ throw new RuntimeException(e);
+ }
+ ValueHandle newValueHandle = body.newValue();
+ ValueLoaderImpl valueLoader = getInternalContext().getValueLoader();
+ ValueMirror mirror = valueLoader.addDataToMap(newValueHandle);
+ JsValueBase value = JsVariableBase.createValue(valueLoader, mirror);
+ callback.success(value);
+ }
+
+ @Override
+ public void failure(String message, FailedCommandResponse.ErrorDetails errorDetails) {
+ callback.failure(new Exception(message));
+ }
+ };
+ try {
+ return getInternalContext().sendV8CommandAsync(message, true,
+ innerCallback, syncCallback);
+ } catch (ContextDismissedCheckedException e) {
+ return getInternalContext().getDebugSession().maybeRethrowContextException(e,
+ syncCallback);
+ }
+ }
+ }
}
private static class ObjectBasedImpl extends JsScopeImpl<ObjectBasedImpl.DeferredData>

Powered by Google App Engine
This is Rietveld 408576698