Web Inspector: Save Console Evaluations into Command Line variables $1-$99 ($n)
[WebKit-https.git] / Source / WebInspectorUI / UserInterface / Controllers / RuntimeManager.js
1 /*
2  * Copyright (C) 2013 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 WebInspector.RuntimeManager = function()
27 {
28     WebInspector.Object.call(this);
29
30     // Enable the RuntimeAgent to receive notification of execution contexts.
31     if (RuntimeAgent.enable)
32         RuntimeAgent.enable();
33 };
34
35 WebInspector.RuntimeManager.Event = {
36     DidEvaluate: "runtime-manager-did-evaluate"
37 };
38
39 WebInspector.RuntimeManager.prototype = {
40     constructor: WebInspector.RuntimeManager,
41
42     // Public
43
44     evaluateInInspectedWindow: function(expression, objectGroup, includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole, returnByValue, generatePreview, saveResult, callback)
45     {
46         if (!expression) {
47             // There is no expression, so the completion should happen against global properties.
48             expression = "this";
49         }
50
51         function evalCallback(error, result, wasThrown, savedResultIndex)
52         {
53             this.dispatchEventToListeners(WebInspector.RuntimeManager.Event.DidEvaluate);
54
55             if (error) {
56                 console.error(error);
57                 callback(null, false);
58                 return;
59             }
60
61             if (returnByValue)
62                 callback(null, wasThrown, wasThrown ? null : result, savedResultIndex);
63             else
64                 callback(WebInspector.RemoteObject.fromPayload(result), wasThrown, savedResultIndex);
65         }
66
67         if (WebInspector.debuggerManager.activeCallFrame) {
68             // COMPATIBILITY (iOS 6): "generatePreview" did not exist.
69             // COMPATIBILITY (iOS 8): "saveResult" did not exist.
70             DebuggerAgent.evaluateOnCallFrame.invoke({callFrameId: WebInspector.debuggerManager.activeCallFrame.id, expression: expression, objectGroup: objectGroup, includeCommandLineAPI: includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole: doNotPauseOnExceptionsAndMuteConsole, returnByValue: returnByValue, generatePreview: generatePreview, saveResult: saveResult}, evalCallback.bind(this));
71             return;
72         }
73
74         // COMPATIBILITY (iOS 6): Execution context identifiers (contextId) did not exist
75         // in iOS 6. Fallback to including the frame identifier (frameId).
76         // COMPATIBILITY (iOS 6): "generatePreview" did not exist.
77         // COMPATIBILITY (iOS 8): "saveResult" did not exist.
78         var contextId = WebInspector.quickConsole.executionContextIdentifier;
79         RuntimeAgent.evaluate.invoke({expression: expression, objectGroup: objectGroup, includeCommandLineAPI: includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole: doNotPauseOnExceptionsAndMuteConsole, contextId: contextId, frameId: contextId, returnByValue: returnByValue, generatePreview: generatePreview, saveResult: saveResult}, evalCallback.bind(this));
80     },
81
82     getPropertiesForRemoteObject: function(objectId, callback)
83     {
84         RuntimeAgent.getProperties(objectId, function(error, result) {
85             if (error) {
86                 callback(error);
87                 return;
88             }
89
90             var properties = new Map;
91             for (var property of result)
92                 properties.set(property.name, property);
93
94             callback(null, properties);
95         });
96     }
97 };
98
99 WebInspector.RuntimeManager.prototype.__proto__ = WebInspector.Object.prototype;