123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- /*jshint browser:true */
- /*global WebInspector:true, InspectorFrontendHost:true, InspectorBackend:true, importScript:true */
- /*global Preferences:true */
- // Wire up websocket to talk to backend
- WebInspector.loaded = function() {
- var webSocketUrl = function() {
- var a = document.createElement('a');
- // browser will resolve this relative path to an absolute one
- a.href = 'ws';
- a.search = window.location.search;
- a.protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
- return a.href;
- }();
- WebInspector.socket = new WebSocket(webSocketUrl);
- WebInspector.socket.onmessage = onWebSocketMessage;
- WebInspector.socket.onerror = onWebSocketError;
- WebInspector.socket.onopen = onWebSocketConnected;
- };
- var _inspectorInitialized = false;
- function onWebSocketError(error) {
- console.error(error);
- }
- function onWebSocketConnected() {
- if (_inspectorInitialized) return;
- InspectorFrontendHost.sendMessageToBackend = WebInspector.socket.send.bind(WebInspector.socket);
- WebInspector.dockController = new WebInspector.DockController();
- WebInspector.doLoadedDone();
- _inspectorInitialized = true;
- }
- function onWebSocketMessage(response) {
- var message = response.data;
- if (!message) return;
- if (message === 'showConsole') {
- WebInspector.showConsole();
- } else {
- InspectorBackend.dispatch(message);
- }
- }
- // Disable HTML & CSS inspections
- WebInspector.queryParamsObject['isSharedWorker'] = true;
- // disable everything besides scripts and console
- // that means 'profiles' and 'timeline' at the moment
- WebInspector._orig_panelDescriptors = WebInspector._panelDescriptors;
- WebInspector._panelDescriptors = function() {
- var panelDescriptors = this._orig_panelDescriptors();
- return panelDescriptors.filter(function(pd) {
- return ['scripts', 'console'].indexOf(pd.name()) != -1;
- });
- };
- // Patch the expression used as an initial value for a new watch.
- // DevTools' value "\n" breaks the debugger protocol.
- importScript('WatchExpressionsSidebarPane.js');
- WebInspector.WatchExpressionsSection.NewWatchExpression = '\'\'';
- Preferences.localizeUI = false;
- Preferences.applicationTitle = 'Node Inspector';
- WebInspector._platformFlavor = WebInspector.PlatformFlavor.MacLeopard;
- // Front-end uses `eval location.href` to get url of inspected page
- // This does not work in node.js from obvious reasons, and cause
- // a 'null' message to be printed in front-end console.
- // Since Preferences.applicationTitle does not include inspected url,
- // we can return arbitrary string as inspected URL.
- WebInspector.WorkerManager._calculateWorkerInspectorTitle = function() {
- InspectorFrontendHost.inspectedURLChanged('');
- };
- // Do not offer download of the edited file when saving changes to V8.
- // DevTools' implementation changes window.location which closes
- // web-socket connection to the server and thus breaks the inspector.
- InspectorFrontendHost.close = function(url, content, forceSaveAs) {
- delete this._fileBuffers[url];
- };
- // Let DevTools know we can save the content of modified files,
- // so that a warning icon is not displayed in the file tab header.
- // See UISourceCode.hasUnsavedCommittedChanges to understand why.
- WebInspector.extensionServer._onSubscribe(
- {
- type:WebInspector.extensionAPI.Events.ResourceContentCommitted
- },
- {
- postMessage: function(msg) {
- // no-op
- }
- }
- );
- // Front-end intercepts Cmd+R, Ctrl+R and F5 keys and reloads the debugged
- // page instead of the front-end page. We want to disable this behaviour.
- WebInspector._orig_documentKeyDown = WebInspector.documentKeyDown;
- WebInspector.documentKeyDown = function(event) {
- switch (event.keyIdentifier) {
- case 'U+0052': // R key
- case 'F5':
- return;
- }
- WebInspector._orig_documentKeyDown(event);
- };
- var orig_createResourceFromFramePayload =
- WebInspector.ResourceTreeModel.prototype._createResourceFromFramePayload;
- WebInspector.ResourceTreeModel.prototype._createResourceFromFramePayload =
- function(frame, url, type, mimeType) {
- // Force Script type for all node frames.
- // Front-end assigns Document type (i.e. HTML) to our main script file.
- if (frame._isNodeInspectorScript) {
- type = WebInspector.resourceTypes.Script;
- }
- return orig_createResourceFromFramePayload(frame, url, type, mimeType);
- };
- //
- // Open the main application file on startup
- //
- WebInspector.notifications.addEventListener(
- WebInspector.Events.InspectorLoaded,
- function() {
- WebInspector.resourceTreeModel.addEventListener(
- WebInspector.ResourceTreeModel.EventTypes.CachedResourcesLoaded,
- showMainAppFile,
- null
- );
- },
- null
- );
- function showMainAppFile() {
- var fileTabs = WebInspector.showPanel('scripts')._editorContainer._files;
- if (Object.keys(fileTabs).length > 0){
- // Some files are already opened - do not change user's workspace
- return;
- }
- var uiSourceCodes = getAllUiSourceCodes();
- var uriToShow = WebInspector.inspectedPageURL;
- for (var i in uiSourceCodes) {
- if (uiSourceCodes[i].uri() !== uriToShow) continue;
- WebInspector.showPanel('scripts').showUISourceCode(uiSourceCodes[i]);
- return true;
- }
- console.error('Cannot show the main application file ', uriToShow);
- }
- function getAllUiSourceCodes() {
- // Based on FilteredItemSectionDialog.js > SelectUISourceCodeDialog()
- var projects = WebInspector.workspace.projects();
- var uiSourceCodes = [];
- var projectFiles;
- for (var i = 0; i < projects.length; ++i) {
- projectFiles = projects[i]
- .uiSourceCodes()
- .filter(nameIsNotEmpty);
- uiSourceCodes = uiSourceCodes.concat(projectFiles);
- }
- return uiSourceCodes;
- function nameIsNotEmpty(p) {
- return p.name();
- }
- }
- var oldDetached = WebInspector.detached;
- WebInspector.detached = function () {
- oldDetached.apply(this, arguments);
- setTimeout(function () {
- location.reload();
- }, 400);
- };
|