Web Inspector: Include RuntimeAgent in Workers - evaluate in Worker context
authorjoepeck@webkit.org <joepeck@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 27 Oct 2016 22:19:12 +0000 (22:19 +0000)
committerjoepeck@webkit.org <joepeck@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 27 Oct 2016 22:19:12 +0000 (22:19 +0000)
https://bugs.webkit.org/show_bug.cgi?id=163835
<rdar://problem/28901465>

Reviewed by Brian Burg.

Source/WebCore:

Tests: inspector/unit-tests/target-manager.html
       inspector/worker/runtime-basic.html

* CMakeLists.txt:
* WebCore.xcodeproj/project.pbxproj:
* inspector/InspectorAllInOne.cpp:
New file.

* inspector/InspectorWebAgentBase.h:
(WebCore::WorkerAgentContext::WorkerAgentContext):
New agent context creation struct for Workers.

* inspector/WorkerInspectorController.cpp:
(WebCore::WorkerInspectorController::WorkerInspectorController):
Create a RuntimeAgent for Workers.

* inspector/WorkerRuntimeAgent.cpp: Added.
(WebCore::WorkerRuntimeAgent::WorkerRuntimeAgent):
(WebCore::WorkerRuntimeAgent::didCreateFrontendAndBackend):
(WebCore::WorkerRuntimeAgent::willDestroyFrontendAndBackend):
(WebCore::WorkerRuntimeAgent::injectedScriptForEval):
* inspector/WorkerRuntimeAgent.h: Added.
Workers currently only ever have a single execution context.

Source/WebInspectorUI:

This introduces the idea that the frontend may communication with multiple
backend "Targets" which each have their own set of Agents.

    - WebInspector.Target
      - has its own list of Agents
      - has a InspectorBackend.Connection to communicate with the backend

    - WebInspector.mainTarget
      - always exists and represents the thing we are debugging (Page or JSContext)

    - WebInspector.targets / WebInspector.targetManager
      - management of all Targets
      - create new Targets for Workers

This also slowly introduces the concept that Model objects may be tied to
a specific Target:

    - WebInspector.RemoteObject
      - in order to evaluate JS and interact with this object we must know the target (Page or Worker)
      - when fetching PropertyDescriptors and other RemoteObjects we must continue to pass on the target

Finally this makes the QuickConsole list Worker execution contexts in
the context picker so that users can choose a Worker context and
evaluate JavaScript in that context using the console.

* Localizations/en.lproj/localizedStrings.js:
* UserInterface/Main.html:
* UserInterface/Base/Main.js:
(WebInspector.loaded):
* UserInterface/Test.html:
* UserInterface/Test/Test.js:
(WebInspector.loaded):
New files, strings, and managers.
New global WebInspector.mainTarget.
New convenience WebInspector.targets.

* UserInterface/Protocol/Target.js: Added.
(WebInspector.Target):
(WebInspector.Target.prototype.get RuntimeAgent):
(WebInspector.Target.prototype.get name):
(WebInspector.Target.prototype.get type):
(WebInspector.Target.prototype.get connection):
(WebInspector.Target.prototype.get executionContext):
(WebInspector.Target.prototype.get displayName):
(WebInspector.Target.prototype._intializeMainTarget):
(WebInspector.Target.prototype._initializeNonMainTarget):
Target has some basic properties.

* UserInterface/Controllers/TargetManager.js:
(WebInspector.TargetManager):
(WebInspector.TargetManager.prototype.get targets):
(WebInspector.TargetManager.prototype.addTarget):
(WebInspector.TargetManager.prototype.removeTarget):
Holds the list of Targets and events when created / removed.
Each target with a RuntimeAgent has an ExecutionContext.

* UserInterface/Controllers/WorkerManager.js:
(WebInspector.WorkerManager):
(WebInspector.WorkerManager.prototype.workerCreated):
(WebInspector.WorkerManager.prototype.workerTerminated):
(WebInspector.WorkerManager.prototype.dispatchMessageFromWorker):
Create / remove / dispatch on a Worker Target.

* UserInterface/Protocol/InspectorBackend.js:
(InspectorBackendClass):
(InspectorBackendClass.prototype.registerCommand):
(InspectorBackendClass.prototype.dispatch):
(InspectorBackendClass.prototype.runAfterPendingDispatches):
(InspectorBackendClass.prototype._agentForDomain):
Keep the original implementations and just dispatch to the main connection.

(InspectorBackend.Agent):
(InspectorBackend.Agent.prototype.get connection):
(InspectorBackend.Agent.prototype.set connection):
(InspectorBackend.Agent.prototype.get dispatcher):
We will share Agent implementations but just give new "copies" a different
connection and dispatcher.

(InspectorBackend.Command):
(InspectorBackend.Command.create):
(InspectorBackend.Command.prototype.invoke):
(InspectorBackend.Command.prototype.supports):
We continue to have a single Command instance on the Agent. However instead
of using the hardcoded Agent on the Instance when evaluated as a function
it uses the `this` object which should be an agent. This way:

    target1.RuntimeAgent.evaluate
        - `this` is target1 and we use the connection for that target
    target2.RuntimeAgent.evaluate
        - `this` is target2 and we use the connection for that target

Unfortunately this breaks `RuntimeAgent.evaluate.invoke`. Currently this
is solved by providing an extra parameter. In the case where we need to
invoke on a particular agent we must provide the agent.

    target.RuntimeAgent.evaluate.invoke({options}, target.RuntimeAgent)

This is unfortunate but only needed in a handful of places right now.

(InspectorBackendClass.prototype._sendCommandToBackendWithCallback): Deleted.
(InspectorBackendClass.prototype._sendCommandToBackendExpectingPromise): Deleted.
(InspectorBackendClass.prototype._sendMessageToBackend): Deleted.
(InspectorBackendClass.prototype._dispatchResponse): Deleted.
(InspectorBackendClass.prototype._dispatchResponseToCallback): Deleted.
(InspectorBackendClass.prototype._dispatchResponseToPromise): Deleted.
(InspectorBackendClass.prototype._dispatchEvent): Deleted.
(InspectorBackendClass.prototype._flushPendingScripts): Deleted.
(InspectorBackend.Agent.prototype.get currentDispatchState): Deleted.
(InspectorBackend.Command.prototype.deliverFailure): Deleted.
* UserInterface/Protocol/Connection.js: Added.
(InspectorBackend.Connection):
(InspectorBackend.Connection.prototype.get target):
(InspectorBackend.Connection.prototype.set target):
(InspectorBackend.Connection.prototype.dispatch):
(InspectorBackend.Connection.prototype.runAfterPendingDispatches):
(InspectorBackend.Connection.prototype.sendMessageToBackend):
(InspectorBackend.Connection.prototype._dispatchResponse):
(InspectorBackend.Connection.prototype._dispatchResponseToCallback):
(InspectorBackend.Connection.prototype._dispatchResponseToPromise):
(InspectorBackend.Connection.prototype._dispatchEvent):
(InspectorBackend.Connection.prototype._sendCommandToBackendWithCallback):
(InspectorBackend.Connection.prototype._sendCommandToBackendExpectingPromise):
(InspectorBackend.Connection.prototype._sendMessageToBackend):
(InspectorBackend.Connection.prototype._flushPendingScripts):
This extracts the Connection details into its own class.
Although we make it appear as though a Target has a list of
Agents, we actually have the Connection hold the list of Agents.
Instead of cloning the entire Agent we just create a new object
extended from the original Agent instance. This allows us to keep
the same interface but just change the connection / dispatcher
properties within the Agent.

(InspectorBackend.MainConnection):
(InspectorBackend.MainConnection.prototype.sendMessageToBackend):
(InspectorBackend.WorkerConnection):
(InspectorBackend.WorkerConnection.sendMessageToBackend):
Two different kinds of connections. One for the Main connection
and one for Workers. Currently the list of agents we expose
on a Worker Target/Connection is hardcoded.

* UserInterface/Models/ExecutionContext.js:
(WebInspector.ExecutionContext):
(WebInspector.ExecutionContext.prototype.get target):
We may now have ExecutionContexts that mean a Page, Frames, and Workers.
To do this we include the (target, executionContextId) tuple in this object.
With this we have everything we need to evaluate JavaScript.

* UserInterface/Controllers/RuntimeManager.js:
(WebInspector.RuntimeManager):
(WebInspector.RuntimeManager.prototype.get activeExecutionContext):
(WebInspector.RuntimeManager.prototype.set activeExecutionContext):
(WebInspector.RuntimeManager.prototype.get defaultExecutionContextIdentifier): Deleted.
(WebInspector.RuntimeManager.prototype.set defaultExecutionContextIdentifier): Deleted.
Update from contextId to a full ExecutionContext object.

(WebInspector.RuntimeManager.prototype.evaluateInInspectedWindow.evalCallback):
(WebInspector.RuntimeManager.prototype.evaluateInInspectedWindow):
(WebInspector.RuntimeManager.prototype.saveResult):
(WebInspector.RuntimeManager.prototype.getPropertiesForRemoteObject):
(WebInspector.RuntimeManager.prototype._frameExecutionContextsCleared):
* UserInterface/Controllers/FrameResourceManager.js:
(WebInspector.FrameResourceManager.prototype.executionContextCreated):
* UserInterface/Controllers/JavaScriptLogViewController.js:
(WebInspector.JavaScriptLogViewController.prototype.consolePromptShouldCommitText):
* UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:
Anywhere that wants to use the "activeExecutionContext" must use the
specific RuntimeAgent tied to that ExecutionContext's Target.

* UserInterface/Models/PropertyDescriptor.js:
(WebInspector.PropertyDescriptor.fromPayload):
* UserInterface/Protocol/RemoteObject.js:
(WebInspector.RemoteObject):
(WebInspector.RemoteObject.createFakeRemoteObject):
(WebInspector.RemoteObject.fromPrimitiveValue):
(WebInspector.RemoteObject.fromPayload):
(WebInspector.RemoteObject.prototype.getDisplayablePropertyDescriptors):
(WebInspector.RemoteObject.prototype.deprecatedGetDisplayableProperties):
(WebInspector.RemoteObject.prototype.setPropertyValue):
(WebInspector.RemoteObject.prototype.getCollectionEntries):
(WebInspector.RemoteObject.prototype.releaseWeakCollectionEntries):
(WebInspector.RemoteObject.prototype.callFunction):
(WebInspector.RemoteObject.prototype.callFunctionJSON):
(WebInspector.RemoteObject.prototype.getOwnPropertyDescriptor.wrappedCallback):
(WebInspector.RemoteObject.prototype.getOwnPropertyDescriptor):
(WebInspector.RemoteObject.prototype.release):
(WebInspector.RemoteObject.prototype._getPropertyDescriptors):
(WebInspector.RemoteObject.prototype._getPropertyDescriptorsResolver):
(WebInspector.RemoteObject.prototype._deprecatedGetProperties):
RemoteObject and related Model Objects now must be tied to a specific
Target, because we need to know which Target it belongs to in order to
interact with it further.

* UserInterface/Views/QuickConsole.js:
(WebInspector.QuickConsole):
(WebInspector.QuickConsole.prototype.get selectedExecutionContext):
(WebInspector.QuickConsole.prototype.set selectedExecutionContext):
(WebInspector.QuickConsole.prototype._executionContextPathComponentsToDisplay):
(WebInspector.QuickConsole.prototype._rebuildExecutionContextPathComponents):
(WebInspector.QuickConsole.prototype._framePageExecutionContextsChanged):
(WebInspector.QuickConsole.prototype._frameExecutionContextsCleared):
(WebInspector.QuickConsole.prototype._createExecutionContextPathComponent):
(WebInspector.QuickConsole.prototype._createExecutionContextPathComponentFromFrame):
(WebInspector.QuickConsole.prototype._compareExecutionContextPathComponents):
(WebInspector.QuickConsole.prototype._insertOtherExecutionContextPathComponent):
(WebInspector.QuickConsole.prototype._removeOtherExecutionContextPathComponent):
(WebInspector.QuickConsole.prototype._insertExecutionContextPathComponentForFrame):
(WebInspector.QuickConsole.prototype._removeExecutionContextPathComponentForFrame):
(WebInspector.QuickConsole.prototype._targetAdded):
(WebInspector.QuickConsole.prototype._targetRemoved):
(WebInspector.QuickConsole.prototype._pathComponentSelected):
(WebInspector.QuickConsole.prototype.get selectedExecutionContextIdentifier): Deleted.
(WebInspector.QuickConsole.prototype.set selectedExecutionContextIdentifier): Deleted.
(WebInspector.QuickConsole.prototype._defaultExecutionContextChanged): Deleted.
Update the code from executionContextId to ExecutionContext objects.
Update the picker with ExecutionContextPathComponent for Workers (new Targets).
Generalize and cleanup the code to make it easier to follow.

LayoutTests:

* inspector/unit-tests/target-manager-expected.txt: Added.
* inspector/unit-tests/target-manager.html: Added.
Unit test for TargetManager and its events with Worker creation.

* inspector/worker/resources/worker-1.js:
* inspector/worker/runtime-basic-expected.txt: Added.
* inspector/worker/runtime-basic.html: Added.
Test comparing RuntimeAgent between Main target and Worker target.

* inspector/runtime/change-execution-context-identifier-expected.txt:
* inspector/runtime/change-execution-context-identifier.html:
RuntimeManager has been updated to have a full ExecutionContext object
containing a Target + ContextId instead of just a ContextId.

* inspector/console/console-api-expected.txt:
* inspector/console/console-api.html:
* inspector/console/console-table-expected.txt:
* inspector/console/console-table.html:
* inspector/debugger/tail-deleted-frames-from-vm-entry.html:
* inspector/debugger/tail-deleted-frames.html:
* inspector/debugger/tail-recursion.html:
* inspector/model/remote-object-expected.txt:
* inspector/model/remote-object-weak-collection-expected.txt:
* inspector/model/remote-object-weak-collection.html:
* inspector/model/remote-object.html:
* platform/mac/inspector/model/remote-object-expected.txt:
Introduce a better JSON Filter for RemoteObject in more tests.
It is important that we filter the _target, because otherwise
JSON.stringify would throw an error about cycles.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@208009 268f45cc-cd09-0410-ab3c-d52691b4dbfc

51 files changed:
LayoutTests/ChangeLog
LayoutTests/inspector/console/console-api-expected.txt
LayoutTests/inspector/console/console-api.html
LayoutTests/inspector/console/console-table-expected.txt
LayoutTests/inspector/console/console-table.html
LayoutTests/inspector/debugger/tail-deleted-frames-from-vm-entry.html
LayoutTests/inspector/debugger/tail-deleted-frames.html
LayoutTests/inspector/debugger/tail-recursion.html
LayoutTests/inspector/model/remote-object-expected.txt
LayoutTests/inspector/model/remote-object-weak-collection-expected.txt
LayoutTests/inspector/model/remote-object-weak-collection.html
LayoutTests/inspector/model/remote-object.html
LayoutTests/inspector/runtime/change-execution-context-identifier-expected.txt
LayoutTests/inspector/runtime/change-execution-context-identifier.html
LayoutTests/inspector/unit-tests/target-manager-expected.txt [new file with mode: 0644]
LayoutTests/inspector/unit-tests/target-manager.html [new file with mode: 0644]
LayoutTests/inspector/worker/resources/worker-1.js
LayoutTests/inspector/worker/runtime-basic-expected.txt [new file with mode: 0644]
LayoutTests/inspector/worker/runtime-basic.html [new file with mode: 0644]
LayoutTests/platform/mac/inspector/model/remote-object-expected.txt
Source/WebCore/CMakeLists.txt
Source/WebCore/ChangeLog
Source/WebCore/WebCore.xcodeproj/project.pbxproj
Source/WebCore/inspector/InspectorAllInOne.cpp
Source/WebCore/inspector/InspectorWebAgentBase.h
Source/WebCore/inspector/WorkerInspectorController.cpp
Source/WebCore/inspector/WorkerRuntimeAgent.cpp [new file with mode: 0644]
Source/WebCore/inspector/WorkerRuntimeAgent.h [new file with mode: 0644]
Source/WebInspectorUI/ChangeLog
Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js
Source/WebInspectorUI/UserInterface/Base/Main.js
Source/WebInspectorUI/UserInterface/Controllers/FrameResourceManager.js
Source/WebInspectorUI/UserInterface/Controllers/JavaScriptLogViewController.js
Source/WebInspectorUI/UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js
Source/WebInspectorUI/UserInterface/Controllers/RuntimeManager.js
Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js [new file with mode: 0644]
Source/WebInspectorUI/UserInterface/Controllers/WorkerManager.js
Source/WebInspectorUI/UserInterface/Main.html
Source/WebInspectorUI/UserInterface/Models/CollectionEntry.js
Source/WebInspectorUI/UserInterface/Models/ExecutionContext.js
Source/WebInspectorUI/UserInterface/Models/PropertyDescriptor.js
Source/WebInspectorUI/UserInterface/Protocol/Connection.js [new file with mode: 0644]
Source/WebInspectorUI/UserInterface/Protocol/InspectorBackend.js
Source/WebInspectorUI/UserInterface/Protocol/InspectorObserver.js
Source/WebInspectorUI/UserInterface/Protocol/RemoteObject.js
Source/WebInspectorUI/UserInterface/Protocol/Target.js [new file with mode: 0644]
Source/WebInspectorUI/UserInterface/Test.html
Source/WebInspectorUI/UserInterface/Test/Test.js
Source/WebInspectorUI/UserInterface/Views/ErrorObjectView.js
Source/WebInspectorUI/UserInterface/Views/QuickConsole.js
Source/WebInspectorUI/UserInterface/Views/ScopeChainDetailsSidebarPanel.js

index 649b8bf..164abbe 100644 (file)
@@ -1,5 +1,43 @@
 2016-10-27  Joseph Pecoraro  <pecoraro@apple.com>
 
+        Web Inspector: Include RuntimeAgent in Workers - evaluate in Worker context
+        https://bugs.webkit.org/show_bug.cgi?id=163835
+        <rdar://problem/28901465>
+
+        Reviewed by Brian Burg.
+
+        * inspector/unit-tests/target-manager-expected.txt: Added.
+        * inspector/unit-tests/target-manager.html: Added.
+        Unit test for TargetManager and its events with Worker creation.
+
+        * inspector/worker/resources/worker-1.js:
+        * inspector/worker/runtime-basic-expected.txt: Added.
+        * inspector/worker/runtime-basic.html: Added.
+        Test comparing RuntimeAgent between Main target and Worker target.
+
+        * inspector/runtime/change-execution-context-identifier-expected.txt:
+        * inspector/runtime/change-execution-context-identifier.html:
+        RuntimeManager has been updated to have a full ExecutionContext object
+        containing a Target + ContextId instead of just a ContextId.
+
+        * inspector/console/console-api-expected.txt:
+        * inspector/console/console-api.html:
+        * inspector/console/console-table-expected.txt:
+        * inspector/console/console-table.html:
+        * inspector/debugger/tail-deleted-frames-from-vm-entry.html:
+        * inspector/debugger/tail-deleted-frames.html:
+        * inspector/debugger/tail-recursion.html:
+        * inspector/model/remote-object-expected.txt:
+        * inspector/model/remote-object-weak-collection-expected.txt:
+        * inspector/model/remote-object-weak-collection.html:
+        * inspector/model/remote-object.html:
+        * platform/mac/inspector/model/remote-object-expected.txt:
+        Introduce a better JSON Filter for RemoteObject in more tests.
+        It is important that we filter the _target, because otherwise
+        JSON.stringify would throw an error about cycles.
+
+2016-10-27  Joseph Pecoraro  <pecoraro@apple.com>
+
         Web Inspector: Introduce Page WorkerAgent and Worker InspectorController
         https://bugs.webkit.org/show_bug.cgi?id=163817
         <rdar://problem/28899063>
index f7bbffd..836e814 100644 (file)
@@ -19,7 +19,6 @@ CONSOLE MESSAGE: collapsedGroupName
 
 STEP: console.log('console.log')
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "console.log",
@@ -42,7 +41,6 @@ STEP: console.log('console.log')
 
 STEP: console.warn('console.warn')
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "warning",
   "_messageText": "console.warn",
@@ -65,7 +63,6 @@ STEP: console.warn('console.warn')
 
 STEP: console.error('console.error')
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "error",
   "_messageText": "console.error",
@@ -88,7 +85,6 @@ STEP: console.error('console.error')
 
 STEP: console.debug('console.debug')
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
   "_messageText": "console.debug",
@@ -111,7 +107,6 @@ STEP: console.debug('console.debug')
 
 STEP: console.info('console.info')
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "info",
   "_messageText": "console.info",
@@ -134,7 +129,6 @@ STEP: console.info('console.info')
 
 STEP: console.assert(false, 'assertion message')
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "error",
   "_messageText": "assertion message",
@@ -157,7 +151,6 @@ STEP: console.assert(false, 'assertion message')
 
 STEP: console.trace()
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "",
@@ -172,7 +165,6 @@ STEP: console.trace()
 
 STEP: console.log('string message', string)
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "string message",
@@ -201,7 +193,6 @@ STEP: console.log('string message', string)
 
 STEP: console.log('message', object, object)
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "message",
@@ -223,14 +214,12 @@ STEP: console.log('message', object, object)
       "_description": "Object",
       "_hasChildren": true,
       "_preview": {
-        "_listeners": null,
         "_type": "object",
         "_description": "Object",
         "_lossless": true,
         "_overflow": false,
         "_properties": [
           {
-            "_listeners": null,
             "_name": "a",
             "_type": "number",
             "_value": "1"
@@ -245,14 +234,12 @@ STEP: console.log('message', object, object)
       "_description": "Object",
       "_hasChildren": true,
       "_preview": {
-        "_listeners": null,
         "_type": "object",
         "_description": "Object",
         "_lossless": true,
         "_overflow": false,
         "_properties": [
           {
-            "_listeners": null,
             "_name": "a",
             "_type": "number",
             "_value": "1"
@@ -268,7 +255,6 @@ STEP: console.log('message', object, object)
 
 STEP: console.error('message', object)
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "error",
   "_messageText": "message",
@@ -290,14 +276,12 @@ STEP: console.error('message', object)
       "_description": "Object",
       "_hasChildren": true,
       "_preview": {
-        "_listeners": null,
         "_type": "object",
         "_description": "Object",
         "_lossless": true,
         "_overflow": false,
         "_properties": [
           {
-            "_listeners": null,
             "_name": "a",
             "_type": "number",
             "_value": "1"
@@ -313,7 +297,6 @@ STEP: console.error('message', object)
 
 STEP: console.warn('message', object)
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "warning",
   "_messageText": "message",
@@ -335,14 +318,12 @@ STEP: console.warn('message', object)
       "_description": "Object",
       "_hasChildren": true,
       "_preview": {
-        "_listeners": null,
         "_type": "object",
         "_description": "Object",
         "_lossless": true,
         "_overflow": false,
         "_properties": [
           {
-            "_listeners": null,
             "_name": "a",
             "_type": "number",
             "_value": "1"
@@ -358,7 +339,6 @@ STEP: console.warn('message', object)
 
 STEP: console.debug('message', object)
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
   "_messageText": "message",
@@ -380,14 +360,12 @@ STEP: console.debug('message', object)
       "_description": "Object",
       "_hasChildren": true,
       "_preview": {
-        "_listeners": null,
         "_type": "object",
         "_description": "Object",
         "_lossless": true,
         "_overflow": false,
         "_properties": [
           {
-            "_listeners": null,
             "_name": "a",
             "_type": "number",
             "_value": "1"
@@ -403,7 +381,6 @@ STEP: console.debug('message', object)
 
 STEP: console.info('message', object)
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "info",
   "_messageText": "message",
@@ -425,14 +402,12 @@ STEP: console.info('message', object)
       "_description": "Object",
       "_hasChildren": true,
       "_preview": {
-        "_listeners": null,
         "_type": "object",
         "_description": "Object",
         "_lossless": true,
         "_overflow": false,
         "_properties": [
           {
-            "_listeners": null,
             "_name": "a",
             "_type": "number",
             "_value": "1"
@@ -448,7 +423,6 @@ STEP: console.info('message', object)
 
 STEP: console.dir(object)
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "[object Object]",
@@ -464,14 +438,12 @@ STEP: console.dir(object)
       "_description": "Object",
       "_hasChildren": true,
       "_preview": {
-        "_listeners": null,
         "_type": "object",
         "_description": "Object",
         "_lossless": true,
         "_overflow": false,
         "_properties": [
           {
-            "_listeners": null,
             "_name": "a",
             "_type": "number",
             "_value": "1"
@@ -487,7 +459,6 @@ STEP: console.dir(object)
 
 STEP: console.dirxml(object)
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "[object Object]",
@@ -503,14 +474,12 @@ STEP: console.dirxml(object)
       "_description": "Object",
       "_hasChildren": true,
       "_preview": {
-        "_listeners": null,
         "_type": "object",
         "_description": "Object",
         "_lossless": true,
         "_overflow": false,
         "_properties": [
           {
-            "_listeners": null,
             "_name": "a",
             "_type": "number",
             "_value": "1"
@@ -526,7 +495,6 @@ STEP: console.dirxml(object)
 
 STEP: console.group('groupName')
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "groupName",
@@ -549,7 +517,6 @@ STEP: console.group('groupName')
 
 STEP: console.groupEnd('groupName')
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "groupName",
@@ -572,7 +539,6 @@ STEP: console.groupEnd('groupName')
 
 STEP: console.groupCollapsed('collapsedGroupName')
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "collapsedGroupName",
@@ -595,7 +561,6 @@ STEP: console.groupCollapsed('collapsedGroupName')
 
 STEP: console.groupEnd('collapsedGroupName')
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "collapsedGroupName",
@@ -618,7 +583,6 @@ STEP: console.groupEnd('collapsedGroupName')
 
 STEP: console.count()
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
   "_messageText": "Global: 1",
@@ -633,7 +597,6 @@ STEP: console.count()
 
 STEP: console.count()
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
   "_messageText": "Global: 2",
@@ -648,7 +611,6 @@ STEP: console.count()
 
 STEP: console.count('')
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
   "_messageText": ": 1",
@@ -663,7 +625,6 @@ STEP: console.count('')
 
 STEP: console.count('    ')
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
   "_messageText": "    : 1",
@@ -678,7 +639,6 @@ STEP: console.count('    ')
 
 STEP: console.count('')
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
   "_messageText": ": 2",
@@ -693,7 +653,6 @@ STEP: console.count('')
 
 STEP: console.count('    ')
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
   "_messageText": "    : 2",
@@ -708,7 +667,6 @@ STEP: console.count('    ')
 
 STEP: console.count(string)
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
   "_messageText": "string: 1",
@@ -723,7 +681,6 @@ STEP: console.count(string)
 
 STEP: console.count(string)
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
   "_messageText": "string: 2",
@@ -738,7 +695,6 @@ STEP: console.count(string)
 
 STEP: console.count(object)
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
   "_messageText": "[object Object]: 1",
@@ -753,7 +709,6 @@ STEP: console.count(object)
 
 STEP: console.count(object)
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
   "_messageText": "[object Object]: 2",
@@ -768,7 +723,6 @@ STEP: console.count(object)
 
 STEP: console.count(otherObject)
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
   "_messageText": "[object Object]: 3",
@@ -783,7 +737,6 @@ STEP: console.count(otherObject)
 
 STEP: console.count(otherObject)
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
   "_messageText": "[object Object]: 4",
@@ -798,7 +751,6 @@ STEP: console.count(otherObject)
 
 STEP: console.count(number)
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
   "_messageText": "42: 1",
@@ -813,7 +765,6 @@ STEP: console.count(number)
 
 STEP: console.count(number)
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "debug",
   "_messageText": "42: 2",
index 1e87240..03ec6a4 100644 (file)
@@ -50,6 +50,8 @@ function test()
 
     function remoteObjectJSONFilter(key, value)
     {
+        if (key === "_target" || key === "_listeners")
+            return undefined;
         if (key === "_objectId" || key === "_stackTrace")
             return "<filtered>";
         return value;
index f0f8392..2eeb2ac 100644 (file)
@@ -8,7 +8,6 @@ CONSOLE MESSAGE: line 3: [object Object],[object Object],[object Object]
 
 STEP: console.table([])
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "",
@@ -26,7 +25,6 @@ STEP: console.table([])
       "_hasChildren": true,
       "_size": 0,
       "_preview": {
-        "_listeners": null,
         "_type": "object",
         "_subtype": "array",
         "_description": "Array",
@@ -44,7 +42,6 @@ STEP: console.table([])
 
 STEP: console.table(['apple', 'orange', 'banana'])
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "apple,orange,banana",
@@ -62,7 +59,6 @@ STEP: console.table(['apple', 'orange', 'banana'])
       "_hasChildren": true,
       "_size": 3,
       "_preview": {
-        "_listeners": null,
         "_type": "object",
         "_subtype": "array",
         "_description": "Array",
@@ -71,19 +67,16 @@ STEP: console.table(['apple', 'orange', 'banana'])
         "_size": 3,
         "_properties": [
           {
-            "_listeners": null,
             "_name": "0",
             "_type": "string",
             "_value": "apple"
           },
           {
-            "_listeners": null,
             "_name": "1",
             "_type": "string",
             "_value": "orange"
           },
           {
-            "_listeners": null,
             "_name": "2",
             "_type": "string",
             "_value": "banana"
@@ -99,7 +92,6 @@ STEP: console.table(['apple', 'orange', 'banana'])
 
 STEP: console.table({firstName: 'John', lastName: 'Smith'})
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "[object Object]",
@@ -115,20 +107,17 @@ STEP: console.table({firstName: 'John', lastName: 'Smith'})
       "_description": "Object",
       "_hasChildren": true,
       "_preview": {
-        "_listeners": null,
         "_type": "object",
         "_description": "Object",
         "_lossless": true,
         "_overflow": false,
         "_properties": [
           {
-            "_listeners": null,
             "_name": "firstName",
             "_type": "string",
             "_value": "John"
           },
           {
-            "_listeners": null,
             "_name": "lastName",
             "_type": "string",
             "_value": "Smith"
@@ -144,7 +133,6 @@ STEP: console.table({firstName: 'John', lastName: 'Smith'})
 
 STEP: console.table({f: function(){}, x: 10})
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "[object Object]",
@@ -160,18 +148,15 @@ STEP: console.table({f: function(){}, x: 10})
       "_description": "Object",
       "_hasChildren": true,
       "_preview": {
-        "_listeners": null,
         "_type": "object",
         "_description": "Object",
         "_lossless": true,
         "_overflow": false,
         "_properties": [
           {
-            "_listeners": null,
             "_name": "f",
             "_type": "function",
             "_valuePreview": {
-              "_listeners": null,
               "_type": "function",
               "_description": "function (){}",
               "_lossless": true,
@@ -181,7 +166,6 @@ STEP: console.table({f: function(){}, x: 10})
             }
           },
           {
-            "_listeners": null,
             "_name": "x",
             "_type": "number",
             "_value": "10"
@@ -197,7 +181,6 @@ STEP: console.table({f: function(){}, x: 10})
 
 STEP: console.table([['John', 'Smith'], ['Jane', 'Doe'], ['Emily', 'Jones']])
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "John,Smith,Jane,Doe,Emily,Jones",
@@ -215,7 +198,6 @@ STEP: console.table([['John', 'Smith'], ['Jane', 'Doe'], ['Emily', 'Jones']])
       "_hasChildren": true,
       "_size": 3,
       "_preview": {
-        "_listeners": null,
         "_type": "object",
         "_subtype": "array",
         "_description": "Array",
@@ -224,12 +206,10 @@ STEP: console.table([['John', 'Smith'], ['Jane', 'Doe'], ['Emily', 'Jones']])
         "_size": 3,
         "_properties": [
           {
-            "_listeners": null,
             "_name": "0",
             "_type": "object",
             "_subtype": "array",
             "_valuePreview": {
-              "_listeners": null,
               "_type": "object",
               "_subtype": "array",
               "_description": "Array",
@@ -238,13 +218,11 @@ STEP: console.table([['John', 'Smith'], ['Jane', 'Doe'], ['Emily', 'Jones']])
               "_size": 2,
               "_properties": [
                 {
-                  "_listeners": null,
                   "_name": "0",
                   "_type": "string",
                   "_value": "John"
                 },
                 {
-                  "_listeners": null,
                   "_name": "1",
                   "_type": "string",
                   "_value": "Smith"
@@ -254,12 +232,10 @@ STEP: console.table([['John', 'Smith'], ['Jane', 'Doe'], ['Emily', 'Jones']])
             }
           },
           {
-            "_listeners": null,
             "_name": "1",
             "_type": "object",
             "_subtype": "array",
             "_valuePreview": {
-              "_listeners": null,
               "_type": "object",
               "_subtype": "array",
               "_description": "Array",
@@ -268,13 +244,11 @@ STEP: console.table([['John', 'Smith'], ['Jane', 'Doe'], ['Emily', 'Jones']])
               "_size": 2,
               "_properties": [
                 {
-                  "_listeners": null,
                   "_name": "0",
                   "_type": "string",
                   "_value": "Jane"
                 },
                 {
-                  "_listeners": null,
                   "_name": "1",
                   "_type": "string",
                   "_value": "Doe"
@@ -284,12 +258,10 @@ STEP: console.table([['John', 'Smith'], ['Jane', 'Doe'], ['Emily', 'Jones']])
             }
           },
           {
-            "_listeners": null,
             "_name": "2",
             "_type": "object",
             "_subtype": "array",
             "_valuePreview": {
-              "_listeners": null,
               "_type": "object",
               "_subtype": "array",
               "_description": "Array",
@@ -298,13 +270,11 @@ STEP: console.table([['John', 'Smith'], ['Jane', 'Doe'], ['Emily', 'Jones']])
               "_size": 2,
               "_properties": [
                 {
-                  "_listeners": null,
                   "_name": "0",
                   "_type": "string",
                   "_value": "Emily"
                 },
                 {
-                  "_listeners": null,
                   "_name": "1",
                   "_type": "string",
                   "_value": "Jones"
@@ -324,7 +294,6 @@ STEP: console.table([['John', 'Smith'], ['Jane', 'Doe'], ['Emily', 'Jones']])
 
 STEP: console.table([john, jane, emily])
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "[object Object],[object Object],[object Object]",
@@ -342,7 +311,6 @@ STEP: console.table([john, jane, emily])
       "_hasChildren": true,
       "_size": 3,
       "_preview": {
-        "_listeners": null,
         "_type": "object",
         "_subtype": "array",
         "_description": "Array",
@@ -351,24 +319,20 @@ STEP: console.table([john, jane, emily])
         "_size": 3,
         "_properties": [
           {
-            "_listeners": null,
             "_name": "0",
             "_type": "object",
             "_valuePreview": {
-              "_listeners": null,
               "_type": "object",
               "_description": "Person",
               "_lossless": false,
               "_overflow": false,
               "_properties": [
                 {
-                  "_listeners": null,
                   "_name": "firstName",
                   "_type": "string",
                   "_value": "John"
                 },
                 {
-                  "_listeners": null,
                   "_name": "lastName",
                   "_type": "string",
                   "_value": "Smith"
@@ -378,24 +342,20 @@ STEP: console.table([john, jane, emily])
             }
           },
           {
-            "_listeners": null,
             "_name": "1",
             "_type": "object",
             "_valuePreview": {
-              "_listeners": null,
               "_type": "object",
               "_description": "Person",
               "_lossless": false,
               "_overflow": false,
               "_properties": [
                 {
-                  "_listeners": null,
                   "_name": "firstName",
                   "_type": "string",
                   "_value": "Jane"
                 },
                 {
-                  "_listeners": null,
                   "_name": "lastName",
                   "_type": "string",
                   "_value": "Doe"
@@ -405,24 +365,20 @@ STEP: console.table([john, jane, emily])
             }
           },
           {
-            "_listeners": null,
             "_name": "2",
             "_type": "object",
             "_valuePreview": {
-              "_listeners": null,
               "_type": "object",
               "_description": "Person",
               "_lossless": false,
               "_overflow": false,
               "_properties": [
                 {
-                  "_listeners": null,
                   "_name": "firstName",
                   "_type": "string",
                   "_value": "Emily"
                 },
                 {
-                  "_listeners": null,
                   "_name": "lastName",
                   "_type": "string",
                   "_value": "Jones"
@@ -442,7 +398,6 @@ STEP: console.table([john, jane, emily])
 
 STEP: console.table([john, jane, emily], ['firstName'])
 {
-  "_listeners": null,
   "_source": "console-api",
   "_level": "log",
   "_messageText": "[object Object],[object Object],[object Object]",
@@ -460,7 +415,6 @@ STEP: console.table([john, jane, emily], ['firstName'])
       "_hasChildren": true,
       "_size": 3,
       "_preview": {
-        "_listeners": null,
         "_type": "object",
         "_subtype": "array",
         "_description": "Array",
@@ -469,24 +423,20 @@ STEP: console.table([john, jane, emily], ['firstName'])
         "_size": 3,
         "_properties": [
           {
-            "_listeners": null,
             "_name": "0",
             "_type": "object",
             "_valuePreview": {
-              "_listeners": null,
               "_type": "object",
               "_description": "Person",
               "_lossless": false,
               "_overflow": false,
               "_properties": [
                 {
-                  "_listeners": null,
                   "_name": "firstName",
                   "_type": "string",
                   "_value": "John"
                 },
                 {
-                  "_listeners": null,
                   "_name": "lastName",
                   "_type": "string",
                   "_value": "Smith"
@@ -496,24 +446,20 @@ STEP: console.table([john, jane, emily], ['firstName'])
             }
           },
           {
-            "_listeners": null,
             "_name": "1",
             "_type": "object",
             "_valuePreview": {
-              "_listeners": null,
               "_type": "object",
               "_description": "Person",
               "_lossless": false,
               "_overflow": false,
               "_properties": [
                 {
-                  "_listeners": null,
                   "_name": "firstName",
                   "_type": "string",
                   "_value": "Jane"
                 },
                 {
-                  "_listeners": null,
                   "_name": "lastName",
                   "_type": "string",
                   "_value": "Doe"
@@ -523,24 +469,20 @@ STEP: console.table([john, jane, emily], ['firstName'])
             }
           },
           {
-            "_listeners": null,
             "_name": "2",
             "_type": "object",
             "_valuePreview": {
-              "_listeners": null,
               "_type": "object",
               "_description": "Person",
               "_lossless": false,
               "_overflow": false,
               "_properties": [
                 {
-                  "_listeners": null,
                   "_name": "firstName",
                   "_type": "string",
                   "_value": "Emily"
                 },
                 {
-                  "_listeners": null,
                   "_name": "lastName",
                   "_type": "string",
                   "_value": "Jones"
@@ -561,7 +503,6 @@ STEP: console.table([john, jane, emily], ['firstName'])
       "_hasChildren": true,
       "_size": 1,
       "_preview": {
-        "_listeners": null,
         "_type": "object",
         "_subtype": "array",
         "_description": "Array",
@@ -570,7 +511,6 @@ STEP: console.table([john, jane, emily], ['firstName'])
         "_size": 1,
         "_properties": [
           {
-            "_listeners": null,
             "_name": "0",
             "_type": "string",
             "_value": "firstName"
index a8b6182..66d8618 100644 (file)
@@ -28,6 +28,8 @@ function test()
 
     function remoteObjectJSONFilter(key, value)
     {
+        if (key === "_target" || key === "_listeners")
+            return undefined;
         if (key === "_objectId" || key === "_stackTrace")
             return "<filtered>";
         return value;
index bd026ab..7ba30d6 100644 (file)
@@ -10,6 +10,14 @@ function test()
 {
     let scriptObject;
 
+    function remoteObjectJSONFilter(key, value) {
+        if (key === "_target" || key === "_listeners")
+            return undefined;
+        if (key === "_objectId" || key === "_stackTrace")
+            return "<filtered>";
+        return value;
+    }
+
     function startTest() {
         InspectorTest.log("Starting Test");
         // 0 based indices.
@@ -57,7 +65,7 @@ function test()
                     if (propertyDescriptor.name === variableName) {
                         found = true;
                         InspectorTest.log("Looking at frame number: " + i);
-                        InspectorTest.log(`    variable '${variableName}': ${JSON.stringify(propertyDescriptor.value)}`);
+                        InspectorTest.log(`    variable '${variableName}': ${JSON.stringify(propertyDescriptor.value, remoteObjectJSONFilter)}`);
                         InspectorTest.expectThat(propertyDescriptor.value.type === 'number', "Variable is a number.");
                         InspectorTest.expectThat(propertyDescriptor.value.value === variableValue, `Found scope value: ${variableValue}`);
                     }
index 7f50745..3c497d6 100644 (file)
@@ -10,6 +10,14 @@ function test()
 {
     var scriptObject;
 
+    function remoteObjectJSONFilter(key, value) {
+        if (key === "_target" || key === "_listeners")
+            return undefined;
+        if (key === "_objectId" || key === "_stackTrace")
+            return "<filtered>";
+        return value;
+    }
+
     function startTest() {
         InspectorTest.log("Starting Test");
         // 0 based indices.
@@ -58,7 +66,7 @@ function test()
                     if (propertyDescriptor.name === variableName) {
                         found = true;
                         InspectorTest.log("Looking at frame number: " + i);
-                        InspectorTest.log(`    variable '${variableName}': ${JSON.stringify(propertyDescriptor.value)}`);
+                        InspectorTest.log(`    variable '${variableName}': ${JSON.stringify(propertyDescriptor.value, remoteObjectJSONFilter)}`);
                         InspectorTest.assert(propertyDescriptor.value.type === 'number');
                         InspectorTest.assert(propertyDescriptor.value.value === variableValue);
                     }
index 04e42c2..1fc8b1e 100644 (file)
@@ -10,6 +10,14 @@ function test()
 {
     var scriptObject;
 
+    function remoteObjectJSONFilter(key, value) {
+        if (key === "_target" || key === "_listeners")
+            return undefined;
+        if (key === "_objectId" || key === "_stackTrace")
+            return "<filtered>";
+        return value;
+    }
+
     function startTest() {
         InspectorTest.log("Starting Test");
         // 0 based indices.
@@ -56,7 +64,7 @@ function test()
                     if (propertyDescriptor.name === 'i') {
                         found = true;
                         InspectorTest.log("Looking at frame number: " + i);
-                        InspectorTest.log("    variable 'i': " + JSON.stringify(propertyDescriptor.value));
+                        InspectorTest.log("    variable 'i': " + JSON.stringify(propertyDescriptor.value, remoteObjectJSONFilter));
                         InspectorTest.assert(propertyDescriptor.value.type === 'number');
                         if (numBreakpointHits === 2 && i === 0)
                             InspectorTest.assert(propertyDescriptor.value.value === i + 1); // this tests the i++ inside tail-recurse.js
index 600068b..ec31374 100644 (file)
@@ -263,7 +263,6 @@ EXPRESSION: / /
   "_objectId": "<filtered>",
   "_description": "/ /",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "regexp",
     "_description": "/ /",
@@ -271,7 +270,6 @@ EXPRESSION: / /
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "lastIndex",
         "_type": "number",
         "_value": "0"
@@ -289,7 +287,6 @@ EXPRESSION: /(?:)/
   "_objectId": "<filtered>",
   "_description": "/(?:)/",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "regexp",
     "_description": "/(?:)/",
@@ -297,7 +294,6 @@ EXPRESSION: /(?:)/
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "lastIndex",
         "_type": "number",
         "_value": "0"
@@ -315,7 +311,6 @@ EXPRESSION: /^r(e)g[e]{1,}x+/
   "_objectId": "<filtered>",
   "_description": "/^r(e)g[e]{1,}x+/",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "regexp",
     "_description": "/^r(e)g[e]{1,}x+/",
@@ -323,7 +318,6 @@ EXPRESSION: /^r(e)g[e]{1,}x+/
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "lastIndex",
         "_type": "number",
         "_value": "0"
@@ -341,7 +335,6 @@ EXPRESSION: /^r(e)g[e]{1,}x+/ig
   "_objectId": "<filtered>",
   "_description": "/^r(e)g[e]{1,}x+/gi",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "regexp",
     "_description": "/^r(e)g[e]{1,}x+/gi",
@@ -349,7 +342,6 @@ EXPRESSION: /^r(e)g[e]{1,}x+/ig
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "lastIndex",
         "_type": "number",
         "_value": "0"
@@ -367,7 +359,6 @@ EXPRESSION: new RegExp('')
   "_objectId": "<filtered>",
   "_description": "/(?:)/",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "regexp",
     "_description": "/(?:)/",
@@ -375,7 +366,6 @@ EXPRESSION: new RegExp('')
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "lastIndex",
         "_type": "number",
         "_value": "0"
@@ -393,7 +383,6 @@ EXPRESSION: new RegExp('test', 'i')
   "_objectId": "<filtered>",
   "_description": "/test/i",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "regexp",
     "_description": "/test/i",
@@ -401,7 +390,6 @@ EXPRESSION: new RegExp('test', 'i')
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "lastIndex",
         "_type": "number",
         "_value": "0"
@@ -420,7 +408,6 @@ EXPRESSION: []
   "_description": "Array",
   "_size": 0,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -441,7 +428,6 @@ EXPRESSION: [0, -0, 1, 2]
   "_description": "Array",
   "_size": 4,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -450,25 +436,21 @@ EXPRESSION: [0, -0, 1, 2]
     "_size": 4,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "number",
         "_value": "-0"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "3",
         "_type": "number",
         "_value": "2"
@@ -487,7 +469,6 @@ EXPRESSION: [[1],[2],[3]]
   "_description": "Array",
   "_size": 3,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -496,12 +477,10 @@ EXPRESSION: [[1],[2],[3]]
     "_size": 3,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "array",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -510,7 +489,6 @@ EXPRESSION: [[1],[2],[3]]
           "_size": 1,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "1"
@@ -520,12 +498,10 @@ EXPRESSION: [[1],[2],[3]]
         }
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "object",
         "_subtype": "array",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -534,7 +510,6 @@ EXPRESSION: [[1],[2],[3]]
           "_size": 1,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "2"
@@ -544,12 +519,10 @@ EXPRESSION: [[1],[2],[3]]
         }
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "object",
         "_subtype": "array",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -558,7 +531,6 @@ EXPRESSION: [[1],[2],[3]]
           "_size": 1,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "3"
@@ -581,7 +553,6 @@ EXPRESSION: [true, 1, 1.234, 'string', /regex/]
   "_description": "Array",
   "_size": 5,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -590,31 +561,26 @@ EXPRESSION: [true, 1, 1.234, 'string', /regex/]
     "_size": 5,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "boolean",
         "_value": "true"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "number",
         "_value": "1.234"
       },
       {
-        "_listeners": null,
         "_name": "3",
         "_type": "string",
         "_value": "string"
       },
       {
-        "_listeners": null,
         "_name": "4",
         "_type": "object",
         "_subtype": "regexp",
@@ -634,7 +600,6 @@ EXPRESSION: [[null]]
   "_description": "Array",
   "_size": 1,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -643,12 +608,10 @@ EXPRESSION: [[null]]
     "_size": 1,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "array",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -657,7 +620,6 @@ EXPRESSION: [[null]]
           "_size": 1,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "object",
               "_subtype": "null",
@@ -681,7 +643,6 @@ EXPRESSION: [[undefined]]
   "_description": "Array",
   "_size": 1,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -690,12 +651,10 @@ EXPRESSION: [[undefined]]
     "_size": 1,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "array",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -704,7 +663,6 @@ EXPRESSION: [[undefined]]
           "_size": 1,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "undefined",
               "_value": "undefined"
@@ -727,7 +685,6 @@ EXPRESSION: [{a:1}, {b:2}, {c:2}]
   "_description": "Array",
   "_size": 3,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -736,18 +693,15 @@ EXPRESSION: [{a:1}, {b:2}, {c:2}]
     "_size": 3,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_description": "Object",
           "_lossless": true,
           "_overflow": false,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "a",
               "_type": "number",
               "_value": "1"
@@ -757,18 +711,15 @@ EXPRESSION: [{a:1}, {b:2}, {c:2}]
         }
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "object",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_description": "Object",
           "_lossless": true,
           "_overflow": false,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "b",
               "_type": "number",
               "_value": "2"
@@ -778,18 +729,15 @@ EXPRESSION: [{a:1}, {b:2}, {c:2}]
         }
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "object",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_description": "Object",
           "_lossless": true,
           "_overflow": false,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "c",
               "_type": "number",
               "_value": "2"
@@ -812,7 +760,6 @@ EXPRESSION: [[{a:1}, {b:2}, {c:2}]]
   "_description": "Array",
   "_size": 1,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -821,12 +768,10 @@ EXPRESSION: [[{a:1}, {b:2}, {c:2}]]
     "_size": 1,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "array",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -835,18 +780,15 @@ EXPRESSION: [[{a:1}, {b:2}, {c:2}]]
           "_size": 3,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "object",
               "_valuePreview": {
-                "_listeners": null,
                 "_type": "object",
                 "_description": "Object",
                 "_lossless": true,
                 "_overflow": false,
                 "_properties": [
                   {
-                    "_listeners": null,
                     "_name": "a",
                     "_type": "number",
                     "_value": "1"
@@ -856,18 +798,15 @@ EXPRESSION: [[{a:1}, {b:2}, {c:2}]]
               }
             },
             {
-              "_listeners": null,
               "_name": "1",
               "_type": "object",
               "_valuePreview": {
-                "_listeners": null,
                 "_type": "object",
                 "_description": "Object",
                 "_lossless": true,
                 "_overflow": false,
                 "_properties": [
                   {
-                    "_listeners": null,
                     "_name": "b",
                     "_type": "number",
                     "_value": "2"
@@ -877,18 +816,15 @@ EXPRESSION: [[{a:1}, {b:2}, {c:2}]]
               }
             },
             {
-              "_listeners": null,
               "_name": "2",
               "_type": "object",
               "_valuePreview": {
-                "_listeners": null,
                 "_type": "object",
                 "_description": "Object",
                 "_lossless": true,
                 "_overflow": false,
                 "_properties": [
                   {
-                    "_listeners": null,
                     "_name": "c",
                     "_type": "number",
                     "_value": "2"
@@ -915,7 +851,6 @@ EXPRESSION: arr = []; arr[0] = arr; arr
   "_description": "Array",
   "_size": 1,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -924,7 +859,6 @@ EXPRESSION: arr = []; arr[0] = arr; arr
     "_size": 1,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "array",
@@ -944,7 +878,6 @@ EXPRESSION: arr = []; arr.length = 100; arr
   "_description": "Array",
   "_size": 100,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -965,7 +898,6 @@ EXPRESSION: arr = []; arr.length = 100; arr.fill(1)
   "_description": "Array",
   "_size": 100,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -974,61 +906,51 @@ EXPRESSION: arr = []; arr.length = 100; arr.fill(1)
     "_size": 100,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "3",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "4",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "5",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "6",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "7",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "8",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "9",
         "_type": "number",
         "_value": "1"
@@ -1047,7 +969,6 @@ EXPRESSION: arr = []; arr.length = 100; arr[10] = 1; arr
   "_description": "Array",
   "_size": 100,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -1056,7 +977,6 @@ EXPRESSION: arr = []; arr.length = 100; arr[10] = 1; arr
     "_size": 100,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "10",
         "_type": "number",
         "_value": "1"
@@ -1075,7 +995,6 @@ EXPRESSION: a = null; (function() { a = arguments; })(1, '2', /3/); a
   "_description": "Arguments",
   "_size": 3,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Arguments",
@@ -1084,19 +1003,16 @@ EXPRESSION: a = null; (function() { a = arguments; })(1, '2', /3/); a
     "_size": 3,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "string",
         "_value": "2"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "object",
         "_subtype": "regexp",
@@ -1116,7 +1032,6 @@ EXPRESSION: new Int32Array(new ArrayBuffer(16))
   "_description": "Int32Array",
   "_size": 4,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Int32Array",
@@ -1125,25 +1040,21 @@ EXPRESSION: new Int32Array(new ArrayBuffer(16))
     "_size": 4,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "3",
         "_type": "number",
         "_value": "0"
@@ -1162,7 +1073,6 @@ EXPRESSION: var intArray = new Int32Array(new ArrayBuffer(16)); for (var i = 0;
   "_description": "Int32Array",
   "_size": 4,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Int32Array",
@@ -1171,25 +1081,21 @@ EXPRESSION: var intArray = new Int32Array(new ArrayBuffer(16)); for (var i = 0;
     "_size": 4,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "number",
         "_value": "2"
       },
       {
-        "_listeners": null,
         "_name": "3",
         "_type": "number",
         "_value": "3"
@@ -1208,7 +1114,6 @@ EXPRESSION: var buffer = new ArrayBuffer(10000000); var int8View = new Int8Array
   "_description": "Int8Array",
   "_size": 10000000,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Int8Array",
@@ -1217,61 +1122,51 @@ EXPRESSION: var buffer = new ArrayBuffer(10000000); var int8View = new Int8Array
     "_size": 10000000,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "3",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "4",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "5",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "6",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "7",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "8",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "9",
         "_type": "number",
         "_value": "0"
@@ -1288,7 +1183,6 @@ EXPRESSION: ({})
   "_objectId": "<filtered>",
   "_description": "Object",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Object",
     "_lossless": true,
@@ -1305,14 +1199,12 @@ EXPRESSION: ({a: 1})
   "_objectId": "<filtered>",
   "_description": "Object",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Object",
     "_lossless": true,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "a",
         "_type": "number",
         "_value": "1"
@@ -1329,26 +1221,22 @@ EXPRESSION: ({a: 1, b: 0, c: -0})
   "_objectId": "<filtered>",
   "_description": "Object",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Object",
     "_lossless": true,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "a",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "b",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "c",
         "_type": "number",
         "_value": "-0"
@@ -1365,33 +1253,28 @@ EXPRESSION: ({a: 1, b: "string", c: /regex/, d: Symbol('sym')})
   "_objectId": "<filtered>",
   "_description": "Object",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Object",
     "_lossless": false,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "a",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "b",
         "_type": "string",
         "_value": "string"
       },
       {
-        "_listeners": null,
         "_name": "c",
         "_type": "object",
         "_subtype": "regexp",
         "_value": "/regex/"
       },
       {
-        "_listeners": null,
         "_name": "d",
         "_type": "symbol",
         "_value": "Symbol(sym)"
@@ -1408,20 +1291,17 @@ EXPRESSION: o = {a:1}; o.b = o; o
   "_objectId": "<filtered>",
   "_description": "Object",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Object",
     "_lossless": false,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "a",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "b",
         "_type": "object",
         "_value": "Object"
@@ -1438,31 +1318,26 @@ EXPRESSION: ({a:function a(){}, b:function b(){}, get getter(){}, set setter(v){
   "_objectId": "<filtered>",
   "_description": "Object",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Object",
     "_lossless": false,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "a",
         "_type": "function",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "b",
         "_type": "function",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "getter",
         "_type": "accessor"
       },
       {
-        "_listeners": null,
         "_name": "setter",
         "_type": "accessor"
       }
@@ -1478,7 +1353,6 @@ EXPRESSION: function Foo() {}; new Foo
   "_objectId": "<filtered>",
   "_description": "Foo",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Foo",
     "_lossless": true,
@@ -1495,7 +1369,6 @@ EXPRESSION: var Foo2 = function() {}; new Foo2
   "_objectId": "<filtered>",
   "_description": "Foo2",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Foo2",
     "_lossless": true,
@@ -1512,7 +1385,6 @@ EXPRESSION: var namespace = {}; namespace.Foo3 = function() {}; new namespace.Fo
   "_objectId": "<filtered>",
   "_description": "Foo3",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Foo3",
     "_lossless": true,
@@ -1529,26 +1401,22 @@ EXPRESSION: function Bar() { this._x = 5 }; Bar.prototype = {constructor: Bar, g
   "_objectId": "<filtered>",
   "_description": "Bar",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Bar",
     "_lossless": false,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "_x",
         "_type": "number",
         "_value": "5"
       },
       {
-        "_listeners": null,
         "_name": "constructor",
         "_type": "function",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "x",
         "_type": "accessor"
       }
@@ -1564,14 +1432,12 @@ EXPRESSION: function Bar2() { this._x = 5 }; Bar.prototype = {get x() {return th
   "_objectId": "<filtered>",
   "_description": "Bar2",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Bar2",
     "_lossless": true,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "_x",
         "_type": "number",
         "_value": "5"
@@ -1588,39 +1454,33 @@ EXPRESSION: window.loadEvent
   "_objectId": "<filtered>",
   "_description": "Event",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Event",
     "_lossless": false,
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "clipboardData",
         "_type": "undefined",
         "_value": "undefined"
       },
       {
-        "_listeners": null,
         "_name": "type",
         "_type": "string",
         "_value": "load"
       },
       {
-        "_listeners": null,
         "_name": "target",
         "_type": "object",
         "_subtype": "node",
         "_value": "#document"
       },
       {
-        "_listeners": null,
         "_name": "currentTarget",
         "_type": "object",
         "_value": "Window"
       },
       {
-        "_listeners": null,
         "_name": "eventPhase",
         "_type": "number",
         "_value": "2"
@@ -1637,14 +1497,12 @@ EXPRESSION: new ArrayBuffer(16)
   "_objectId": "<filtered>",
   "_description": "ArrayBuffer",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "ArrayBuffer",
     "_lossless": true,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "byteLength",
         "_type": "number",
         "_value": "16"
@@ -1661,26 +1519,22 @@ EXPRESSION: new DataView(new ArrayBuffer(16))
   "_objectId": "<filtered>",
   "_description": "DataView",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "DataView",
     "_lossless": false,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "byteOffset",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "byteLength",
         "_type": "number",
         "_value": "16"
       },
       {
-        "_listeners": null,
         "_name": "buffer",
         "_type": "object",
         "_value": "ArrayBuffer"
@@ -1697,38 +1551,32 @@ EXPRESSION: obj = {}; obj['prop'] = 1; obj[Symbol()] = 2; obj[Symbol('sym')] = 3
   "_objectId": "<filtered>",
   "_description": "Object",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Object",
     "_lossless": true,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "prop",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "Symbol()",
         "_type": "number",
         "_value": "2"
       },
       {
-        "_listeners": null,
         "_name": "Symbol(sym)",
         "_type": "number",
         "_value": "3"
       },
       {
-        "_listeners": null,
         "_name": "Symbol(sym)",
         "_type": "number",
         "_value": "4"
       },
       {
-        "_listeners": null,
         "_name": "Symbol(Symbol.iterator)",
         "_type": "symbol",
         "_value": "Symbol()"
@@ -1746,7 +1594,6 @@ EXPRESSION: document.body
   "_objectId": "<filtered>",
   "_description": "body",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "node",
     "_description": "body",
@@ -1754,31 +1601,26 @@ EXPRESSION: document.body
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "aLink",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "background",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "bgColor",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "link",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "text",
         "_type": "string",
         "_value": ""
@@ -1796,7 +1638,6 @@ EXPRESSION: div = document.createElement('div'); div.className = 'foo bar'; div
   "_objectId": "<filtered>",
   "_description": "div.foo.bar",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "node",
     "_description": "div.foo.bar",
@@ -1804,31 +1645,26 @@ EXPRESSION: div = document.createElement('div'); div.className = 'foo bar'; div
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "align",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "title",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "lang",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "translate",
         "_type": "boolean",
         "_value": "true"
       },
       {
-        "_listeners": null,
         "_name": "dir",
         "_type": "string",
         "_value": ""
@@ -1846,7 +1682,6 @@ EXPRESSION: span = document.createElement('span'); span.id = 'foo'; span
   "_objectId": "<filtered>",
   "_description": "span#foo",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "node",
     "_description": "span#foo",
@@ -1854,31 +1689,26 @@ EXPRESSION: span = document.createElement('span'); span.id = 'foo'; span
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "title",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "lang",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "translate",
         "_type": "boolean",
         "_value": "true"
       },
       {
-        "_listeners": null,
         "_name": "dir",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "tabIndex",
         "_type": "number",
         "_value": "-1"
@@ -1896,7 +1726,6 @@ EXPRESSION: input = document.createElement('input'); input.type = 'password'; in
   "_objectId": "<filtered>",
   "_description": "input",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "node",
     "_description": "input",
@@ -1904,31 +1733,26 @@ EXPRESSION: input = document.createElement('input'); input.type = 'password'; in
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "selectionStart",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "selectionEnd",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "selectionDirection",
         "_type": "string",
         "_value": "none"
       },
       {
-        "_listeners": null,
         "_name": "accept",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "alt",
         "_type": "string",
         "_value": ""
@@ -1946,7 +1770,6 @@ EXPRESSION: text = document.createTextNode('text content'); text
   "_objectId": "<filtered>",
   "_description": "#text",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "node",
     "_description": "#text",
@@ -1954,31 +1777,26 @@ EXPRESSION: text = document.createTextNode('text content'); text
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "wholeText",
         "_type": "string",
         "_value": "text content"
       },
       {
-        "_listeners": null,
         "_name": "splitText",
         "_type": "function",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "replaceWholeText",
         "_type": "function",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "data",
         "_type": "string",
         "_value": "text content"
       },
       {
-        "_listeners": null,
         "_name": "length",
         "_type": "number",
         "_value": "12"
@@ -1996,7 +1814,6 @@ EXPRESSION: comment = document.createComment('comment content'); comment
   "_objectId": "<filtered>",
   "_description": "#comment",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "node",
     "_description": "#comment",
@@ -2004,33 +1821,28 @@ EXPRESSION: comment = document.createComment('comment content'); comment
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "data",
         "_type": "string",
         "_value": "comment content"
       },
       {
-        "_listeners": null,
         "_name": "length",
         "_type": "number",
         "_value": "15"
       },
       {
-        "_listeners": null,
         "_name": "previousElementSibling",
         "_type": "object",
         "_subtype": "null",
         "_value": "null"
       },
       {
-        "_listeners": null,
         "_name": "nextElementSibling",
         "_type": "object",
         "_subtype": "null",
         "_value": "null"
       },
       {
-        "_listeners": null,
         "_name": "substringData",
         "_type": "function",
         "_value": ""
@@ -2048,7 +1860,6 @@ EXPRESSION: svgElement = document.createElementNS('http://www.w3.org/2000/svg',
   "_objectId": "<filtered>",
   "_description": "rect.test",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "node",
     "_description": "rect.test",
@@ -2056,31 +1867,26 @@ EXPRESSION: svgElement = document.createElementNS('http://www.w3.org/2000/svg',
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "x",
         "_type": "object",
         "_value": "SVGAnimatedLength"
       },
       {
-        "_listeners": null,
         "_name": "y",
         "_type": "object",
         "_value": "SVGAnimatedLength"
       },
       {
-        "_listeners": null,
         "_name": "width",
         "_type": "object",
         "_value": "SVGAnimatedLength"
       },
       {
-        "_listeners": null,
         "_name": "height",
         "_type": "object",
         "_value": "SVGAnimatedLength"
       },
       {
-        "_listeners": null,
         "_name": "rx",
         "_type": "object",
         "_value": "SVGAnimatedLength"
@@ -2099,7 +1905,6 @@ EXPRESSION: [document.body, div, span, input, text, comment, svgElement]
   "_description": "Array",
   "_size": 7,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -2108,49 +1913,42 @@ EXPRESSION: [document.body, div, span, input, text, comment, svgElement]
     "_size": 7,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "node",
         "_value": "<body>"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "object",
         "_subtype": "node",
         "_value": "<div class=\"foo bar\">"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "object",
         "_subtype": "node",
         "_value": "<span id=\"foo\">"
       },
       {
-        "_listeners": null,
         "_name": "3",
         "_type": "object",
         "_subtype": "node",
         "_value": "<input type=\"password\">"
       },
       {
-        "_listeners": null,
         "_name": "4",
         "_type": "object",
         "_subtype": "node",
         "_value": "#text \"text content\""
       },
       {
-        "_listeners": null,
         "_name": "5",
         "_type": "object",
         "_subtype": "node",
         "_value": "<!--comment content-->"
       },
       {
-        "_listeners": null,
         "_name": "6",
         "_type": "object",
         "_subtype": "node",
@@ -2170,7 +1968,6 @@ EXPRESSION: document.head.children
   "_description": "HTMLCollection",
   "_size": 3,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "HTMLCollection",
@@ -2179,21 +1976,18 @@ EXPRESSION: document.head.children
     "_size": 3,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "node",
         "_value": "<meta>"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "object",
         "_subtype": "node",
         "_value": "<script>"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "object",
         "_subtype": "node",
@@ -2213,7 +2007,6 @@ EXPRESSION: document.getElementsByClassName('my-test')
   "_description": "HTMLCollection",
   "_size": 3,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "HTMLCollection",
@@ -2222,21 +2015,18 @@ EXPRESSION: document.getElementsByClassName('my-test')
     "_size": 3,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "node",
         "_value": "<p class=\"my-test\">"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "object",
         "_subtype": "node",
         "_value": "<p class=\"my-test\">"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "object",
         "_subtype": "node",
@@ -2256,7 +2046,6 @@ EXPRESSION: document.querySelectorAll('.my-test')
   "_description": "NodeList",
   "_size": 3,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "NodeList",
@@ -2265,21 +2054,18 @@ EXPRESSION: document.querySelectorAll('.my-test')
     "_size": 3,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "node",
         "_value": "<p class=\"my-test\">"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "object",
         "_subtype": "node",
         "_value": "<p class=\"my-test\">"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "object",
         "_subtype": "node",
@@ -2298,7 +2084,6 @@ EXPRESSION: error = null; try { [].x.x; } catch (e) { error = e; }; error
   "_objectId": "<filtered>",
   "_description": "TypeError: undefined is not an object (evaluating '[].x.x')",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "error",
     "_description": "TypeError: undefined is not an object (evaluating '[].x.x')",
@@ -2306,25 +2091,21 @@ EXPRESSION: error = null; try { [].x.x; } catch (e) { error = e; }; error
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "message",
         "_type": "string",
         "_value": "undefined is not an object (evaluating '[].x.x')"
       },
       {
-        "_listeners": null,
         "_name": "line",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "column",
         "_type": "number",
         "_value": "25"
       },
       {
-        "_listeners": null,
         "_name": "stack",
         "_type": "string",
         "_value": "eval code\neval@[native code]\n_evaluateOn\n_evaluateAndWrap\nevaluate"
@@ -2342,7 +2123,6 @@ EXPRESSION: error = null; try { eval('if()'); } catch (e) { error = e; }; error
   "_objectId": "<filtered>",
   "_description": "SyntaxError: Unexpected token ')'",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "error",
     "_description": "SyntaxError: Unexpected token ')'",
@@ -2350,25 +2130,21 @@ EXPRESSION: error = null; try { eval('if()'); } catch (e) { error = e; }; error
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "message",
         "_type": "string",
         "_value": "Unexpected token ')'"
       },
       {
-        "_listeners": null,
         "_name": "line",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "column",
         "_type": "number",
         "_value": "25"
       },
       {
-        "_listeners": null,
         "_name": "stack",
         "_type": "string",
         "_value": "eval@[native code]\neval code\neval@[native code]\n_evaluateOn\n_evaluateAndWrap\nevaluate"
@@ -2386,7 +2162,6 @@ EXPRESSION: error = null; try { document.createTextNode('').splitText(100); } ca
   "_objectId": "<filtered>",
   "_description": "IndexSizeError (DOM Exception 1): The index is not in the allowed range.",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "error",
     "_description": "IndexSizeError (DOM Exception 1): The index is not in the allowed range.",
@@ -2394,31 +2169,26 @@ EXPRESSION: error = null; try { document.createTextNode('').splitText(100); } ca
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "code",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "name",
         "_type": "string",
         "_value": "IndexSizeError"
       },
       {
-        "_listeners": null,
         "_name": "message",
         "_type": "string",
         "_value": "IndexSizeError: DOM Exception 1"
       },
       {
-        "_listeners": null,
         "_name": "line",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "column",
         "_type": "number",
         "_value": "58"
@@ -2437,7 +2207,6 @@ EXPRESSION: new Map
   "_description": "Map",
   "_size": 0,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "map",
     "_description": "Map",
@@ -2458,7 +2227,6 @@ EXPRESSION: map = new Map; map.set(1, 2); map.set('key', 'value'); map
   "_description": "Map",
   "_size": 2,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "map",
     "_description": "Map",
@@ -2468,9 +2236,7 @@ EXPRESSION: map = new Map; map.set(1, 2); map.set('key', 'value'); map
     "_properties": [],
     "_entries": [
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "number",
           "_description": "1",
           "_lossless": true,
@@ -2479,7 +2245,6 @@ EXPRESSION: map = new Map; map.set(1, 2); map.set('key', 'value'); map
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "2",
           "_lossless": true,
@@ -2489,9 +2254,7 @@ EXPRESSION: map = new Map; map.set(1, 2); map.set('key', 'value'); map
         }
       },
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "string",
           "_description": "key",
           "_lossless": true,
@@ -2500,7 +2263,6 @@ EXPRESSION: map = new Map; map.set(1, 2); map.set('key', 'value'); map
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "value",
           "_lossless": true,
@@ -2522,7 +2284,6 @@ EXPRESSION: map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]);
   "_description": "Map",
   "_size": 2,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "map",
     "_description": "Map",
@@ -2532,16 +2293,13 @@ EXPRESSION: map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]);
     "_properties": [],
     "_entries": [
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "object",
           "_description": "Object",
           "_lossless": true,
           "_overflow": false,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "a",
               "_type": "number",
               "_value": "1"
@@ -2550,14 +2308,12 @@ EXPRESSION: map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]);
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_description": "Object",
           "_lossless": true,
           "_overflow": false,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "b",
               "_type": "number",
               "_value": "2"
@@ -2567,9 +2323,7 @@ EXPRESSION: map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]);
         }
       },
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "node",
           "_description": "body",
@@ -2577,31 +2331,26 @@ EXPRESSION: map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]);
           "_overflow": true,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "aLink",
               "_type": "string",
               "_value": ""
             },
             {
-              "_listeners": null,
               "_name": "background",
               "_type": "string",
               "_value": ""
             },
             {
-              "_listeners": null,
               "_name": "bgColor",
               "_type": "string",
               "_value": ""
             },
             {
-              "_listeners": null,
               "_name": "link",
               "_type": "string",
               "_value": ""
             },
             {
-              "_listeners": null,
               "_name": "text",
               "_type": "string",
               "_value": ""
@@ -2610,7 +2359,6 @@ EXPRESSION: map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]);
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -2619,13 +2367,11 @@ EXPRESSION: map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]);
           "_size": 2,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "1"
             },
             {
-              "_listeners": null,
               "_name": "1",
               "_type": "number",
               "_value": "2"
@@ -2647,7 +2393,6 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
   "_description": "Map",
   "_size": 101,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "map",
     "_description": "Map",
@@ -2657,9 +2402,7 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
     "_properties": [],
     "_entries": [
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "number",
           "_description": "0",
           "_lossless": true,
@@ -2668,7 +2411,6 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "0",
           "_lossless": true,
@@ -2678,9 +2420,7 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
         }
       },
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "number",
           "_description": "1",
           "_lossless": true,
@@ -2689,7 +2429,6 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "1",
           "_lossless": true,
@@ -2699,9 +2438,7 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
         }
       },
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "number",
           "_description": "2",
           "_lossless": true,
@@ -2710,7 +2447,6 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "2",
           "_lossless": true,
@@ -2720,9 +2456,7 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
         }
       },
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "number",
           "_description": "3",
           "_lossless": true,
@@ -2731,7 +2465,6 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "3",
           "_lossless": true,
@@ -2741,9 +2474,7 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
         }
       },
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "number",
           "_description": "4",
           "_lossless": true,
@@ -2752,7 +2483,6 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "4",
           "_lossless": true,
@@ -2774,7 +2504,6 @@ EXPRESSION: map = new Map; map.set(map, map); map
   "_description": "Map",
   "_size": 1,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "map",
     "_description": "Map",
@@ -2784,9 +2513,7 @@ EXPRESSION: map = new Map; map.set(map, map); map
     "_properties": [],
     "_entries": [
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "map",
           "_description": "Map",
@@ -2797,7 +2524,6 @@ EXPRESSION: map = new Map; map.set(map, map); map
           "_entries": []
         },
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "map",
           "_description": "Map",
@@ -2821,7 +2547,6 @@ EXPRESSION: map = new WeakMap; strongKey = {id:1}; map.set(strongKey, [1,2]); ma
   "_description": "WeakMap",
   "_size": 1,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "weakmap",
     "_description": "WeakMap",
@@ -2831,16 +2556,13 @@ EXPRESSION: map = new WeakMap; strongKey = {id:1}; map.set(strongKey, [1,2]); ma
     "_properties": [],
     "_entries": [
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "object",
           "_description": "Object",
           "_lossless": true,
           "_overflow": false,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "id",
               "_type": "number",
               "_value": "1"
@@ -2849,7 +2571,6 @@ EXPRESSION: map = new WeakMap; strongKey = {id:1}; map.set(strongKey, [1,2]); ma
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -2858,13 +2579,11 @@ EXPRESSION: map = new WeakMap; strongKey = {id:1}; map.set(strongKey, [1,2]); ma
           "_size": 2,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "1"
             },
             {
-              "_listeners": null,
               "_name": "1",
               "_type": "number",
               "_value": "2"
@@ -2886,7 +2605,6 @@ EXPRESSION: new Set
   "_description": "Set",
   "_size": 0,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "set",
     "_description": "Set",
@@ -2907,7 +2625,6 @@ EXPRESSION: set = new Set; set.add(1); set.add(2); set.add('key'); set
   "_description": "Set",
   "_size": 3,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "set",
     "_description": "Set",
@@ -2917,9 +2634,7 @@ EXPRESSION: set = new Set; set.add(1); set.add(2); set.add('key'); set
     "_properties": [],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "1",
           "_lossless": true,
@@ -2929,9 +2644,7 @@ EXPRESSION: set = new Set; set.add(1); set.add(2); set.add('key'); set
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "2",
           "_lossless": true,
@@ -2941,9 +2654,7 @@ EXPRESSION: set = new Set; set.add(1); set.add(2); set.add('key'); set
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "key",
           "_lossless": true,
@@ -2965,7 +2676,6 @@ EXPRESSION: set = new Set; set.add({a:1}); set.add(document.body); set.add([1,2]
   "_description": "Set",
   "_size": 3,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "set",
     "_description": "Set",
@@ -2975,16 +2685,13 @@ EXPRESSION: set = new Set; set.add({a:1}); set.add(document.body); set.add([1,2]
     "_properties": [],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_description": "Object",
           "_lossless": true,
           "_overflow": false,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "a",
               "_type": "number",
               "_value": "1"
@@ -2994,9 +2701,7 @@ EXPRESSION: set = new Set; set.add({a:1}); set.add(document.body); set.add([1,2]
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "node",
           "_description": "body",
@@ -3004,31 +2709,26 @@ EXPRESSION: set = new Set; set.add({a:1}); set.add(document.body); set.add([1,2]
           "_overflow": true,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "aLink",
               "_type": "string",
               "_value": ""
             },
             {
-              "_listeners": null,
               "_name": "background",
               "_type": "string",
               "_value": ""
             },
             {
-              "_listeners": null,
               "_name": "bgColor",
               "_type": "string",
               "_value": ""
             },
             {
-              "_listeners": null,
               "_name": "link",
               "_type": "string",
               "_value": ""
             },
             {
-              "_listeners": null,
               "_name": "text",
               "_type": "string",
               "_value": ""
@@ -3038,9 +2738,7 @@ EXPRESSION: set = new Set; set.add({a:1}); set.add(document.body); set.add([1,2]
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -3049,13 +2747,11 @@ EXPRESSION: set = new Set; set.add({a:1}); set.add(document.body); set.add([1,2]
           "_size": 2,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "1"
             },
             {
-              "_listeners": null,
               "_name": "1",
               "_type": "number",
               "_value": "2"
@@ -3077,7 +2773,6 @@ EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set
   "_description": "Set",
   "_size": 101,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "set",
     "_description": "Set",
@@ -3087,9 +2782,7 @@ EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set
     "_properties": [],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "0",
           "_lossless": true,
@@ -3099,9 +2792,7 @@ EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "1",
           "_lossless": true,
@@ -3111,9 +2802,7 @@ EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "2",
           "_lossless": true,
@@ -3123,9 +2812,7 @@ EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "3",
           "_lossless": true,
@@ -3135,9 +2822,7 @@ EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "4",
           "_lossless": true,
@@ -3159,7 +2844,6 @@ EXPRESSION: set = new Set; set.add(set); set
   "_description": "Set",
   "_size": 1,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "set",
     "_description": "Set",
@@ -3169,9 +2853,7 @@ EXPRESSION: set = new Set; set.add(set); set
     "_properties": [],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "set",
           "_description": "Set",
@@ -3195,7 +2877,6 @@ EXPRESSION: set = new WeakSet; strongKey = {id:1}; set.add(strongKey); set
   "_description": "WeakSet",
   "_size": 1,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "weakset",
     "_description": "WeakSet",
@@ -3205,16 +2886,13 @@ EXPRESSION: set = new WeakSet; strongKey = {id:1}; set.add(strongKey); set
     "_properties": [],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_description": "Object",
           "_lossless": true,
           "_overflow": false,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "id",
               "_type": "number",
               "_value": "1"
@@ -3235,7 +2913,6 @@ EXPRESSION: 'a'[Symbol.iterator]()
   "_objectId": "<filtered>",
   "_description": "String Iterator",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "iterator",
     "_description": "String Iterator",
@@ -3243,7 +2920,6 @@ EXPRESSION: 'a'[Symbol.iterator]()
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "string",
         "_type": "string",
         "_value": "a",
@@ -3252,9 +2928,7 @@ EXPRESSION: 'a'[Symbol.iterator]()
     ],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "a",
           "_lossless": true,
@@ -3275,7 +2949,6 @@ EXPRESSION: 'long string'[Symbol.iterator]()
   "_objectId": "<filtered>",
   "_description": "String Iterator",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "iterator",
     "_description": "String Iterator",
@@ -3283,7 +2956,6 @@ EXPRESSION: 'long string'[Symbol.iterator]()
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "string",
         "_type": "string",
         "_value": "long string",
@@ -3292,9 +2964,7 @@ EXPRESSION: 'long string'[Symbol.iterator]()
     ],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "l",
           "_lossless": true,
@@ -3304,9 +2974,7 @@ EXPRESSION: 'long string'[Symbol.iterator]()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "o",
           "_lossless": true,
@@ -3316,9 +2984,7 @@ EXPRESSION: 'long string'[Symbol.iterator]()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "n",
           "_lossless": true,
@@ -3328,9 +2994,7 @@ EXPRESSION: 'long string'[Symbol.iterator]()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "g",
           "_lossless": true,
@@ -3340,9 +3004,7 @@ EXPRESSION: 'long string'[Symbol.iterator]()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": " ",
           "_lossless": true,
@@ -3363,7 +3025,6 @@ EXPRESSION: [][Symbol.iterator]()
   "_objectId": "<filtered>",
   "_description": "Array Iterator",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "iterator",
     "_description": "Array Iterator",
@@ -3371,12 +3032,10 @@ EXPRESSION: [][Symbol.iterator]()
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "array",
         "_type": "object",
         "_subtype": "array",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -3389,7 +3048,6 @@ EXPRESSION: [][Symbol.iterator]()
         "_internal": true
       },
       {
-        "_listeners": null,
         "_name": "kind",
         "_type": "string",
         "_value": "value",
@@ -3408,7 +3066,6 @@ EXPRESSION: [1][Symbol.iterator]()
   "_objectId": "<filtered>",
   "_description": "Array Iterator",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "iterator",
     "_description": "Array Iterator",
@@ -3416,12 +3073,10 @@ EXPRESSION: [1][Symbol.iterator]()
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "array",
         "_type": "object",
         "_subtype": "array",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -3430,7 +3085,6 @@ EXPRESSION: [1][Symbol.iterator]()
           "_size": 1,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "1"
@@ -3441,7 +3095,6 @@ EXPRESSION: [1][Symbol.iterator]()
         "_internal": true
       },
       {
-        "_listeners": null,
         "_name": "kind",
         "_type": "string",
         "_value": "value",
@@ -3450,9 +3103,7 @@ EXPRESSION: [1][Symbol.iterator]()
     ],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "1",
           "_lossless": true,
@@ -3473,7 +3124,6 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'][Symbol.iterator]()
   "_objectId": "<filtered>",
   "_description": "Array Iterator",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "iterator",
     "_description": "Array Iterator",
@@ -3481,7 +3131,6 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'][Symbol.iterator]()
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "array",
         "_type": "object",
         "_subtype": "array",
@@ -3489,7 +3138,6 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'][Symbol.iterator]()
         "_internal": true
       },
       {
-        "_listeners": null,
         "_name": "kind",
         "_type": "string",
         "_value": "value",
@@ -3498,9 +3146,7 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'][Symbol.iterator]()
     ],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "1",
           "_lossless": true,
@@ -3510,9 +3156,7 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'][Symbol.iterator]()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "two",
           "_lossless": true,
@@ -3522,9 +3166,7 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'][Symbol.iterator]()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "3",
           "_lossless": true,
@@ -3534,9 +3176,7 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'][Symbol.iterator]()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "four",
           "_lossless": true,
@@ -3546,9 +3186,7 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'][Symbol.iterator]()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "5",
           "_lossless": true,
@@ -3569,7 +3207,6 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].keys()
   "_objectId": "<filtered>",
   "_description": "Array Iterator",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "iterator",
     "_description": "Array Iterator",
@@ -3577,7 +3214,6 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].keys()
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "array",
         "_type": "object",
         "_subtype": "array",
@@ -3585,7 +3221,6 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].keys()
         "_internal": true
       },
       {
-        "_listeners": null,
         "_name": "kind",
         "_type": "string",
         "_value": "key",
@@ -3594,9 +3229,7 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].keys()
     ],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "0",
           "_lossless": true,
@@ -3606,9 +3239,7 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].keys()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "1",
           "_lossless": true,
@@ -3618,9 +3249,7 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].keys()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "2",
           "_lossless": true,
@@ -3630,9 +3259,7 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].keys()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "3",
           "_lossless": true,
@@ -3642,9 +3269,7 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].keys()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "4",
           "_lossless": true,
@@ -3665,7 +3290,6 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].entries()
   "_objectId": "<filtered>",
   "_description": "Array Iterator",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "iterator",
     "_description": "Array Iterator",
@@ -3673,7 +3297,6 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].entries()
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "array",
         "_type": "object",
         "_subtype": "array",
@@ -3681,7 +3304,6 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].entries()
         "_internal": true
       },
       {
-        "_listeners": null,
         "_name": "kind",
         "_type": "string",
         "_value": "key+value",
@@ -3690,9 +3312,7 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].entries()
     ],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -3701,13 +3321,11 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].entries()
           "_size": 2,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "0"
             },
             {
-              "_listeners": null,
               "_name": "1",
               "_type": "number",
               "_value": "1"
@@ -3717,9 +3335,7 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].entries()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -3728,13 +3344,11 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].entries()
           "_size": 2,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "1"
             },
             {
-              "_listeners": null,
               "_name": "1",
               "_type": "string",
               "_value": "two"
@@ -3744,9 +3358,7 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].entries()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -3755,13 +3367,11 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].entries()
           "_size": 2,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "2"
             },
             {
-              "_listeners": null,
               "_name": "1",
               "_type": "number",
               "_value": "3"
@@ -3771,9 +3381,7 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].entries()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -3782,13 +3390,11 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].entries()
           "_size": 2,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "3"
             },
             {
-              "_listeners": null,
               "_name": "1",
               "_type": "string",
               "_value": "four"
@@ -3798,9 +3404,7 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].entries()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -3809,13 +3413,11 @@ EXPRESSION: [1, 'two', 3, 'four', 5, 'size'].entries()
           "_size": 2,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "4"
             },
             {
-              "_listeners": null,
               "_name": "1",
               "_type": "number",
               "_value": "5"
@@ -3836,7 +3438,6 @@ EXPRESSION: map = new Map; map.set(1, 2); map.set('key', 'value'); map.values()
   "_objectId": "<filtered>",
   "_description": "Map Iterator",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "iterator",
     "_description": "Map Iterator",
@@ -3844,7 +3445,6 @@ EXPRESSION: map = new Map; map.set(1, 2); map.set('key', 'value'); map.values()
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "map",
         "_type": "object",
         "_subtype": "map",
@@ -3852,7 +3452,6 @@ EXPRESSION: map = new Map; map.set(1, 2); map.set('key', 'value'); map.values()
         "_internal": true
       },
       {
-        "_listeners": null,
         "_name": "kind",
         "_type": "string",
         "_value": "value",
@@ -3861,9 +3460,7 @@ EXPRESSION: map = new Map; map.set(1, 2); map.set('key', 'value'); map.values()
     ],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "2",
           "_lossless": true,
@@ -3873,9 +3470,7 @@ EXPRESSION: map = new Map; map.set(1, 2); map.set('key', 'value'); map.values()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "value",
           "_lossless": true,
@@ -3896,7 +3491,6 @@ EXPRESSION: map.keys()
   "_objectId": "<filtered>",
   "_description": "Map Iterator",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "iterator",
     "_description": "Map Iterator",
@@ -3904,7 +3498,6 @@ EXPRESSION: map.keys()
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "map",
         "_type": "object",
         "_subtype": "map",
@@ -3912,7 +3505,6 @@ EXPRESSION: map.keys()
         "_internal": true
       },
       {
-        "_listeners": null,
         "_name": "kind",
         "_type": "string",
         "_value": "key",
@@ -3921,9 +3513,7 @@ EXPRESSION: map.keys()
     ],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "1",
           "_lossless": true,
@@ -3933,9 +3523,7 @@ EXPRESSION: map.keys()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "key",
           "_lossless": true,
@@ -3956,7 +3544,6 @@ EXPRESSION: map.entries()
   "_objectId": "<filtered>",
   "_description": "Map Iterator",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "iterator",
     "_description": "Map Iterator",
@@ -3964,7 +3551,6 @@ EXPRESSION: map.entries()
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "map",
         "_type": "object",
         "_subtype": "map",
@@ -3972,7 +3558,6 @@ EXPRESSION: map.entries()
         "_internal": true
       },
       {
-        "_listeners": null,
         "_name": "kind",
         "_type": "string",
         "_value": "key+value",
@@ -3981,9 +3566,7 @@ EXPRESSION: map.entries()
     ],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -3992,13 +3575,11 @@ EXPRESSION: map.entries()
           "_size": 2,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "1"
             },
             {
-              "_listeners": null,
               "_name": "1",
               "_type": "number",
               "_value": "2"
@@ -4008,9 +3589,7 @@ EXPRESSION: map.entries()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -4019,13 +3598,11 @@ EXPRESSION: map.entries()
           "_size": 2,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "string",
               "_value": "key"
             },
             {
-              "_listeners": null,
               "_name": "1",
               "_type": "string",
               "_value": "value"
@@ -4046,7 +3623,6 @@ EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set.values
   "_objectId": "<filtered>",
   "_description": "Set Iterator",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "iterator",
     "_description": "Set Iterator",
@@ -4054,7 +3630,6 @@ EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set.values
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "set",
         "_type": "object",
         "_subtype": "set",
@@ -4062,7 +3637,6 @@ EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set.values
         "_internal": true
       },
       {
-        "_listeners": null,
         "_name": "kind",
         "_type": "string",
         "_value": "value",
@@ -4071,9 +3645,7 @@ EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set.values
     ],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "0",
           "_lossless": true,
@@ -4083,9 +3655,7 @@ EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set.values
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "1",
           "_lossless": true,
@@ -4095,9 +3665,7 @@ EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set.values
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "2",
           "_lossless": true,
@@ -4107,9 +3675,7 @@ EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set.values
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "3",
           "_lossless": true,
@@ -4119,9 +3685,7 @@ EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set.values
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "4",
           "_lossless": true,
@@ -4142,7 +3706,6 @@ EXPRESSION: map.entries()
   "_objectId": "<filtered>",
   "_description": "Map Iterator",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "iterator",
     "_description": "Map Iterator",
@@ -4150,7 +3713,6 @@ EXPRESSION: map.entries()
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "map",
         "_type": "object",
         "_subtype": "map",
@@ -4158,7 +3720,6 @@ EXPRESSION: map.entries()
         "_internal": true
       },
       {
-        "_listeners": null,
         "_name": "kind",
         "_type": "string",
         "_value": "key+value",
@@ -4167,9 +3728,7 @@ EXPRESSION: map.entries()
     ],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -4178,13 +3737,11 @@ EXPRESSION: map.entries()
           "_size": 2,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "1"
             },
             {
-              "_listeners": null,
               "_name": "1",
               "_type": "number",
               "_value": "2"
@@ -4194,9 +3751,7 @@ EXPRESSION: map.entries()
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -4205,13 +3760,11 @@ EXPRESSION: map.entries()
           "_size": 2,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "string",
               "_value": "key"
             },
             {
-              "_listeners": null,
               "_name": "1",
               "_type": "string",
               "_value": "value"
@@ -4232,7 +3785,6 @@ EXPRESSION: x = undefined; (function() { x = arguments; })(1, 'two'); x[Symbol.i
   "_objectId": "<filtered>",
   "_description": "Array Iterator",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "iterator",
     "_description": "Array Iterator",
@@ -4240,12 +3792,10 @@ EXPRESSION: x = undefined; (function() { x = arguments; })(1, 'two'); x[Symbol.i
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "array",
         "_type": "object",
         "_subtype": "array",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Arguments",
@@ -4254,13 +3804,11 @@ EXPRESSION: x = undefined; (function() { x = arguments; })(1, 'two'); x[Symbol.i
           "_size": 2,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "1"
             },
             {
-              "_listeners": null,
               "_name": "1",
               "_type": "string",
               "_value": "two"
@@ -4271,7 +3819,6 @@ EXPRESSION: x = undefined; (function() { x = arguments; })(1, 'two'); x[Symbol.i
         "_internal": true
       },
       {
-        "_listeners": null,
         "_name": "kind",
         "_type": "string",
         "_value": "value",
@@ -4280,9 +3827,7 @@ EXPRESSION: x = undefined; (function() { x = arguments; })(1, 'two'); x[Symbol.i
     ],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "1",
           "_lossless": true,
@@ -4292,9 +3837,7 @@ EXPRESSION: x = undefined; (function() { x = arguments; })(1, 'two'); x[Symbol.i
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "two",
           "_lossless": true,
@@ -4315,7 +3858,6 @@ EXPRESSION: Reflect.enumerate({a:1, b:2, c:3})
   "_objectId": "<filtered>",
   "_description": "PropertyName Iterator",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "iterator",
     "_description": "PropertyName Iterator",
@@ -4323,30 +3865,25 @@ EXPRESSION: Reflect.enumerate({a:1, b:2, c:3})
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "object",
         "_type": "object",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_description": "Object",
           "_lossless": true,
           "_overflow": false,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "a",
               "_type": "number",
               "_value": "1"
             },
             {
-              "_listeners": null,
               "_name": "b",
               "_type": "number",
               "_value": "2"
             },
             {
-              "_listeners": null,
               "_name": "c",
               "_type": "number",
               "_value": "3"
@@ -4359,9 +3896,7 @@ EXPRESSION: Reflect.enumerate({a:1, b:2, c:3})
     ],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "a",
           "_lossless": true,
@@ -4371,9 +3906,7 @@ EXPRESSION: Reflect.enumerate({a:1, b:2, c:3})
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "b",
           "_lossless": true,
@@ -4383,9 +3916,7 @@ EXPRESSION: Reflect.enumerate({a:1, b:2, c:3})
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "c",
           "_lossless": true,
@@ -4406,7 +3937,6 @@ EXPRESSION: Reflect.enumerate([1, 2, 3, 4, 5, 6, 7])
   "_objectId": "<filtered>",
   "_description": "PropertyName Iterator",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "iterator",
     "_description": "PropertyName Iterator",
@@ -4414,7 +3944,6 @@ EXPRESSION: Reflect.enumerate([1, 2, 3, 4, 5, 6, 7])
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "object",
         "_type": "object",
         "_subtype": "array",
@@ -4424,9 +3953,7 @@ EXPRESSION: Reflect.enumerate([1, 2, 3, 4, 5, 6, 7])
     ],
     "_entries": [
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "0",
           "_lossless": true,
@@ -4436,9 +3963,7 @@ EXPRESSION: Reflect.enumerate([1, 2, 3, 4, 5, 6, 7])
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "1",
           "_lossless": true,
@@ -4448,9 +3973,7 @@ EXPRESSION: Reflect.enumerate([1, 2, 3, 4, 5, 6, 7])
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "2",
           "_lossless": true,
@@ -4460,9 +3983,7 @@ EXPRESSION: Reflect.enumerate([1, 2, 3, 4, 5, 6, 7])
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "3",
           "_lossless": true,
@@ -4472,9 +3993,7 @@ EXPRESSION: Reflect.enumerate([1, 2, 3, 4, 5, 6, 7])
         }
       },
       {
-        "_listeners": null,
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "4",
           "_lossless": true,
@@ -4494,14 +4013,12 @@ EXPRESSION: new Promise(function(){})
   "_objectId": "<filtered>",
   "_description": "Promise",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Promise",
     "_lossless": true,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "status",
         "_type": "string",
         "_value": "pending",
@@ -4519,21 +4036,18 @@ EXPRESSION: Promise.reject()
   "_objectId": "<filtered>",
   "_description": "Promise",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Promise",
     "_lossless": true,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "status",
         "_type": "string",
         "_value": "rejected",
         "_internal": true
       },
       {
-        "_listeners": null,
         "_name": "result",
         "_type": "undefined",
         "_value": "undefined",
@@ -4551,21 +4065,18 @@ EXPRESSION: Promise.reject('result')
   "_objectId": "<filtered>",
   "_description": "Promise",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Promise",
     "_lossless": true,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "status",
         "_type": "string",
         "_value": "rejected",
         "_internal": true
       },
       {
-        "_listeners": null,
         "_name": "result",
         "_type": "string",
         "_value": "result",
@@ -4583,21 +4094,18 @@ EXPRESSION: Promise.resolve()
   "_objectId": "<filtered>",
   "_description": "Promise",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Promise",
     "_lossless": true,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "status",
         "_type": "string",
         "_value": "resolved",
         "_internal": true
       },
       {
-        "_listeners": null,
         "_name": "result",
         "_type": "undefined",
         "_value": "undefined",
@@ -4615,32 +4123,27 @@ EXPRESSION: Promise.resolve({result:1})
   "_objectId": "<filtered>",
   "_description": "Promise",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Promise",
     "_lossless": true,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "status",
         "_type": "string",
         "_value": "resolved",
         "_internal": true
       },
       {
-        "_listeners": null,
         "_name": "result",
         "_type": "object",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_description": "Object",
           "_lossless": true,
           "_overflow": false,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "result",
               "_type": "number",
               "_value": "1"
@@ -4663,7 +4166,6 @@ EXPRESSION: new Proxy({x:1, y:1}, {handler: true})
   "_objectId": "<filtered>",
   "_description": "Proxy",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "proxy",
     "_description": "Proxy",
@@ -4671,13 +4173,11 @@ EXPRESSION: new Proxy({x:1, y:1}, {handler: true})
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "x",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "y",
         "_type": "number",
         "_value": "1"
@@ -4695,7 +4195,6 @@ EXPRESSION: new Proxy(new Proxy({foo:1, bar:1}, {}), {})
   "_objectId": "<filtered>",
   "_description": "Proxy",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "proxy",
     "_description": "Proxy",
@@ -4703,13 +4202,11 @@ EXPRESSION: new Proxy(new Proxy({foo:1, bar:1}, {}), {})
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "foo",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "bar",
         "_type": "number",
         "_value": "1"
@@ -4766,7 +4263,6 @@ EXPRESSION: [Beta]
   "_description": "Array",
   "_size": 1,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -4775,7 +4271,6 @@ EXPRESSION: [Beta]
     "_size": 1,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "function",
         "_subtype": "class",
@@ -4793,7 +4288,6 @@ EXPRESSION: Object.seal({})
   "_objectId": "<filtered>",
   "_description": "Object",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Object",
     "_lossless": true,
@@ -4810,7 +4304,6 @@ EXPRESSION: Object.freeze({})
   "_objectId": "<filtered>",
   "_description": "Object",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Object",
     "_lossless": true,
index dbcd375..4d15462 100644 (file)
@@ -13,7 +13,6 @@ ENTRIES:
       "_type": "object",
       "_objectId": "<filtered>",
       "_description": "Object",
-      "_hasChildren": true,
       "_preview": {
         "_type": "object",
         "_description": "Object",
@@ -32,7 +31,6 @@ ENTRIES:
     "_value": {
       "_type": "number",
       "_description": "1",
-      "_hasChildren": false,
       "_value": 1
     }
   },
@@ -41,7 +39,6 @@ ENTRIES:
       "_type": "object",
       "_objectId": "<filtered>",
       "_description": "Object",
-      "_hasChildren": true,
       "_preview": {
         "_type": "object",
         "_description": "Object",
@@ -60,7 +57,6 @@ ENTRIES:
     "_value": {
       "_type": "number",
       "_description": "2",
-      "_hasChildren": false,
       "_value": 2
     }
   }
@@ -75,7 +71,6 @@ ENTRIES:
       "_type": "object",
       "_objectId": "<filtered>",
       "_description": "Object",
-      "_hasChildren": true,
       "_preview": {
         "_type": "object",
         "_description": "Object",
@@ -94,7 +89,6 @@ ENTRIES:
     "_value": {
       "_type": "number",
       "_description": "2",
-      "_hasChildren": false,
       "_value": 2
     }
   }
@@ -109,7 +103,6 @@ ENTRIES:
       "_type": "object",
       "_objectId": "<filtered>",
       "_description": "Object",
-      "_hasChildren": true,
       "_preview": {
         "_type": "object",
         "_description": "Object",
@@ -128,7 +121,6 @@ ENTRIES:
     "_value": {
       "_type": "number",
       "_description": "2",
-      "_hasChildren": false,
       "_value": 2
     }
   }
index 710755e..5e2fde1 100644 (file)
@@ -32,9 +32,10 @@ function test()
 
     function remoteObjectJSONFilter(key, value)
     {
-        if (key === "_objectId")
+        if (key === "_target" || key === "_hasChildren" || key === "_listeners")
+            return undefined;
+        if (key === "_objectId" || key === "_stackTrace")
             return "<filtered>";
-
         return value;
     }
 
index e5fed40..7aabd2b 100644 (file)
@@ -194,12 +194,10 @@ function test()
 
     function remoteObjectJSONFilter(key, value)
     {
-        if (key === "_objectId")
-            return "<filtered>";
-
-        if (key === "_hasChildren")
+        if (key === "_target" || key === "_hasChildren" || key === "_listeners")
             return undefined;
-
+        if (key === "_objectId" || key === "_stackTrace")
+            return "<filtered>";
         return value;
     }
 
index e1ba7a5..19ecf37 100644 (file)
@@ -1,11 +1,15 @@
 Test that RuntimeManager.evaluateInInspectedWindow respects the selected execution context.
 
 
-== Running test suite: RuntimeManager.defaultExecutionContextIdentifier
+== Running test suite: RuntimeManager.activeExecutionContext
 -- Running test case: InitialScriptExecutionContext
-PASS: The default execution context should be the top level execution context initially.
+PASS: The initial active execution context should be the main execution context.
 
--- Running test case: ScriptExecutionContextMainFrame
+-- Running test case: ScriptExecutionContextMainContext
+Passphrase in selected frame: coldwater
+PASS: The passphrase should match the phrase defined in the main frame.
+
+-- Running test case: ScriptExecutionContextMainFrameContext
 Passphrase in selected frame: coldwater
 PASS: The passphrase should match the phrase defined in the main frame.
 
@@ -21,5 +25,5 @@ PASS: The passphrase should match the phrase defined in the main frame.
 -- Running test case: ScriptExecutionContextRemoveSubframe
 PASS: The test page should only have one sub-frame.
 PASS: The test page should now have no sub-frames.
-PASS: When a selected non-top-level execution context is removed, the default execution context should revert to the top-level context.
+PASS: When a selected non-top-level execution context is removed, the active execution context should revert to the main frame context.
 
index 52faa2a..3960ad2 100644 (file)
@@ -3,29 +3,41 @@
 <head>
 <script src="../../http/tests/inspector/resources/inspector-test.js"></script>
 <script>
-
 var passphrase = "coldwater";
 
 function test()
 {
-    let suite = InspectorTest.createAsyncSuite("RuntimeManager.defaultExecutionContextIdentifier");
+    let suite = InspectorTest.createAsyncSuite("RuntimeManager.activeExecutionContext");
 
     suite.addTestCase({
         name: "InitialScriptExecutionContext",
-        description: "Test that the initial value of defaultExecutionContextIdentifier is the top-level context.",
-        test: (resolve, reject) => {
-            InspectorTest.expectThat(WebInspector.runtimeManager.defaultExecutionContextIdentifier === WebInspector.RuntimeManager.TopLevelExecutionContextIdentifier, "The default execution context should be the top level execution context initially.");
+        description: "Test that the initial value of activeExecutionContext is the main context.",
+        test(resolve, reject) {
+            InspectorTest.expectThat(WebInspector.runtimeManager.activeExecutionContext === WebInspector.mainTarget.executionContext, "The initial active execution context should be the main execution context.");
             resolve();
         }
     });
 
     suite.addTestCase({
-        name: "ScriptExecutionContextMainFrame",
-        description: "Test that evaluateInInspectedWindow works when defaultExecutionContextIdentifier is the top level context.",
-        test: (resolve, reject) => {
+        name: "ScriptExecutionContextMainContext",
+        description: "Test that evaluateInInspectedWindow works when activeExecutionContext is the main execution context.",
+        test(resolve, reject) {
+            WebInspector.runtimeManager.evaluateInInspectedWindow("passphrase", {objectGroup: "test"}, (remoteObject, wasThrown, savedResultIndex) => {
+                InspectorTest.log("Passphrase in selected frame: " + remoteObject.value);
+                InspectorTest.expectEqual(remoteObject.value, "coldwater", "The passphrase should match the phrase defined in the main frame.");
+                resolve();
+            });
+        }
+    });
+
+    suite.addTestCase({
+        name: "ScriptExecutionContextMainFrameContext",
+        description: "Test that evaluateInInspectedWindow works when activeExecutionContext is the main frame execution context. This is equivalent to the main context.",
+        test(resolve, reject) {
+            WebInspector.runtimeManager.activeExecutionContext = WebInspector.frameResourceManager.mainFrame.pageExecutionContext;
             WebInspector.runtimeManager.evaluateInInspectedWindow("passphrase", {objectGroup: "test"}, (remoteObject, wasThrown, savedResultIndex) => {
                 InspectorTest.log("Passphrase in selected frame: " + remoteObject.value);
-                InspectorTest.expectThat(remoteObject.value === "coldwater", "The passphrase should match the phrase defined in the main frame.");
+                InspectorTest.expectEqual(remoteObject.value, "coldwater", "The passphrase should match the phrase defined in the main frame.");
                 resolve();
             });
         }
@@ -33,16 +45,16 @@ function test()
 
     suite.addTestCase({
         name: "ScriptExecutionContextSubFrame",
-        description: "Test that evaluateInInspectedWindow works when defaultExecutionContextIdentifier is a subframe context.",
-        test: (resolve, reject) => {
+        description: "Test that evaluateInInspectedWindow works when activeExecutionContext is a subframe context.",
+        test(resolve, reject) {
             let mainFrame = WebInspector.frameResourceManager.mainFrame;
             let subframes = WebInspector.frameResourceManager.frames.filter((frame) => frame !== mainFrame);
-            InspectorTest.expectThat(subframes.length === 1, "The test page should only have one sub-frame.");
+            InspectorTest.expectEqual(subframes.length, 1, "The test page should only have one sub-frame.");
 
-            WebInspector.runtimeManager.defaultExecutionContextIdentifier = subframes[0].pageExecutionContext.id;
+            WebInspector.runtimeManager.activeExecutionContext = subframes[0].pageExecutionContext;
             WebInspector.runtimeManager.evaluateInInspectedWindow("passphrase", {objectGroup: "test"}, (remoteObject, wasThrown, savedResultIndex) => {
                 InspectorTest.log("Passphrase in selected frame: " + remoteObject.value);
-                InspectorTest.expectThat(remoteObject.value === "rosewater", "The passphrase should match the phrase defined in the subframe.");
+                InspectorTest.expectEqual(remoteObject.value, "rosewater", "The passphrase should match the phrase defined in the subframe.");
                 resolve();
             });
         }
@@ -50,14 +62,14 @@ function test()
 
     suite.addTestCase({
         name: "ScriptExecutionContextMainFrameAgain",
-        description: "Test that evaluateInInspectedWindow works when defaultExecutionContextIdentifier switches back to the main frame execution context.",
-        test: (resolve, reject) => {
+        description: "Test that evaluateInInspectedWindow works when activeExecutionContext switches back to the main frame execution context.",
+        test(resolve, reject) {
             let mainFrame = WebInspector.frameResourceManager.mainFrame;
 
-            WebInspector.runtimeManager.defaultExecutionContextIdentifier = mainFrame.pageExecutionContext.id;
+            WebInspector.runtimeManager.activeExecutionContext = mainFrame.pageExecutionContext;
             WebInspector.runtimeManager.evaluateInInspectedWindow("passphrase", {objectGroup: "test"}, (remoteObject, wasThrown, savedResultIndex) => {
                 InspectorTest.log("Passphrase in selected frame: " + remoteObject.value);
-                InspectorTest.expectThat(remoteObject.value === "coldwater", "The passphrase should match the phrase defined in the main frame.");
+                InspectorTest.expectEqual(remoteObject.value, "coldwater", "The passphrase should match the phrase defined in the main frame.");
                 resolve();
             });
         }
@@ -65,22 +77,22 @@ function test()
 
     suite.addTestCase({
         name: "ScriptExecutionContextRemoveSubframe",
-        description: "Test that evaluateInInspectedWindow works when the defaultExecutionContextIdentifier is destroyed and reverts to the top-level context.",
-        test: (resolve, reject) => {
+        description: "Test that evaluateInInspectedWindow works when the activeExecutionContext is destroyed and reverts to the top-level context.",
+        test(resolve, reject) {
             let mainFrame = WebInspector.frameResourceManager.mainFrame;
             let subframes = WebInspector.frameResourceManager.frames.filter((frame) => frame !== mainFrame);
-            InspectorTest.expectThat(subframes.length === 1, "The test page should only have one sub-frame.");
+            InspectorTest.expectEqual(subframes.length, 1, "The test page should only have one sub-frame.");
 
             // Set the execution context to the subframe so we can switch away from it when the frame is detached.
-            WebInspector.runtimeManager.defaultExecutionContextIdentifier = subframes[0].pageExecutionContext.id;
+            WebInspector.runtimeManager.activeExecutionContext = subframes[0].pageExecutionContext;
 
             // Force-override the contextId, otherwise we won't be able to access the iframe's DOM element when evaluating in the iframe execution context.
             let expression = `document.getElementById("subframe").remove();`;
             let objectGroup = "test";
             let contextId = WebInspector.RuntimeManager.TopLevelExecutionContextIdentifier;
             RuntimeAgent.evaluate.invoke({expression, objectGroup, contextId}, () => {
-                InspectorTest.expectThat(WebInspector.frameResourceManager.frames.length === 1, "The test page should now have no sub-frames.");
-                InspectorTest.expectThat(WebInspector.runtimeManager.defaultExecutionContextIdentifier === WebInspector.RuntimeManager.TopLevelExecutionContextIdentifier, "When a selected non-top-level execution context is removed, the default execution context should revert to the top-level context.");
+                InspectorTest.expectEqual(WebInspector.frameResourceManager.frames.length, 1, "The test page should now have no sub-frames.");
+                InspectorTest.expectEqual(WebInspector.runtimeManager.activeExecutionContext.id, WebInspector.RuntimeManager.TopLevelExecutionContextIdentifier, "When a selected non-top-level execution context is removed, the active execution context should revert to the main frame context.");
                 resolve();
             });
         }
diff --git a/LayoutTests/inspector/unit-tests/target-manager-expected.txt b/LayoutTests/inspector/unit-tests/target-manager-expected.txt
new file mode 100644 (file)
index 0000000..14de4fe
--- /dev/null
@@ -0,0 +1,23 @@
+Test for TargetManager and other global WebInspector.Target objects.
+
+
+== Running test suite: TargetManager
+-- Running test case: TargetManager.MainTarget
+PASS: Targets list should always start out with the main target.
+PASS: Target list should always contain the main target.
+PASS: Main target should have an ExecutionContext.
+PASS: Main target should have the global RuntimeAgent.
+Target - Main - Main Frame
+
+-- Running test case: TargetManager.WorkerTarget.Create
+PASS: Added Target should have Worker type.
+PASS: Added Target should have an ExecutionContext.
+PASS: Added Target should have a RuntimeAgent.
+PASS: Added Target RuntimeAgent should not be the global RuntimeAgent.
+Target - Main - Main Frame
+Target - Worker - worker-1.js
+
+-- Running test case: TargetManager.WorkerTarget.Remove
+PASS: Removed Target should have Worker type.
+Target - Main - Main Frame
+
diff --git a/LayoutTests/inspector/unit-tests/target-manager.html b/LayoutTests/inspector/unit-tests/target-manager.html
new file mode 100644 (file)
index 0000000..822800d
--- /dev/null
@@ -0,0 +1,91 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
+<script>
+let worker;
+
+function createWorker() {
+    worker = new Worker("../worker/resources/worker-1.js");
+}
+
+function terminateWorker() {
+    worker.terminate();
+}
+
+function test()
+{
+    function typeString(type) {
+        switch (type) {
+        case WebInspector.Target.Type.Main:
+            return "Main";
+        case WebInspector.Target.Type.Worker:
+            return "Worker";
+        default:
+            return "Unknown";
+        }
+    }
+
+    function dumpTargets() {
+        for (let target of WebInspector.targets)
+            InspectorTest.log(`Target - ${typeString(target.type)} - ${target.displayName}`);
+    }
+
+
+    let suite = InspectorTest.createAsyncSuite("TargetManager");
+
+    suite.addTestCase({
+        name: "TargetManager.MainTarget",
+        description: "We should always have the main target.",
+        test(resolve, reject) {
+            InspectorTest.assert(WebInspector.targets === WebInspector.targetManager.targets);
+            InspectorTest.expectEqual(WebInspector.targets.size, 1, "Targets list should always start out with the main target.");
+            InspectorTest.expectEqual([...WebInspector.targets][0], WebInspector.mainTarget, "Target list should always contain the main target.");
+            InspectorTest.expectNotNull(WebInspector.mainTarget.executionContext, "Main target should have an ExecutionContext.");
+            InspectorTest.expectEqual(WebInspector.mainTarget.RuntimeAgent, RuntimeAgent, "Main target should have the global RuntimeAgent.");
+            dumpTargets();
+            resolve();
+        }
+    });
+
+    suite.addTestCase({
+        name: "TargetManager.WorkerTarget.Create",
+        description: "Creating a Worker should create a new Worker Target.",
+        test(resolve, reject) {
+            InspectorTest.evaluateInPage("createWorker()");
+            WebInspector.targetManager.singleFireEventListener(WebInspector.TargetManager.Event.TargetAdded, (event) => {
+                let target = event.data.target;
+                InspectorTest.assert(target instanceof WebInspector.Target);
+                InspectorTest.expectEqual(target.type, WebInspector.Target.Type.Worker, "Added Target should have Worker type.");
+                InspectorTest.expectNotNull(target.executionContext, "Added Target should have an ExecutionContext.");
+                InspectorTest.expectNotNull(target.RuntimeAgent, "Added Target should have a RuntimeAgent.");
+                InspectorTest.expectNotEqual(target.RuntimeAgent, RuntimeAgent, "Added Target RuntimeAgent should not be the global RuntimeAgent.");
+                dumpTargets();
+                resolve();
+            });
+        }
+    });
+
+    suite.addTestCase({
+        name: "TargetManager.WorkerTarget.Remove",
+        description: "Creating a Worker should create a new Worker Target.",
+        test(resolve, reject) {
+            InspectorTest.evaluateInPage("terminateWorker()");
+            WebInspector.targetManager.singleFireEventListener(WebInspector.TargetManager.Event.TargetRemoved, (event) => {
+                let target = event.data.target;
+                InspectorTest.assert(target instanceof WebInspector.Target);
+                InspectorTest.expectEqual(target.type, WebInspector.Target.Type.Worker, "Removed Target should have Worker type.");
+                dumpTargets();
+                resolve();
+            });
+        }
+    });
+
+    suite.runTestCasesAndFinish();
+}
+</script>
+</head>
+<body onload="runTest()">
+<p>Test for TargetManager and other global WebInspector.Target objects.</p>
+</body>
+</html>
index a5efaeb..1148baf 100644 (file)
@@ -2,3 +2,5 @@ onmessage = function(event) {
     let echo = `Worker 1 Echo: ${event.data}`;
     postMessage(echo);
 }
+
+passphrase = "worker-passphrase";
diff --git a/LayoutTests/inspector/worker/runtime-basic-expected.txt b/LayoutTests/inspector/worker/runtime-basic-expected.txt
new file mode 100644 (file)
index 0000000..eb2ada7
--- /dev/null
@@ -0,0 +1,16 @@
+Test for RuntimeAgent in a Worker.
+
+
+== Running test suite: Worker.Runtime.basic
+-- Running test case: Main.Runtime.evaluate
+Target - Main Frame - passphrase - page-passphrase
+
+-- Running test case: Worker.Runtime.evaluate
+Target - worker-1.js - passphrase - worker-passphrase
+
+-- Running test case: Main.Runtime.RemoteObjectAndPropertyDescriptor.
+Target - Main Frame - location and href - Location: inspector/worker/runtime-basic.html
+
+-- Running test case: Worker.Runtime.RemoteObjectAndPropertyDescriptor.
+Target - worker-1.js - location and href - WorkerLocation: inspector/worker/resources/worker-1.js
+
diff --git a/LayoutTests/inspector/worker/runtime-basic.html b/LayoutTests/inspector/worker/runtime-basic.html
new file mode 100644 (file)
index 0000000..ecbc620
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
+<script>
+passphrase = "page-passphrase";
+let worker = new Worker("resources/worker-1.js");
+
+function test()
+{
+    function sanitizeURL(url) {
+        return url.replace(/^.*?LayoutTests\//, "");
+    }
+
+    let mainTarget = WebInspector.mainTarget;
+    let workerTarget = Array.from(WebInspector.targets).find((target) => target.type === WebInspector.Target.Type.Worker);
+    if (!workerTarget) {
+        InspectorTest.fail("Missing Worker Target");
+        InspectorTest.completeTest();
+        return;
+    }
+
+    let suite = InspectorTest.createAsyncSuite("Worker.Runtime.basic");
+
+    suite.addTestCase({
+        name: "Main.Runtime.evaluate",
+        description: "Main target evaluation.",
+        test(resolve, reject) {
+            mainTarget.RuntimeAgent.evaluate("passphrase").then((payload) => {
+                let remoteObject = WebInspector.RemoteObject.fromPayload(payload.result, mainTarget);
+                InspectorTest.log(`Target - ${mainTarget.displayName} - passphrase - ${remoteObject.description}`);
+                resolve();
+            }).catch(reject);
+        }
+    });
+
+    suite.addTestCase({
+        name: "Worker.Runtime.evaluate",
+        description: "Worker target evaluation.",
+        test(resolve, reject) {
+            workerTarget.RuntimeAgent.evaluate("passphrase").then((payload) => {
+                let remoteObject = WebInspector.RemoteObject.fromPayload(payload.result, workerTarget);
+                InspectorTest.log(`Target - ${workerTarget.displayName} - passphrase - ${remoteObject.description}`);
+                resolve();
+            }).catch(reject);
+        }
+    });
+
+    suite.addTestCase({
+        name: "Main.Runtime.RemoteObjectAndPropertyDescriptor.",
+        description: "Should be able to dig further into RemoteObjects.",
+        test(resolve, reject) {
+            mainTarget.RuntimeAgent.evaluate("location").then((payload) => {
+                let remoteObject = WebInspector.RemoteObject.fromPayload(payload.result, mainTarget);
+                remoteObject.getDisplayablePropertyDescriptors((propertyDescriptors) => {
+                    let hrefPropertyDescriptor = propertyDescriptors.find((p) => p.name === "href");
+                    let hrefValue = sanitizeURL(hrefPropertyDescriptor.value.description);
+                    InspectorTest.log(`Target - ${mainTarget.displayName} - location and href - ${remoteObject.description}: ${hrefValue}`);
+                    resolve();
+               });
+            });
+        }
+    });
+
+    suite.addTestCase({
+        name: "Worker.Runtime.RemoteObjectAndPropertyDescriptor.",
+        description: "Should be able to dig further into RemoteObjects.",
+        test(resolve, reject) {
+            workerTarget.RuntimeAgent.evaluate("location").then((payload) => {
+                let remoteObject = WebInspector.RemoteObject.fromPayload(payload.result, workerTarget);
+                remoteObject.getDisplayablePropertyDescriptors((propertyDescriptors) => {
+                    let hrefPropertyDescriptor = propertyDescriptors.find((p) => p.name === "href");
+                    let hrefValue = sanitizeURL(hrefPropertyDescriptor.value.description);
+                    InspectorTest.log(`Target - ${workerTarget.displayName} - location and href - ${remoteObject.description}: ${hrefValue}`);
+                    resolve();
+               });
+            });
+        }
+    });
+
+    suite.runTestCasesAndFinish();
+}
+</script>
+</head>
+<body onload="runTest()">
+<p>Test for RuntimeAgent in a Worker.</p>
+</body>
+</html>
index b15df22..1e94f92 100644 (file)
@@ -263,7 +263,6 @@ EXPRESSION: / /
   "_objectId": "<filtered>",
   "_description": "/ /",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "regexp",
     "_description": "/ /",
@@ -271,7 +270,6 @@ EXPRESSION: / /
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "lastIndex",
         "_type": "number",
         "_value": "0"
@@ -289,7 +287,6 @@ EXPRESSION: /(?:)/
   "_objectId": "<filtered>",
   "_description": "/(?:)/",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "regexp",
     "_description": "/(?:)/",
@@ -297,7 +294,6 @@ EXPRESSION: /(?:)/
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "lastIndex",
         "_type": "number",
         "_value": "0"
@@ -315,7 +311,6 @@ EXPRESSION: /^r(e)g[e]{1,}x+/
   "_objectId": "<filtered>",
   "_description": "/^r(e)g[e]{1,}x+/",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "regexp",
     "_description": "/^r(e)g[e]{1,}x+/",
@@ -323,7 +318,6 @@ EXPRESSION: /^r(e)g[e]{1,}x+/
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "lastIndex",
         "_type": "number",
         "_value": "0"
@@ -341,7 +335,6 @@ EXPRESSION: /^r(e)g[e]{1,}x+/ig
   "_objectId": "<filtered>",
   "_description": "/^r(e)g[e]{1,}x+/gi",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "regexp",
     "_description": "/^r(e)g[e]{1,}x+/gi",
@@ -349,7 +342,6 @@ EXPRESSION: /^r(e)g[e]{1,}x+/ig
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "lastIndex",
         "_type": "number",
         "_value": "0"
@@ -367,7 +359,6 @@ EXPRESSION: new RegExp('')
   "_objectId": "<filtered>",
   "_description": "/(?:)/",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "regexp",
     "_description": "/(?:)/",
@@ -375,7 +366,6 @@ EXPRESSION: new RegExp('')
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "lastIndex",
         "_type": "number",
         "_value": "0"
@@ -393,7 +383,6 @@ EXPRESSION: new RegExp('test', 'i')
   "_objectId": "<filtered>",
   "_description": "/test/i",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "regexp",
     "_description": "/test/i",
@@ -401,7 +390,6 @@ EXPRESSION: new RegExp('test', 'i')
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "lastIndex",
         "_type": "number",
         "_value": "0"
@@ -420,7 +408,6 @@ EXPRESSION: []
   "_description": "Array",
   "_size": 0,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -441,7 +428,6 @@ EXPRESSION: [0, -0, 1, 2]
   "_description": "Array",
   "_size": 4,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -450,25 +436,21 @@ EXPRESSION: [0, -0, 1, 2]
     "_size": 4,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "number",
         "_value": "-0"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "3",
         "_type": "number",
         "_value": "2"
@@ -487,7 +469,6 @@ EXPRESSION: [[1],[2],[3]]
   "_description": "Array",
   "_size": 3,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -496,12 +477,10 @@ EXPRESSION: [[1],[2],[3]]
     "_size": 3,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "array",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -510,7 +489,6 @@ EXPRESSION: [[1],[2],[3]]
           "_size": 1,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "1"
@@ -520,12 +498,10 @@ EXPRESSION: [[1],[2],[3]]
         }
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "object",
         "_subtype": "array",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -534,7 +510,6 @@ EXPRESSION: [[1],[2],[3]]
           "_size": 1,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "2"
@@ -544,12 +519,10 @@ EXPRESSION: [[1],[2],[3]]
         }
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "object",
         "_subtype": "array",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -558,7 +531,6 @@ EXPRESSION: [[1],[2],[3]]
           "_size": 1,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "3"
@@ -581,7 +553,6 @@ EXPRESSION: [true, 1, 1.234, 'string', /regex/]
   "_description": "Array",
   "_size": 5,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -590,31 +561,26 @@ EXPRESSION: [true, 1, 1.234, 'string', /regex/]
     "_size": 5,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "boolean",
         "_value": "true"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "number",
         "_value": "1.234"
       },
       {
-        "_listeners": null,
         "_name": "3",
         "_type": "string",
         "_value": "string"
       },
       {
-        "_listeners": null,
         "_name": "4",
         "_type": "object",
         "_subtype": "regexp",
@@ -634,7 +600,6 @@ EXPRESSION: [[null]]
   "_description": "Array",
   "_size": 1,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -643,12 +608,10 @@ EXPRESSION: [[null]]
     "_size": 1,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "array",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -657,7 +620,6 @@ EXPRESSION: [[null]]
           "_size": 1,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "object",
               "_subtype": "null",
@@ -681,7 +643,6 @@ EXPRESSION: [[undefined]]
   "_description": "Array",
   "_size": 1,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -690,12 +651,10 @@ EXPRESSION: [[undefined]]
     "_size": 1,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "array",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -704,7 +663,6 @@ EXPRESSION: [[undefined]]
           "_size": 1,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "undefined",
               "_value": "undefined"
@@ -727,7 +685,6 @@ EXPRESSION: [{a:1}, {b:2}, {c:2}]
   "_description": "Array",
   "_size": 3,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -736,18 +693,15 @@ EXPRESSION: [{a:1}, {b:2}, {c:2}]
     "_size": 3,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_description": "Object",
           "_lossless": true,
           "_overflow": false,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "a",
               "_type": "number",
               "_value": "1"
@@ -757,18 +711,15 @@ EXPRESSION: [{a:1}, {b:2}, {c:2}]
         }
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "object",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_description": "Object",
           "_lossless": true,
           "_overflow": false,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "b",
               "_type": "number",
               "_value": "2"
@@ -778,18 +729,15 @@ EXPRESSION: [{a:1}, {b:2}, {c:2}]
         }
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "object",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_description": "Object",
           "_lossless": true,
           "_overflow": false,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "c",
               "_type": "number",
               "_value": "2"
@@ -812,7 +760,6 @@ EXPRESSION: [[{a:1}, {b:2}, {c:2}]]
   "_description": "Array",
   "_size": 1,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -821,12 +768,10 @@ EXPRESSION: [[{a:1}, {b:2}, {c:2}]]
     "_size": 1,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "array",
         "_valuePreview": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -835,18 +780,15 @@ EXPRESSION: [[{a:1}, {b:2}, {c:2}]]
           "_size": 3,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "object",
               "_valuePreview": {
-                "_listeners": null,
                 "_type": "object",
                 "_description": "Object",
                 "_lossless": true,
                 "_overflow": false,
                 "_properties": [
                   {
-                    "_listeners": null,
                     "_name": "a",
                     "_type": "number",
                     "_value": "1"
@@ -856,18 +798,15 @@ EXPRESSION: [[{a:1}, {b:2}, {c:2}]]
               }
             },
             {
-              "_listeners": null,
               "_name": "1",
               "_type": "object",
               "_valuePreview": {
-                "_listeners": null,
                 "_type": "object",
                 "_description": "Object",
                 "_lossless": true,
                 "_overflow": false,
                 "_properties": [
                   {
-                    "_listeners": null,
                     "_name": "b",
                     "_type": "number",
                     "_value": "2"
@@ -877,18 +816,15 @@ EXPRESSION: [[{a:1}, {b:2}, {c:2}]]
               }
             },
             {
-              "_listeners": null,
               "_name": "2",
               "_type": "object",
               "_valuePreview": {
-                "_listeners": null,
                 "_type": "object",
                 "_description": "Object",
                 "_lossless": true,
                 "_overflow": false,
                 "_properties": [
                   {
-                    "_listeners": null,
                     "_name": "c",
                     "_type": "number",
                     "_value": "2"
@@ -915,7 +851,6 @@ EXPRESSION: arr = []; arr[0] = arr; arr
   "_description": "Array",
   "_size": 1,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -924,7 +859,6 @@ EXPRESSION: arr = []; arr[0] = arr; arr
     "_size": 1,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "array",
@@ -944,7 +878,6 @@ EXPRESSION: arr = []; arr.length = 100; arr
   "_description": "Array",
   "_size": 100,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -965,7 +898,6 @@ EXPRESSION: arr = []; arr.length = 100; arr.fill(1)
   "_description": "Array",
   "_size": 100,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -974,61 +906,51 @@ EXPRESSION: arr = []; arr.length = 100; arr.fill(1)
     "_size": 100,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "3",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "4",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "5",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "6",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "7",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "8",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "9",
         "_type": "number",
         "_value": "1"
@@ -1047,7 +969,6 @@ EXPRESSION: arr = []; arr.length = 100; arr[10] = 1; arr
   "_description": "Array",
   "_size": 100,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -1056,7 +977,6 @@ EXPRESSION: arr = []; arr.length = 100; arr[10] = 1; arr
     "_size": 100,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "10",
         "_type": "number",
         "_value": "1"
@@ -1075,7 +995,6 @@ EXPRESSION: a = null; (function() { a = arguments; })(1, '2', /3/); a
   "_description": "Arguments",
   "_size": 3,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Arguments",
@@ -1084,19 +1003,16 @@ EXPRESSION: a = null; (function() { a = arguments; })(1, '2', /3/); a
     "_size": 3,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "string",
         "_value": "2"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "object",
         "_subtype": "regexp",
@@ -1116,7 +1032,6 @@ EXPRESSION: new Int32Array(new ArrayBuffer(16))
   "_description": "Int32Array",
   "_size": 4,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Int32Array",
@@ -1125,25 +1040,21 @@ EXPRESSION: new Int32Array(new ArrayBuffer(16))
     "_size": 4,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "3",
         "_type": "number",
         "_value": "0"
@@ -1162,7 +1073,6 @@ EXPRESSION: var intArray = new Int32Array(new ArrayBuffer(16)); for (var i = 0;
   "_description": "Int32Array",
   "_size": 4,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Int32Array",
@@ -1171,25 +1081,21 @@ EXPRESSION: var intArray = new Int32Array(new ArrayBuffer(16)); for (var i = 0;
     "_size": 4,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "number",
         "_value": "2"
       },
       {
-        "_listeners": null,
         "_name": "3",
         "_type": "number",
         "_value": "3"
@@ -1208,7 +1114,6 @@ EXPRESSION: var buffer = new ArrayBuffer(10000000); var int8View = new Int8Array
   "_description": "Int8Array",
   "_size": 10000000,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Int8Array",
@@ -1217,61 +1122,51 @@ EXPRESSION: var buffer = new ArrayBuffer(10000000); var int8View = new Int8Array
     "_size": 10000000,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "3",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "4",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "5",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "6",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "7",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "8",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "9",
         "_type": "number",
         "_value": "0"
@@ -1288,7 +1183,6 @@ EXPRESSION: ({})
   "_objectId": "<filtered>",
   "_description": "Object",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Object",
     "_lossless": true,
@@ -1305,14 +1199,12 @@ EXPRESSION: ({a: 1})
   "_objectId": "<filtered>",
   "_description": "Object",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Object",
     "_lossless": true,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "a",
         "_type": "number",
         "_value": "1"
@@ -1329,26 +1221,22 @@ EXPRESSION: ({a: 1, b: 0, c: -0})
   "_objectId": "<filtered>",
   "_description": "Object",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Object",
     "_lossless": true,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "a",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "b",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "c",
         "_type": "number",
         "_value": "-0"
@@ -1365,33 +1253,28 @@ EXPRESSION: ({a: 1, b: "string", c: /regex/, d: Symbol('sym')})
   "_objectId": "<filtered>",
   "_description": "Object",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Object",
     "_lossless": false,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "a",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "b",
         "_type": "string",
         "_value": "string"
       },
       {
-        "_listeners": null,
         "_name": "c",
         "_type": "object",
         "_subtype": "regexp",
         "_value": "/regex/"
       },
       {
-        "_listeners": null,
         "_name": "d",
         "_type": "symbol",
         "_value": "Symbol(sym)"
@@ -1408,20 +1291,17 @@ EXPRESSION: o = {a:1}; o.b = o; o
   "_objectId": "<filtered>",
   "_description": "Object",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Object",
     "_lossless": false,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "a",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "b",
         "_type": "object",
         "_value": "Object"
@@ -1438,31 +1318,26 @@ EXPRESSION: ({a:function a(){}, b:function b(){}, get getter(){}, set setter(v){
   "_objectId": "<filtered>",
   "_description": "Object",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Object",
     "_lossless": false,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "a",
         "_type": "function",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "b",
         "_type": "function",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "getter",
         "_type": "accessor"
       },
       {
-        "_listeners": null,
         "_name": "setter",
         "_type": "accessor"
       }
@@ -1478,7 +1353,6 @@ EXPRESSION: function Foo() {}; new Foo
   "_objectId": "<filtered>",
   "_description": "Foo",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Foo",
     "_lossless": false,
@@ -1495,7 +1369,6 @@ EXPRESSION: var Foo2 = function() {}; new Foo2
   "_objectId": "<filtered>",
   "_description": "Foo2",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Foo2",
     "_lossless": false,
@@ -1512,7 +1385,6 @@ EXPRESSION: var namespace = {}; namespace.Foo3 = function() {}; new namespace.Fo
   "_objectId": "<filtered>",
   "_description": "Foo3",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Foo3",
     "_lossless": false,
@@ -1529,26 +1401,22 @@ EXPRESSION: function Bar() { this._x = 5 }; Bar.prototype = {constructor: Bar, g
   "_objectId": "<filtered>",
   "_description": "Bar",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Bar",
     "_lossless": false,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "_x",
         "_type": "number",
         "_value": "5"
       },
       {
-        "_listeners": null,
         "_name": "constructor",
         "_type": "function",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "x",
         "_type": "accessor"
       }
@@ -1564,14 +1432,12 @@ EXPRESSION: function Bar2() { this._x = 5 }; Bar.prototype = {get x() {return th
   "_objectId": "<filtered>",
   "_description": "Bar2",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Bar2",
     "_lossless": false,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "_x",
         "_type": "number",
         "_value": "5"
@@ -1588,39 +1454,33 @@ EXPRESSION: window.loadEvent
   "_objectId": "<filtered>",
   "_description": "Event",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Event",
     "_lossless": false,
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "isTrusted",
         "_type": "boolean",
         "_value": "true"
       },
       {
-        "_listeners": null,
         "_name": "type",
         "_type": "string",
         "_value": "load"
       },
       {
-        "_listeners": null,
         "_name": "target",
         "_type": "object",
         "_subtype": "node",
         "_value": "#document"
       },
       {
-        "_listeners": null,
         "_name": "currentTarget",
         "_type": "object",
         "_value": "Window"
       },
       {
-        "_listeners": null,
         "_name": "eventPhase",
         "_type": "number",
         "_value": "2"
@@ -1637,14 +1497,12 @@ EXPRESSION: new ArrayBuffer(16)
   "_objectId": "<filtered>",
   "_description": "ArrayBuffer",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "ArrayBuffer",
     "_lossless": false,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "byteLength",
         "_type": "number",
         "_value": "16"
@@ -1661,26 +1519,22 @@ EXPRESSION: new DataView(new ArrayBuffer(16))
   "_objectId": "<filtered>",
   "_description": "DataView",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "DataView",
     "_lossless": false,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "byteOffset",
         "_type": "number",
         "_value": "0"
       },
       {
-        "_listeners": null,
         "_name": "byteLength",
         "_type": "number",
         "_value": "16"
       },
       {
-        "_listeners": null,
         "_name": "buffer",
         "_type": "object",
         "_value": "ArrayBuffer"
@@ -1697,38 +1551,32 @@ EXPRESSION: obj = {}; obj['prop'] = 1; obj[Symbol()] = 2; obj[Symbol('sym')] = 3
   "_objectId": "<filtered>",
   "_description": "Object",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_description": "Object",
     "_lossless": true,
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "prop",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "Symbol()",
         "_type": "number",
         "_value": "2"
       },
       {
-        "_listeners": null,
         "_name": "Symbol(sym)",
         "_type": "number",
         "_value": "3"
       },
       {
-        "_listeners": null,
         "_name": "Symbol(sym)",
         "_type": "number",
         "_value": "4"
       },
       {
-        "_listeners": null,
         "_name": "Symbol(Symbol.iterator)",
         "_type": "symbol",
         "_value": "Symbol()"
@@ -1746,7 +1594,6 @@ EXPRESSION: document.body
   "_objectId": "<filtered>",
   "_description": "<body>",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "node",
     "_description": "<body>",
@@ -1754,31 +1601,26 @@ EXPRESSION: document.body
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "aLink",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "background",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "bgColor",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "link",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "text",
         "_type": "string",
         "_value": ""
@@ -1796,7 +1638,6 @@ EXPRESSION: div = document.createElement('div'); div.className = 'foo bar'; div
   "_objectId": "<filtered>",
   "_description": "<div class=\"foo bar\">",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "node",
     "_description": "<div class=\"foo bar\">",
@@ -1804,31 +1645,26 @@ EXPRESSION: div = document.createElement('div'); div.className = 'foo bar'; div
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "align",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "title",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "lang",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "translate",
         "_type": "boolean",
         "_value": "true"
       },
       {
-        "_listeners": null,
         "_name": "dir",
         "_type": "string",
         "_value": ""
@@ -1846,7 +1682,6 @@ EXPRESSION: span = document.createElement('span'); span.id = 'foo'; span
   "_objectId": "<filtered>",
   "_description": "<span id=\"foo\">",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "node",
     "_description": "<span id=\"foo\">",
@@ -1854,31 +1689,26 @@ EXPRESSION: span = document.createElement('span'); span.id = 'foo'; span
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "title",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "lang",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "translate",
         "_type": "boolean",
         "_value": "true"
       },
       {
-        "_listeners": null,
         "_name": "dir",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "tabIndex",
         "_type": "number",
         "_value": "-1"
@@ -1896,7 +1726,6 @@ EXPRESSION: input = document.createElement('input'); input.type = 'password'; in
   "_objectId": "<filtered>",
   "_description": "<input type=\"password\">",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "node",
     "_description": "<input type=\"password\">",
@@ -1904,31 +1733,26 @@ EXPRESSION: input = document.createElement('input'); input.type = 'password'; in
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "accept",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "alt",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "autocomplete",
         "_type": "string",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "autofocus",
         "_type": "boolean",
         "_value": "false"
       },
       {
-        "_listeners": null,
         "_name": "defaultChecked",
         "_type": "boolean",
         "_value": "false"
@@ -1946,7 +1770,6 @@ EXPRESSION: text = document.createTextNode('text content'); text
   "_objectId": "<filtered>",
   "_description": "#text \"text content\"",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "node",
     "_description": "#text \"text content\"",
@@ -1954,32 +1777,27 @@ EXPRESSION: text = document.createTextNode('text content'); text
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "wholeText",
         "_type": "string",
         "_value": "text content"
       },
       {
-        "_listeners": null,
         "_name": "assignedSlot",
         "_type": "object",
         "_subtype": "null",
         "_value": "null"
       },
       {
-        "_listeners": null,
         "_name": "splitText",
         "_type": "function",
         "_value": ""
       },
       {
-        "_listeners": null,
         "_name": "data",
         "_type": "string",
         "_value": "text content"
       },
       {
-        "_listeners": null,
         "_name": "length",
         "_type": "number",
         "_value": "12"
@@ -1997,7 +1815,6 @@ EXPRESSION: comment = document.createComment('comment content'); comment
   "_objectId": "<filtered>",
   "_description": "<!--comment content-->",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "node",
     "_description": "<!--comment content-->",
@@ -2005,33 +1822,28 @@ EXPRESSION: comment = document.createComment('comment content'); comment
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "data",
         "_type": "string",
         "_value": "comment content"
       },
       {
-        "_listeners": null,
         "_name": "length",
         "_type": "number",
         "_value": "15"
       },
       {
-        "_listeners": null,
         "_name": "previousElementSibling",
         "_type": "object",
         "_subtype": "null",
         "_value": "null"
       },
       {
-        "_listeners": null,
         "_name": "nextElementSibling",
         "_type": "object",
         "_subtype": "null",
         "_value": "null"
       },
       {
-        "_listeners": null,
         "_name": "substringData",
         "_type": "function",
         "_value": ""
@@ -2049,7 +1861,6 @@ EXPRESSION: svgElement = document.createElementNS('http://www.w3.org/2000/svg',
   "_objectId": "<filtered>",
   "_description": "<rect class=\"test\">",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "node",
     "_description": "<rect class=\"test\">",
@@ -2057,31 +1868,26 @@ EXPRESSION: svgElement = document.createElementNS('http://www.w3.org/2000/svg',
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "x",
         "_type": "object",
         "_value": "SVGAnimatedLength"
       },
       {
-        "_listeners": null,
         "_name": "y",
         "_type": "object",
         "_value": "SVGAnimatedLength"
       },
       {
-        "_listeners": null,
         "_name": "width",
         "_type": "object",
         "_value": "SVGAnimatedLength"
       },
       {
-        "_listeners": null,
         "_name": "height",
         "_type": "object",
         "_value": "SVGAnimatedLength"
       },
       {
-        "_listeners": null,
         "_name": "rx",
         "_type": "object",
         "_value": "SVGAnimatedLength"
@@ -2100,7 +1906,6 @@ EXPRESSION: [document.body, div, span, input, text, comment, svgElement]
   "_description": "Array",
   "_size": 7,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "Array",
@@ -2109,49 +1914,42 @@ EXPRESSION: [document.body, div, span, input, text, comment, svgElement]
     "_size": 7,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "node",
         "_value": "<body>"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "object",
         "_subtype": "node",
         "_value": "<div class=\"foo bar\">"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "object",
         "_subtype": "node",
         "_value": "<span id=\"foo\">"
       },
       {
-        "_listeners": null,
         "_name": "3",
         "_type": "object",
         "_subtype": "node",
         "_value": "<input type=\"password\">"
       },
       {
-        "_listeners": null,
         "_name": "4",
         "_type": "object",
         "_subtype": "node",
         "_value": "#text \"text content\""
       },
       {
-        "_listeners": null,
         "_name": "5",
         "_type": "object",
         "_subtype": "node",
         "_value": "<!--comment content-->"
       },
       {
-        "_listeners": null,
         "_name": "6",
         "_type": "object",
         "_subtype": "node",
@@ -2171,7 +1969,6 @@ EXPRESSION: document.head.children
   "_description": "HTMLCollection",
   "_size": 3,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "HTMLCollection",
@@ -2180,21 +1977,18 @@ EXPRESSION: document.head.children
     "_size": 3,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "node",
         "_value": "<meta>"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "object",
         "_subtype": "node",
         "_value": "<script>"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "object",
         "_subtype": "node",
@@ -2214,7 +2008,6 @@ EXPRESSION: document.getElementsByClassName('my-test')
   "_description": "HTMLCollection",
   "_size": 3,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "HTMLCollection",
@@ -2223,21 +2016,18 @@ EXPRESSION: document.getElementsByClassName('my-test')
     "_size": 3,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "node",
         "_value": "<p class=\"my-test\">"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "object",
         "_subtype": "node",
         "_value": "<p class=\"my-test\">"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "object",
         "_subtype": "node",
@@ -2257,7 +2047,6 @@ EXPRESSION: document.querySelectorAll('.my-test')
   "_description": "NodeList",
   "_size": 3,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "array",
     "_description": "NodeList",
@@ -2266,21 +2055,18 @@ EXPRESSION: document.querySelectorAll('.my-test')
     "_size": 3,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "0",
         "_type": "object",
         "_subtype": "node",
         "_value": "<p class=\"my-test\">"
       },
       {
-        "_listeners": null,
         "_name": "1",
         "_type": "object",
         "_subtype": "node",
         "_value": "<p class=\"my-test\">"
       },
       {
-        "_listeners": null,
         "_name": "2",
         "_type": "object",
         "_subtype": "node",
@@ -2299,7 +2085,6 @@ EXPRESSION: error = null; try { [].x.x; } catch (e) { error = e; }; error
   "_objectId": "<filtered>",
   "_description": "TypeError: undefined is not an object (evaluating '[].x.x')",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "error",
     "_description": "TypeError: undefined is not an object (evaluating '[].x.x')",
@@ -2307,25 +2092,21 @@ EXPRESSION: error = null; try { [].x.x; } catch (e) { error = e; }; error
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "message",
         "_type": "string",
         "_value": "undefined is not an object (evaluating '[].x.x')"
       },
       {
-        "_listeners": null,
         "_name": "line",
         "_type": "number",
         "_value": "3"
       },
       {
-        "_listeners": null,
         "_name": "column",
         "_type": "number",
         "_value": "25"
       },
       {
-        "_listeners": null,
         "_name": "stack",
         "_type": "string",
         "_value": "global code\nevaluateWithScopeExtension@[native code]\n_evaluateOn\n_evaluateAndWrap\nevaluate"
@@ -2343,7 +2124,6 @@ EXPRESSION: error = null; try { eval('if()'); } catch (e) { error = e; }; error
   "_objectId": "<filtered>",
   "_description": "SyntaxError: Unexpected token ')'",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "error",
     "_description": "SyntaxError: Unexpected token ')'",
@@ -2351,25 +2131,21 @@ EXPRESSION: error = null; try { eval('if()'); } catch (e) { error = e; }; error
     "_overflow": false,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "message",
         "_type": "string",
         "_value": "Unexpected token ')'"
       },
       {
-        "_listeners": null,
         "_name": "line",
         "_type": "number",
         "_value": "3"
       },
       {
-        "_listeners": null,
         "_name": "column",
         "_type": "number",
         "_value": "25"
       },
       {
-        "_listeners": null,
         "_name": "stack",
         "_type": "string",
         "_value": "eval@[native code]\nglobal code\nevaluateWithScopeEx…ative code]\n_evaluateOn\n_evaluateAndWrap\nevaluate"
@@ -2387,7 +2163,6 @@ EXPRESSION: error = null; try { document.createTextNode('').splitText(100); } ca
   "_objectId": "<filtered>",
   "_description": "IndexSizeError (DOM Exception 1): The index is not in the allowed range.",
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "error",
     "_description": "IndexSizeError (DOM Exception 1): The index is not in the allowed range.",
@@ -2395,31 +2170,26 @@ EXPRESSION: error = null; try { document.createTextNode('').splitText(100); } ca
     "_overflow": true,
     "_properties": [
       {
-        "_listeners": null,
         "_name": "code",
         "_type": "number",
         "_value": "1"
       },
       {
-        "_listeners": null,
         "_name": "name",
         "_type": "string",
         "_value": "IndexSizeError"
       },
       {
-        "_listeners": null,
         "_name": "message",
         "_type": "string",
         "_value": "The index is not in the allowed range."
       },
       {
-        "_listeners": null,
         "_name": "line",
         "_type": "number",
         "_value": "3"
       },
       {
-        "_listeners": null,
         "_name": "column",
         "_type": "number",
         "_value": "58"
@@ -2438,7 +2208,6 @@ EXPRESSION: new Map
   "_description": "Map",
   "_size": 0,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "map",
     "_description": "Map",
@@ -2459,7 +2228,6 @@ EXPRESSION: map = new Map; map.set(1, 2); map.set('key', 'value'); map
   "_description": "Map",
   "_size": 2,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "map",
     "_description": "Map",
@@ -2469,9 +2237,7 @@ EXPRESSION: map = new Map; map.set(1, 2); map.set('key', 'value'); map
     "_properties": [],
     "_entries": [
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "number",
           "_description": "1",
           "_lossless": true,
@@ -2480,7 +2246,6 @@ EXPRESSION: map = new Map; map.set(1, 2); map.set('key', 'value'); map
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "2",
           "_lossless": true,
@@ -2490,9 +2255,7 @@ EXPRESSION: map = new Map; map.set(1, 2); map.set('key', 'value'); map
         }
       },
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "string",
           "_description": "key",
           "_lossless": true,
@@ -2501,7 +2264,6 @@ EXPRESSION: map = new Map; map.set(1, 2); map.set('key', 'value'); map
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "string",
           "_description": "value",
           "_lossless": true,
@@ -2523,7 +2285,6 @@ EXPRESSION: map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]);
   "_description": "Map",
   "_size": 2,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "map",
     "_description": "Map",
@@ -2533,16 +2294,13 @@ EXPRESSION: map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]);
     "_properties": [],
     "_entries": [
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "object",
           "_description": "Object",
           "_lossless": true,
           "_overflow": false,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "a",
               "_type": "number",
               "_value": "1"
@@ -2551,14 +2309,12 @@ EXPRESSION: map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]);
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_description": "Object",
           "_lossless": true,
           "_overflow": false,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "b",
               "_type": "number",
               "_value": "2"
@@ -2568,9 +2324,7 @@ EXPRESSION: map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]);
         }
       },
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "node",
           "_description": "<body>",
@@ -2578,31 +2332,26 @@ EXPRESSION: map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]);
           "_overflow": true,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "aLink",
               "_type": "string",
               "_value": ""
             },
             {
-              "_listeners": null,
               "_name": "background",
               "_type": "string",
               "_value": ""
             },
             {
-              "_listeners": null,
               "_name": "bgColor",
               "_type": "string",
               "_value": ""
             },
             {
-              "_listeners": null,
               "_name": "link",
               "_type": "string",
               "_value": ""
             },
             {
-              "_listeners": null,
               "_name": "text",
               "_type": "string",
               "_value": ""
@@ -2611,7 +2360,6 @@ EXPRESSION: map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]);
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "object",
           "_subtype": "array",
           "_description": "Array",
@@ -2620,13 +2368,11 @@ EXPRESSION: map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]);
           "_size": 2,
           "_properties": [
             {
-              "_listeners": null,
               "_name": "0",
               "_type": "number",
               "_value": "1"
             },
             {
-              "_listeners": null,
               "_name": "1",
               "_type": "number",
               "_value": "2"
@@ -2648,7 +2394,6 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
   "_description": "Map",
   "_size": 101,
   "_preview": {
-    "_listeners": null,
     "_type": "object",
     "_subtype": "map",
     "_description": "Map",
@@ -2658,9 +2403,7 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
     "_properties": [],
     "_entries": [
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "number",
           "_description": "0",
           "_lossless": true,
@@ -2669,7 +2412,6 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "0",
           "_lossless": true,
@@ -2679,9 +2421,7 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
         }
       },
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "number",
           "_description": "1",
           "_lossless": true,
@@ -2690,7 +2430,6 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "1",
           "_lossless": true,
@@ -2700,9 +2439,7 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
         }
       },
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "number",
           "_description": "2",
           "_lossless": true,
@@ -2711,7 +2448,6 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "number",
           "_description": "2",
           "_lossless": true,
@@ -2721,9 +2457,7 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
         }
       },
       {
-        "_listeners": null,
         "_key": {
-          "_listeners": null,
           "_type": "number",
           "_description": "3",
           "_lossless": true,
@@ -2732,7 +2466,6 @@ EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
           "_entries": null
         },
         "_value": {
-          "_listeners": null,
           "_type": "number",
      &nbs