| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2013 Google Inc. All rights reserved. | 3 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * | 8 * |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 609 /** | 609 /** |
| 610 * @param {string} expression | 610 * @param {string} expression |
| 611 * @param {string} objectGroup | 611 * @param {string} objectGroup |
| 612 * @param {boolean} injectCommandLineAPI | 612 * @param {boolean} injectCommandLineAPI |
| 613 * @param {boolean} returnByValue | 613 * @param {boolean} returnByValue |
| 614 * @param {boolean} generatePreview | 614 * @param {boolean} generatePreview |
| 615 * @return {*} | 615 * @return {*} |
| 616 */ | 616 */ |
| 617 evaluate: function(expression, objectGroup, injectCommandLineAPI, returnByVa
lue, generatePreview) | 617 evaluate: function(expression, objectGroup, injectCommandLineAPI, returnByVa
lue, generatePreview) |
| 618 { | 618 { |
| 619 return this._evaluateAndWrap(null, null, expression, objectGroup, false,
injectCommandLineAPI, returnByValue, generatePreview); | 619 return this._evaluateAndWrap(null, expression, objectGroup, injectComman
dLineAPI, returnByValue, generatePreview); |
| 620 }, | 620 }, |
| 621 | 621 |
| 622 /** | 622 /** |
| 623 * @param {string} objectId | 623 * @param {string} objectId |
| 624 * @param {string} expression | 624 * @param {string} expression |
| 625 * @param {string} args | 625 * @param {string} args |
| 626 * @param {boolean} returnByValue | 626 * @param {boolean} returnByValue |
| 627 * @return {!Object|string} | 627 * @return {!Object|string} |
| 628 */ | 628 */ |
| 629 callFunctionOn: function(objectId, expression, args, returnByValue) | 629 callFunctionOn: function(objectId, expression, args, returnByValue) |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 } else if ("value" in callArgumentJson) { | 682 } else if ("value" in callArgumentJson) { |
| 683 var value = callArgumentJson.value; | 683 var value = callArgumentJson.value; |
| 684 if (callArgumentJson.type === "number" && typeof value !== "number") | 684 if (callArgumentJson.type === "number" && typeof value !== "number") |
| 685 value = Number(value); | 685 value = Number(value); |
| 686 return value; | 686 return value; |
| 687 } | 687 } |
| 688 return undefined; | 688 return undefined; |
| 689 }, | 689 }, |
| 690 | 690 |
| 691 /** | 691 /** |
| 692 * @param {?function(string):*} evalFunction | 692 * @param {?JavaScriptCallFrame} callFrame |
| 693 * @param {?Object} object | |
| 694 * @param {string} expression | 693 * @param {string} expression |
| 695 * @param {string} objectGroup | 694 * @param {string} objectGroup |
| 696 * @param {boolean} isEvalOnCallFrame | |
| 697 * @param {boolean} injectCommandLineAPI | 695 * @param {boolean} injectCommandLineAPI |
| 698 * @param {boolean} returnByValue | 696 * @param {boolean} returnByValue |
| 699 * @param {boolean} generatePreview | 697 * @param {boolean} generatePreview |
| 700 * @param {!Array.<!Object>=} scopeChain | 698 * @param {!Array.<!Object>=} scopeChain |
| 701 * @return {!Object} | 699 * @return {!Object} |
| 702 */ | 700 */ |
| 703 _evaluateAndWrap: function(evalFunction, object, expression, objectGroup, is
EvalOnCallFrame, injectCommandLineAPI, returnByValue, generatePreview, scopeChai
n) | 701 _evaluateAndWrap: function(callFrame, expression, objectGroup, injectCommand
LineAPI, returnByValue, generatePreview, scopeChain) |
| 704 { | 702 { |
| 705 var wrappedResult = this._evaluateOn(evalFunction, object, objectGroup,
expression, isEvalOnCallFrame, injectCommandLineAPI, scopeChain); | 703 var wrappedResult = this._evaluateOn(callFrame, objectGroup, expression,
injectCommandLineAPI, scopeChain); |
| 706 if (!wrappedResult.exceptionDetails) { | 704 if (!wrappedResult.exceptionDetails) { |
| 707 return { wasThrown: false, | 705 return { wasThrown: false, |
| 708 result: this._wrapObject(wrappedResult.result, objectGroup,
returnByValue, generatePreview), | 706 result: this._wrapObject(wrappedResult.result, objectGroup,
returnByValue, generatePreview), |
| 709 __proto__: null }; | 707 __proto__: null }; |
| 710 } | 708 } |
| 711 return this._createThrownValue(wrappedResult.result, objectGroup, genera
tePreview, wrappedResult.exceptionDetails); | 709 return this._createThrownValue(wrappedResult.result, objectGroup, genera
tePreview, wrappedResult.exceptionDetails); |
| 712 }, | 710 }, |
| 713 | 711 |
| 714 /** | 712 /** |
| 715 * @param {*} value | 713 * @param {*} value |
| 716 * @param {string} objectGroup | 714 * @param {string} objectGroup |
| 717 * @param {boolean} generatePreview | 715 * @param {boolean} generatePreview |
| 718 * @param {!DebuggerAgent.ExceptionDetails=} exceptionDetails | 716 * @param {!DebuggerAgent.ExceptionDetails=} exceptionDetails |
| 719 * @return {!Object} | 717 * @return {!Object} |
| 720 */ | 718 */ |
| 721 _createThrownValue: function(value, objectGroup, generatePreview, exceptionD
etails) | 719 _createThrownValue: function(value, objectGroup, generatePreview, exceptionD
etails) |
| 722 { | 720 { |
| 723 var remoteObject = this._wrapObject(value, objectGroup, false, generateP
review && !(value instanceof Error)); | 721 var remoteObject = this._wrapObject(value, objectGroup, false, generateP
review && !(value instanceof Error)); |
| 724 if (!remoteObject.description){ | 722 if (!remoteObject.description){ |
| 725 try { | 723 try { |
| 726 remoteObject.description = toStringDescription(value); | 724 remoteObject.description = toStringDescription(value); |
| 727 } catch (e) {} | 725 } catch (e) {} |
| 728 } | 726 } |
| 729 return { wasThrown: true, result: remoteObject, exceptionDetails: except
ionDetails, __proto__: null }; | 727 return { wasThrown: true, result: remoteObject, exceptionDetails: except
ionDetails, __proto__: null }; |
| 730 }, | 728 }, |
| 731 | 729 |
| 732 /** | 730 /** |
| 733 * @param {?function(string):*} evalFunction | 731 * @param {?JavaScriptCallFrame} callFrame |
| 734 * @param {?Object} object | |
| 735 * @param {string} objectGroup | 732 * @param {string} objectGroup |
| 736 * @param {string} expression | 733 * @param {string} expression |
| 737 * @param {boolean} isEvalOnCallFrame | |
| 738 * @param {boolean} injectCommandLineAPI | 734 * @param {boolean} injectCommandLineAPI |
| 739 * @param {!Array.<!Object>=} scopeChain | 735 * @param {!Array.<!Object>=} scopeChain |
| 740 * @return {*} | 736 * @return {*} |
| 741 */ | 737 */ |
| 742 _evaluateOn: function(evalFunction, object, objectGroup, expression, isEvalO
nCallFrame, injectCommandLineAPI, scopeChain) | 738 _evaluateOn: function(callFrame, objectGroup, expression, injectCommandLineA
PI, scopeChain) |
| 743 { | 739 { |
| 744 // Only install command line api object for the time of evaluation. | 740 // Only install command line api object for the time of evaluation. |
| 745 // Surround the expression in with statements to inject our command line
API so that | 741 // Surround the expression in with statements to inject our command line
API so that |
| 746 // the window object properties still take more precedent than our API f
unctions. | 742 // the window object properties still take more precedent than our API f
unctions. |
| 747 | 743 |
| 748 injectCommandLineAPI = injectCommandLineAPI && !("__commandLineAPI" in i
nspectedWindow); | 744 var scopeExtensionForEval = (callFrame && injectCommandLineAPI) ? new Co
mmandLineAPI(this._commandLineAPIImpl, callFrame) : undefined; |
| 745 |
| 746 injectCommandLineAPI = !scopeExtensionForEval && !callFrame && injectCom
mandLineAPI && !("__commandLineAPI" in inspectedWindow); |
| 749 var injectScopeChain = scopeChain && scopeChain.length && !("__scopeChai
nForEval" in inspectedWindow); | 747 var injectScopeChain = scopeChain && scopeChain.length && !("__scopeChai
nForEval" in inspectedWindow); |
| 750 | 748 |
| 751 try { | 749 try { |
| 752 var prefix = ""; | 750 var prefix = ""; |
| 753 var suffix = ""; | 751 var suffix = ""; |
| 754 if (injectCommandLineAPI) { | 752 if (injectCommandLineAPI) { |
| 755 InjectedScriptHost.setNonEnumProperty(inspectedWindow, "__comman
dLineAPI", new CommandLineAPI(this._commandLineAPIImpl, isEvalOnCallFrame ? obje
ct : null)); | 753 InjectedScriptHost.setNonEnumProperty(inspectedWindow, "__comman
dLineAPI", new CommandLineAPI(this._commandLineAPIImpl, callFrame)); |
| 756 prefix = "with (__commandLineAPI || { __proto__: null }) {"; | 754 prefix = "with (typeof __commandLineAPI !== 'undefined' ? __comm
andLineAPI : { __proto__: null }) {"; |
| 757 suffix = "}"; | 755 suffix = "}"; |
| 758 } | 756 } |
| 759 if (injectScopeChain) { | 757 if (injectScopeChain) { |
| 760 InjectedScriptHost.setNonEnumProperty(inspectedWindow, "__scopeC
hainForEval", scopeChain); | 758 InjectedScriptHost.setNonEnumProperty(inspectedWindow, "__scopeC
hainForEval", scopeChain); |
| 761 for (var i = 0; i < scopeChain.length; ++i) { | 759 for (var i = 0; i < scopeChain.length; ++i) { |
| 762 prefix = "with (__scopeChainForEval[" + i + "] || { __proto_
_: null }) {" + (suffix ? " " : "") + prefix; | 760 prefix = "with (typeof __scopeChainForEval !== 'undefined' ?
__scopeChainForEval[" + i + "] : { __proto__: null }) {" + (suffix ? " " : "")
+ prefix; |
| 763 if (suffix) | 761 if (suffix) |
| 764 suffix += " }"; | 762 suffix += " }"; |
| 765 else | 763 else |
| 766 suffix = "}"; | 764 suffix = "}"; |
| 767 } | 765 } |
| 768 } | 766 } |
| 769 | 767 |
| 770 if (prefix) | 768 if (prefix) |
| 771 expression = prefix + "\n" + expression + "\n" + suffix; | 769 expression = prefix + "\n" + expression + "\n" + suffix; |
| 772 var wrappedResult = evalFunction ? InjectedScriptHost.callFunction(e
valFunction, object, [expression]) : InjectedScriptHost.evaluateWithExceptionDet
ails(expression); | 770 var wrappedResult = callFrame ? callFrame.evaluateWithExceptionDetai
ls(expression, scopeExtensionForEval) : InjectedScriptHost.evaluateWithException
Details(expression); |
| 773 if (objectGroup === "console" && !wrappedResult.exceptionDetails) | 771 if (objectGroup === "console" && !wrappedResult.exceptionDetails) |
| 774 this._lastResult = wrappedResult.result; | 772 this._lastResult = wrappedResult.result; |
| 775 return wrappedResult; | 773 return wrappedResult; |
| 776 } finally { | 774 } finally { |
| 777 if (injectCommandLineAPI) | 775 if (injectCommandLineAPI) |
| 778 delete inspectedWindow["__commandLineAPI"]; | 776 delete inspectedWindow["__commandLineAPI"]; |
| 779 if (injectScopeChain) | 777 if (injectScopeChain) |
| 780 delete inspectedWindow["__scopeChainForEval"]; | 778 delete inspectedWindow["__scopeChainForEval"]; |
| 781 } | 779 } |
| 782 }, | 780 }, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 795 var depth = 0; | 793 var depth = 0; |
| 796 do { | 794 do { |
| 797 result[depth] = new InjectedScript.CallFrameProxy(depth, callFrame,
asyncOrdinal); | 795 result[depth] = new InjectedScript.CallFrameProxy(depth, callFrame,
asyncOrdinal); |
| 798 callFrame = callFrame.caller; | 796 callFrame = callFrame.caller; |
| 799 ++depth; | 797 ++depth; |
| 800 } while (callFrame); | 798 } while (callFrame); |
| 801 return result; | 799 return result; |
| 802 }, | 800 }, |
| 803 | 801 |
| 804 /** | 802 /** |
| 805 * @param {!Object} topCallFrame | 803 * @param {!JavaScriptCallFrame} topCallFrame |
| 806 * @param {!Array.<!Object>} asyncCallStacks | 804 * @param {!Array.<!JavaScriptCallFrame>} asyncCallStacks |
| 807 * @param {string} callFrameId | 805 * @param {string} callFrameId |
| 808 * @param {string} expression | 806 * @param {string} expression |
| 809 * @param {string} objectGroup | 807 * @param {string} objectGroup |
| 810 * @param {boolean} injectCommandLineAPI | 808 * @param {boolean} injectCommandLineAPI |
| 811 * @param {boolean} returnByValue | 809 * @param {boolean} returnByValue |
| 812 * @param {boolean} generatePreview | 810 * @param {boolean} generatePreview |
| 813 * @return {*} | 811 * @return {*} |
| 814 */ | 812 */ |
| 815 evaluateOnCallFrame: function(topCallFrame, asyncCallStacks, callFrameId, ex
pression, objectGroup, injectCommandLineAPI, returnByValue, generatePreview) | 813 evaluateOnCallFrame: function(topCallFrame, asyncCallStacks, callFrameId, ex
pression, objectGroup, injectCommandLineAPI, returnByValue, generatePreview) |
| 816 { | 814 { |
| 817 var parsedCallFrameId = nullifyObjectProto(/** @type {!Object} */ (Injec
tedScriptHost.eval("(" + callFrameId + ")"))); | 815 var parsedCallFrameId = nullifyObjectProto(/** @type {!Object} */ (Injec
tedScriptHost.eval("(" + callFrameId + ")"))); |
| 818 var callFrame = this._callFrameForParsedId(topCallFrame, parsedCallFrame
Id, asyncCallStacks); | 816 var callFrame = this._callFrameForParsedId(topCallFrame, parsedCallFrame
Id, asyncCallStacks); |
| 819 if (!callFrame) | 817 if (!callFrame) |
| 820 return "Could not find call frame with given id"; | 818 return "Could not find call frame with given id"; |
| 821 if (parsedCallFrameId["asyncOrdinal"]) | 819 if (parsedCallFrameId["asyncOrdinal"]) |
| 822 return this._evaluateAndWrap(null, null, expression, objectGroup, fa
lse, injectCommandLineAPI, returnByValue, generatePreview, callFrame.scopeChain)
; | 820 return this._evaluateAndWrap(null, expression, objectGroup, injectCo
mmandLineAPI, returnByValue, generatePreview, callFrame.scopeChain); |
| 823 return this._evaluateAndWrap(callFrame.evaluateWithExceptionDetails, cal
lFrame, expression, objectGroup, true, injectCommandLineAPI, returnByValue, gene
ratePreview); | 821 return this._evaluateAndWrap(callFrame, expression, objectGroup, injectC
ommandLineAPI, returnByValue, generatePreview); |
| 824 }, | 822 }, |
| 825 | 823 |
| 826 /** | 824 /** |
| 827 * @param {!Object} topCallFrame | 825 * @param {!JavaScriptCallFrame} topCallFrame |
| 828 * @param {string} callFrameId | 826 * @param {string} callFrameId |
| 829 * @return {*} | 827 * @return {*} |
| 830 */ | 828 */ |
| 831 restartFrame: function(topCallFrame, callFrameId) | 829 restartFrame: function(topCallFrame, callFrameId) |
| 832 { | 830 { |
| 833 var callFrame = this._callFrameForId(topCallFrame, callFrameId); | 831 var callFrame = this._callFrameForId(topCallFrame, callFrameId); |
| 834 if (!callFrame) | 832 if (!callFrame) |
| 835 return "Could not find call frame with given id"; | 833 return "Could not find call frame with given id"; |
| 836 var result = callFrame.restart(); | 834 var result = callFrame.restart(); |
| 837 if (result === false) | 835 if (result === false) |
| 838 result = "Restart frame is not supported"; | 836 result = "Restart frame is not supported"; |
| 839 return result; | 837 return result; |
| 840 }, | 838 }, |
| 841 | 839 |
| 842 /** | 840 /** |
| 843 * @param {!Object} topCallFrame | 841 * @param {!JavaScriptCallFrame} topCallFrame |
| 844 * @param {string} callFrameId | 842 * @param {string} callFrameId |
| 845 * @return {*} a stepIn position array ready for protocol JSON or a string e
rror | 843 * @return {*} a stepIn position array ready for protocol JSON or a string e
rror |
| 846 */ | 844 */ |
| 847 getStepInPositions: function(topCallFrame, callFrameId) | 845 getStepInPositions: function(topCallFrame, callFrameId) |
| 848 { | 846 { |
| 849 var callFrame = this._callFrameForId(topCallFrame, callFrameId); | 847 var callFrame = this._callFrameForId(topCallFrame, callFrameId); |
| 850 if (!callFrame) | 848 if (!callFrame) |
| 851 return "Could not find call frame with given id"; | 849 return "Could not find call frame with given id"; |
| 852 var stepInPositionsUnpacked = JSON.parse(callFrame.stepInPositions); | 850 var stepInPositionsUnpacked = JSON.parse(callFrame.stepInPositions); |
| 853 if (typeof stepInPositionsUnpacked !== "object") | 851 if (typeof stepInPositionsUnpacked !== "object") |
| 854 return "Step in positions not available"; | 852 return "Step in positions not available"; |
| 855 return stepInPositionsUnpacked; | 853 return stepInPositionsUnpacked; |
| 856 }, | 854 }, |
| 857 | 855 |
| 858 /** | 856 /** |
| 859 * Either callFrameId or functionObjectId must be specified. | 857 * Either callFrameId or functionObjectId must be specified. |
| 860 * @param {!Object} topCallFrame | 858 * @param {!JavaScriptCallFrame} topCallFrame |
| 861 * @param {string|boolean} callFrameId or false | 859 * @param {string|boolean} callFrameId or false |
| 862 * @param {string|boolean} functionObjectId or false | 860 * @param {string|boolean} functionObjectId or false |
| 863 * @param {number} scopeNumber | 861 * @param {number} scopeNumber |
| 864 * @param {string} variableName | 862 * @param {string} variableName |
| 865 * @param {string} newValueJsonString RuntimeAgent.CallArgument structure se
rialized as string | 863 * @param {string} newValueJsonString RuntimeAgent.CallArgument structure se
rialized as string |
| 866 * @return {string|undefined} undefined if success or an error message | 864 * @return {string|undefined} undefined if success or an error message |
| 867 */ | 865 */ |
| 868 setVariableValue: function(topCallFrame, callFrameId, functionObjectId, scop
eNumber, variableName, newValueJsonString) | 866 setVariableValue: function(topCallFrame, callFrameId, functionObjectId, scop
eNumber, variableName, newValueJsonString) |
| 869 { | 867 { |
| 870 try { | 868 try { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 882 return "Could not resolve function by id"; | 880 return "Could not resolve function by id"; |
| 883 InjectedScriptHost.setFunctionVariableValue(func, scopeNumber, v
ariableName, resolvedValue); | 881 InjectedScriptHost.setFunctionVariableValue(func, scopeNumber, v
ariableName, resolvedValue); |
| 884 } | 882 } |
| 885 } catch (e) { | 883 } catch (e) { |
| 886 return toString(e); | 884 return toString(e); |
| 887 } | 885 } |
| 888 return undefined; | 886 return undefined; |
| 889 }, | 887 }, |
| 890 | 888 |
| 891 /** | 889 /** |
| 892 * @param {!Object} topCallFrame | 890 * @param {!JavaScriptCallFrame} topCallFrame |
| 893 * @param {string} callFrameId | 891 * @param {string} callFrameId |
| 894 * @return {?Object} | 892 * @return {?JavaScriptCallFrame} |
| 895 */ | 893 */ |
| 896 _callFrameForId: function(topCallFrame, callFrameId) | 894 _callFrameForId: function(topCallFrame, callFrameId) |
| 897 { | 895 { |
| 898 var parsedCallFrameId = nullifyObjectProto(/** @type {!Object} */ (Injec
tedScriptHost.eval("(" + callFrameId + ")"))); | 896 var parsedCallFrameId = nullifyObjectProto(/** @type {!Object} */ (Injec
tedScriptHost.eval("(" + callFrameId + ")"))); |
| 899 return this._callFrameForParsedId(topCallFrame, parsedCallFrameId, []); | 897 return this._callFrameForParsedId(topCallFrame, parsedCallFrameId, []); |
| 900 }, | 898 }, |
| 901 | 899 |
| 902 /** | 900 /** |
| 903 * @param {!Object} topCallFrame | 901 * @param {!JavaScriptCallFrame} topCallFrame |
| 904 * @param {!Object} parsedCallFrameId | 902 * @param {!Object} parsedCallFrameId |
| 905 * @param {!Array.<!Object>} asyncCallStacks | 903 * @param {!Array.<!JavaScriptCallFrame>} asyncCallStacks |
| 906 * @return {?Object} | 904 * @return {?JavaScriptCallFrame} |
| 907 */ | 905 */ |
| 908 _callFrameForParsedId: function(topCallFrame, parsedCallFrameId, asyncCallSt
acks) | 906 _callFrameForParsedId: function(topCallFrame, parsedCallFrameId, asyncCallSt
acks) |
| 909 { | 907 { |
| 910 var asyncOrdinal = parsedCallFrameId["asyncOrdinal"]; // 1-based index | 908 var asyncOrdinal = parsedCallFrameId["asyncOrdinal"]; // 1-based index |
| 911 if (asyncOrdinal) | 909 if (asyncOrdinal) |
| 912 topCallFrame = asyncCallStacks[asyncOrdinal - 1]; | 910 topCallFrame = asyncCallStacks[asyncOrdinal - 1]; |
| 913 var ordinal = parsedCallFrameId["ordinal"]; | 911 var ordinal = parsedCallFrameId["ordinal"]; |
| 914 var callFrame = topCallFrame; | 912 var callFrame = topCallFrame; |
| 915 while (--ordinal >= 0 && callFrame) | 913 while (--ordinal >= 0 && callFrame) |
| 916 callFrame = callFrame.caller; | 914 callFrame = callFrame.caller; |
| (...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1441 return { | 1439 return { |
| 1442 object: injectedScript._wrapObject(scopeObject, groupId), | 1440 object: injectedScript._wrapObject(scopeObject, groupId), |
| 1443 type: /** @type {!DebuggerAgent.ScopeType} */ (scopeTypeNames[scopeTypeC
ode]), | 1441 type: /** @type {!DebuggerAgent.ScopeType} */ (scopeTypeNames[scopeTypeC
ode]), |
| 1444 __proto__: null | 1442 __proto__: null |
| 1445 }; | 1443 }; |
| 1446 } | 1444 } |
| 1447 | 1445 |
| 1448 /** | 1446 /** |
| 1449 * @constructor | 1447 * @constructor |
| 1450 * @param {!CommandLineAPIImpl} commandLineAPIImpl | 1448 * @param {!CommandLineAPIImpl} commandLineAPIImpl |
| 1451 * @param {?Object} callFrame | 1449 * @param {?JavaScriptCallFrame} callFrame |
| 1452 */ | 1450 */ |
| 1453 function CommandLineAPI(commandLineAPIImpl, callFrame) | 1451 function CommandLineAPI(commandLineAPIImpl, callFrame) |
| 1454 { | 1452 { |
| 1455 /** | 1453 /** |
| 1456 * @param {string} member | 1454 * @param {string} member |
| 1457 * @return {boolean} | 1455 * @return {boolean} |
| 1458 */ | 1456 */ |
| 1459 function inScopeVariables(member) | 1457 function inScopeVariables(member) |
| 1460 { | 1458 { |
| 1461 if (!callFrame) | 1459 if (!callFrame) |
| 1462 return false; | 1460 return (member in inspectedWindow); |
| 1463 | 1461 |
| 1464 var scopeChain = callFrame.scopeChain; | 1462 var scopeChain = callFrame.scopeChain; |
| 1465 for (var i = 0; i < scopeChain.length; ++i) { | 1463 for (var i = 0; i < scopeChain.length; ++i) { |
| 1466 if (member in scopeChain[i]) | 1464 if (member in scopeChain[i]) |
| 1467 return true; | 1465 return true; |
| 1468 } | 1466 } |
| 1469 return false; | 1467 return false; |
| 1470 } | 1468 } |
| 1471 | 1469 |
| 1472 /** | 1470 /** |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1486 funcSyntax = funcSyntax.replace(/\bopt_(\w+)\b/g, "[$1]"); | 1484 funcSyntax = funcSyntax.replace(/\bopt_(\w+)\b/g, "[$1]"); |
| 1487 funcArgsSyntax = funcSyntax.trim(); | 1485 funcArgsSyntax = funcSyntax.trim(); |
| 1488 } catch (e) { | 1486 } catch (e) { |
| 1489 } | 1487 } |
| 1490 return "function " + name + "(" + funcArgsSyntax + ") { [Command Lin
e API] }"; | 1488 return "function " + name + "(" + funcArgsSyntax + ") { [Command Lin
e API] }"; |
| 1491 }; | 1489 }; |
| 1492 } | 1490 } |
| 1493 | 1491 |
| 1494 for (var i = 0; i < CommandLineAPI.members_.length; ++i) { | 1492 for (var i = 0; i < CommandLineAPI.members_.length; ++i) { |
| 1495 var member = CommandLineAPI.members_[i]; | 1493 var member = CommandLineAPI.members_[i]; |
| 1496 if (member in inspectedWindow || inScopeVariables(member)) | 1494 if (inScopeVariables(member)) |
| 1497 continue; | 1495 continue; |
| 1498 | 1496 |
| 1499 this[member] = bind(commandLineAPIImpl[member], commandLineAPIImpl); | 1497 this[member] = bind(commandLineAPIImpl[member], commandLineAPIImpl); |
| 1500 this[member].toString = customToStringMethod(member); | 1498 this[member].toString = customToStringMethod(member); |
| 1501 } | 1499 } |
| 1502 | 1500 |
| 1503 for (var i = 0; i < 5; ++i) { | 1501 for (var i = 0; i < 5; ++i) { |
| 1504 var member = "$" + i; | 1502 var member = "$" + i; |
| 1505 if (member in inspectedWindow || inScopeVariables(member)) | 1503 if (inScopeVariables(member)) |
| 1506 continue; | 1504 continue; |
| 1507 | 1505 |
| 1508 this.__defineGetter__("$" + i, bind(commandLineAPIImpl._inspectedObject,
commandLineAPIImpl, i)); | 1506 this.__defineGetter__("$" + i, bind(commandLineAPIImpl._inspectedObject,
commandLineAPIImpl, i)); |
| 1509 } | 1507 } |
| 1510 | 1508 |
| 1511 this.$_ = injectedScript._lastResult; | 1509 this.$_ = injectedScript._lastResult; |
| 1512 | 1510 |
| 1513 this.__proto__ = null; | 1511 this.__proto__ = null; |
| 1514 } | 1512 } |
| 1515 | 1513 |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1794 */ | 1792 */ |
| 1795 _logEvent: function(event) | 1793 _logEvent: function(event) |
| 1796 { | 1794 { |
| 1797 inspectedWindow.console.log(event.type, event); | 1795 inspectedWindow.console.log(event.type, event); |
| 1798 } | 1796 } |
| 1799 } | 1797 } |
| 1800 | 1798 |
| 1801 injectedScript._commandLineAPIImpl = new CommandLineAPIImpl(); | 1799 injectedScript._commandLineAPIImpl = new CommandLineAPIImpl(); |
| 1802 return injectedScript; | 1800 return injectedScript; |
| 1803 }) | 1801 }) |
| OLD | NEW |