Title: [142486] trunk
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");
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to