Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 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. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 /** | 31 /** |
| 32 * @constructor | 32 * @constructor |
| 33 * @extends {WebInspector.Object} | 33 * @extends {WebInspector.Object} |
| 34 * @param {!WebInspector.ExtensionServer.UIDelegate} delegate | |
| 34 * @suppressGlobalPropertiesCheck | 35 * @suppressGlobalPropertiesCheck |
| 35 */ | 36 */ |
| 36 WebInspector.ExtensionServer = function() | 37 WebInspector.ExtensionServer = function(delegate) |
| 37 { | 38 { |
| 39 this._delegate = delegate; | |
| 38 this._clientObjects = {}; | 40 this._clientObjects = {}; |
| 39 this._handlers = {}; | 41 this._handlers = {}; |
| 42 this._callbacks = {}; | |
| 40 this._subscribers = {}; | 43 this._subscribers = {}; |
| 41 this._subscriptionStartHandlers = {}; | 44 this._subscriptionStartHandlers = {}; |
| 42 this._subscriptionStopHandlers = {}; | 45 this._subscriptionStopHandlers = {}; |
| 43 this._extraHeaders = {}; | 46 this._extraHeaders = {}; |
| 44 this._requests = {}; | 47 this._requests = {}; |
| 45 this._lastRequestId = 0; | 48 this._lastRequestId = 0; |
| 46 this._registeredExtensions = {}; | 49 this._registeredExtensions = {}; |
| 47 this._status = new WebInspector.ExtensionStatus(); | 50 this._status = new WebInspector.ExtensionStatus(); |
| 48 /** @type {!Array.<!WebInspector.ExtensionSidebarPane>} */ | 51 /** @type {!Array.<!WebInspector.ExtensionSidebarPane>} */ |
| 49 this._sidebarPanes = []; | 52 this._sidebarPanes = []; |
| 50 /** @type {!Array.<!WebInspector.ExtensionAuditCategory>} */ | 53 /** @type {!Array.<!WebInspector.ExtensionAuditCategory>} */ |
| 51 this._auditCategories = []; | 54 this._auditCategories = []; |
| 52 | 55 |
| 53 var commands = WebInspector.extensionAPI.Commands; | 56 var commands = WebInspector.extensionAPI.Commands; |
| 54 | 57 |
| 55 this._registerHandler(commands.AddAuditCategory, this._onAddAuditCategory.bi nd(this)); | 58 this._registerHandler(commands.AddAuditCategory, this._onAddAuditCategory.bi nd(this)); |
| 56 this._registerHandler(commands.AddAuditResult, this._onAddAuditResult.bind(t his)); | 59 this._registerHandler(commands.AddAuditResult, this._onAddAuditResult.bind(t his)); |
| 57 this._registerHandler(commands.AddRequestHeaders, this._onAddRequestHeaders. bind(this)); | 60 this._registerHandler(commands.AddRequestHeaders, this._onAddRequestHeaders. bind(this)); |
| 58 this._registerHandler(commands.ApplyStyleSheet, this._onApplyStyleSheet.bind (this)); | 61 this._registerHandler(commands.ApplyStyleSheet, this._onApplyStyleSheet.bind (this)); |
| 59 this._registerHandler(commands.CreatePanel, this._onCreatePanel.bind(this)); | 62 this._registerHandler(commands.CreatePanel, this._onCreatePanel.bind(this)); |
| 60 this._registerHandler(commands.CreateSidebarPane, this._onCreateSidebarPane. bind(this)); | 63 this._registerHandler(commands.CreateSidebarPane, this._onCreateSidebarPane. bind(this)); |
| 61 this._registerHandler(commands.CreateToolbarButton, this._onCreateToolbarBut ton.bind(this)); | 64 this._registerHandler(commands.CreateToolbarButton, this._onCreateToolbarBut ton.bind(this)); |
| 65 this._registerHandler(commands.DisplaySearchResults, this._onDisplaySearchRe sults.bind(this)); | |
| 62 this._registerHandler(commands.EvaluateOnInspectedPage, this._onEvaluateOnIn spectedPage.bind(this)); | 66 this._registerHandler(commands.EvaluateOnInspectedPage, this._onEvaluateOnIn spectedPage.bind(this)); |
| 63 this._registerHandler(commands.ForwardKeyboardEvent, this._onForwardKeyboard Event.bind(this)); | 67 this._registerHandler(commands.ForwardKeyboardEvent, this._onForwardKeyboard Event.bind(this)); |
| 64 this._registerHandler(commands.GetHAR, this._onGetHAR.bind(this)); | 68 this._registerHandler(commands.GetHAR, this._onGetHAR.bind(this)); |
| 65 this._registerHandler(commands.GetPageResources, this._onGetPageResources.bi nd(this)); | 69 this._registerHandler(commands.GetPageResources, this._onGetPageResources.bi nd(this)); |
| 66 this._registerHandler(commands.GetRequestContent, this._onGetRequestContent. bind(this)); | 70 this._registerHandler(commands.GetRequestContent, this._onGetRequestContent. bind(this)); |
| 67 this._registerHandler(commands.GetResourceContent, this._onGetResourceConten t.bind(this)); | 71 this._registerHandler(commands.GetResourceContent, this._onGetResourceConten t.bind(this)); |
| 72 this._registerHandler(commands.GetResourceLineMessages, this._onGetResourceL ineMessages.bind(this)); | |
| 73 this._registerHandler(commands.RegisterLanguageService, this._onRegisterLang uageService.bind(this)); | |
| 74 this._registerHandler(commands.RegisterMimeRecognizer, this._onRegisterMimeR ecognizer.bind(this)); | |
| 68 this._registerHandler(commands.Reload, this._onReload.bind(this)); | 75 this._registerHandler(commands.Reload, this._onReload.bind(this)); |
| 69 this._registerHandler(commands.SetOpenResourceHandler, this._onSetOpenResour ceHandler.bind(this)); | 76 this._registerHandler(commands.SetOpenResourceHandler, this._onSetOpenResour ceHandler.bind(this)); |
| 70 this._registerHandler(commands.SetResourceContent, this._onSetResourceConten t.bind(this)); | 77 this._registerHandler(commands.SetResourceContent, this._onSetResourceConten t.bind(this)); |
| 78 this._registerHandler(commands.SetResourceLineMessages, this._onSetResourceL ineMessages.bind(this)); | |
| 71 this._registerHandler(commands.SetSidebarHeight, this._onSetSidebarHeight.bi nd(this)); | 79 this._registerHandler(commands.SetSidebarHeight, this._onSetSidebarHeight.bi nd(this)); |
| 72 this._registerHandler(commands.SetSidebarContent, this._onSetSidebarContent. bind(this)); | 80 this._registerHandler(commands.SetSidebarContent, this._onSetSidebarContent. bind(this)); |
| 73 this._registerHandler(commands.SetSidebarPage, this._onSetSidebarPage.bind(t his)); | 81 this._registerHandler(commands.SetSidebarPage, this._onSetSidebarPage.bind(t his)); |
| 74 this._registerHandler(commands.ShowPanel, this._onShowPanel.bind(this)); | 82 this._registerHandler(commands.ShowPanel, this._onShowPanel.bind(this)); |
| 75 this._registerHandler(commands.StopAuditCategoryRun, this._onStopAuditCatego ryRun.bind(this)); | 83 this._registerHandler(commands.StopAuditCategoryRun, this._onStopAuditCatego ryRun.bind(this)); |
| 76 this._registerHandler(commands.Subscribe, this._onSubscribe.bind(this)); | 84 this._registerHandler(commands.Subscribe, this._onSubscribe.bind(this)); |
| 77 this._registerHandler(commands.OpenResource, this._onOpenResource.bind(this) ); | 85 this._registerHandler(commands.OpenResource, this._onOpenResource.bind(this) ); |
| 78 this._registerHandler(commands.Unsubscribe, this._onUnsubscribe.bind(this)); | 86 this._registerHandler(commands.Unsubscribe, this._onUnsubscribe.bind(this)); |
| 79 this._registerHandler(commands.UpdateButton, this._onUpdateButton.bind(this) ); | 87 this._registerHandler(commands.UpdateButton, this._onUpdateButton.bind(this) ); |
| 80 this._registerHandler(commands.UpdateAuditProgress, this._onUpdateAuditProgr ess.bind(this)); | 88 this._registerHandler(commands.UpdateAuditProgress, this._onUpdateAuditProgr ess.bind(this)); |
| 89 this._registerHandler("callback", this._onCallback.bind(this)); | |
| 81 window.addEventListener("message", this._onWindowMessage.bind(this), false); // Only for main window. | 90 window.addEventListener("message", this._onWindowMessage.bind(this), false); // Only for main window. |
| 82 | 91 |
| 83 InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Event s.AddExtensions, this._addExtensions, this); | 92 InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Event s.AddExtensions, this._addExtensions, this); |
| 84 InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Event s.SetInspectedTabId, this._setInspectedTabId, this); | 93 InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Event s.SetInspectedTabId, this._setInspectedTabId, this); |
| 85 | 94 |
| 86 this._initExtensions(); | 95 this._initExtensions(); |
| 87 } | 96 } |
| 88 | 97 |
| 89 WebInspector.ExtensionServer.Events = { | 98 WebInspector.ExtensionServer.Events = { |
| 90 SidebarPaneAdded: "SidebarPaneAdded", | 99 SidebarPaneAdded: "SidebarPaneAdded", |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 172 | 181 |
| 173 /** | 182 /** |
| 174 * @param {string} type | 183 * @param {string} type |
| 175 * @return {boolean} | 184 * @return {boolean} |
| 176 */ | 185 */ |
| 177 hasSubscribers: function(type) | 186 hasSubscribers: function(type) |
| 178 { | 187 { |
| 179 return !!this._subscribers[type]; | 188 return !!this._subscribers[type]; |
| 180 }, | 189 }, |
| 181 | 190 |
| 191 _registerCallback: function(callback) { | |
| 192 var cbId = Math.random()*Number.MAX_VALUE; | |
| 193 if (this._callbacks[cbId]) { | |
| 194 return this._registerCallback(callback); | |
| 195 } | |
| 196 this._callbacks[cbId] = callback; | |
| 197 return cbId; | |
| 198 }, | |
| 199 | |
| 200 /** | |
| 201 * @param {!MessagePort} port | |
| 202 * @param {*} message | |
| 203 * @param {?Function=} callback | |
| 204 */ | |
| 205 _sendRequest: function(port, message, callback) { | |
| 206 if (typeof callback === "function") | |
| 207 message.requestId = this._registerCallback(callback); | |
| 208 port.postMessage(message); | |
| 209 }, | |
| 210 | |
| 182 /** | 211 /** |
| 183 * @param {string} type | 212 * @param {string} type |
| 184 * @param {...*} vararg | 213 * @param {...*} vararg |
| 185 */ | 214 */ |
| 186 _postNotification: function(type, vararg) | 215 _postNotification: function(type, vararg) |
| 187 { | 216 { |
| 188 var subscribers = this._subscribers[type]; | 217 var subscribers = this._subscribers[type]; |
| 189 if (!subscribers) | 218 if (!subscribers) |
| 190 return; | 219 return; |
| 191 var message = { | 220 var message = { |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 240 if (typeof headers[name] === "string") | 269 if (typeof headers[name] === "string") |
| 241 allHeaders[name] = headers[name]; | 270 allHeaders[name] = headers[name]; |
| 242 } | 271 } |
| 243 } | 272 } |
| 244 | 273 |
| 245 WebInspector.multitargetNetworkManager.setExtraHTTPHeaders(allHeaders); | 274 WebInspector.multitargetNetworkManager.setExtraHTTPHeaders(allHeaders); |
| 246 }, | 275 }, |
| 247 | 276 |
| 248 /** | 277 /** |
| 249 * @param {*} message | 278 * @param {*} message |
| 279 * @param {!MessagePort} port | |
| 280 */ | |
| 281 _onRegisterLanguageService: function(message, port) { | |
| 282 if (!(message.mimes && message.name && message.capabilities)) { | |
| 283 return; | |
| 284 } | |
| 285 var _this = this; | |
| 286 | |
| 287 if (message.simplemode) { | |
| 288 this._delegate.addSimpleCodeMirrorMode(message.mimes, message.simple mode); | |
| 289 } | |
| 290 | |
| 291 var service = new WebInspector.LanguageService.CallbackDelegate(message. name, {}); | |
| 292 | |
| 293 if (message.capabilities.indexOf(WebInspector.LanguageService.Capabiliti es.Transpile) !== -1) { | |
| 294 service.appendActionHandler(WebInspector.LanguageService.Capabilitie s.Transpile, function(input, location, callback) { | |
| 295 if (!callback) { | |
| 296 callback = location; | |
| 297 location = undefined; | |
| 298 } | |
| 299 _this._sendRequest(port, { | |
| 300 command: WebInspector.LanguageService.Capabilities.Transpile +"-"+message.name, | |
| 301 input: input, | |
| 302 location: location | |
| 303 }, function(result) { | |
| 304 if ((!result) || typeof result !== "string") { | |
| 305 return callback(input); | |
| 306 } | |
| 307 callback(result); | |
| 308 }); | |
| 309 }); | |
| 310 } | |
| 311 if (message.capabilities.indexOf(WebInspector.LanguageService.Capabiliti es.PopulateContextMenu) !== -1) { | |
| 312 service.appendActionHandler(WebInspector.LanguageService.Capabilitie s.PopulateContextMenu, function(location, callback) { | |
| 313 _this._sendRequest(port, { | |
| 314 command: WebInspector.LanguageService.Capabilities.PopulateC ontextMenu+"-"+message.name, | |
| 315 location: location | |
| 316 }, function(items) { | |
| 317 if (!items || !(items instanceof Array)) { | |
| 318 return callback([]); | |
| 319 } | |
| 320 callback(items.map(function(item) { | |
| 321 if (typeof item.text !== "string") return; | |
| 322 if (typeof item.id !== "number") return; | |
| 323 return { | |
| 324 text: item.text, | |
| 325 callback: function() { | |
| 326 _this._sendRequest(port, {command: "notify-"+Web Inspector.extensionAPI.Events.ContextMenuClicked, id: item.id}); | |
| 327 } | |
| 328 }; | |
| 329 }).filter(i => {return i;})); | |
| 330 }); | |
| 331 }); | |
| 332 } | |
| 333 | |
| 334 function handleCompletionsResponse(callback) { | |
| 335 return function(completions) { | |
| 336 if ((!completions) || !(completions instanceof Array)) { | |
| 337 return callback([]); | |
| 338 } | |
| 339 callback(completions.map(function(c){ | |
| 340 if (typeof c.text !== "string") return; | |
| 341 if (!(typeof c.icon === "string" || typeof c.icon === "undef ined")) return; | |
| 342 if (typeof c.id !== "number") return; | |
| 343 return { | |
| 344 text: c.text, | |
| 345 icon: c.icon, | |
| 346 details: function() { | |
| 347 return new Promise(function(resolve, reject) { | |
| 348 _this._sendRequest(port, {command: "completionDe tails-"+message.name, id: c.id}, function(resp) { | |
| 349 if (!resp) reject(); | |
| 350 if (typeof resp.detail !== "string") reject( ); | |
| 351 if (typeof resp.description !== "string") re ject(); | |
| 352 resolve(resp); | |
| 353 }); | |
| 354 }); | |
| 355 } | |
| 356 }; | |
| 357 }).filter(i => {return i;})); | |
| 358 } | |
| 359 } | |
| 360 | |
| 361 if (message.capabilities.indexOf(WebInspector.LanguageService.Capabiliti es.Completions) !== -1) { | |
| 362 service.appendActionHandler(WebInspector.LanguageService.Capabilitie s.Completions, function(location, prefix, callback) { | |
| 363 _this._sendRequest(port, { | |
| 364 command: WebInspector.LanguageService.Capabilities.Completio ns+"-"+message.name, | |
| 365 location: location, | |
| 366 prefix: prefix | |
| 367 }, handleCompletionsResponse(callback)); | |
| 368 }); | |
| 369 } | |
| 370 | |
| 371 if (message.capabilities.indexOf(WebInspector.LanguageService.Capabiliti es.DebuggerCompletions) !== -1) { | |
| 372 service.appendActionHandler(WebInspector.LanguageService.Capabilitie s.DebuggerCompletions, function(content, cursor, prefix, context, callback) { | |
| 373 _this._sendRequest(port, { | |
| 374 command: WebInspector.LanguageService.Capabilities.DebuggerC ompletions+"-"+message.name, | |
| 375 content: content, | |
| 376 cursor: cursor, | |
| 377 prefix: prefix, | |
| 378 context: context | |
| 379 }, handleCompletionsResponse(callback)); | |
| 380 }); | |
| 381 } | |
| 382 | |
| 383 WebInspector.languageService.register(message.mimes, service); | |
| 384 }, | |
| 385 | |
| 386 _onRegisterMimeRecognizer: function(message) { | |
| 387 if (typeof message.mime !== "string") { | |
| 388 return this._status.E_BADARGTYPE("mime", typeof message.mime, "strin g"); | |
| 389 } | |
| 390 if (typeof message.match !== "string") { | |
| 391 return this._status.E_BADARGTYPE("match", typeof message.match, "str ing"); | |
| 392 } | |
| 393 WebInspector.ResourceType.registerMimeRecognizer(message.match, message. mime, message.matchName); | |
| 394 }, | |
| 395 | |
| 396 _onDisplaySearchResults: function(message) { | |
| 397 //FIXME: Search result highlighting should allow ranges to be highlighte d rather than regexes | |
| 398 var results = message.results || []; | |
| 399 | |
| 400 var groupedResults = results.reduce(function(accum, item) { //group by s ource | |
| 401 var elem; | |
| 402 for (var index = 0; index < accum.length; index++) { | |
| 403 var element = accum[index]; | |
| 404 if (element.source === item.source) { | |
| 405 elem = element; | |
| 406 break; | |
| 407 } | |
| 408 } | |
| 409 if (!elem) { | |
| 410 elem = []; | |
| 411 elem.source = item.source; | |
| 412 accum.push(elem); | |
| 413 } | |
| 414 elem.push({ | |
| 415 line: item.line, | |
| 416 lineContent: item.lineContent || '', | |
| 417 startColumn: item.startColumn || 0, | |
| 418 endColumn: item.endColumn || 0 | |
| 419 }); | |
| 420 return accum; | |
| 421 }, []); | |
| 422 this._delegate.displaySearchResults(results.highlight || '', groupedResu lts); | |
| 423 }, | |
| 424 | |
| 425 /** | |
| 426 * @param {*} message | |
| 427 * @param {!MessagePort} port | |
| 428 */ | |
| 429 _onGetResourceLineMessages: function(message, port) { | |
| 430 var url = /** @type {string} */ (message.url); | |
| 431 var uiSourceCode = WebInspector.networkMapping.uiSourceCodeFromURL(url); | |
| 432 if (!uiSourceCode) | |
| 433 return this._status.E_NOTFOUND(url); | |
| 434 | |
| 435 this._delegate.getResourceLineMessages(uiSourceCode).then(arr => { | |
| 436 var result = arr.map(m => { | |
| 437 return { | |
| 438 text: m.messageText(), | |
| 439 kind: m.level(), | |
| 440 location: { | |
| 441 startLine: m.start().line, | |
| 442 startColumn: m.start().column, | |
| 443 endLine: m.end().line, | |
| 444 endColumn: m.end().column | |
| 445 } | |
| 446 }; | |
| 447 }); | |
| 448 this._dispatchCallback(message.requestId, port, result); | |
| 449 }); | |
| 450 }, | |
| 451 | |
| 452 /** | |
| 453 * @param {*} message | |
| 454 * @param {!MessagePort} port | |
| 455 */ | |
| 456 _onSetResourceLineMessages: function(message, port) { | |
| 457 var url = /** @type {string} */ (message.url); | |
| 458 var messages = /** @type {?Array.<{kind: string, text: string, location: {startLine: number, startColumn: number, endLine: number, endColumn: number}}>} */ (message.messages); | |
| 459 if ((!messages) || typeof messages !== "object") | |
| 460 return this._status.E_BADARGTYPE("messages", typeof messages, "Array <LineMessage>"); | |
| 461 var uiSourceCode = WebInspector.networkMapping.uiSourceCodeFromURL(url); | |
| 462 if (!uiSourceCode) | |
| 463 return this._status.E_NOTFOUND(url); | |
| 464 this._delegate.setResourceLineMessages(uiSourceCode, messages); | |
| 465 this._dispatchCallback(message.requestId, port, this._status.OK()); | |
| 466 }, | |
| 467 | |
| 468 /** | |
| 469 * @param {*} message | |
| 250 * @suppressGlobalPropertiesCheck | 470 * @suppressGlobalPropertiesCheck |
| 251 */ | 471 */ |
| 252 _onApplyStyleSheet: function(message) | 472 _onApplyStyleSheet: function(message) |
| 253 { | 473 { |
| 254 if (!Runtime.experiments.isEnabled("applyCustomStylesheet")) | 474 if (!Runtime.experiments.isEnabled("applyCustomStylesheet")) |
| 255 return; | 475 return; |
| 256 var styleSheet = createElement("style"); | 476 var styleSheet = createElement("style"); |
| 257 styleSheet.textContent = message.styleSheet; | 477 styleSheet.textContent = message.styleSheet; |
| 258 document.head.appendChild(styleSheet); | 478 document.head.appendChild(styleSheet); |
| 259 }, | 479 }, |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 360 _onSetSidebarPage: function(message, port) | 580 _onSetSidebarPage: function(message, port) |
| 361 { | 581 { |
| 362 var sidebar = this._clientObjects[message.id]; | 582 var sidebar = this._clientObjects[message.id]; |
| 363 if (!sidebar) | 583 if (!sidebar) |
| 364 return this._status.E_NOTFOUND(message.id); | 584 return this._status.E_NOTFOUND(message.id); |
| 365 sidebar.setPage(this._expandResourcePath(port._extensionOrigin, message. page)); | 585 sidebar.setPage(this._expandResourcePath(port._extensionOrigin, message. page)); |
| 366 }, | 586 }, |
| 367 | 587 |
| 368 _onOpenResource: function(message) | 588 _onOpenResource: function(message) |
| 369 { | 589 { |
| 370 var uiSourceCode = WebInspector.networkMapping.uiSourceCodeForURLForAnyT arget(message.url); | 590 var uiSourceCode = WebInspector.networkMapping.uiSourceCodeForURLForAnyT arget(message.url) || WebInspector.workspace.uiSourceCodeForFilePath(message.url ); |
|
wes
2015/08/14 01:13:32
Upon review, I see that this line is an alias to t
pfeldman
2015/08/17 21:15:51
Your message has a target, so you should get resou
wes
2015/08/25 18:13:18
The open resource message only has a url and a lin
| |
| 371 if (uiSourceCode) { | 591 if (uiSourceCode) { |
| 372 WebInspector.Revealer.reveal(uiSourceCode.uiLocation(message.lineNum ber, 0)); | 592 WebInspector.Revealer.reveal(uiSourceCode.uiLocation(message.lineNum ber, 0)); |
| 373 return this._status.OK(); | 593 return this._status.OK(); |
| 374 } | 594 } |
| 375 | 595 |
| 376 var resource = WebInspector.resourceForURL(message.url); | 596 var resource = WebInspector.resourceForURL(message.url); |
| 377 if (resource) { | 597 if (resource) { |
| 378 WebInspector.Revealer.reveal(resource, message.lineNumber); | 598 WebInspector.Revealer.reveal(resource, message.lineNumber); |
| 379 return this._status.OK(); | 599 return this._status.OK(); |
| 380 } | 600 } |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 482 /** | 702 /** |
| 483 * @this {WebInspector.ExtensionServer} | 703 * @this {WebInspector.ExtensionServer} |
| 484 */ | 704 */ |
| 485 function pushResourceData(contentProvider) | 705 function pushResourceData(contentProvider) |
| 486 { | 706 { |
| 487 if (!resources[contentProvider.contentURL()]) | 707 if (!resources[contentProvider.contentURL()]) |
| 488 resources[contentProvider.contentURL()] = this._makeResource(con tentProvider); | 708 resources[contentProvider.contentURL()] = this._makeResource(con tentProvider); |
| 489 } | 709 } |
| 490 var uiSourceCodes = WebInspector.workspace.uiSourceCodesForProjectType(W ebInspector.projectTypes.Network); | 710 var uiSourceCodes = WebInspector.workspace.uiSourceCodesForProjectType(W ebInspector.projectTypes.Network); |
| 491 uiSourceCodes = uiSourceCodes.concat(WebInspector.workspace.uiSourceCode sForProjectType(WebInspector.projectTypes.ContentScripts)); | 711 uiSourceCodes = uiSourceCodes.concat(WebInspector.workspace.uiSourceCode sForProjectType(WebInspector.projectTypes.ContentScripts)); |
| 712 uiSourceCodes = uiSourceCodes.concat(WebInspector.workspace.uiSourceCode sForProjectType(WebInspector.projectTypes.FileSystem)); | |
| 492 uiSourceCodes.forEach(pushResourceData.bind(this)); | 713 uiSourceCodes.forEach(pushResourceData.bind(this)); |
| 493 for (var target of WebInspector.targetManager.targets()) | 714 for (var target of WebInspector.targetManager.targets()) |
| 494 target.resourceTreeModel.forAllResources(pushResourceData.bind(this) ); | 715 target.resourceTreeModel.forAllResources(pushResourceData.bind(this) ); |
| 495 return Object.values(resources); | 716 return Object.values(resources); |
| 496 }, | 717 }, |
| 497 | 718 |
| 498 /** | 719 /** |
| 499 * @param {!WebInspector.ContentProvider} contentProvider | 720 * @param {!WebInspector.ContentProvider} contentProvider |
| 500 * @param {!Object} message | 721 * @param {!Object} message |
| 501 * @param {!MessagePort} port | 722 * @param {!MessagePort} port |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 527 { | 748 { |
| 528 var request = this._requestById(message.id); | 749 var request = this._requestById(message.id); |
| 529 if (!request) | 750 if (!request) |
| 530 return this._status.E_NOTFOUND(message.id); | 751 return this._status.E_NOTFOUND(message.id); |
| 531 this._getResourceContent(request, message, port); | 752 this._getResourceContent(request, message, port); |
| 532 }, | 753 }, |
| 533 | 754 |
| 534 _onGetResourceContent: function(message, port) | 755 _onGetResourceContent: function(message, port) |
| 535 { | 756 { |
| 536 var url = /** @type {string} */ (message.url); | 757 var url = /** @type {string} */ (message.url); |
| 537 var contentProvider = WebInspector.workspace.uiSourceCodeForOriginURL(ur l) || WebInspector.resourceForURL(url); | 758 var contentProvider = WebInspector.networkMapping.uiSourceCodeFromURL(ur l); |
| 538 if (!contentProvider) | 759 if (!contentProvider) |
| 539 return this._status.E_NOTFOUND(url); | 760 return this._status.E_NOTFOUND(url); |
| 540 this._getResourceContent(contentProvider, message, port); | 761 this._getResourceContent(contentProvider, message, port); |
| 541 }, | 762 }, |
| 542 | 763 |
| 543 _onSetResourceContent: function(message, port) | 764 _onSetResourceContent: function(message, port) |
| 544 { | 765 { |
| 545 /** | 766 /** |
| 546 * @param {?Protocol.Error} error | 767 * @param {?Protocol.Error} error |
| 547 * @this {WebInspector.ExtensionServer} | 768 * @this {WebInspector.ExtensionServer} |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 664 return keyCode || 0; | 885 return keyCode || 0; |
| 665 } | 886 } |
| 666 }, | 887 }, |
| 667 | 888 |
| 668 _dispatchCallback: function(requestId, port, result) | 889 _dispatchCallback: function(requestId, port, result) |
| 669 { | 890 { |
| 670 if (requestId) | 891 if (requestId) |
| 671 port.postMessage({ command: "callback", requestId: requestId, result : result }); | 892 port.postMessage({ command: "callback", requestId: requestId, result : result }); |
| 672 }, | 893 }, |
| 673 | 894 |
| 895 _onCallback: function(request, target) | |
| 896 { | |
| 897 if (request.requestId in this._callbacks) { | |
| 898 var callback = this._callbacks[request.requestId]; | |
| 899 delete this._callbacks[request.requestId]; | |
| 900 callback(request.result); | |
| 901 } | |
| 902 }, | |
| 903 | |
| 674 _initExtensions: function() | 904 _initExtensions: function() |
| 675 { | 905 { |
| 676 this._registerAutosubscriptionHandler(WebInspector.extensionAPI.Events.R esourceAdded, | 906 this._registerAutosubscriptionHandler(WebInspector.extensionAPI.Events.R esourceAdded, |
| 677 WebInspector.workspace, WebInspector.Workspace.Events.UISourceCodeAd ded, this._notifyResourceAdded); | 907 WebInspector.workspace, WebInspector.Workspace.Events.UISourceCodeAd ded, this._notifyResourceAdded); |
| 678 this._registerAutosubscriptionTargetManagerHandler(WebInspector.extensio nAPI.Events.NetworkRequestFinished, | 908 this._registerAutosubscriptionTargetManagerHandler(WebInspector.extensio nAPI.Events.NetworkRequestFinished, |
| 679 WebInspector.NetworkManager, WebInspector.NetworkManager.EventTypes. RequestFinished, this._notifyRequestFinished); | 909 WebInspector.NetworkManager, WebInspector.NetworkManager.EventTypes. RequestFinished, this._notifyRequestFinished); |
| 680 | 910 |
| 681 /** | 911 /** |
| 682 * @this {WebInspector.ExtensionServer} | 912 * @this {WebInspector.ExtensionServer} |
| 683 */ | 913 */ |
| 684 function onElementsSubscriptionStarted() | 914 function onElementsSubscriptionStarted() |
| 685 { | 915 { |
| 686 WebInspector.notifications.addEventListener(WebInspector.Notificatio nService.Events.SelectedNodeChanged, this._notifyElementsSelectionChanged, this) ; | 916 WebInspector.notifications.addEventListener(WebInspector.Notificatio nService.Events.SelectedNodeChanged, this._notifyElementsSelectionChanged, this) ; |
| 687 } | 917 } |
| 688 | 918 |
| 689 /** | 919 /** |
| 690 * @this {WebInspector.ExtensionServer} | 920 * @this {WebInspector.ExtensionServer} |
| 691 */ | 921 */ |
| 692 function onElementsSubscriptionStopped() | 922 function onElementsSubscriptionStopped() |
| 693 { | 923 { |
| 694 WebInspector.notifications.removeEventListener(WebInspector.Notifica tionService.Events.SelectedNodeChanged, this._notifyElementsSelectionChanged, th is); | 924 WebInspector.notifications.removeEventListener(WebInspector.Notifica tionService.Events.SelectedNodeChanged, this._notifyElementsSelectionChanged, th is); |
| 695 } | 925 } |
| 696 | 926 |
| 697 this._registerSubscriptionHandler(WebInspector.extensionAPI.Events.Panel ObjectSelected + "elements", | 927 this._registerSubscriptionHandler(WebInspector.extensionAPI.Events.Panel ObjectSelected + "elements", |
| 698 onElementsSubscriptionStarted.bind(this), onElementsSubscriptionStop ped.bind(this)); | 928 onElementsSubscriptionStarted.bind(this), onElementsSubscriptionStop ped.bind(this)); |
| 699 this._registerResourceContentCommittedHandler(this._notifyUISourceCodeCo ntentCommitted); | 929 this._registerResourceContentCommittedHandler(this._notifyUISourceCodeCo ntentCommitted); |
| 930 this._registerResourceContentEditedHandler(this._notifyUISourceCodeConte ntEdited); | |
| 700 | 931 |
| 701 WebInspector.targetManager.addEventListener(WebInspector.TargetManager.E vents.InspectedURLChanged, | 932 WebInspector.targetManager.addEventListener(WebInspector.TargetManager.E vents.InspectedURLChanged, |
| 702 this._inspectedURLChanged, this); | 933 this._inspectedURLChanged, this); |
| 703 | 934 |
| 704 InspectorExtensionRegistry.getExtensionsAsync(); | 935 InspectorExtensionRegistry.getExtensionsAsync(); |
| 705 }, | 936 }, |
| 706 | 937 |
| 707 _notifyResourceAdded: function(event) | 938 _notifyResourceAdded: function(event) |
| 708 { | 939 { |
| 709 var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data ); | 940 var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data ); |
| 710 this._postNotification(WebInspector.extensionAPI.Events.ResourceAdded, t his._makeResource(uiSourceCode)); | 941 this._postNotification(WebInspector.extensionAPI.Events.ResourceAdded, t his._makeResource(uiSourceCode)); |
| 711 }, | 942 }, |
| 712 | 943 |
| 713 _notifyUISourceCodeContentCommitted: function(event) | 944 _notifyUISourceCodeContentCommitted: function(event) |
| 714 { | 945 { |
| 715 var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data .uiSourceCode); | 946 var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data .uiSourceCode); |
| 716 var content = /** @type {string} */ (event.data.content); | 947 var content = /** @type {string} */ (event.data.content); |
| 717 this._postNotification(WebInspector.extensionAPI.Events.ResourceContentC ommitted, this._makeResource(uiSourceCode), content); | 948 this._postNotification(WebInspector.extensionAPI.Events.ResourceContentC ommitted, this._makeResource(uiSourceCode), content); |
| 718 }, | 949 }, |
| 719 | 950 |
| 951 _notifyUISourceCodeContentEdited: function(event) | |
| 952 { | |
| 953 var data = /** @type {{uiSourceCode: !WebInspector.UISourceCode, replace ment: string, range: !WebInspector.TextRange}} */ (event.data); | |
| 954 this._postNotification(WebInspector.extensionAPI.Events.ResourceContentE dited, this._makeResource(data.uiSourceCode), data.range, data.replacement); | |
| 955 }, | |
| 956 | |
| 720 _notifyRequestFinished: function(event) | 957 _notifyRequestFinished: function(event) |
| 721 { | 958 { |
| 722 var request = /** @type {!WebInspector.NetworkRequest} */ (event.data); | 959 var request = /** @type {!WebInspector.NetworkRequest} */ (event.data); |
| 723 this._postNotification(WebInspector.extensionAPI.Events.NetworkRequestFi nished, this._requestId(request), (new WebInspector.HAREntry(request)).build()); | 960 this._postNotification(WebInspector.extensionAPI.Events.NetworkRequestFi nished, this._requestId(request), (new WebInspector.HAREntry(request)).build()); |
| 724 }, | 961 }, |
| 725 | 962 |
| 726 _notifyElementsSelectionChanged: function() | 963 _notifyElementsSelectionChanged: function() |
| 727 { | 964 { |
| 728 this._postNotification(WebInspector.extensionAPI.Events.PanelObjectSelec ted + "elements"); | 965 this._postNotification(WebInspector.extensionAPI.Events.PanelObjectSelec ted + "elements"); |
| 729 }, | 966 }, |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 872 { | 1109 { |
| 873 WebInspector.workspace.setHasResourceContentTrackingExtensions(false ); | 1110 WebInspector.workspace.setHasResourceContentTrackingExtensions(false ); |
| 874 WebInspector.workspace.removeEventListener(WebInspector.Workspace.Ev ents.UISourceCodeContentCommitted, handler, this); | 1111 WebInspector.workspace.removeEventListener(WebInspector.Workspace.Ev ents.UISourceCodeContentCommitted, handler, this); |
| 875 } | 1112 } |
| 876 | 1113 |
| 877 this._registerSubscriptionHandler(WebInspector.extensionAPI.Events.Resou rceContentCommitted, | 1114 this._registerSubscriptionHandler(WebInspector.extensionAPI.Events.Resou rceContentCommitted, |
| 878 addFirstEventListener.bind(this), | 1115 addFirstEventListener.bind(this), |
| 879 removeLastEventListener.bind(this)); | 1116 removeLastEventListener.bind(this)); |
| 880 }, | 1117 }, |
| 881 | 1118 |
| 1119 _registerResourceContentEditedHandler: function(handler) | |
| 1120 { | |
| 1121 /** | |
| 1122 * @this {WebInspector.ExtensionServer} | |
| 1123 */ | |
| 1124 function addFirstEventListener() | |
| 1125 { | |
| 1126 WebInspector.workspace.addEventListener(WebInspector.Workspace.Event s.UISourceCodeEdited, handler, this); | |
| 1127 } | |
| 1128 | |
| 1129 /** | |
| 1130 * @this {WebInspector.ExtensionServer} | |
| 1131 */ | |
| 1132 function removeLastEventListener() | |
| 1133 { | |
| 1134 WebInspector.workspace.removeEventListener(WebInspector.Workspace.Ev ents.UISourceCodeEdited, handler, this); | |
| 1135 } | |
| 1136 | |
| 1137 this._registerSubscriptionHandler(WebInspector.extensionAPI.Events.Resou rceContentEdited, | |
| 1138 addFirstEventListener.bind(this), | |
| 1139 removeLastEventListener.bind(this)); | |
| 1140 }, | |
| 1141 | |
| 882 _expandResourcePath: function(extensionPath, resourcePath) | 1142 _expandResourcePath: function(extensionPath, resourcePath) |
| 883 { | 1143 { |
| 884 if (!resourcePath) | 1144 if (!resourcePath) |
| 885 return; | 1145 return; |
| 886 return extensionPath + this._normalizePath(resourcePath); | 1146 return extensionPath + this._normalizePath(resourcePath); |
| 887 }, | 1147 }, |
| 888 | 1148 |
| 889 _normalizePath: function(path) | 1149 _normalizePath: function(path) |
| 890 { | 1150 { |
| 891 var source = path.split("/"); | 1151 var source = path.split("/"); |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1074 this.E_FAILED = makeStatus.bind(null, "E_FAILED", "Operation failed: %s"); | 1334 this.E_FAILED = makeStatus.bind(null, "E_FAILED", "Operation failed: %s"); |
| 1075 } | 1335 } |
| 1076 | 1336 |
| 1077 /** | 1337 /** |
| 1078 * @typedef {{code: string, description: string, details: !Array.<*>}} | 1338 * @typedef {{code: string, description: string, details: !Array.<*>}} |
| 1079 */ | 1339 */ |
| 1080 WebInspector.ExtensionStatus.Record; | 1340 WebInspector.ExtensionStatus.Record; |
| 1081 | 1341 |
| 1082 WebInspector.extensionAPI = {}; | 1342 WebInspector.extensionAPI = {}; |
| 1083 defineCommonExtensionSymbols(WebInspector.extensionAPI); | 1343 defineCommonExtensionSymbols(WebInspector.extensionAPI); |
| 1344 | |
| 1345 /** | |
| 1346 * @typedef {Array<{line: number, lineContent: string}>} | |
| 1347 * @property {string} source | |
| 1348 */ | |
| 1349 var SearchResultArray; | |
| 1350 | |
| 1351 /** | |
| 1352 * @typedef {!Array<{messageText: function(): string, level: function(): string, start: function(): {line: number, column: number}, end: function(): {line: numb er, column: number}}>} | |
| 1353 */ | |
| 1354 var SourceFrameMessageGetter; | |
| 1355 | |
| 1356 /** | |
| 1357 * @interface | |
| 1358 */ | |
| 1359 WebInspector.ExtensionServer.UIDelegate = function() {} | |
| 1360 WebInspector.ExtensionServer.UIDelegate.prototype = { | |
| 1361 /** | |
| 1362 * @param {!WebInspector.UISourceCode} code | |
| 1363 * @param {!Array<{kind: string, text: string, location: {startLine: number, startColumn: number, endLine: number, endColumn: number}}>} messages | |
| 1364 */ | |
| 1365 setResourceLineMessages: function(code, messages) {}, | |
| 1366 | |
| 1367 /** | |
| 1368 * @param {!WebInspector.UISourceCode} code | |
| 1369 * @return {!Promise<!SourceFrameMessageGetter>} | |
| 1370 */ | |
| 1371 getResourceLineMessages: function(code) { return Promise.reject(); }, | |
| 1372 | |
| 1373 /** | |
| 1374 * @param {string} highlightText | |
| 1375 * @param {!Array<!SearchResultArray>} groupedResults | |
| 1376 */ | |
| 1377 displaySearchResults: function(highlightText, groupedResults) {}, | |
| 1378 | |
| 1379 /** | |
| 1380 * @param {!Array<string>} mimes | |
| 1381 * @param {?} mode | |
| 1382 */ | |
| 1383 addSimpleCodeMirrorMode: function(mimes, mode){} | |
| 1384 } | |
| OLD | NEW |