| // Copyright 2017 the V8 project authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | let {session, contextGroup, Protocol} = InspectorTest.start('Checks that Runtime agent correctly restore its state.'); | 
 |  | 
 | contextGroup.addScript(` | 
 | var formatter = { | 
 |     header: function(x) | 
 |     { | 
 |         return ["span", {}, "Header formatted ", x.name]; | 
 |     }, | 
 |  | 
 |     hasBody: function(x) | 
 |     { | 
 |         return true; | 
 |     }, | 
 |  | 
 |     body: function(x) | 
 |     { | 
 |         return ["span", {}, "Body formatted ", x.name] | 
 |     } | 
 | }; | 
 |  | 
 | devtoolsFormatters = [ formatter ]; | 
 |  | 
 | //# sourceURL=test.js`) | 
 |  | 
 | InspectorTest.runTestSuite([ | 
 |   function testExecutionContextsNotificationsOnRestore(next) { | 
 |     Protocol.Runtime.onExecutionContextsCleared(InspectorTest.logMessage); | 
 |     Protocol.Runtime.onExecutionContextCreated(InspectorTest.logMessage); | 
 |     Protocol.Runtime.onExecutionContextDestroyed(InspectorTest.logMessage); | 
 |     Protocol.Runtime.enable() | 
 |       .then(reconnect) | 
 |       .then(Protocol.Runtime.disable) | 
 |       .then(() => { | 
 |         Protocol.Runtime.onExecutionContextsCleared(null); | 
 |         Protocol.Runtime.onExecutionContextCreated(null); | 
 |         Protocol.Runtime.onExecutionContextDestroyed(null); | 
 |         next() | 
 |       }); | 
 |   }, | 
 |  | 
 |   function testConsoleAPICalledAfterRestore(next) { | 
 |     Protocol.Runtime.onConsoleAPICalled(InspectorTest.logMessage); | 
 |     Protocol.Runtime.enable() | 
 |       .then(reconnect) | 
 |       .then(() => Protocol.Runtime.evaluate({ expression: 'console.log(42);' })) | 
 |       .then(Protocol.Runtime.disable) | 
 |       .then(() => { | 
 |         Protocol.Runtime.onConsoleAPICalled(null); | 
 |         next(); | 
 |       }); | 
 |   }, | 
 |  | 
 |   function testSetCustomObjectFormatterEnabled(next) { | 
 |     Protocol.Runtime.onConsoleAPICalled(InspectorTest.logMessage); | 
 |     Protocol.Runtime.discardConsoleEntries() | 
 |       .then(reconnect) | 
 |       .then(() => Protocol.Runtime.enable()) | 
 |       .then(() => Protocol.Runtime.setCustomObjectFormatterEnabled({ enabled: true })) | 
 |       .then(reconnect) | 
 |       .then(() => Protocol.Runtime.evaluate({ expression: 'console.log({ name: 42 })'})) | 
 |       .then(InspectorTest.logMessage) | 
 |       .then(Protocol.Runtime.disable) | 
 |       .then(() => { | 
 |         Protocol.Runtime.onConsoleAPICalled(null); | 
 |         next(); | 
 |       }); | 
 |   }, | 
 | ]); | 
 |  | 
 | function reconnect() { | 
 |   InspectorTest.logMessage('will reconnect..'); | 
 |   session.reconnect(); | 
 | } |