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 26WebInspector.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 35WebInspector.RuntimeManager.Event = { 36 DidEvaluate: "runtime-manager-did-evaluate" 37}; 38 39WebInspector.RuntimeManager.prototype = { 40 constructor: WebInspector.RuntimeManager, 41 42 // Public 43 44 evaluateInInspectedWindow: function(expression, objectGroup, includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole, returnByValue, 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 DebuggerAgent.evaluateOnCallFrame(WebInspector.debuggerManager.activeCallFrame.id, expression, objectGroup, includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole, returnByValue, evalCallback.bind(this)); 69 return; 70 } 71 72 // COMPATIBILITY (iOS 6): Execution context identifiers (contextId) did not exist 73 // in iOS 6. Fallback to including the frame identifier (frameId). 74 var contextId = WebInspector.quickConsole.executionContextIdentifier; 75 RuntimeAgent.evaluate.invoke({expression: expression, objectGroup: objectGroup, includeCommandLineAPI: includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole: doNotPauseOnExceptionsAndMuteConsole, contextId: contextId, frameId: contextId, returnByValue: returnByValue}, evalCallback.bind(this)); 76 }, 77 78 getPropertiesForRemoteObject: function(objectId, callback) 79 { 80 RuntimeAgent.getProperties(objectId, function(error, result) { 81 if (error) { 82 callback(error); 83 return; 84 } 85 86 var properties = new Map; 87 for (var property of result) 88 properties.set(property.name, property); 89 90 callback(null, properties); 91 }); 92 } 93}; 94 95WebInspector.RuntimeManager.prototype.__proto__ = WebInspector.Object.prototype; 96