Unreviewed, rolling out r103405.
[WebKit-https.git] / Source / WebCore / inspector / front-end / Script.js
1 /*
2  * Copyright (C) 2008 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. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 /**
27  * @constructor
28  * @param {?string} scriptId
29  * @param {string} sourceURL
30  * @param {number} startLine
31  * @param {number} startColumn
32  * @param {number} endLine
33  * @param {number} endColumn
34  * @param {boolean} isContentScript
35  */
36 WebInspector.Script = function(scriptId, sourceURL, startLine, startColumn, endLine, endColumn, isContentScript)
37 {
38     this.scriptId = scriptId;
39     this.sourceURL = sourceURL;
40     this.lineOffset = startLine;
41     this.columnOffset = startColumn;
42     this.endLine = endLine;
43     this.endColumn = endColumn;
44     this.isContentScript = isContentScript;
45 }
46
47 WebInspector.Script.prototype = {
48     /**
49      * @param {function(string)} callback
50      */
51     requestSource: function(callback)
52     {
53         if (this._source) {
54             callback(this._source);
55             return;
56         }
57
58         /**
59          * @this {WebInspector.Script}
60          * @param {?Protocol.Error} error
61          * @param {string} source
62          */
63         function didGetScriptSource(error, source)
64         {
65             this._source = error ? "" : source;
66             callback(this._source);
67         }
68         if (this.scriptId) {
69             // Script failed to parse.
70             DebuggerAgent.getScriptSource(this.scriptId, didGetScriptSource.bind(this));
71         } else
72             callback("");
73     },
74
75     /**
76      * @param {string} query
77      * @param {boolean} caseSensitive
78      * @param {boolean} isRegex
79      * @param {function(Array.<PageAgent.SearchMatch>)} callback
80      */
81     searchInContent: function(query, caseSensitive, isRegex, callback)
82     {
83         /**
84          * @this {WebInspector.Script}
85          * @param {?Protocol.Error} error
86          * @param {Array.<PageAgent.SearchMatch>} searchMatches
87          */
88         function innerCallback(error, searchMatches)
89         {
90             if (error)
91                 console.error(error);
92             var result = [];
93             for (var i = 0; i < searchMatches.length; ++i) {
94                 var searchMatch = new WebInspector.ContentProvider.SearchMatch(searchMatches[i].lineNumber, searchMatches[i].lineContent);
95                 result.push(searchMatch);
96             }
97             callback(result || []);
98         }
99         
100         if (this.scriptId) {
101             // Script failed to parse.
102             DebuggerAgent.searchInContent(this.scriptId, query, caseSensitive, isRegex, innerCallback.bind(this));
103         } else
104             callback([]);
105     },
106     
107     /**
108      * @param {string} newSource
109      * @param {function(?Protocol.Error, Array.<DebuggerAgent.CallFrame>=)} callback
110      */
111     editSource: function(newSource, callback)
112     {
113         /**
114          * @this {WebInspector.Script}
115          * @param {?Protocol.Error} error
116          * @param {Array.<DebuggerAgent.CallFrame>|undefined} callFrames
117          */
118         function didEditScriptSource(error, callFrames)
119         {
120             if (!error)
121                 this._source = newSource;
122             callback(error, callFrames);
123         }
124         if (this.scriptId) {
125             // Script failed to parse.
126             DebuggerAgent.setScriptSource(this.scriptId, newSource, undefined, didEditScriptSource.bind(this));
127         } else
128             callback("Script failed to parse");
129     },
130
131     isInlineScript: function()
132     {
133         return this.sourceURL && this.lineOffset !== 0 && this.columnOffset !== 0;
134     }
135 }