Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(445)

Side by Side Diff: Source/devtools/front_end/sdk/NetworkUISourceCodeProvider.js

Issue 471433004: DevTools: Split out the "workspace" and "bindings" modules from "sdk" (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Remove marker interfaces and WI.SourceMapping Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 /*
2 * Copyright (C) 2012 Google 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 are
6 * met:
7 *
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the
13 * distribution.
14 * * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31 /**
32 * @constructor
33 * @param {!WebInspector.NetworkWorkspaceBinding} networkWorkspaceBinding
34 * @param {!WebInspector.Workspace} workspace
35 */
36 WebInspector.NetworkUISourceCodeProvider = function(networkWorkspaceBinding, wor kspace)
37 {
38 this._networkWorkspaceBinding = networkWorkspaceBinding;
39 this._workspace = workspace;
40 this._processedURLs = {};
41 WebInspector.targetManager.addModelListener(WebInspector.ResourceTreeModel, WebInspector.ResourceTreeModel.EventTypes.ResourceAdded, this._resourceAdded, th is);
42 WebInspector.targetManager.addModelListener(WebInspector.ResourceTreeModel, WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._mainFrameNav igated, this);
43 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.ParsedScriptSource, this._parsedScriptSource, this );
44 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.FailedToParseScriptSource, this._parsedScriptSourc e, this);
45 WebInspector.targetManager.addModelListener(WebInspector.CSSStyleModel, WebI nspector.CSSStyleModel.Events.StyleSheetAdded, this._styleSheetAdded, this);
46 }
47
48 WebInspector.NetworkUISourceCodeProvider.prototype = {
49 /**
50 * @param {!WebInspector.Target} target
51 */
52 _populate: function(target)
53 {
54 /**
55 * @param {!WebInspector.ResourceTreeFrame} frame
56 * @this {WebInspector.NetworkUISourceCodeProvider}
57 */
58 function populateFrame(frame)
59 {
60 for (var i = 0; i < frame.childFrames.length; ++i)
61 populateFrame.call(this, frame.childFrames[i]);
62
63 var resources = frame.resources();
64 for (var i = 0; i < resources.length; ++i)
65 this._addFile(resources[i].url, new WebInspector.NetworkUISource CodeProvider.FallbackResource(resources[i]));
66 }
67
68 var mainFrame = target.resourceTreeModel.mainFrame;
69 if (mainFrame)
70 populateFrame.call(this, mainFrame);
71 },
72
73 /**
74 * @param {!WebInspector.Event} event
75 */
76 _parsedScriptSource: function(event)
77 {
78 var script = /** @type {!WebInspector.Script} */ (event.data);
79 if (!script.sourceURL || script.isInlineScript() || script.isSnippet())
80 return;
81 // Filter out embedder injected content scripts.
82 if (script.isContentScript() && !script.hasSourceURL) {
83 var parsedURL = new WebInspector.ParsedURL(script.sourceURL);
84 if (!parsedURL.isValid)
85 return;
86 }
87 this._addFile(script.sourceURL, script, script.isContentScript());
88 },
89
90 /**
91 * @param {!WebInspector.Event} event
92 */
93 _styleSheetAdded: function(event)
94 {
95 var header = /** @type {!WebInspector.CSSStyleSheetHeader} */ (event.dat a);
96 if (header.isInline && header.origin !== "inspector")
97 return;
98
99 this._addFile(header.resourceURL(), header, false);
100 },
101
102 /**
103 * @param {!WebInspector.Event} event
104 */
105 _resourceAdded: function(event)
106 {
107 var resource = /** @type {!WebInspector.Resource} */ (event.data);
108 this._addFile(resource.url, new WebInspector.NetworkUISourceCodeProvider .FallbackResource(resource));
109 },
110
111 /**
112 * @param {!WebInspector.Event} event
113 */
114 _mainFrameNavigated: function(event)
115 {
116 var resourceTreeModel = /** @type {!WebInspector.ResourceTreeModel} */ ( event.target);
117 //We assume that mainFrameNavigated could be fired only in one main targ et
118 this._reset(resourceTreeModel.target());
119 },
120
121 /**
122 * @param {string} url
123 * @param {!WebInspector.ContentProvider} contentProvider
124 * @param {boolean=} isContentScript
125 */
126 _addFile: function(url, contentProvider, isContentScript)
127 {
128 if (this._workspace.hasMappingForURL(url))
129 return;
130
131 var type = contentProvider.contentType();
132 if (type !== WebInspector.resourceTypes.Stylesheet && type !== WebInspec tor.resourceTypes.Document && type !== WebInspector.resourceTypes.Script)
133 return;
134 if (this._processedURLs[url])
135 return;
136 this._processedURLs[url] = true;
137 this._networkWorkspaceBinding.addFileForURL(url, contentProvider, isCont entScript);
138 },
139
140 /**
141 * @param {!WebInspector.Target} target
142 */
143 _reset: function(target)
144 {
145 this._processedURLs = {};
146 this._networkWorkspaceBinding.reset();
147 this._populate(target);
148 }
149 }
150
151 /**
152 * @constructor
153 * @implements {WebInspector.ContentProvider}
154 * @param {!WebInspector.Resource} resource
155 */
156 WebInspector.NetworkUISourceCodeProvider.FallbackResource = function(resource)
157 {
158 this._resource = resource;
159 }
160
161 WebInspector.NetworkUISourceCodeProvider.FallbackResource.prototype = {
162
163 /**
164 * @return {string}
165 */
166 contentURL: function()
167 {
168 return this._resource.contentURL();
169 },
170
171 /**
172 * @return {!WebInspector.ResourceType}
173 */
174 contentType: function()
175 {
176 return this._resource.contentType();
177 },
178
179 /**
180 * @param {function(?string)} callback
181 */
182 requestContent: function(callback)
183 {
184 /**
185 * @this {WebInspector.NetworkUISourceCodeProvider.FallbackResource}
186 */
187 function loadFallbackContent()
188 {
189 var scripts = this._resource.target().debuggerModel.scriptsForSource URL(this._resource.url);
190 if (!scripts.length) {
191 callback(null);
192 return;
193 }
194
195 var contentProvider;
196 if (this._resource.type === WebInspector.resourceTypes.Document)
197 contentProvider = new WebInspector.ConcatenatedScriptsContentPro vider(scripts);
198 else if (this._resource.type === WebInspector.resourceTypes.Script)
199 contentProvider = scripts[0];
200
201 console.assert(contentProvider, "Resource content request failed. " + this._resource.url);
202
203 contentProvider.requestContent(callback);
204 }
205
206 /**
207 * @param {?string} content
208 * @this {WebInspector.NetworkUISourceCodeProvider.FallbackResource}
209 */
210 function requestContentLoaded(content)
211 {
212 if (content)
213 callback(content)
214 else
215 loadFallbackContent.call(this);
216 }
217
218 this._resource.requestContent(requestContentLoaded.bind(this));
219 },
220
221 /**
222 * @param {string} query
223 * @param {boolean} caseSensitive
224 * @param {boolean} isRegex
225 * @param {function(!Array.<!WebInspector.ContentProvider.SearchMatch>)} cal lback
226 */
227 searchInContent: function(query, caseSensitive, isRegex, callback)
228 {
229 /**
230 * @param {?string} content
231 */
232 function documentContentLoaded(content)
233 {
234 if (content === null) {
235 callback([]);
236 return;
237 }
238
239 var result = WebInspector.ContentProvider.performSearchInContent(con tent, query, caseSensitive, isRegex);
240 callback(result);
241 }
242
243 if (this.contentType() === WebInspector.resourceTypes.Document) {
244 this.requestContent(documentContentLoaded);
245 return;
246 }
247
248 this._resource.searchInContent(query, caseSensitive, isRegex, callback);
249 }
250 }
251
252 /**
253 * @type {!WebInspector.NetworkWorkspaceBinding}
254 */
255 WebInspector.networkWorkspaceBinding;
OLDNEW
« no previous file with comments | « Source/devtools/front_end/sdk/NetworkRequest.js ('k') | Source/devtools/front_end/sdk/NetworkWorkspaceBinding.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698