Index: third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-clear-of-command-line-api.html |
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-clear-of-command-line-api.html b/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-clear-of-command-line-api.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5834c25fe9719cb3affcba91574750b119995e9b |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-clear-of-command-line-api.html |
@@ -0,0 +1,127 @@ |
+<html> |
+<head> |
+<script type="text/javascript" src="../../http/tests/inspector-protocol/inspector-protocol-test.js"></script> |
+<script> |
+ |
+var methods = ["dir","dirxml","profile","profileEnd","clear","table","keys","values","debug","undebug","monitor","unmonitor","inspect","copy"]; |
+ |
+function presentedAPIMethods() |
+{ |
+ var methodCount = 0; |
+ for (var method of methods) { |
+ try { |
+ if (eval("window." + method + "&&" + method + ".toString ? " + method + ".toString().indexOf(\"[Command Line API]\") !== -1 : false")) |
+ ++methodCount; |
+ } catch (e) { |
+ } |
+ } |
+ methodCount += eval("\"$_\" in window ? $_ === 239 : false") ? 1 : 0; |
+ return methodCount; |
+} |
+ |
+function setPropertyForMethod() |
+{ |
+ window.dir = 42; |
+} |
+ |
+function defineValuePropertyForMethod() |
+{ |
+ Object.defineProperty(window, "dir", { value: 42 }); |
+} |
+ |
+function defineAccessorPropertyForMethod() |
+{ |
+ Object.defineProperty(window, "dir", { set: function() {}, get: function(){ return 42 } }); |
+} |
+ |
+function definePropertiesForMethod() |
+{ |
+ Object.defineProperties(window, { "dir": { set: function() {}, get: function(){ return 42 } }}); |
+} |
+ |
+var builtinGetOwnPropertyDescriptorOnObject; |
+var builtinGetOwnPropertyDescriptorOnObjectPrototype; |
+var builtinGetOwnPropertyDescriptorOnWindow; |
+ |
+function redefineGetOwnPropertyDescriptors() |
+{ |
+ builtinGetOwnPropertyDescriptorOnObject = Object.getOwnPropertyDescriptor; |
+ Object.getOwnPropertyDescriptor = function() {} |
+ builtinGetOwnPropertyDescriptorOnObjectPrototype = Object.prototype.getOwnPropertyDescriptor; |
+ Object.prototype.getOwnPropertyDescriptor = function() {} |
+ builtinGetOwnPropertyDescriptorOnWindow = window.getOwnPropertyDescriptor; |
+ window.getOwnPropertyDescriptor = function() {} |
+} |
+ |
+function restoreGetOwnPropertyDescriptors() |
+{ |
+ Object.getOwnPropertyDescriptor = builtinGetOwnPropertyDescriptorOnObject; |
+ Object.prototype.getOwnPropertyDescriptor = builtinGetOwnPropertyDescriptorOnObjectPrototype; |
+ window.getOwnPropertyDescriptor = builtinGetOwnPropertyDescriptorOnWindow; |
+} |
+ |
+ |
+function test() |
+{ |
+ runExpressionAndDumpPresentedMethods("") |
+ .then(() => dumpLeftMethods()) |
+ .then(() => runExpressionAndDumpPresentedMethods("setPropertyForMethod()")) |
+ .then(() => dumpLeftMethods()) |
+ .then(() => dumpDir()) |
+ .then(() => runExpressionAndDumpPresentedMethods("defineValuePropertyForMethod()")) |
+ .then(() => dumpLeftMethods()) |
+ .then(() => dumpDir()) |
+ .then(() => runExpressionAndDumpPresentedMethods("definePropertiesForMethod()")) |
+ .then(() => dumpLeftMethods()) |
+ .then(() => dumpDir()) |
+ .then(() => runExpressionAndDumpPresentedMethods("defineAccessorPropertyForMethod()")) |
+ .then(() => dumpLeftMethods()) |
+ .then(() => dumpDir()) |
+ .then(() => runExpressionAndDumpPresentedMethods("redefineGetOwnPropertyDescriptors()")) |
+ .then(() => dumpLeftMethods()) |
+ .then(() => dumpDir()) |
+ .then(() => evaluate("restoreGetOwnPropertyDescriptors()", false)) |
+ .then(() => InspectorTest.completeTest()); |
+ |
+ function evaluate(expression, includeCommandLineAPI) |
+ { |
+ var cb; |
+ var p = new Promise(resolver => cb = resolver); |
+ InspectorTest.sendCommandOrDie("Runtime.evaluate", { expression: expression, objectGroup: "console", includeCommandLineAPI: includeCommandLineAPI }, cb); |
+ return p; |
+ } |
+ |
+ function setLastEvaluationResultTo239() |
+ { |
+ return evaluate("239", false); |
+ } |
+ |
+ function runExpressionAndDumpPresentedMethods(expression) |
+ { |
+ InspectorTest.log(expression); |
+ return setLastEvaluationResultTo239() |
+ .then(() => evaluate(expression + "; var a = presentedAPIMethods(); a", true)) |
+ .then((result) => InspectorTest.logObject(result)); |
+ } |
+ |
+ function dumpLeftMethods() |
+ { |
+ // Should always be zero. |
+ return setLastEvaluationResultTo239() |
+ .then(() => evaluate("presentedAPIMethods()", false)) |
+ .then((result) => InspectorTest.logObject(result)); |
+ } |
+ |
+ function dumpDir() |
+ { |
+ // Should always be presented. |
+ return evaluate("dir", false) |
+ .then((result) => InspectorTest.logObject(result)); |
+ } |
+} |
+</script> |
+</head> |
+<body onLoad="runTest();"> |
+Tests that CommandLineAPI is presented only while evaluation. |
+</body> |
+</html> |