- Revision
- 142486
- Author
- ca...@chromium.org
- Date
- 2013-02-11 10:05:33 -0800 (Mon, 11 Feb 2013)
Log Message
Web Inspector: [Extension API] adjust inspectedWindow.eval() callback parameters to expose non-exceptional error
https://bugs.webkit.org/show_bug.cgi?id=108640
Reviewed by Vsevolod Vlasov.
Source/WebCore:
- only set first parameter to eval() callback iff _expression_ successfully evaluates;
- use object, not bool as second parameter;
- pass exceptions and extension errors as second parameter if evaluate failed;
- minor drive-by changes in ExtensionAPI utilities.
* inspector/front-end/ExtensionAPI.js:
(injectedExtensionAPI.ExtensionSidebarPaneImpl.prototype.setExpression):
(injectedExtensionAPI.InspectedWindow.prototype.):
(injectedExtensionAPI.InspectedWindow.prototype.eval):
(injectedExtensionAPI.extractCallbackArgument):
* inspector/front-end/ExtensionServer.js:
(WebInspector.ExtensionServer.prototype.):
(WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
(WebInspector.ExtensionStatus):
LayoutTests:
Rebase tests following change in exception parameter to inspectedWindow.eval() callback.
* inspector/extensions/extensions-eval-expected.txt:
* inspector/extensions/extensions-eval.html:
* inspector/extensions/extensions-sidebar-expected.txt:
Modified Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (142485 => 142486)
--- trunk/LayoutTests/ChangeLog 2013-02-11 18:01:01 UTC (rev 142485)
+++ trunk/LayoutTests/ChangeLog 2013-02-11 18:05:33 UTC (rev 142486)
@@ -1,3 +1,16 @@
+2013-02-01 Andrey Kosyakov <ca...@chromium.org>
+
+ Web Inspector: [Extension API] adjust inspectedWindow.eval() callback parameters to expose non-exceptional error
+ https://bugs.webkit.org/show_bug.cgi?id=108640
+
+ Reviewed by Vsevolod Vlasov.
+
+ Rebase tests following change in exception parameter to inspectedWindow.eval() callback.
+
+ * inspector/extensions/extensions-eval-expected.txt:
+ * inspector/extensions/extensions-eval.html:
+ * inspector/extensions/extensions-sidebar-expected.txt:
+
2013-02-11 Andrey Kosyakov <ca...@chromium.org>
Web Inspector: [Extensions API] expose ExtensionServerClient to tests so tests use same port as extensions API
Modified: trunk/LayoutTests/inspector/extensions/extensions-eval-expected.txt (142485 => 142486)
--- trunk/LayoutTests/inspector/extensions/extensions-eval-expected.txt 2013-02-11 18:01:01 UTC (rev 142485)
+++ trunk/LayoutTests/inspector/extensions/extensions-eval-expected.txt 2013-02-11 18:05:33 UTC (rev 142486)
@@ -11,9 +11,10 @@
RUNNING TEST: extension_testEvalStatement
Evaluate: 0 (exception: undefined)
RUNNING TEST: extension_testEvalStringifyingLoopFailed
-Evaluate: "Object has too long reference chain(must not be longer than 1000)" (exception: true)
+log: Extension server error: Inspector protocol error: Object has too long reference chain(must not be longer than 1000)
+Evaluate: undefined (exception: {"code":"E_PROTOCOLERROR","description":"Inspector protocol error: %s","details":["Object has too long reference chain(must not be longer than 1000)"],"isError":true})
RUNNING TEST: extension_testEvalThrows
-Evaluate: "testExceptionString" (exception: true)
+Evaluate: undefined (exception: {"isException":true,"value":"testExceptionString"})
RUNNING TEST: extension_testEvalUndefined
Evaluate: undefined (exception: undefined)
RUNNING TEST: extension_testWithStringifyOverridden
Modified: trunk/LayoutTests/inspector/extensions/extensions-eval.html (142485 => 142486)
--- trunk/LayoutTests/inspector/extensions/extensions-eval.html 2013-02-11 18:01:01 UTC (rev 142485)
+++ trunk/LayoutTests/inspector/extensions/extensions-eval.html 2013-02-11 18:05:33 UTC (rev 142486)
@@ -51,9 +51,10 @@
webInspector.inspectedWindow.eval("throw('testExceptionString')", callbackAndNextTest(extension_onEval, nextTest));
}
-function extension_onEval(value, isException)
+function extension_onEval(value, status)
{
- output("Evaluate: " + JSON.stringify(value) + " (exception: " + isException + ")");
+ var exceptionString = typeof status === "undefined" ? "undefined" : JSON.stringify(status);
+ output("Evaluate: " + JSON.stringify(value) + " (exception: " + exceptionString + ")");
}
</script>
Modified: trunk/LayoutTests/inspector/extensions/extensions-sidebar-expected.txt (142485 => 142486)
--- trunk/LayoutTests/inspector/extensions/extensions-sidebar-expected.txt 2013-02-11 18:01:01 UTC (rev 142485)
+++ trunk/LayoutTests/inspector/extensions/extensions-sidebar-expected.txt 2013-02-11 18:05:33 UTC (rev 142486)
@@ -6,6 +6,7 @@
Got onShown(), frame defined
Got onShown(), frame not defined
RUNNING TEST: extension_testSidebarSetExpression
+log: Extension server error: Inspector protocol error: Object has too long reference chain(must not be longer than 1000)
Sidebar content: titlef0: "_expression_"f1: undefinedf2: nullf3: Objectf4: Array[0]f5: Array[3]f6: Objectf7: 42f8: Locationf9: HTMLCollection[2]f10: function () {}f11: "foo"__proto__: Object
RUNNING TEST: extension_testSidebarSetObject
Watch sidebar created, callback arguments dump follows:
Modified: trunk/Source/WebCore/ChangeLog (142485 => 142486)
--- trunk/Source/WebCore/ChangeLog 2013-02-11 18:01:01 UTC (rev 142485)
+++ trunk/Source/WebCore/ChangeLog 2013-02-11 18:05:33 UTC (rev 142486)
@@ -1,3 +1,25 @@
+2013-02-01 Andrey Kosyakov <ca...@chromium.org>
+
+ Web Inspector: [Extension API] adjust inspectedWindow.eval() callback parameters to expose non-exceptional error
+ https://bugs.webkit.org/show_bug.cgi?id=108640
+
+ Reviewed by Vsevolod Vlasov.
+
+ - only set first parameter to eval() callback iff _expression_ successfully evaluates;
+ - use object, not bool as second parameter;
+ - pass exceptions and extension errors as second parameter if evaluate failed;
+ - minor drive-by changes in ExtensionAPI utilities.
+
+ * inspector/front-end/ExtensionAPI.js:
+ (injectedExtensionAPI.ExtensionSidebarPaneImpl.prototype.setExpression):
+ (injectedExtensionAPI.InspectedWindow.prototype.):
+ (injectedExtensionAPI.InspectedWindow.prototype.eval):
+ (injectedExtensionAPI.extractCallbackArgument):
+ * inspector/front-end/ExtensionServer.js:
+ (WebInspector.ExtensionServer.prototype.):
+ (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
+ (WebInspector.ExtensionStatus):
+
2013-02-11 Andrey Kosyakov <ca...@chromium.org>
Web Inspector: [Extensions API] expose ExtensionServerClient to tests so tests use same port as extensions API
Modified: trunk/Source/WebCore/inspector/front-end/ExtensionAPI.js (142485 => 142486)
--- trunk/Source/WebCore/inspector/front-end/ExtensionAPI.js 2013-02-11 18:01:01 UTC (rev 142485)
+++ trunk/Source/WebCore/inspector/front-end/ExtensionAPI.js 2013-02-11 18:05:33 UTC (rev 142486)
@@ -449,7 +449,6 @@
setExpression: function(_expression_, rootTitle, evaluateOptions)
{
- var callback = extractCallbackArgument(arguments);
var request = {
command: commands.SetSidebarContent,
id: this._id,
@@ -459,7 +458,7 @@
};
if (typeof evaluateOptions === "object")
request.evaluateOptions = evaluateOptions;
- extensionServer.sendRequest(request, callback);
+ extensionServer.sendRequest(request, extractCallbackArgument(arguments));
},
setObject: function(jsonObject, rootTitle, callback)
@@ -657,7 +656,10 @@
var callback = extractCallbackArgument(arguments);
function callbackWrapper(result)
{
- callback(result.value, result.isException);
+ if (result.isError || result.isException)
+ callback(undefined, result);
+ else
+ callback(result.value);
}
var request = {
command: commands.EvaluateOnInspectedPage,
Modified: trunk/Source/WebCore/inspector/front-end/ExtensionServer.js (142485 => 142486)
--- trunk/Source/WebCore/inspector/front-end/ExtensionServer.js 2013-02-11 18:01:01 UTC (rev 142485)
+++ trunk/Source/WebCore/inspector/front-end/ExtensionServer.js 2013-02-11 18:05:33 UTC (rev 142486)
@@ -329,16 +329,12 @@
*/
function callback(error, resultPayload, wasThrown)
{
- var result = {};
- if (error) {
- result.isException = true;
- result.value = error.toString();
- } else if (wasThrown) {
- result.isException = true;
- result.value = resultPayload.description;
- } else {
- result.value = resultPayload.value;
- }
+ if (error)
+ result = this._status.E_PROTOCOLERROR(error.toString());
+ else if (wasThrown)
+ result = { isException: true, value: resultPayload.description };
+ else
+ result = { value: resultPayload.value };
this._dispatchCallback(message.requestId, port, result);
}
@@ -819,6 +815,7 @@
this.E_BADARGTYPE = makeStatus.bind(null, "E_BADARGTYPE", "Invalid type for argument %s: got %s, expected %s");
this.E_NOTFOUND = makeStatus.bind(null, "E_NOTFOUND", "Object not found: %s");
this.E_NOTSUPPORTED = makeStatus.bind(null, "E_NOTSUPPORTED", "Object does not support requested operation: %s");
+ this.E_PROTOCOLERROR = makeStatus.bind(null, "E_PROTOCOLERROR", "Inspector protocol error: %s");
this.E_FAILED = makeStatus.bind(null, "E_FAILED", "Operation failed: %s");
}