52c00619b355ebab623844bdd4d71ff431fb51d8
[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, 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)
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);
63             else
64                 callback(WebInspector.RemoteObject.fromPayload(result), wasThrown);
65         }
66
67         if (WebInspector.debuggerManager.activeCallFrame) {
68             // COMPATIBILITY (iOS 6): "generatePreview" did not exist.
69             DebuggerAgent.evaluateOnCallFrame.invoke({callFrameId: WebInspector.debuggerManager.activeCallFrame.id, expression: expression, objectGroup: objectGroup, includeCommandLineAPI: includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole: doNotPauseOnExceptionsAndMuteConsole, returnByValue: returnByValue, generatePreview: generatePreview}, evalCallback.bind(this));
70             return;
71         }
72
73         // COMPATIBILITY (iOS 6): Execution context identifiers (contextId) did not exist
74         // in iOS 6. Fallback to including the frame identifier (frameId).
75         // COMPATIBILITY (iOS 6): "generatePreview" did not exist.
76         var contextId = WebInspector.quickConsole.executionContextIdentifier;
77         RuntimeAgent.evaluate.invoke({expression: expression, objectGroup: objectGroup, includeCommandLineAPI: includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole: doNotPauseOnExceptionsAndMuteConsole, contextId: contextId, frameId: contextId, returnByValue: returnByValue, generatePreview: generatePreview}, evalCallback.bind(this));
78     },
79
80     getPropertiesForRemoteObject: function(objectId, callback)
81     {
82         RuntimeAgent.getProperties(objectId, function(error, result) {
83             if (error) {
84                 callback(error);
85                 return;
86             }
87
88             var properties = new Map;
89             for (var property of result)
90                 properties.set(property.name, property);
91
92             callback(null, properties);
93         });
94     }
95 };
96
97 WebInspector.RuntimeManager.prototype.__proto__ = WebInspector.Object.prototype;