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

Unified Diff: plugins/org.chromium.sdk.wipbackend.dev/src/org/chromium/sdk/internal/wip/WipValueBuilder.java

Issue 12287017: Support set variable value for WebKit protocol (Closed) Base URL: https://chromedevtools.googlecode.com/svn/trunk
Patch Set: fcr Created 7 years, 10 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.wipbackend.dev/src/org/chromium/sdk/internal/wip/WipValueBuilder.java
diff --git a/plugins/org.chromium.sdk.wipbackend.dev/src/org/chromium/sdk/internal/wip/WipValueBuilder.java b/plugins/org.chromium.sdk.wipbackend.dev/src/org/chromium/sdk/internal/wip/WipValueBuilder.java
index 3870193fef8bbad9263164f41c1ae84df5dbfd08..dfefc8b18031b133c708b70c0f60b90835ded577 100644
--- a/plugins/org.chromium.sdk.wipbackend.dev/src/org/chromium/sdk/internal/wip/WipValueBuilder.java
+++ b/plugins/org.chromium.sdk.wipbackend.dev/src/org/chromium/sdk/internal/wip/WipValueBuilder.java
@@ -33,13 +33,16 @@ import org.chromium.sdk.SyncCallback;
import org.chromium.sdk.TextStreamPosition;
import org.chromium.sdk.internal.wip.WipValueLoader.Getter;
import org.chromium.sdk.internal.wip.WipValueLoader.ObjectProperties;
+import org.chromium.sdk.internal.wip.protocol.input.WipCommandResponse.Success;
import org.chromium.sdk.internal.wip.protocol.input.debugger.FunctionDetailsValue;
import org.chromium.sdk.internal.wip.protocol.input.debugger.LocationValue;
import org.chromium.sdk.internal.wip.protocol.input.debugger.ScopeValue;
import org.chromium.sdk.internal.wip.protocol.input.runtime.PropertyDescriptorValue;
import org.chromium.sdk.internal.wip.protocol.input.runtime.RemoteObjectValue;
+import org.chromium.sdk.internal.wip.protocol.output.debugger.SetVariableValueParams;
import org.chromium.sdk.internal.wip.protocol.output.runtime.CallArgumentParam;
import org.chromium.sdk.util.AsyncFutureRef;
+import org.chromium.sdk.util.GenericCallback;
import org.chromium.sdk.util.JavaScriptExpressionBuilder;
import org.chromium.sdk.util.MethodIsBlockingException;
@@ -95,11 +98,15 @@ class WipValueBuilder {
final String hostObjectRefId, String name) {
JsValue jsValue = wrap(propertyDescriptor.value());
- final JsValue getter = wrapPropertyDescriptorFunction(propertyDescriptor.get(), "getter");
+ final JsValue getter = wrap(propertyDescriptor.get());
- final JsValue setter = wrapPropertyDescriptorFunction(propertyDescriptor.set(), "setter");
+ final JsValue setter = wrap(propertyDescriptor.set());
return new ObjectPropertyBase(jsValue, name) {
+
+ @Override public boolean isMutable() {
+ return false;
+ }
@Override public boolean isWritable() {
return propertyDescriptor.writable();
}
@@ -126,6 +133,12 @@ class WipValueBuilder {
}
@Override
+ public RelayOk setValue(JsValue newValue, SetValueCallback callback,
+ SyncCallback syncCallback) throws UnsupportedOperationException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
public RelayOk evaluateGet(EvaluateCallback callback, SyncCallback syncCallback) {
WipContextBuilder.GlobalEvaluateContext evaluateContext =
new WipContextBuilder.GlobalEvaluateContext(valueLoader);
@@ -149,13 +162,38 @@ class WipValueBuilder {
};
}
- private JsValue wrapPropertyDescriptorFunction(RemoteObjectValue value, String symbolicName) {
- return wrap(value);
- }
-
- public JsVariable createVariable(RemoteObjectValue valueData, String name) {
+ public JsVariable createVariable(RemoteObjectValue valueData, String name,
+ final WipContextBuilder.ScopeParams scopeParams) {
JsValue jsValue = wrap(valueData);
- return createVariable(jsValue, name);
+
+ VariableValueChanger valueChanger;
+ if (scopeParams == null) {
+ valueChanger = null;
+ } else {
+ valueChanger = new VariableValueChanger() {
+ @Override
+ RelayOk setValue(String variableName, JsValue newValue,
+ final GenericCallback<JsValue> callback, SyncCallback syncCallback)
+ throws UnsupportedOperationException {
+ final JsValueBase jsValueBase = JsValueBase.cast(newValue);
+ SetVariableValueParams params = new SetVariableValueParams(scopeParams.getScopeNumber(),
+ variableName, jsValueBase.createCallArgumentParam(), scopeParams.getCallFrameId(),
+ scopeParams.getFunctionId());
+ WipCommandCallback rawCallback = new WipCommandCallback.Default() {
+ @Override protected void onSuccess(Success success) {
+ callback.success(jsValueBase);
+ }
+ @Override protected void onError(String message) {
+ callback.failure(new Exception(message));
+ }
+ };
+ return valueLoader.getTabImpl().getCommandProcessor().send(params,
+ rawCallback, syncCallback);
+ }
+ };
+ }
+
+ return new VariableImpl(name, jsValue, valueChanger);
}
public JsValue wrap(RemoteObjectValue valueData) {
@@ -165,10 +203,6 @@ class WipValueBuilder {
return getValueType(valueData).build(valueData, valueLoader);
}
- public static JsVariable createVariable(JsValue jsValue, String name) {
- return new VariableImpl(jsValue, name);
- }
-
private static ValueType getValueType(RemoteObjectValue valueData) {
RemoteObjectValue.Type protocolType = valueData.type();
ValueType result = getSafe(PROTOCOL_TYPE_TO_VALUE_TYPE, protocolType);
@@ -573,8 +607,12 @@ class WipValueBuilder {
return Collections.emptyList();
}
List<JsScope> result = new ArrayList<JsScope>(data.size());
- for (ScopeValue scopeValue : data) {
- result.add(WipContextBuilder.createScope(scopeValue, getRemoteValueMapping()));
+ WipContextBuilder.ScopeHolderParams holderParams =
+ new WipContextBuilder.ScopeHolderParams(null, getRefId());
+ for (int i = 0; i < data.size(); i++) {
+ ScopeValue scopeValue = data.get(i);
+ result.add(WipContextBuilder.createScope(scopeValue, getRemoteValueMapping(),
+ holderParams, i));
}
return result;
}
@@ -603,11 +641,9 @@ class WipValueBuilder {
};
private static abstract class VariableBase implements JsVariable {
- private final JsValue jsValue;
private final String name;
- VariableBase(JsValue jsValue, String name) {
- this.jsValue = jsValue;
+ VariableBase(String name) {
this.name = name;
}
@@ -617,43 +653,75 @@ class WipValueBuilder {
}
@Override
- public JsValue getValue() {
- return jsValue;
- }
-
- @Override
public String getName() {
return name;
}
-
- @Override
- public boolean isMutable() {
- return false;
- }
-
- @Override
- public RelayOk setValue(JsValue newValue, SetValueCallback callback,
- SyncCallback syncCallback) throws UnsupportedOperationException {
- throw new UnsupportedOperationException();
- }
}
private static class VariableImpl extends VariableBase {
- VariableImpl(JsValue jsValue, String name) {
- super(jsValue, name);
+ private final VariableValueChanger valueChanger;
+ private volatile JsValue jsValue;
+
+ VariableImpl(String name, JsValue jsValue, VariableValueChanger valueChanger) {
+ super(name);
+ this.jsValue = jsValue;
+ this.valueChanger = valueChanger;
}
@Override public JsObjectProperty asObjectProperty() {
return null;
}
+ @Override public boolean isMutable() {
+ return valueChanger != null;
+ }
+ @Override public JsValue getValue() {
+ return jsValue;
+ }
+
+ @Override
+ public RelayOk setValue(JsValue newValue, final SetValueCallback callback,
+ SyncCallback syncCallback) throws UnsupportedOperationException {
+ if (valueChanger == null) {
+ throw new UnsupportedOperationException();
+ }
+ GenericCallback<JsValue> rawCallback = new GenericCallback<JsValue>() {
+ @Override
+ public void success(JsValue value) {
+ VariableImpl.this.jsValue = value;
+ if (callback != null) {
+ callback.success();
+ }
+ }
+
+ @Override
+ public void failure(Exception exception) {
+ if (callback != null) {
+ callback.failure(exception);
+ }
+ }
+ };
+ return valueChanger.setValue(getName(), newValue, rawCallback, syncCallback);
+ }
+ }
+
+ static abstract class VariableValueChanger {
+ abstract RelayOk setValue(String variableName, JsValue newValue,
+ GenericCallback<JsValue> callback, SyncCallback syncCallback)
+ throws UnsupportedOperationException;
}
private static abstract class ObjectPropertyBase
extends VariableBase implements JsObjectProperty {
+ private final JsValue jsValue;
+
ObjectPropertyBase(JsValue jsValue, String name) {
- super(jsValue, name);
+ super(name);
+ this.jsValue = jsValue;
}
+ @Override public JsValue getValue() {
+ return jsValue;
+ }
@Override public JsObjectProperty asObjectProperty() {
return this;
}

Powered by Google App Engine
This is Rietveld 408576698