author | Panos Astithas <past@mozilla.com> |
Thu, 16 May 2013 18:42:15 +0300 | |
changeset 132182 | b865c805fd5943c47f40fb4536081054a8d910b3 |
parent 132072 | c7df35aa72e16657a929f8442ed7810d442bad2b |
child 132183 | 825230fd88bb33181684c66c9416744e786e6225 |
push id | 28155 |
push user | ryanvm@gmail.com |
push date | Fri, 17 May 2013 00:30:33 +0000 |
treeherder | mozilla-inbound@4599f48ce936 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | msucan |
bugs | 871510 |
milestone | 24.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/toolkit/devtools/debugger/server/dbg-script-actors.js +++ b/toolkit/devtools/debugger/server/dbg-script-actors.js @@ -1568,22 +1568,26 @@ ObjectActor.prototype = { let result = getter.call(this.obj); if (result && !("throw" in result)) { let getterValue = undefined; if ("return" in result) { getterValue = result.return; } else if ("yield" in result) { getterValue = result.yield; } - safeGetterValues[name] = { - getterValue: this.threadActor.createValueGrip(getterValue), - getterPrototypeLevel: level, - enumerable: desc.enumerable, - writable: level == 0 ? desc.writable : true, - }; + // WebIDL attributes specified with the LenientThis extended attribute + // return undefined and should be ignored. + if (getterValue !== undefined) { + safeGetterValues[name] = { + getterValue: this.threadActor.createValueGrip(getterValue), + getterPrototypeLevel: level, + enumerable: desc.enumerable, + writable: level == 0 ? desc.writable : true, + }; + } } } obj = obj.proto; level++; } return safeGetterValues;
--- a/toolkit/devtools/webconsole/test/Makefile.in +++ b/toolkit/devtools/webconsole/test/Makefile.in @@ -18,15 +18,16 @@ MOCHITEST_CHROME_FILES = \ test_jsterm.html \ test_object_actor.html \ test_network_get.html \ test_network_post.html \ test_network_longstring.html \ test_file_uri.html \ test_bug819670_getter_throws.html \ test_object_actor_native_getters.html \ + test_object_actor_native_getters_lenient_this.html \ network_requests_iframe.html \ data.json \ data.json^headers^ \ common.js \ $(NULL) include $(topsrcdir)/config/rules.mk
new file mode 100644 --- /dev/null +++ b/toolkit/devtools/webconsole/test/test_object_actor_native_getters_lenient_this.html @@ -0,0 +1,79 @@ +<!DOCTYPE HTML> +<html lang="en"> +<head> + <meta charset="utf8"> + <title>Test that WebIDL attributes with the LenientThis extended attribute + do not appear in the wrong objects</title> + <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript;version=1.8" src="common.js"></script> + <!-- Any copyright is dedicated to the Public Domain. + - http://creativecommons.org/publicdomain/zero/1.0/ --> +</head> +<body> +<p>Test for the native getters in object actors</p> + +<script class="testbody" type="text/javascript;version=1.8"> +SimpleTest.waitForExplicitFinish(); + +function startTest() +{ + removeEventListener("load", startTest); + + attachConsole(["ConsoleAPI"], onAttach, true); +} + +function onAttach(aState, aResponse) +{ + onConsoleCall = onConsoleCall.bind(null, aState); + aState.dbgClient.addListener("consoleAPICall", onConsoleCall); + + let docAsProto = Object.create(document); + + top.console.log("hello", docAsProto); +} + +function onConsoleCall(aState, aType, aPacket) +{ + is(aPacket.from, aState.actor, "console API call actor"); + + info("checking the console API call packet"); + + checkConsoleAPICall(aPacket.message, { + level: "log", + filename: /test_object_actor/, + functionName: "onAttach", + arguments: ["hello", { + type: "object", + actor: /[a-z]/, + }], + }); + + aState.dbgClient.removeListener("consoleAPICall", onConsoleCall); + + info("inspecting object properties"); + let args = aPacket.message.arguments; + onProperties = onProperties.bind(null, aState); + + let client = new GripClient(aState.dbgClient, args[1]); + client.getPrototypeAndProperties(onProperties); +} + +function onProperties(aState, aResponse) +{ + let props = aResponse.ownProperties; + let keys = Object.keys(props); + info(keys.length + " ownProperties: " + keys); + + is(keys.length, 0, "number of properties"); + keys = Object.keys(aResponse.safeGetterValues); + is(keys.length, 0, "number of safe getters"); + + closeDebugger(aState, function() { + SimpleTest.finish(); + }); +} + +addEventListener("load", startTest); +</script> +</body> +</html>